我目前正在阅读 Lesk and Schmidt 编写的 Lex 文档,并对 REJECT 操作感到困惑。
考虑两条规则
a[bc]+ { ... ; REJECT;}
a[cd]+ { ... ; REJECT;}
输入:
ab
只有第一个匹配项,看看我们从 Material 中得到了什么。
The action REJECT means ``go do the next alternative.'' It causes whatever rule was second choice after the current rule to be executed.
但是没有第二个选择,会不会出错?
最佳答案
REJECT
的用例确实很少;除了示例之外,我认为我从未见过它的实例。
无论如何,除非您指定 %option nodefault
(或 -s
命令行标志),flex 会向您的规则集添加默认后备操作,相当于
.|\n ECHO;
在您的情况下,该模式将在 REJECT 之后匹配。
但是,可以覆盖默认操作;例如,您可以添加规则:
.|\n REJECT;
在这种情况下,flex 在两次 REJECT
之后确实没有其他选择,并且它会在 stderr
上打印一条错误消息(“flex 扫描仪卡住”)然后调用exit
。
关于lex - 如果由于 REJECT 而 Lex 程序中不存在匹配规则怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51598138/