You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行flex.l文件提示unexpected character报错如何解决

报错原因

Flex规则段对行首格式有强制要求:两个%%分隔的规则区域内,所有模式匹配规则必须顶格书写,行首不能存在空格、制表符等任何缩进空白。
你写的代码中,[a-z]、.、\n对应的所有规则行前面都加了前导空格,Flex不会将这些行识别为匹配规则,而是默认判定为需要直接嵌入生成C文件的原生代码,解析到[a-z]这类不符合C语法的内容时,就会抛出unexpected character错误。
另外部分旧版本Flex环境下,空实现的yywrap()会触发隐式声明编译警告,可以一并修复。

修复步骤
  • 删除规则段所有匹配规则行的前导缩进,保证每个模式规则顶格书写
  • 可在定义段添加%option noyywrap,替代手动编写的空yywrap()函数,兼容不同版本Flex环境
  • 定义段、用户自定义代码段的注释和代码可以保留合理缩进,仅需保证规则段的匹配模式行无行首空白即可

修复后的完整可运行代码如下:

%{
/* definitions*/
%}
/*rules*/
%%
[a-z] {printf("Single lowercase character\n");}
. {printf("Not a lowercase character\n");}
\n {return 0;}
%%

int main() {
    printf("Enter String:  ");
    yylex();
    return 0;
}

修复后按标准流程编译运行即可:

  1. 执行flex flex.l生成C源文件lex.yy.c
  2. 执行gcc lex.yy.c -o flex_test -lfl编译生成可执行文件
  3. 运行程序输入字符即可得到预期匹配输出

内容的提问来源于stack exchange,提问作者coder123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 16:18:25