2012-06-21 101 views
1

我有以下的語法查找評論:在ANTLR語法

grammar bxk; 
options 
{ 
    language=CSharp3; 
} 

// start rule 
start 
    : com=comment root EOF 
    ; 


root 
    : ROOT_ID CT_ID END 
    ; 

comment returns [string comment] 
    : ((('/*' des=(~'*/')* '*/'))NEWLINE) {$comment=$des.text;} 
    ; 


CHAR : ('a'..'z'|'A'..'Z') ; 
ROOT_ID : 'ROOT_'(CHAR | DIGIT | SPECIAL)+ ; 
CT_ID : 'ct_'(CHAR | DIGIT | SPECIAL)+ ; 
DIGIT : '0'..'9'; 
SPECIAL : '_' ; 
END : ';'; 
ASSIGN : '='; 
STRING : CHAR (CHAR | DIGIT | SPECIAL)*; 
WS  : (' '|'\t' | '\n' | '\r' | '\u000C')+ {Skip();} ; 

現在,我會得到betwenn的/**/評論。這工作正常。但空間被清理,因爲WS令牌與Skip()調用。 我可以有任何東西跳過空格,但在評論結構中我想要空格。

我希望任何人有解決方案?

回答

2

請勿將comment作爲解析器規則。使它成爲一個詞法規則來代替:

COMMENT 
    : '/*' .* '*/' // no need for a NEWLINE at the end 
    ; 

在解析器規則(一個或多個),然後你可以這樣做:

p returns [string comment] 
: FOO COMMENT BAR {$comment = $COMMENT.text;} // or {$comment = $COMMENT.Text;} 
; 
+0

謝謝,這工作正常。 – user1469116

+0

不客氣,@ user1469116。 –