2017-08-15 51 views
1

我正在爲分配語言構建一個小型編譯器。Menhir上的語義操作

考慮以下規則:

var_block : 
    | LPAREN var_decl+ RPAREN { var_scope := var_scope + 1 }; 

是當var_block最初識別語義動作觸發,或者它觸發一次生產結束時達到(在這種情況下,RPAREN)?

回答

1

讀取整個生產後觸發。

+0

感謝您的回覆。跟蹤包含在不同塊和不同存儲屬性中的對象的聲明之間的上下文更改的最佳方式是什麼? –

+0

這取決於你正在嘗試做什麼。一件容易的事情就是將每個產品的語義值作爲一個語法樹,然後'var_block'產品就會將其子節點列表包裝到另一個樹節點中,這個樹節點標誌着範圍。 –

5

你的問題正是你爲什麼不應該這樣做。

不要做生產規則中的順序敏感的副作用。生產規則應該用來建立一個代表你程序的數據結構。一旦完成,你可以分析/執行/不管它。

+0

謝謝。這個評論在重新思考超越特定問題的方法時非常有用。 –