1

假设你想在规则中间添加一个语义动作,所以你替换:

S->AB

和:

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

为什么这是必要的?如果我只写:

S->A { //do something } B
4

1 回答 1

3

解析器没有区别——在规则中间编写动作是用动作创建新的 epsilon 规则的语法糖。动作由解析器中的归约触发,因此需要有一个与动作关联的归约规则。Bison 会自动为您进行转换。

唯一的区别是$1... 在动作中的含义。使用嵌入式操作,索引计算的值堆栈中的基点将有所不同——基于包含规则的开始而不是 epsilon 规则。

于 2013-03-11T16:23:14.740 回答