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