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