为什么 ANTLR 生成的解析器没有 parse/start/begin 函数?
Why ANTLR generated parser has not parse/start/begin functions?
我正在尝试使用 ANTLR 为一阶逻辑的简约语法生成解析器,可以在 ANTLR 源代码中找到:https://github.com/antlr/grammars-v4/blob/master/fol/fol.g4
奇怪的是,生成的Parser没有parse
、begin
、start
方法,每个教程都可以看到。也生成了侦听器,但我有兴趣获取解析树(用于以后的操作),此外,许多提到侦听器的教程都使用提到的 3 个函数之一。出了什么问题?是否有解析器生成选项?
生成的代码中不包含提到的方法,是的,它们可能在基础 class 中,但 Eclipse 认为它们是错误的(未定义的方法)。
我正在使用 antlr 4.8。
生成的解析器 class 将具有与您在语法中定义的规则同名的方法。所以如果你的语法有一个名为 foobar
的规则并且你想根据该规则解析你的输入,你会调用 parser.foobar()
来这样做。
如果教程中的代码调用名为 parse
、begin
或 start
的方法,那么该教程中的语法几乎肯定会定义具有该名称的规则。
在您链接的语法中,主要规则称为 condition
,因此这就是您应该调用的方法。
我正在尝试使用 ANTLR 为一阶逻辑的简约语法生成解析器,可以在 ANTLR 源代码中找到:https://github.com/antlr/grammars-v4/blob/master/fol/fol.g4
奇怪的是,生成的Parser没有parse
、begin
、start
方法,每个教程都可以看到。也生成了侦听器,但我有兴趣获取解析树(用于以后的操作),此外,许多提到侦听器的教程都使用提到的 3 个函数之一。出了什么问题?是否有解析器生成选项?
生成的代码中不包含提到的方法,是的,它们可能在基础 class 中,但 Eclipse 认为它们是错误的(未定义的方法)。
我正在使用 antlr 4.8。
生成的解析器 class 将具有与您在语法中定义的规则同名的方法。所以如果你的语法有一个名为 foobar
的规则并且你想根据该规则解析你的输入,你会调用 parser.foobar()
来这样做。
如果教程中的代码调用名为 parse
、begin
或 start
的方法,那么该教程中的语法几乎肯定会定义具有该名称的规则。
在您链接的语法中,主要规则称为 condition
,因此这就是您应该调用的方法。