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