2013-04-18 116 views
0

我現在有一個多行註釋詞法規則在ANTLR看起來像:如何禁止嵌套評論中ANTLR

MULTILINE: '/*' .* '*/' {$channel=HIDDEN;} ; 

然而,目前這讓喜歡的東西:

/* /* hello */ */ 

是否有任何可能在antlr中禁用嵌套註釋的方法?我已經嘗試了各種各樣的東西,如

MULTILINE: '/*' (~(MULTILINE)|.*) '*/' {$channel=HIDDEN;} ; 

但這並不奏效。任何幫助將非常感激!

回答

2

不,這是不正確的:.*.+不貪婪。

鑑於由以下語法生成的解析器:

grammar T; 

parse 
: (t=. {System.out.printf("\%-15s'\%s'\n", tokenNames[$t.type], $t.text);})* EOF 
; 

MULTILINE 
: '/*' .* '*/' {$channel=HIDDEN;} 
; 

OTHER 
: . 
; 

輸入"/* /* hello */ */"將產生在命令行上執行以下操作:

OTHER   ' ' 
OTHER   '*' 
OTHER   '/'

即,"/* /* hello */"被放在HIDDEN信道,和3 OTHER令牌被構造。

0

試試這個:

這是不可能的前綴後綴也沒有在註釋身體得到認可。另外,不允許嵌套。

COMMENT_NON_NEST 
    : '/*' 
     (('/'|'*'+)? ~[*/])*? 
     ('/'|'*'+?)? 
     '*/' 
     {$channel=HIDDEN;} 
    ;