yylineno在yacc文件中始终具有相同的值
对于编译器中的一个项目,我在语法分析器中有一个问题,当我在符号表中添加一个符号时,我在yylineno中总是采用相同的值…
我是在开始时这样做的:
%{ int yylex(void); int yyerror(char* yaccProvidedMessage); extern int yylineno; //i declare yylineno from the lexical analyzer extern char *yytext; extern FILE *yyin; int scope=0; int max_scope; %}
当我在符号表中添加内容时,在语法中:
即
lvalue: ID { printf("<-ID"); add_data_to_symbol_table((char*)($1),scope,yylineno); printf("lineNO:%d",yylineno); } ;
在输出中,当我给出不同行的输入时,它不识别新行
if(x<=2) { if(t<1) { k=2; } }
lineNO永远不会改变,总是有1作为价值……
有任何想法吗?
假设您正在使用flex
yylineno
,那么您应该添加一行
%option yylineno
你的flex
规范。 但请注意,不建议将yylineno
直接导出到您的语法,因为您的语法可能会请求从标记器中查看令牌,因此yylineno
可能已经更新。 自称处理yylineno
是通过yylval
。 我也看到bison
有新的行编号function(见@1
和@@
等),可能更容易与flex
集成。
PS:看我谈论bison
,你只提到了yacc
。 如果您致力于yacc
,请将其传递给yylval
。