Yacc错误:对`line_num'的未定义引用

时间:2018-03-19 15:03:36

标签: c g++ yacc

我被指派在lex和yacc中实现一种新的编程语言。下面是我的一些yacc代码,它应该打印错误并发生行错误

//rest of the code
%%
#include "lex.yy.c"
extern int line_num;

main() {
  return yyparse();
}
void yyerror( char *s )
{   
    fprintf(stderr,"Syntax Error in line: %d\n%s\n",line_num, s);
}

编译器提供以下错误消息:

/tmp/cclW8fn4.o: In function `yyerror':
y.tab.c:(.text+0x200f): undefined reference to `line_num'
collect2: error: ld returned 1 exit status
make: *** [all] Error 1

如何解决?

1 个答案:

答案 0 :(得分:1)

正如注释extern int line_num;中讨论的那样,它只声明了line_num,它必须存在于另一个文件中。

因此,在lex文件中声明int line_num时,此问题已解决:

%{
   int line_num = 1;    
%}