ANTLR匹配除令之外的所有令牌

时间:2011-08-17 15:40:03

标签: antlr antlr3

有没有办法匹配antlr中的令牌,除了特定的令牌?

我有一条规则,规定'_'可以是ID。现在我有一个特定的情况,我希望匹配一个ID,但在这种特殊情况下,我希望它忽略'_'替代。有可能吗?

1 个答案:

答案 0 :(得分:1)

我认为像

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

应该这样做(如果您使用Java作为目标语言)。否则,您必须以您的语言理解的方式编写semantic predicate

简而言之,这将检查文本是否不等于“_”,然后才会与子规则匹配。

另一种可能的方法:

id: ID
  | '_'
  ;

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

这样,只要您指的是“要么'_'或任何其他ID”,就可以使用id来匹配此项,如果您不允许“_”,则可以使用_