4

コンパイラの 1 つのプロジェクトで、シンタックス アナライザーに 1 つの問題があります。シンボル テーブルにシンボルを追加しようとすると、常に 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 を持ちます...

何か案は?

4

1 に答える 1