ANTLR4 Java8语法Python绑定调用时提示缺少startRule规则错误
问题原因
ANTLR生成的Parser类的解析方法名称,与对应.g4语法文件中定义的顶层规则名严格对应。你参考的官方入门示例里的startRule()只是通用占位写法,不同语法的入口规则名并不通用。你使用的Java8语法的顶层入口规则为compilationUnit,并非startRule,调用不存在的方法就会触发属性不存在的报错。
解决方法
将代码中调用startRule()的部分,替换为Java8语法对应的顶层规则方法即可:
tree = parser.compilationUnit()
如果后续使用其他语法不确定入口规则名,可以直接打开对应Parser的.g4文件,找到最顶部定义的第一个非词法规则,即为该语法的顶层入口规则;也可以直接查看生成的Parser类Python文件,所有和规则对应的方法都已在类中定义,可直接检索匹配。
修改后的完整调用代码示例:
from antlr4 import * from Java8Lexer import Java8Lexer from Java8Parser import Java8Parser input_stream = FileStream("/main.java") lexer = Java8Lexer(input_stream) stream = CommonTokenStream(lexer) parser = Java8Parser(stream) tree = parser.compilationUnit()
内容的提问来源于stack exchange,提问作者OrenIshShalom
相关产品推荐
相关产品推荐

