Flex/Lex 无法识别的括号规则

Flex/Lex unrecognized rule for paranthesis'

%{

%}

%%
'*'     {return 0;}
'('     {return 1;}
')'     {return 2;}
%%

int yywrap(){}

上面的示例代码。它给出的错误消息为:

zort.l:7: unrecognized rule
zort.l:8: unrecognized rule
zort.l:8: unrecognized rule
zort.l:8: unrecognized rule

它只给出括号字符的错误。不会给其他字符任何错误。是什么原因? paranthesis 是例外吗?如何解决?

对于flex 模式,单引号和双引号是不一样的。当前,您的第一条规则表示您要匹配单引号 (')、零次或多次 (*),然后是另一个单引号 '。其他规则没有意义。

假设您想要匹配文字星号和括号,请尝试使用双引号:

%%
"*"     {return 0;}
"("     {return 1;}
")"     {return 2;}
%%

manual 有更多关于什么可以指定为模式(它是正则表达式的扩展形式)的信息。