2009-12-09 118 views
0

我是ANTLR的新手,我已經提出了這個詞法分析規則來解析評論,它會起作用嗎?評論詞法規則

COMMENT_LINE  : (COMMENT (. - LINE_ENDING)* LINE_ENDING){$channel=hidden}; 

(我無法找到關於語法像這樣在文檔的任何東西)

+0

除此之外,它依賴於所有其他詞法規則在你的語法事實,減號, '-',可能會導致某種錯誤。你能解釋一下你的意思嗎?你能舉幾個你想分析的字符串的例子嗎? – 2009-12-09 08:44:15

+0

提到的所有其他「規則」實際上是令牌,我試圖匹配評論關鍵字後跟其餘的行。 – RCIX 2009-12-09 09:07:28

+0

詞法分析規則的順序也很重要。例如,如果詞法分析器規則爲'ANY_CHAR:。 ;'不是最後一條規則,語法將不起作用,因爲之後的任何規則將永遠無法匹配任何內容,因爲ANY_CHAR將吞噬所有內容。但我想博揚已經成功地回答了你的問題,對吧? – 2009-12-09 09:11:46

回答

2

您的規則不編譯的。如果您使用ANTLRWorks創建新的詞法分析器語法,可以選中一個框以使其生成與單行註釋匹配的詞法分析器規則。 IT這產生:

COMMENT 
    : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;} 
    ; 

另外,也可以使用這樣的匹配單行註釋:

COMMENT_LINE 
    : COMMENT (options{greedy=false;}: .)* LINE_ENDING {$channel=HIDDEN;} 
    ; 
+0

很酷。爲什麼ANTLRWorks聲稱「無法顯示規則COMMENT_LINE,因爲未找到啓動狀態」? – RCIX 2009-12-09 09:11:28

+0

沒關係,我想通了。 – RCIX 2009-12-09 09:13:16