1
假設你想在規則的中間增加語義動作,這樣你就更換:標記野牛
S->AB
有:
S->AMB
M->epsilon { //do something }
爲什麼有此必要?如果不是,我只想寫會發生什麼:
S->A { //do something } B
假設你想在規則的中間增加語義動作,這樣你就更換:標記野牛
S->AB
有:
S->AMB
M->epsilon { //do something }
爲什麼有此必要?如果不是,我只想寫會發生什麼:
S->A { //do something } B
沒有與解析器沒有區別 - 寫在規則中間的動作是創建與行動的新規則小量語法糖。動作是通過解析器的減少而觸發的,所以需要有一個與動作相關的規則減少。 Bison爲您自動進行轉換。
唯一的區別是$1
......在行動中的含義。通過嵌入式操作,索引計算出的值棧中的基點將會不同 - 基於包含規則的開始而不是epsilon規則。