2013-03-11 90 views
1

假設你想在規則的中間增加語義動作,這樣你就更換:標記野牛

S->AB 

有:

S->AMB 
M->epsilon { //do something } 

爲什麼有此必要?如果不是,我只想寫會發生什麼:

S->A { //do something } B 

回答

3

沒有與解析器沒有區別 - 寫在規則中間的動作是創建與行動的新規則小量語法糖。動作是通過解析器的減少而觸發的,所以需要有一個與動作相關的規則減少。 Bison爲您自動進行轉換。

唯一的區別是$1 ......在行動中的含義。通過嵌入式操作,索引計算出的值棧中的基點將會不同 - 基於包含規則的開始而不是epsilon規則。