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规则。