Flex编写词法分析器出现yylineno未定义错误如何解决
问题原因
你使用的Flex 2.5.4版本默认不会自动生成yylineno变量,仅手动加extern声明会因为没有实际变量定义报链接错误。
解决方案
方案一(推荐,无需手动维护行号)
- 在你的
lexer.l文件的定义段(%{ ... %}代码块结束后,%%规则段开始前的位置)添加如下配置:
%option yylineno
该配置会让Flex自动生成yylineno全局变量,并且遇到换行符时自动累加行号。
2. 删除你代码中所有手动写的yylineno++逻辑,避免行号重复累加导致计数错误。
3. 重新执行编译流程:
flex lexer.l gcc lex.yy.c -o lexrun
方案二(手动维护行号,兼容更老的Flex版本)
- 删掉你之前添加的
extern int yylineno;声明,直接在lexer.l的%{ ... %}代码块中定义全局变量:
int yylineno = 1;
- 保留现有代码中所有
yylineno++的手动维护逻辑,直接重新编译即可。
内容的提问来源于stack exchange,提问作者Shehan Tearz
相关产品推荐
相关产品推荐

