Contents    Page-10    Prev    Next    Page+10    Index   

Yacc: Pascal Subset


program    : statement DOT     /* change this! */
               { parseresult = $1; }  ;
statement  : BEGINBEGIN statement endpart
               { $$ = makeprogn($1,cons($2,$3)); }
           | IF expr THEN statement endif
               { $$ = makeif($1, $2, $4, $5); }
           | assignment  ;
endpart    : SEMICOLON statement endpart
                  { $$ = cons($2, $3); }
           | END  { $$ = NULL; }  ;
endif      : ELSE statement  { $$ = $2; }
           | /* empty */     { $$ = NULL; }  ;
assignment : variable ASSIGN expr
               { $$ = binop($2, $1, $3); }  ;
expr       : expr PLUS term
               { $$ = binop($2, $1, $3); }
           | term  ;
term       : term TIMES factor
               { $$ = binop($2, $1, $3); }
           | factor  ;
factor     : LPAREN expr RPAREN  { $$ = $2; }
           | variable
           | NUMBER  ;
variable   : IDENTIFIER ;