ANTRLR新手问题。假设对于给定的语法,ANTLR maven 插件已经创建了所有必要的 Java 类来遍历和解析文本。当按照“The Definitive ANTLR4 Reference”中的规定使用时,它工作得很好。
现在想象我需要重用生成的类来解析由埋藏在语法文件深处的规则定义的表达式。 然而,引用文献似乎没有提供有关如何选择特定规则作为起始规则的线索,生成的类始终期望源代码中存在整个语法树。
按原样使用生成的类也不起作用,因为相应的监听器和解析器方法需要一个上下文参数,该参数只能在具有“父上下文”和“调用状态”时创建,而我没有知道如何定义。
到目前为止,我想到的唯一(也是垃圾)解决方案是将语法分成两个文件,以便相关的低级规则成为顶级规则,并将后者导入第一个文件。
我是否错过了一些明显的东西?任何帮助将不胜感激。
最佳答案
这很简单。使用要与子规则之一匹配的文本加载输入流,然后像处理主规则一样在解析器中调用该子规则的函数。每个语法规则都由一个函数表示,您可以简单地调用该函数来获取潜文本,然后它将生成一个精简的解析树,该树仅适用于该子规则(及其子规则)。
关于java - 在 ANTLR 中,如何根据特定的低级规则解析流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41287234/