如何匹配未定义的东西

How to match something not defined

如果我定义了类似的东西

COMMAND         = "HI" | "HOW" | "ARE" | "YOU" 

我怎么说"if u match something that is not a COMMAND"?..

我试过这个

[^COMMAND]

但是没用..

据我所知,这对于(当前的)JFlex 是不可能的。

我们需要一个有效的tempered negative lookahead((?!bad).)*

有两种方法可以在 JFlex 中执行负前瞻:

  • 前瞻中的否定:x / !(y [^]*)(如果前瞻中没有跟随 y,则匹配 x)。
  • 具有取反元素的前瞻:x / [^y]|y[^z](如果 x 后跟 !a 或 a!b 则匹配。

否则,您可能会从这个答案中得到一些想法(特别是环视替代方案):

好吧,你可以匹配任何其他内容,然后

COMMAND         = "HI" | "HOW" | "ARE" | "YOU" 
. {throw new RuntimeException("Illegal character: <" + yytext() + ">");}