如何打印在发生错误的行号。 我试着用yylineno
中yyerror()
函数和写%option yylineno
在.l
文件,但编译后它给了我一个错误“ yylineno undeclared (first use in this function)
”如果我初始化yylineno
为1它给了我这个错误:
error: redefinition of yylineno
lex.yy.c:273: note: previous definition of yylineno was here
还有就是要问弯曲提供全局变量yylineno第二种方法:在命令行开关-l
。 如果不适合你,你可以管理自己的全局,因为莱文等人。 提示。 增加它在换行符匹配任何规则。
%{
int mylineno = 1;
%}
%%
* * *
\n { mylineno++; }
有一些你可能会运行到问题的方法,但哪一个是相关的是很难猜测。
你必须在Flex源(定义的变量.l
文件,并从源头上创建的目标文件),但你不要在野牛语法(声明它.y
文件)或头部,所以当你编译它是未申报语法。
你确实有它的语法声明,但你仍然遇到问题。 在该片段的顺序.c
从语法和词法分析器生成的文件可能不是你所期望的,所以你最终引用变量声明之前。 引用它的代码可能会出现在%{ ... %}
块中,它可能会在第二后出现%%
部分标记,它可能出现在语法中的一个(或词法分析器)动作块,或者它可能在一些出现其它位置,在源。 如果每个这些引用yylineno
变量具有在嵌段(优选经由报头)纯声明,则代码应该确定。 您尝试消除重复,但在重复自己(这不应该是一个大问题,如果你的头是幂等)的风险,可以确保它在所有适当的段中声明。
需要注意的是语法不包括词法分析器默认信息; 你必须确保共享信息实施适当的声明和定义。