2.05 Flex词法分析器的输出管理

词法分析器的输出管理比输入管理简单得多,而且完全可选的。同样可以追溯到最早的lex版本,除非你另行设定,否则flex总会执行一条默认的规则:所有没有被匹配的输入都拷贝yyout然后输出。

%{
/* ...省略部分 */
#define ECHO fwrite(yytext, yyleng, 1, yyout)
%}

%%
/* ...省略部分 */
. ECHO; // flex默认的规则:所有没有被匹配的输入都拷贝yyout然后输出
%%

    
// 注意:由于目前还没有学到起始条件(start condition)相关的知识,以上flex默认的规则只是一个简版。
// 实际上它应该为:<*>.|\n     ECHO;

注意:这对于那些仅处理一部分输入而保持剩余部分不变的flex程序来说可能有些作用,比如在英式英语转换到美式英语的翻译器中,但大多数情况下它更容易导致一些错误。flex允许你在词法分析器顶端设置%option nodefault,使它不要添加默认的规则,这样当输入无法被给定的规则完全匹配时,词法分析器可以报告一个错误。

建议词法分析器总是使用nodefault选项,并在必要情况下包含自己的默认规则。

猜你喜欢

转载自blog.csdn.net/weixin_46222091/article/details/105968391