我希望Flex lexer对q
标记有一个特殊的情况,即只有当它是一行中除空格之外的唯一内容时,它才被识别为q
标记。
S [ \f\r\t\v]
%%
^{S}*q{S}*$ { exit(0); }
这与q
* 不 * 匹配。如果我去掉尾随的$
,那么它匹配;但是,它还匹配像q foo
这样的东西,即,q
not 在一行上。
为什么$
不起作用?我怎样才能得到我想要的?
参考:
$ flex --version
flex 2.6.4 Apple(flex-34)
1条答案
按热度按时间sbtkgmzw1#
我无法重现你的问题(它“对我有效”)--但证明这一观察所需的信息比一条评论所能容纳的要多。
使用以下代码变体:
在macOS Monterey 12.6.3上使用Flex 2.6.4 Apple(flex-34)编译,我得到的输出如下:
这看起来像是你要找的行为。在“
q
on its own”行的末尾有尾随空格,但是只包含q
的行也会终止程序,并显示Quit!
消息。我用以下命令编译了它:-Wno-nullability-completeness
对于抑制来自<stdio.h>
的大量令人讨厌的警告是必要的;-Wno-sign-compare
避免了生成的C代码中的一个问题。故障的可能原因:
before the
出口(0);'来证明您正在编辑的代码就是正在编译和执行的代码。