如何匹配未定义的东西
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() + ">");}
如果我定义了类似的东西
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() + ">");}