我正在使用 .cup 文件根据特定的派生规则生成解析器。
每次reduce之后,我想调用一个函数,是否可以在.cup文件的任何地方定义它,以便在每次reduce之后注入到生成的代码中?
我正在使用 .cup 文件根据特定的派生规则生成解析器。
每次reduce之后,我想调用一个函数,是否可以在.cup文件的任何地方定义它,以便在每次reduce之后注入到生成的代码中?
显然,如果您使用的是 Jochen Hoenecke 在 github 上维护的 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 年添加的。