flex 的无法识别的规则关于一个可选短语

问题描述

我写了一个简单的 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 在捕获到 GOTCHACOMMONCOMMON/4.0 时返回 COMMON/5.0

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

感谢您的提前。

解决方法

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

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