1*16467b97STreehugger Robotgrammar t017parser; 2*16467b97STreehugger Robot 3*16467b97STreehugger Robotoptions { 4*16467b97STreehugger Robot language =Cpp; 5*16467b97STreehugger Robot} 6*16467b97STreehugger Robot 7*16467b97STreehugger Robot@lexer::includes 8*16467b97STreehugger Robot{ 9*16467b97STreehugger Robot#include "UserTestTraits.hpp" 10*16467b97STreehugger Robot} 11*16467b97STreehugger Robot@lexer::namespace 12*16467b97STreehugger Robot{ Antlr3Test } 13*16467b97STreehugger Robot 14*16467b97STreehugger Robot@parser::includes { 15*16467b97STreehugger Robot#include "UserTestTraits.hpp" 16*16467b97STreehugger Robot} 17*16467b97STreehugger Robot@parser::namespace 18*16467b97STreehugger Robot{ Antlr3Test } 19*16467b97STreehugger Robot 20*16467b97STreehugger Robotprogram 21*16467b97STreehugger Robot : declaration+ 22*16467b97STreehugger Robot ; 23*16467b97STreehugger Robot 24*16467b97STreehugger Robotdeclaration 25*16467b97STreehugger Robot : variable 26*16467b97STreehugger Robot | functionHeader ';' 27*16467b97STreehugger Robot | functionHeader block 28*16467b97STreehugger Robot ; 29*16467b97STreehugger Robot 30*16467b97STreehugger Robotvariable 31*16467b97STreehugger Robot : type declarator ';' 32*16467b97STreehugger Robot ; 33*16467b97STreehugger Robot 34*16467b97STreehugger Robotdeclarator 35*16467b97STreehugger Robot : ID 36*16467b97STreehugger Robot ; 37*16467b97STreehugger Robot 38*16467b97STreehugger RobotfunctionHeader 39*16467b97STreehugger Robot : type ID '(' ( formalParameter ( ',' formalParameter )* )? ')' 40*16467b97STreehugger Robot ; 41*16467b97STreehugger Robot 42*16467b97STreehugger RobotformalParameter 43*16467b97STreehugger Robot : type declarator 44*16467b97STreehugger Robot ; 45*16467b97STreehugger Robot 46*16467b97STreehugger Robottype 47*16467b97STreehugger Robot : 'int' 48*16467b97STreehugger Robot | 'char' 49*16467b97STreehugger Robot | 'void' 50*16467b97STreehugger Robot | ID 51*16467b97STreehugger Robot ; 52*16467b97STreehugger Robot 53*16467b97STreehugger Robotblock 54*16467b97STreehugger Robot : '{' 55*16467b97STreehugger Robot variable* 56*16467b97STreehugger Robot stat* 57*16467b97STreehugger Robot '}' 58*16467b97STreehugger Robot ; 59*16467b97STreehugger Robot 60*16467b97STreehugger Robotstat: forStat 61*16467b97STreehugger Robot | expr ';' 62*16467b97STreehugger Robot | block 63*16467b97STreehugger Robot | assignStat ';' 64*16467b97STreehugger Robot | ';' 65*16467b97STreehugger Robot ; 66*16467b97STreehugger Robot 67*16467b97STreehugger RobotforStat 68*16467b97STreehugger Robot : 'for' '(' assignStat ';' expr ';' assignStat ')' block 69*16467b97STreehugger Robot ; 70*16467b97STreehugger Robot 71*16467b97STreehugger RobotassignStat 72*16467b97STreehugger Robot : ID '=' expr 73*16467b97STreehugger Robot ; 74*16467b97STreehugger Robot 75*16467b97STreehugger Robotexpr: condExpr 76*16467b97STreehugger Robot ; 77*16467b97STreehugger Robot 78*16467b97STreehugger RobotcondExpr 79*16467b97STreehugger Robot : aexpr ( ('==' | '<') aexpr )? 80*16467b97STreehugger Robot ; 81*16467b97STreehugger Robot 82*16467b97STreehugger Robotaexpr 83*16467b97STreehugger Robot : atom ( '+' atom )* 84*16467b97STreehugger Robot ; 85*16467b97STreehugger Robot 86*16467b97STreehugger Robotatom 87*16467b97STreehugger Robot : ID 88*16467b97STreehugger Robot | INT 89*16467b97STreehugger Robot | '(' expr ')' 90*16467b97STreehugger Robot ; 91*16467b97STreehugger Robot 92*16467b97STreehugger RobotID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* 93*16467b97STreehugger Robot ; 94*16467b97STreehugger Robot 95*16467b97STreehugger RobotINT : ('0'..'9')+ 96*16467b97STreehugger Robot ; 97*16467b97STreehugger Robot 98*16467b97STreehugger RobotWS : ( ' ' 99*16467b97STreehugger Robot | '\t' 100*16467b97STreehugger Robot | '\r' 101*16467b97STreehugger Robot | '\n' 102*16467b97STreehugger Robot )+ 103*16467b97STreehugger Robot {$channel=HIDDEN} 104*16467b97STreehugger Robot ; 105