问题描述
因此,我正在尝试使用适用于Python的Antlr4从我的代码生成抽象语法树。我几乎完全按照此处描述的每个步骤进行操作: https://github.com/antlr/antlr4/blob/master/doc/python-target.md
由于我要解析Python代码,因此我从此处下载了Python语法:https://github.com/antlr/grammars-v4/blob/master/python/python3-py/Python3.g4
我将其重命名为MyGrammar
。从那一步开始,我做了链接中描述的完全相同的事情。我在终端机上做了antlr4 -Dlanguage=python3 MyGrammar.g4
,然后创建了以下Python脚本:
from antlr4 import *
from MyGrammarLexer import MyGrammarLexer
from MyGrammarParser import MyGrammarParser
def main(argv):
input_stream = FileStream(argv[1])
lexer = MyGrammarLexer(input_stream)
stream = CommonTokenStream(lexer)
parser = MyGrammarParser(stream)
tree = parser.startRule()
if __name__ == '__main__':
main(sys.argv)
但是,由于某种原因,我得到了'MyGrammarParser' object has no attribute 'startRule'
。
我知道这个问题以前曾在这里(AttributeError: 'MuParser' object has no attribute 'startRule')提出过,但人们建议改用parse
命令。问题是我遇到了同样的问题(它不被识别为属性)。有什么想法吗?
解决方法
这意味着您尚未在startRule
文件中定义名为MyGrammar,g4
的解析器规则:
// File: MyGrammar.g4
grammar MyGrammar;
startRule
: ...
;
...
,但是人们建议改用parse命令。问题是我遇到了同样的问题
然后,您也没有名为parse
的解析器规则。