Hi, I would like to create a parser that reads the following input:
a = 1; b = 2; c = 3; d = 0; y = a + b * c + d; And outputs: temp1 = b * c; temp1 = 6; temp2 = temp1 + d; y = a + temp2; y = 7; I reviewed the bison manual and played with example three "mfcalc" from chapter two. I copy the relevant part here, line numbers are added for convenience. Obviously i need to define a counter that count the number of basic operations ( '+', '*' ) and use the number to identify the correct temp variable (temp1, temp2, ...) I need an action for the non-terminal expression (exp '+' exp), this action should print (temp# = exp + exp;). Also, i need to find the result ($$ = $1 + $3;). First, i added line 8 and received (error: invalid type argument of `->') as a compilation error. Next i added line 3 and line 11. The result was as "expected" postorder expression. Please advise?? 1: exp: NUM { $$ = $1; } 2: | VAR { $$ = $1->value.var; 3: printf("%s",$1->name); 4: } 5: | VAR '=' exp { $$ = $3; $1->value.var = $3; } 6: | FNCT '(' exp ')' { $$ = (*($1->value.fnctptr))($3); } 7: | exp '+' exp { 8: printf("temp%d = %s + %s", temp_no, $1->name, $3->name); 9: $$ = $1 + $3; 10: printf("+"); 11: temp_no ++; 12: } Regards, Abed _______________________________________________ help-bison@gnu.org http://lists.gnu.org/mailman/listinfo/help-bison