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

使用ANTLR 4.6在python中为Python3生成解析器,python,antlr4,Python,Antlr4,我在这里使用ANTLRv4 Python 3语法: 和运行: 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.ch

我在这里使用ANTLRv4 Python 3语法:

和运行:

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<>();
def\uuuuu init\uuuuuuuuuuu(self,input=None):
超级(Python3Lexer,self)。\uuuu初始化(输入)
自检版本(“4.6”)
self.\u interp=LexerATNSimulator(self,self.atn,self.decisionsToDFA,PredictionContextCache())
自身行为=无
self.\u谓词=无
//推送额外令牌的队列(请参阅换行符lexer规则)。
private java.util.LinkedList tokens=new java.util.LinkedList();
//跟踪缩进级别的堆栈。
private java.util.Stack indents=new java.util.Stack();

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

此语法中充满了用Java编写的操作代码,用于处理Python的特殊性。您必须手动将其移植到python,以使语法对您可用。这就是为什么鼓励语法编写人员将操作代码迁移到基类或侦听器代码中。

谢谢!为了避免这种情况,我现在选择Java作为目标语言。