ANTLR返回空树,grun说它无法以lexer或parser的形式加载Python3

时间:2018-10-14 03:57:50

标签: python python-3.x parsing antlr antlr4

我想使用python3用antlr构建Python3解析器。我所做的:

  1. 下载了antlr-4.7.1-complete.jar
  2. sudo pip3安装antlr4-python3-runtime
  3. export CLASSPATH =“。://usr/local/lib/antlr-4.7.1-complete.jar:$ CLASSPATH”
  4. 从官方antlr语法下载语法:https://github.com/antlr/grammars-v4/tree/master/python3-py
  5. 构建解析器和词法分析器:

>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信息库下载语法的,并且对其他人也有用

  1. 我的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生成相同的方法,但仍然没有用。

0 个答案:

没有答案