在 ANTLR 中,我如何根据特定的低级规则解析流?
In ANTLR how do I parse streams against a specific low-level rule?
ANTRLR 新手问题。假设对于给定的语法,ANTLR maven 插件已经创建了所有必要的 Java 类 来遍历和解析文本。当按照 "The Definitive ANTLR4 Reference" 中的规定使用时,它工作得很好。
现在假设我需要重用生成的 类 来解析由隐藏在语法文件深处的规则定义的表达式。
然而,参考文献似乎没有提供关于如何 select 特定规则作为起始规则的线索,生成的 类 总是期望整个语法树出现在源代码中。
按原样使用生成的 类 也不起作用,导致相应的侦听器和解析器方法需要一个上下文参数,该参数只能在具有 "parent context" 和 [= 时创建22=] 我不知道怎么定义。
到目前为止,我提出的唯一(也是垃圾)解决方案是将语法拆分为两个文件,以便有问题的低级规则成为顶级规则,并将后者导入到第一个文件中。
我是否遗漏了一些明显的东西?任何帮助将不胜感激。
这个很简单。使用要与子规则之一匹配的文本加载输入流,然后像对主规则所做的那样在解析器中调用该子规则的函数。每个语法规则都由一个函数表示,您可以简单地调用您的潜台词,然后它会生成一个精简的解析树,它只适用于这个子规则(及其子规则)。
ANTRLR 新手问题。假设对于给定的语法,ANTLR maven 插件已经创建了所有必要的 Java 类 来遍历和解析文本。当按照 "The Definitive ANTLR4 Reference" 中的规定使用时,它工作得很好。
现在假设我需要重用生成的 类 来解析由隐藏在语法文件深处的规则定义的表达式。 然而,参考文献似乎没有提供关于如何 select 特定规则作为起始规则的线索,生成的 类 总是期望整个语法树出现在源代码中。
按原样使用生成的 类 也不起作用,导致相应的侦听器和解析器方法需要一个上下文参数,该参数只能在具有 "parent context" 和 [= 时创建22=] 我不知道怎么定义。
到目前为止,我提出的唯一(也是垃圾)解决方案是将语法拆分为两个文件,以便有问题的低级规则成为顶级规则,并将后者导入到第一个文件中。
我是否遗漏了一些明显的东西?任何帮助将不胜感激。
这个很简单。使用要与子规则之一匹配的文本加载输入流,然后像对主规则所做的那样在解析器中调用该子规则的函数。每个语法规则都由一个函数表示,您可以简单地调用您的潜台词,然后它会生成一个精简的解析树,它只适用于这个子规则(及其子规则)。