0

我正在使用 .cup 文件根据特定的派生规则生成解析器。

每次reduce之后,我想调用一个函数,是否可以在.cup文件的任何地方定义它,以便在每次reduce之后注入到生成的代码中?

4

1 回答 1

0

显然,如果您使用的是 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 年添加的。

于 2021-12-05T20:21:07.693 回答