forked from jasder/antlr
30 lines
754 B
Plaintext
30 lines
754 B
Plaintext
|
grammar E;
|
||
|
|
||
|
prog: classDef+ ; // match one or more class definitions
|
||
|
|
||
|
classDef
|
||
|
: 'class' ID '{' member+ '}' // a class has one or more members
|
||
|
{System.out.println("class "+$ID.text);}
|
||
|
;
|
||
|
|
||
|
member
|
||
|
: 'int' ID ';' // field definition
|
||
|
{System.out.println("var "+$ID.text);}
|
||
|
| 'int' f=ID '(' ID ')' '{' stat '}' // method definition
|
||
|
{System.out.println("method: "+$f.text);}
|
||
|
;
|
||
|
|
||
|
stat: expr ';'
|
||
|
{System.out.println("found expr: "+$stat.text);}
|
||
|
| ID '=' expr ';'
|
||
|
{System.out.println("found assign: "+$stat.text);}
|
||
|
;
|
||
|
|
||
|
expr: INT
|
||
|
| ID '(' INT ')'
|
||
|
;
|
||
|
|
||
|
ID : ('a'..'z'|'A'..'Z')+ ;
|
||
|
INT : '0'..'9'+ ;
|
||
|
WS : (' '|'\t'|'\n'|'\r')+ {$channel=HIDDEN;} ;
|