微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

“ MyGrammarParser”对象没有属性“ startRule”

如何解决“ MyGrammarParser”对象没有属性“ startRule”

因此,我正在尝试使用适用于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的解析器规则。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。