我有一个保持两种排他状态(WORD 和 DEFN)的扫描仪
%option noyywrap
%s WORD
%s DEFN
%%
%{
BEGIN(WORD);
%}
<WORD>{
"|" { BEGIN(DEFN); return WS_PIPE; }
}
<DEFN>{
[^;]+ { printf("ds: %s\n", yytext); return WD_STRING; }
";" { return WD_SEMICOLON; }
}
\n|. { printf("U: %s\n", yytext); }
%%
但是使用简单的输入“| some text;”,解析管道时状态不会改变,所以解析“some text;” 失败。