CIS 606. Translator Design I
Original Grammar for PSub
program --> program id ; var_decls subprogram_decls compound_statement .
var_decls --> var decl_list
| epsilon
decl_list --> decl_list declaration
| declaration
declaration --> identifier_list : type ;
identifier_list --> identifier_list , id
| id
type --> integer
| real
| boolean
subprogram_decls --> subprogram_decls subprogram_declaration
| epsilon
subprogram_declaration --> subprogram_head var_decls compound_statement ;
subprogram_head --> function id arguments : type ;
| procedure id arguments ;
arguments --> ( parameter_list )
| epsilon
parameter_list --> parameter_list ; parameter
| parameter
parameter --> identifier_list : type
compound_statement --> begin statement_list end
statement_list --> statement_list ; statement
| statement
statement --> variable := expression
| procedure_statement
| compound_statement
| if expression then statement else statement
| while expression do statement
| repeat statement_list until expression
| epsilon
variable --> id
procedure_statement --> id ( expression_list )
| id
expression_list --> expression_list , expression
| expression
expression --> simple_expression relop simple_expression
| simple_expression
simple_expression --> simple_expression addop term
| addop term
| term
term --> term mulop factor
| factor
factor --> variable
| num
| id ( expression_list )
| ( expression )
| not factor
Brian Howard
(bhoward@cis.ksu.edu)