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