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

Bison flex';s无法识别的规则(关于可选短语),bison,flex-lexer,yacc,lex,Bison,Flex Lexer,Yacc,Lex,我编写了一个简单的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: un

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

我应该修复regexp的哪一部分


感谢您的支持。

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

由于您实际上不希望使用前向,但要匹配文字斜杠,您应该将其置于引号中或使用反斜杠对其进行转义