我使用.cup文件根据特定的派生规则生成解析器。
每次reduce之后,我都想调用一个函数,是否可以在.cup文件中的任何位置定义它,以便在每次reduce后将其注入生成的代码中?
显然如此,如果您在github上使用Jochen Hoenecke维护的Java CUP版本。引用手册(来自该版本,第2.2节末尾(:
after reduce {: ... :};
定义每当减少生产规则时执行的代码。数组符号包含当前生成规则的所有终端符号和非终端符号。RESULT可用于访问和修改由生成规则创建的非终结符的值。示例用法:
after reduce {: int lineNumber = symbols[0].left + 1; if (RESULT instanceof AST_Node) { ((AST_Node) RESULT).lineNumber = lineNumber } :}
根据更改日志,该功能于2019年添加。