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

Java 在ANTLR中,如何根据特定的低级规则解析流?,java,antlr,antlr4,Java,Antlr,Antlr4,ANTRLR新手问题。比如说,对于给定的语法,ANTLR maven插件已经创建了所有必要的Java类来遍历和解析文本。当按照“最终ANTLR4参考”中的规定使用时,它工作正常 现在想象一下,我需要重用生成的类来解析一个表达式,该表达式由隐藏在语法文件深处的规则定义。 然而,该引用似乎没有提供如何选择特定规则作为起始规则的线索,生成的类总是希望源代码中存在整个语法树 按原样使用生成的类也不起作用,因为相应的侦听器和解析器方法需要一个上下文参数,该参数只能在具有“父上下文”和“调用状态”(我不知道

ANTRLR新手问题。比如说,对于给定的语法,ANTLR maven插件已经创建了所有必要的Java类来遍历和解析文本。当按照“最终ANTLR4参考”中的规定使用时,它工作正常

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

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

到目前为止,我提出的唯一(也是垃圾)解决方案是将语法分为两个文件,这样所讨论的低级规则将变成顶级规则,并将后者导入到第一个文件中


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

这非常简单。加载输入流,其中包含要与其中一个子规则匹配的文本,然后在解析器中调用该子规则的函数,就像对主规则所做的那样。每个语法规则都由一个函数表示,您可以简单地为您的子文本调用该函数,然后它将生成一个精简的解析树,该解析树仅适用于该子规则(及其子规则)