初学者野牛弯曲(Beginner bison flex)

2019-10-17 06:11发布

如何打印在发生错误的行号。 我试着用yylinenoyyerror()函数和写%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

Answer 1:

还有就是要问弯曲提供全局变量yylineno第二种方法:在命令行开关-l 。 如果不适合你,你可以管理自己的全局,因为莱文等人。 提示。 增加它在换行符匹配任何规则。

%{
    int mylineno = 1;
%}
%%
* * * 
\n  { mylineno++; }


Answer 2:

有一些你可能会运行到问题的方法,但哪一个是相关的是很难猜测。

  1. 你必须在Flex源(定义的变量.l文件,并从源头上创建的目标文件),但你不要在野牛语法(声明它.y文件)或头部,所以当你编译它是未申报语法。

  2. 你确实有它的语法声明,但你仍然遇到问题。 在该片段的顺序.c从语法和词法分析器生成的文件可能不是你所期望的,所以你最终引用变量声明之前。 引用它的代码可能会出现在%{ ... %}块中,它可能会在第二后出现%%部分标记,它可能出现在语法中的一个(或词法分析器)动作块,或者它可能在一些出现其它位置,在源。 如果每个这些引用yylineno变量具有在嵌段(优选经由报头)纯声明,则代码应该确定。 您尝试消除重复,但在重复自己(这不应该是一个大问题,如果你的头是幂等)的风险,可以确保它在所有适当的段中声明。

需要注意的是语法不包括词法分析器默认信息; 你必须确保共享信息实施适当的声明和定义。



文章来源: Beginner bison flex