java - 在 ANTLR 中,如何根据特定的低级规则解析流?

标签 java antlr antlr4

ANTRLR新手问题。假设对于给定的语法,ANTLR maven 插件已经创建了所有必要的 Java 类来遍历和解析文本。当按照“The Definitive ANTLR4 Reference”中的规定使用时,它工作得很好。

现在想象我需要重用生成的类来解析由埋藏在语法文件深处的规则定义的表达式。 然而,引用文献似乎没有提供有关如何选择特定规则作为起始规则的线索,生成的类始终期望源代码中存在整个语法树。

按原样使用生成的类也不起作用,因为相应的监听器和解析器方法需要一个上下文参数,该参数只能在具有“父上下文”和“调用状态”时创建,而我没有知道如何定义。

到目前为止,我想到的唯一(也是垃圾)解决方案是将语法分成两个文件,以便相关的低级规则成为顶级规则,并将后者导入第一个文件。

我是否错过了一些明显的东西?任何帮助将不胜感激。

最佳答案

这很简单。使用要与子规则之一匹配的文本加载输入流,然后像处理主规则一样在解析器中调用该子规则的函数。每个语法规则都由一个函数表示,您可以简单地调用该函数来获取潜文本,然后它将生成一个精简的解析树,该树仅适用于该子规则(及其子规则)。

关于java - 在 ANTLR 中,如何根据特定的低级规则解析流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41287234/

相关文章:

java - 如何在 ParseTreeMatch ANTLR4 上使用 getAll(...)

java - 我想使用 ANTLR4 从 java 源文件中提取所有方法名称和变量名称

java - 使用 id 和 version 列映射一对多关系

javascript - 注销后销毁 session

python-2.7 - 在 python 中使用 antlr

c++ - 在 C++ 中解析许多小文本的最佳解析器生成器?

java - hibernate 双向一对多级联。全部不工作

java - 使用 Spring Integration 使 ssl-context-support 有条件地使用 tcp-connection-factory

java - 如何从ANTLR语法中收集 'returns'

java - 你能阻止 StringTemplate 输出到 stderr 吗?