2011-08-17 60 views
-1

有什麼辦法來匹配ANTLR令牌除了特定的一種?ANTLR匹配所有令牌除了

我有其中指出一個'_'可以是ID的規則。現在,我有我想匹配ID的具體情況,但在這種特殊情況下,我希望它忽略'_'替代。可能嗎?

+3

我通過你的問題,瀏覽了一下,很多人似乎有像樣的答案,但他們大部分都是不能接受的。您_do_似乎有利於自己的答案,你提供給您的問題... :) –

+0

@halfwarp其答案是否有資格作爲接受嗎?如果是,請接受它。 –

回答

1

我認爲像

(ID {!$ID.text.equals("_")}?) 

應該這樣做(如果你使用的是Java爲目標語言)。否則,您必須以您的語言能夠理解的方式編寫semantic predicate

總之,這將檢查文本是否不等於「_」只有這樣,子規則的匹配。

另一種可能的方式做到這一點:

id: ID 
    | '_' 
    ; 

ID: // lexer rule to match every valid identifier EXCEPT '_' ; 

這樣一來,當你的意思是「無論是‘_’或任何其它ID」,你用id匹配這一點,如果你不允許「_」,你可以使用_