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)