如何使用antlr为Python源代码生成AST(抽象语法树)

时间:2013-06-10 06:13:05

标签: python antlr abstract-syntax-tree

python的语法在antlr站点上给出,但是使用它来生成AST给出错误。我正在使用与生成AST的java语法相同的过程。

错误:

> C:\testpython>java -cp antlr-3.2.jar org.antlr.Tool Python.g
  

error(10):内部错误:: java.lang.Error:解析时出错   Python.g:'class'不期望'语法'   org.antlr.tool.GrammarSpelunker.match(GrammarSpelunker.java:74)   org.antlr.tool.GrammarSpelunker.grammarHeader(GrammarSpelunker.java:112)   org.antlr.tool.GrammarSpelunker.parse(GrammarSpelunker.java:84)   org.antlr.Tool.sortGrammarFiles(Tool.java:552)   org.antlr.Tool.process(Tool.java:408)   org.antlr.Tool.main(Tool.java:91)错误(100):Python.g:56:1:语法   错误:antlr:Python.g:56:1:意外令牌:类错误(8):文件   Python.g包含语法PythonParser;名称必须相同   error(100):Python.g:56:20:语法错误:antlr:Python.g:56:20:   期待SEMI,发现'extends'错误(100):语法错误:无效   char literal:'\ 014'错误(150):语法文件Python.g没有规则   error(100):Python.g:0:0:语法错误:assign.types :: 0:0:   意外结束子树错误(100):Python.g:0:0:语法错误:   define :: 0:0:子树的意外结束

任何帮助?

1 个答案:

答案 0 :(得分:1)

您正在尝试使用为ANTLR v2编写的语法生成带有ANTLR v3的解析器。要么找到v3的语法,要么保留语法并使用ANTLR v2:http://www.antlr2.org/download.html

这样开始的语法是v2的目标:

class FooParser extends Parser;

这对于v3:

grammar FooParser;