c++ - 是否可以堆叠Yacc文法规则代码?

标签 c++ c parsing yacc bison

假设我每次匹配规则时都需要运行一些初始化代码,我怎样才能减少冗余?

rule : TOKEN1 { init(); token1Code(); }
     | TOKEN2 { init(); token2Code(); }
     ;

也可以做类似的事情

rule : TOKEN1
     | TOKEN2
     { codeForToken1OrToken2(); }
     ;

最佳答案

你可以使用类似的东西:

rule : { init(); } real_rule { codeForToken1or2(); } ;

real_rule : TOKEN1 { token1Code(); }
          | TOKEN2 { token2Code(); }
          ;

但这可能会引入冲突,具体取决于“规则”的使用方式。

关于c++ - 是否可以堆叠Yacc文法规则代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1767670/

相关文章:

c++ - wxWidgets:如何引用子组件?

c++ - scanf 读取格式化输入

java - 访问jar中的pom.xml

c - 如何将命令行参数中的数字解析为两个数组

javascript - 无效的 JSON 但 json 看起来是有效的

c++ - 错误 : cannot convert 'int (*)[(((sizetype)(((ssizetype)n) + -1)) + 1)]' to 'int (*)[100]' for argument '1' to 'int determ(int (*)[100], int)' |

c++ - 在 C++ 中查找和移动文件

c++ - 创建过程不起作用

c - Pthread 互斥锁

c++ - 在 C++ 中传递具有不同大小的常量数组作为函数参数