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

时间:2017-12-06 04:51:50

标签: antlr4

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

enter image description here

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

任何帮助都是预先确定的。

1 个答案:

答案 0 :(得分:0)

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

这是一个典型的形式:

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

或作为谓词:

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

仅与内部函数isSpecialWord返回true的ID匹配。基本上,您没有将词法分析器规则传递给某些值,但是您在内部代码中进行了评估。