public class A extends B implements I,J,K { int a; byte b; int X(); byte Y();}
grammar TreeConstruct; options { output=AST; } tokens { Fields; Methods; } /* public class A extends B implements I,J,K { int a; byte b; int X(); byte Y();} */ prog : modifier? 'class' name=ID ('extends' superclass=ID)? ('implements' interfaces+=ID (',' interfaces+=ID)* )? '{' ( fieldDef | methodDef )* '}' -> ^($name ^('extends' $superclass)? ^('implements' $interfaces+)? ^(Fields fieldDef+)? ^(Methods methodDef+)? ) ; fieldDef: type ID^ ';'! ; methodDef: type ID^ '('! ')'! ';'! ; type: 'int' | 'byte'; modifier: 'public' | 'protected'| 'private' ; ID: 'a' .. 'z' | 'A' .. 'Z'; WS: (' '|'\r'|'\n') {$channel=HIDDEN;};