使用 ANTLR 4.6 为 python 中的 Python3 生成解析器
Generate parser for Python3 in python, using ANTLR 4.6
我正在使用此处的 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 以使语法对您可用。这就是为什么鼓励语法编写者将动作代码移出到基础 类 或侦听器代码中的原因。
我正在使用此处的 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 以使语法对您可用。这就是为什么鼓励语法编写者将动作代码移出到基础 类 或侦听器代码中的原因。