下面是 FLEX 程序的片段
%%
a |
ab |
abc |
abcd ECHO; REJECT;
.|\n printf("xx%c", *yytext);
%%
输入:
abcd
输出:
abcdabcabaxxaxxbxxcxxdxx
有人可以解释如何获得这个输出吗?
下面是 FLEX 程序的片段
%%
a |
ab |
abc |
abcd ECHO; REJECT;
.|\n printf("xx%c", *yytext);
%%
输入:
abcd
输出:
abcdabcabaxxaxxbxxcxxdxx
有人可以解释如何获得这个输出吗?
REJECT
有效地导致flex
备份到下一个更好的匹配,记住以下优先规则flex
:
在您的情况下,字符串abcd
将匹配a
,或; 首选的是最长的 ( )。ab
abc
abcd
abcd
由于您在ECHO
动作之前有一个动作REJECT
,ECHO
即使匹配稍后会被拒绝,也会发生这种情况。最终,flex
将回退到默认规则(它也匹配a
但稍后在源文件中),它将打印xxa
并接受字符。现在,除了默认规则之外,没有任何匹配项,因此接下来的三个字符一次匹配一个。
如果您将'\n'
s 写入标准输出,这可能会更清楚。