[prog] Yacc - terminating problem

Sue Stones suzo at spin.net.au
Tue Feb 10 23:44:24 EST 2004


On Tue, 10 Feb 2004 08:03 pm, Sue Stones wrote:
> My Yacc program keeps on trying to process things after it gets an end of
> file.  It even processes the EOF but just doesn't stop.

Well I changed it and used a "." to terminate the program which works for some 
things but not when it comes after an "end" (while statement) any ideas why 
this might be?

sue

> ________________________

%%

program :   statement_list
        ;

statement_list :   statement '.'
        |       while_statement
        |       statement_list full_statement
        |       statement_list while_statement
        ;

full_statement: statement ';' {
              }
        |       statement {
                        errorstr = strdup("Missing semicolon");
                        yyerror(errorstr);
                }
        ;

statement :  INCR NAME   { fprintf(stdout,"%s++;\n", $2); }
        |    DECR NAME   { fprintf(stdout,"%s--;\n", $2); }
        |    NAME GETS NAME  { fprintf(stdout,"%s = %s;\n", $1, $3); }
        |    CLEAR NAME   { fprintf(stdout,"%s = 0;\n"); }
        ;


 while_statement :  WHILE NAME NE ZERO DO ';' {
                        fprintf(stdout,"while (%s != 0){ \n", $2);
                } while_statement_list
        |       WHILE NAME NE ZERO DO {
                        fprintf(stdout,"while (%s != 0){ \n", $2);
                        errorstr = strdup("Missing semicolon");
                        yyerror(errorstr);
                } while_statement_list
        ;

while_statement_list :  statement_list end_statement
        ;

end_statement:  END '.' {
                        fprintf(stdout, "}\n");
                }
        |    END ';' {
                        fprintf(stdout, "}\n");
                }
        |    END  {
                        fprintf(stdout, "}\n");
                        errorstr = strdup("Missing semicolon after \"end\"");
                        yyerror(errorstr);
                }
        ;

%%



More information about the Programming mailing list