flex 无法识别的规则(关于可选短语)

flex's unrecognized rule (about an optional phrase)

我写了一个简单的flex文件:

%{
#include "question.tab.h"
%}

%%

COMMON(/[45]\.0)?   return GOTCHA;
[a-z]+              return ETC;

%%

并尝试编译。(flex -d question.l)
然后输出如下。

question.l:7: unrecognized rule
question.l:7: unrecognized rule
question.l:7: unrecognized rule
question.l:7: unrecognized rule
question.l:7: unrecognized rule
question.l:7: unrecognized rule
question.l:7: unrecognized rule
question.l:7: unrecognized rule
question.l:7: unrecognized rule
question.l:7: unrecognized rule

我希望 flex 到 return GOTCHA 当它捕获 COMMONCOMMON/4.0COMMON/5.0.

我应该修复正则表达式的哪一部分?

谢谢你的提前。

/符号是flex中的一个特殊字符。它用于前瞻,而您使用它的方式是非法的(flex 只允许在表达式的末尾进行前瞻,而不是在组内)。

由于您实际上并不需要前瞻,而是要匹配文字斜杠,因此您应该将其放在引号中或使用反斜杠将其转义。