如果我定义了类似的东西
COMMAND = "HI" | "HOW" | "ARE" | "YOU"
我怎么能说"如果您匹配不是命令的东西"?..
我试过这个
[^COMMAND]
但没有用..
据我所知,这在(当前(JFlex中是不可能的。
我们需要一个有效的缓和消极展望:((?!bad).)*
在JFlex 中,有两种方法可以进行负面展望:
- 前瞻中的否定:
x / !(y [^]*)
(如果前瞻中未跟 y,则匹配 x(。 - 使用否定元素向前看:
x / [^y]|y[^z]
(如果 x 后跟 !a 或 a!b 的内容,则匹配。
否则,您可能会从这个答案中获得一些想法(特别是环顾四周的替代方案(:https://stackoverflow.com/a/37988661/8291949
好吧,你可以匹配其他任何东西,然后
COMMAND = "HI" | "HOW" | "ARE" | "YOU"
. {throw new RuntimeException("Illegal character: <" + yytext() + ">");}