使用ANTLR 4.6在Python中生成Python3的解析器



我正在使用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<>();

因此,它无法使用。有人知道为什么会发生这种情况以及如何解决吗?谢谢!

此语法中充满了用Java编写的动作代码,以处理Python的专业。您必须手动移植到Python,以使您的语法使用。这就是为什么鼓励语法作者将动作代码转移到基础类别或侦听器代码的原因。

相关内容

  • 没有找到相关文章

最新更新