Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
假设你想在规则中间添加一个语义动作,所以你替换:
S->AB
和:
S->AMB M->epsilon { //do something }
为什么这是必要的?如果我只写:
S->A { //do something } B
解析器没有区别——在规则中间编写动作是用动作创建新的 epsilon 规则的语法糖。动作由解析器中的归约触发,因此需要有一个与动作关联的归约规则。Bison 会自动为您进行转换。
唯一的区别是$1... 在动作中的含义。使用嵌入式操作,索引计算的值堆栈中的基点将有所不同——基于包含规则的开始而不是 epsilon 规则。
$1