ANTRLR新手问题。对于给定的语法,ANTLR maven插件已经创建了所有必需的Java类来遍历和解析文本。当按照“最终的ANTLR4参考”中的规定使用时,它的工作正常。
现在想象一下,我需要重用生成的类来解析一个表达式,该表达式由埋藏在语法文件深处的规则定义。 但是,Reference似乎没有提供关于如何选择特定规则作为起始规则的线索,生成的类总是期望整个语法树存在于源中。
使用生成的类也不起作用,因为相应的侦听器和解析器方法需要一个上下文参数,该参数只能在具有“父上下文”和“调用状态”时才能创建知道如何定义。
到目前为止我提出的唯一(和垃圾)解决方案是将语法分成两个文件,以便有问题的低级规则成为顶级规则,并将后者导入第一个。
我在这里想念一些明显的东西吗?任何帮助将不胜感激。
答案 0 :(得分:1)
这很简单。使用要与其中一个子规则匹配的文本加载输入流,然后像解决主规则一样在解析器中调用该子规则的函数。每个语法规则都由一个函数表示,你可以简单地调用你的子文本,然后它会生成一个精简的解析树,它只适用于这个子规则(以及它的子节点)。