我正在尝试为基于 C 的自定义语言制作一个编译器,该编译器支持使用 C++ 和 flex + bison 对变量进行范围界定。我已经制作了一个词法分析器和解析器,但我在解决范围界定问题时遇到了麻烦。我在野牛解析器文件中实现了语义动作,例如
while_stmt : WHILE LEFT_PAREN expr RIGHT_PAREN LEFT_CBRACE stmts RIGHT_CBRACE { $$ = new WhileStatement($3, *$6); }
;
我遇到的问题是找到将新符号表放入上下文符号表堆栈的时刻。由于它是一个自下而上的解析器,我不知道新块何时开始,就在它结束时,在执行归约之后,对我来说为时已晚。我放在规则后面的代码在减少后被执行。
如何使用野牛解决这个问题?我现在正在头脑风暴一段时间,没有解决方案。谢谢。