我想用Python2 Target來使用ANTLR4。據我瞭解,以下形式的語義謂詞是嵌入在語法中的目標語言的代碼。例如,我有一個這樣的規則:ANTLR4中使用Python目標缺少Lexer方法?
'S' {getCharPositionInLine() == 1}? 'OMETHING'
這主要是爲了確保令牌事物開始在該行的開始(否則是另一回事)。我使用了Java目標(默認),因爲它的測試工具比Python更好。到現在爲止還挺好。但是,一旦我的語法正在工作,試圖將此代碼翻譯成Python時,我遇到了一個問題。首先,我認爲在Java中,上面的代碼(我不知道太多的Java在所有)是類方法getCharPositionInLine
的調用,所以自然也似乎是合理的上述翻譯成:
'S' {self.getCharPositionInLine() == 1}? 'OMETHING'
不過我最終得到的錯誤:
'MyLexer' object has no attribute 'getCharPositionInLine'
我去檢查Lexer.py
文件(MyLexer從繼承)在這兩個antlr4/runtime/Python2/
和antlr4/runtime/Python3/
,你瞧,就沒有這樣的方法。我沒有意識到某些目標缺少功能。在此之前,我對語法分析器和詞法分析器一無所知,所以我爲自己的語法感到非常自豪,但畢竟我甚至無法使用它!有什麼辦法可以解決這個問題嗎?
謝謝,這與我期望的getCharPositionInLine完全一樣。各個目標的運行時間之間的這些差異是否記錄在任何地方,或者我是否必須閱讀代碼並找出它? – rooms
不幸的是,這樣的詳細文檔不存在。所以,閱讀代碼來解釋。 –