如果我定义了类似的东西
COMMAND = "HI" | "HOW" | "ARE" | "YOU"
我怎么说“如果你匹配的东西不是一个命令”?...
我试过这个
[^COMMAND]
但是没有用..
答案 0 :(得分:0)
据我所知,(当前)JFlex是不可能的。
我们需要一个有效的tempered negative lookahead:((?!bad).)*
在JFlex中有两种方法可以做出否定前瞻:
x / !(y [^]*)
(如果在前瞻中没有跟y,则匹配x。)x / [^y]|y[^z]
(匹配,如果x后跟一些东西是!a或a!b。否则,您可以从此答案中获得一些想法(特别是外观替代方案):https://stackoverflow.com/a/37988661/8291949
答案 1 :(得分:0)
好吧,你可以匹配其他任何东西,然后
COMMAND = "HI" | "HOW" | "ARE" | "YOU"
. {throw new RuntimeException("Illegal character: <" + yytext() + ">");}