2012-04-24 28 views
0

我是ANTLR的新手,並使用它開發模糊語言的解析器。我想要做的是如何在不使用AST的情況下將「註釋」周圍的標記合併爲一個標記。如何在ANTLR的註釋周圍結合標記

我使用這個簡單的語法來說明問題

grammar test; 

query 
    :  expression+ 
    ; 

expression 
    : alpha 
    ; 


alpha 
    : ID 
    ; 


ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* 
    ; 


COMMENT 
    : '{' (options {greedy=false;} : .)* '}' {$channel=HIDDEN;} 
    ; 

現在,如果我們用一個簡單的文本「測試{註釋}兒」產生兩個不同的記號,即「測試」和「ER」執行它。而我想從中創建一個單獨的標記。任何幫助都感激不盡。

在此先感謝

吉姆

+1

這是令牌由詞法分析器處理的方式,前往這樣工作可能需要預處理。 LL/LR解析器的設計目的不是爲了處理模糊的語言,順便說一句,所以你將來可能會遇到一些困難的問題。 – ricochet1k 2012-04-25 05:48:30

+0

這裏也發佈:http://antlr.markmail.org/message/nvtzsu6zoh4b3pr4 – 2012-04-25 12:08:59

回答

0

我不知道,但你試圖做這樣的事情:

ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* COMMENT? ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* 
; 
+0

是的,但它會成爲令牌的一部分;這實際上並不是我想要的。 – 2012-04-25 11:25:28

+0

@Bart,此規則的一種工作形式可以是 ID:((''''''''''''''''')COMMENT?)*; 但是,這將包括身份證的評論以及我實際上不想要的。根據語言規範,可以在任何單詞/關鍵字的字母之間進行評論,因此我必須擺脫評論以便在規則中稍後識別該單詞。 – 2012-04-25 11:52:56