1*16467b97STreehugger Robottree grammar t047treeparserWalker; 2*16467b97STreehugger Robotoptions { 3*16467b97STreehugger Robot language=Python; 4*16467b97STreehugger Robot tokenVocab=t047treeparser; 5*16467b97STreehugger Robot ASTLabelType=CommonTree; 6*16467b97STreehugger Robot} 7*16467b97STreehugger Robot 8*16467b97STreehugger Robotprogram 9*16467b97STreehugger Robot : declaration+ 10*16467b97STreehugger Robot ; 11*16467b97STreehugger Robot 12*16467b97STreehugger Robotdeclaration 13*16467b97STreehugger Robot : variable 14*16467b97STreehugger Robot | ^(FUNC_DECL functionHeader) 15*16467b97STreehugger Robot | ^(FUNC_DEF functionHeader block) 16*16467b97STreehugger Robot ; 17*16467b97STreehugger Robot 18*16467b97STreehugger Robotvariable returns [res] 19*16467b97STreehugger Robot : ^(VAR_DEF type declarator) 20*16467b97STreehugger Robot { 21*16467b97STreehugger Robot $res = $declarator.text; 22*16467b97STreehugger Robot } 23*16467b97STreehugger Robot ; 24*16467b97STreehugger Robot 25*16467b97STreehugger Robotdeclarator 26*16467b97STreehugger Robot : ID 27*16467b97STreehugger Robot ; 28*16467b97STreehugger Robot 29*16467b97STreehugger RobotfunctionHeader 30*16467b97STreehugger Robot : ^(FUNC_HDR type ID formalParameter+) 31*16467b97STreehugger Robot ; 32*16467b97STreehugger Robot 33*16467b97STreehugger RobotformalParameter 34*16467b97STreehugger Robot : ^(ARG_DEF type declarator) 35*16467b97STreehugger Robot ; 36*16467b97STreehugger Robot 37*16467b97STreehugger Robottype 38*16467b97STreehugger Robot : 'int' 39*16467b97STreehugger Robot | 'char' 40*16467b97STreehugger Robot | 'void' 41*16467b97STreehugger Robot | ID 42*16467b97STreehugger Robot ; 43*16467b97STreehugger Robot 44*16467b97STreehugger Robotblock 45*16467b97STreehugger Robot : ^(BLOCK variable* stat*) 46*16467b97STreehugger Robot ; 47*16467b97STreehugger Robot 48*16467b97STreehugger Robotstat: forStat 49*16467b97STreehugger Robot | expr 50*16467b97STreehugger Robot | block 51*16467b97STreehugger Robot ; 52*16467b97STreehugger Robot 53*16467b97STreehugger RobotforStat 54*16467b97STreehugger Robot : ^('for' expr expr expr block) 55*16467b97STreehugger Robot ; 56*16467b97STreehugger Robot 57*16467b97STreehugger Robotexpr: ^(EQEQ expr expr) 58*16467b97STreehugger Robot | ^(LT expr expr) 59*16467b97STreehugger Robot | ^(PLUS expr expr) 60*16467b97STreehugger Robot | ^(EQ ID expr) 61*16467b97STreehugger Robot | atom 62*16467b97STreehugger Robot ; 63*16467b97STreehugger Robot 64*16467b97STreehugger Robotatom 65*16467b97STreehugger Robot : ID 66*16467b97STreehugger Robot | INT 67*16467b97STreehugger Robot ; 68