将动态值传递给 ANTLR4 语法中的规则

Pass Dynamic values to the rules in ANTLR4 grammar

我是 ANTLR4 新手 我想编写一个语法,使用它动态读取的值来解析语法。 说我的语法如下图

我需要帮助,这样 HANDLERID 不仅采用提到的值,而且还采用基于函数调用的值列表,动态值。例如,包含 {'ACD','GHY','XYZ' ..} 的函数 return 列表。不要与标识符混淆,这些值是一些定义的对象集的名称,因此为 IDENTIFIER 编写语法不是解决方案。

感谢任何帮助。

也许 actions 是一个可行的解决方案?这些是用目标语言编写的,可以进行各种处理。它们被表述为谓词(将 ? 附加到操作块),它们甚至可以用来指导解析器采取什么路径。

这是一个典型的形式:

decl: type ID ';' { System.out.println("found a decl"); };

或作为谓词:

HANDLERID: ID { isSpecialWord($ID.text) }?;

它只会与您的内部函数 isSpecialWord 返回 true 的 ID 匹配。所以从本质上讲,您没有向词法分析器规则传递一些值,而是在内部代码中进行评估。