2017-02-24 95 views
0

我使用的是從這裏ANTLRv4 Python3語法:產生Python3在python解析器,使用ANTLR 4.6

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

該語法充滿了用Java編寫的用於處理Python特性的操作代碼。您必須手動將其移植到python以使您的語法成爲可用。這就是爲什麼鼓勵語法作者將動作代碼移出到基類或偵聽器代碼的原因。

+0

謝謝!我現在轉移到Java作爲目標語言來避免這種情況。 – greenberet123