使用ANTLR 4.6在python中为Python3生成解析器

时间:2017-02-24 01:04:59

标签: python antlr4

我从这里使用ANTLRv4 Python3语法:

https://github.com/antlr/grammars-v4/blob/master/python3/Python3.g4

并且正在运行:

java -jar antlr-4.6-complete.jar -Dlanguage=Python2 Python3.g4

生成Python3Lexer.py +其他一些文件。

然而,Python3Lexer.py包含的代码不是python!例如。

   def __init__(self, input=None):
     super(Python3Lexer, self).__init__(input)
     self.checkVersion("4.6")
     self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache())
     self._actions = None
     self._predicates = None



    // A queue where extra tokens are pushed on (see the NEWLINE lexer rule).
    private java.util.LinkedList<Token> tokens = new java.util.LinkedList<>();

    // The stack that keeps track of the indentation level.
    private java.util.Stack<Integer> indents = new java.util.Stack<>();

因此无法使用。有谁知道为什么会这样,以及我如何解决它?谢谢!

1 个答案:

答案 0 :(得分:2)

这个语法充满了用Java编写的动作代码来处理Python的特性。您必须手动将其移植到python以使语法可用。这就是为什么鼓励语法编写者将动作代码移出到基类或监听器代码中的原因。