我被指派在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
如何解决?
答案 0 :(得分:1)
正如注释extern int line_num;
中讨论的那样,它只声明了line_num
,它必须存在于另一个文件中。
因此,在lex文件中声明int line_num
时,此问题已解决:
%{
int line_num = 1;
%}