c - yylineno has always the same value in yacc file -
this question has answer here:
- flex yylineno set 1 1 answer
for 1 project in compilers have 1 problem in syntax analyzer, when go add symbol in symbol table, take same value in yylineno...
i did in begining:
%{ int yylex(void); int yyerror(char* yaccprovidedmessage); extern int yylineno; //i declare yylineno lexical analyzer extern char *yytext; extern file *yyin; int scope=0; int max_scope; %}
and in grammar when go add in symbol table:
i.e
lvalue: id { printf("<-id"); add_data_to_symbol_table((char*)($1),scope,yylineno); printf("lineno:%d",yylineno); } ;
in output when give input different lines doesnt recognize new line
if(x<=2) { if(t<1) { k=2; } }
the lineno never change,always have 1 value...
any ideas?
assuming using yylineno
flex
, should add line
%option yylineno
to flex
specification. beware not advisable export yylineno
directly grammar, grammar may request ahead tokens tokenizer , yylineno
may have been updated. professed way of handling yylineno
through yylval
. i've seen bison
has new line-numbering features (see @1
, @@
etc.) integrates more effortlessly flex
.
p.s: me talking bison
, mentioned yacc
. if committed yacc
, pass through yylval
.
Comments
Post a Comment