2011-05-15 79 views
3

我在ANTLR中遇到@members規則問題。我想覆蓋默認的錯誤處理,所以我讀http://www.antlr.org/wiki/display/ANTLR3/Error+reporting+and+recovery,寫這個簡單的代碼爲我的語法:ANTLR @members and lexer

@members { 
    def displayRecognitionError(self, tokenNames, e): 
     print 'Test' 
} 

我在我的語法沒有@lexer ::成員或@parser ::成員。來自此規則的代碼(python運行時)僅包含在解析器文件中,而不包含在詞法分析器中。這是一個錯誤?我認爲,@members應根據文檔向詞法分析器和分析器添加內容。我使用Python運行時3.1.3。

Btw。是用於Opera的stackoverflow內聯代碼工作嗎?

回答

4

在組合語法文件中,@members@parser::members的簡寫。

// combined grammar 
grammar Foo; 

@members { 
    // only parser members here, equivalent to: @parser::members { ... } 
} 

@lexer::members { 
    // lexer members 
} 

當您使用獨立的lexer-和/或語法分析器,然後@members足夠:

parser grammar Foo; 

@members { 
    // parser members 
} 

lexer grammar Foo; 

@members { 
    // lexer members 
} 

Galmi寫道:

BT W上。是用於Opera的stackoverflow內聯代碼工作嗎?

我想是這樣,但關於SO本身的問題可以在SO-Meta上詢問。