Hi everyone,
I need to write a compiler with Yacc that will basically perform minor algebraic commands. Here is the code so far for the Yacc part.

%token INTEGER VARIABLE READ WRITE
%left '+' '-'
%left '*' '/'

%{
   #include <stdio.h>
   void yyerror(char *);
   int yylex(void);
   int sym[26];
   int x;
   %}

%%

program:
        stmt_list '\n'
        |
        ;        

stmt_list:
        stmt_list stmt
        | stmt
        ;

stmt:
        VARIABLE '=' expr ';'  {sym[$1] = $3;}
        | READ VARIABLE ';'    {printf("Please enter an Integer");
                                scanf("%d", x);
                                sym[$2] = x;}   // HERE IS THE PROBLEM LINE
        | WRITE expr ';'       {printf("The result is: %d", $2);}
        ;

expr:
        term
        | expr '+' term        {$$ = $1 + $3; }
        | expr '-' term        {$$ = $1 - $3; }
        ;

term:   
        factor
        | term '*' factor      {$$ = $1 * $3; }
        | term '/' factor      {$$ = $1 / $3; }
        ;

factor:
        '('expr')'
        | VARIABLE             {$$ = sym[$1];}
        | INTEGER
        ;


%%

	void yyerror (char *s)
              {  printf("%s\n", s); } 

        int main(void) {
           yyparse();
           return 0;
        }

I have indicated where the problem occurs. I get a basic syntax error but I cannot figure it out. Any help would be greatly appreciated.

This article has been dead for over six months. Start a new discussion instead.