我想使用python3用antlr构建Python3解析器。我所做的:
>alias antlr4='java -Xmx500M -cp "/usr/local/lib/antlr-4.7.1- complete.jar:$CLASSPATH" org.antlr.v4.Tool'
>alias grun='java org.antlr.v4.gui.TestRig'
>antlr4 -Dlanguage=Python3 Python3.g4 //this generated Python3Lexer and Parser and other files
>grun Python3 file_input --tokens test.py
Can't load Python3 as lexer or parser
这很奇怪,因为在错误设置CLASSPATH时通常会出现此问题,但这是正确的。
6。测试了一个规则(例如file_input / single_input),用于字符串:import foo
/ def f
(类似keyword _ smth
的字符串),我明白了:
第1:6行多余的输入''期待NAME 第1:10行的输入不匹配”期望{NEWLINE,';'}
这也很奇怪,因为我是从antlr信息库下载语法的,并且对其他人也有用
main.py
试图从测试文件中获取树,但树始终为空:def main():
input = FileStream("test.py")
lexer = Python3Lexer(input)
stream = CommonTokenStream(lexer)
parser = Python3Parser(stream)
tree = parser.file_input()
print(tree)
因此,问题是我的解析器和词法分析器无法正常工作。我试图和我的同学Lexer和Parser(都为他工作)一起为Python3生成相同的方法,但仍然没有用。