tree grammar t047treeparserWalker; options { language=Python3; tokenVocab=t047treeparser; ASTLabelType=CommonTree; } program : declaration+ ; declaration : variable | ^(FUNC_DECL functionHeader) | ^(FUNC_DEF functionHeader block) ; variable returns [res] : ^(VAR_DEF type declarator) { $res = $declarator.text; } ; declarator : ID ; functionHeader : ^(FUNC_HDR type ID formalParameter+) ; formalParameter : ^(ARG_DEF type declarator) ; type : 'int' | 'char' | 'void' | ID ; block : ^(BLOCK variable* stat*) ; stat: forStat | expr | block ; forStat : ^('for' expr expr expr block) ; expr: ^(EQEQ expr expr) | ^(LT expr expr) | ^(PLUS expr expr) | ^(EQ ID expr) | atom ; atom : ID | INT ;