2011-08-17 101 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匹配这一点,如果你不允许“_”,你可以使用_