2013-03-11 92 views
1

假设你想在规则的中间增加语义动作,这样你就更换:标记野牛

S->AB 

有:

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

为什么有此必要?如果不是,我只想写会发生什么:

S->A { //do something } B 

回答

3

没有与解析器没有区别 - 写在规则中间的动作是创建与行动的新规则小量语法糖。动作是通过解析器的减少而触发的,所以需要有一个与动作相关的规则减少。 Bison为您自动进行转换。

唯一的区别是$1 ......在行动中的含义。通过嵌入式操作,索引计算出的值栈中的基点将会不同 - 基于包含规则的开始而不是epsilon规则。