+<FunDecl> ::= <id> '(' <Type>* ')' ['::' <FunType] '{' <VarDecl>* <Stmt>+ '}'
+<FunType> ::= <Type>+ '->' <VoidType>
+ | <VoidType>
+<Stmt> ::= 'if' '(' <Expr> ')' '{' <Stmt>* '}' ['else' '{' <Stmt>* '}']
+ | 'while' '(' <Expr> ')' '{' <Stmt>* '}'
+ | <id> <FieldSels> '=' <Expr> ';'
+ | <FunCall> ';'
+ | 'return' [<Expr>] ';'
+
+<VarDecl> ::= (<Type> | 'var') <id> '=' <Expr> ';'