program = global global = (decl_var ";")* | function* | struct* | enum* | "typedef" struct ident ident ";" "expern" type ";" struct = "struct" ident ";" "struct" ident "{" decl_var; "}" ";" enum = "enum" "{" (ident (= num)? ",")+ ident (= num)? "}" ";" function = type ident "(" (decl_var ("," decl_var)*)* ")" block type ident "(" (decl_var ("," decl_var)*)* ")"; block = "{" stmt* "}" stmt = "if" "

