CS 75: C-- Grammar

Program           --> VarDeclList FunDeclList 

VarDeclList       --> epsilon 
	              VarDecl VarDeclList

VarDecl           --> Type id ;
                      Type id [ num] ; 

FunDeclList       --> FunDecl 
	              FunDecl FunDeclList

FunDecl           --> Type id ( ParamDecList ) Block

ParamDeclList     --> epsilon 
		      ParamDeclListTail 

ParamDeclListTail --> ParamDecl 
		      ParamDecl,  ParamDeclListTail 

ParamDecl         --> Type id
                      Type id[]

Block             --> { VarDeclList StmtList } 

Type              --> int
                      char

StmtList          --> Stmt 
	              Stmt StmtList 

Stmt              --> ;
                      Expr ; 
                      return Expr ;
                      read id ;
                      write Expr ;
                      writeln ;
                      break ;
                      if ( Expr ) Stmt else Stmt
                      while ( Expr ) Stmt 
                      Block

Expr              --> Primary 
                      UnaryOp Expr
                      Expr BinOp Expr
                      id = Expr 
                      id [ Expr ] = Expr 

Primary           --> id
                      num 
                      ( Expr )
                      id ( ExprList )
                      id [ Expr ] 

ExprList           --> epsilon 
                       ExprListTail 

ExprListTail       --> Expr 
                       Expr , ExprListTail
 
UnaryOp            --> - | !

BinOp              -->  + | - | * | / 
                        == | != 
                        < | <= | > | >=  
                        && | ||