program ( ) op num id if then else begin end := var return function .

%%

Exp   : ( Exp )
      | Exp op Exp
      | num
      | id
      | id ( Exp )
      ;

Stm   : if Exp then Stm
      | if Exp then Stm else Stm
      | begin Stms end
      | id := Exp
      | var id
      | return Exp
      ;

Stms  : Stm
      | Stms Stm
      ;

Func  : function id ( id ) begin Stms end
      ;

Funcs : Func
      | Funcs Func
      ;

Prog  : program id Funcs begin Stms end .
      ;

%%

Prog
