野牛的标记

时间:2013-03-11 15:14:37

标签: parsing bison

假设您要在规则中间添加语义操作,请替换:

S->AB

使用:

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

为什么这有必要?如果相反我会写下:

会发生什么
S->A { //do something } B

1 个答案:

答案 0 :(得分:3)

与解析器没有区别 - 在规则中间编写动作是用于通过动作创建新的epsilon规则的语法糖。通过减少解析器来触发操作,因此需要有一个与操作相关联的规则。 Bison会自动为您进行转换。

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