将动态值传递给 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 匹配。所以从本质上讲,您没有向词法分析器规则传递一些值,而是在内部代码中进行评估。
我是 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 匹配。所以从本质上讲,您没有向词法分析器规则传递一些值,而是在内部代码中进行评估。