1
/** Java 1.2 AST Recognizer Grammar
4
* Terence Parr parrt@jguru.com
6
* Version tracking now done with following ID:
8
* $Id: java.tree.g,v 1.1 2000/11/06 12:35:13 bodewig Exp $
10
* This grammar is in the PUBLIC DOMAIN
14
class JavaTreeParser extends TreeParser;
21
: (packageDefinition)?
27
: #( PACKAGE_DEF identifier )
31
: #( IMPORT identifierStar )
35
: #(CLASS_DEF modifiers IDENT extendsClause implementsClause objBlock )
36
| #(INTERFACE_DEF modifiers IDENT extendsClause interfaceBlock )
40
: #(TYPE typeSpecArray)
44
: #( ARRAY_DECLARATOR typeSpecArray )
65
: #( MODIFIERS (modifier)* )
84
: #(EXTENDS_CLAUSE (identifier)* )
88
: #(IMPLEMENTS_CLAUSE (identifier)* )
106
| #(STATIC_INIT slist)
107
| #(INSTANCE_INIT slist)
113
: #(CTOR_DEF modifiers methodHead slist)
117
: #(METHOD_DEF modifiers typeSpec methodHead)
121
: #(METHOD_DEF modifiers typeSpec methodHead (slist)?)
125
: #(VARIABLE_DEF modifiers typeSpec variableDeclarator varInitializer)
129
: #(PARAMETER_DEF modifiers typeSpec IDENT )
133
: #(INSTANCE_INIT slist)
138
| LBRACK variableDeclarator
142
: #(ASSIGN initializer)
152
: #(ARRAY_INIT (initializer)*)
156
: IDENT #( PARAMETERS (parameterDef)* ) (throwsClause)?
160
: #( "throws" (identifier)* )
165
| #( DOT identifier IDENT )
170
| #( DOT identifier (STAR|IDENT) )
180
| #(LABELED_STAT IDENT stat)
181
| #("if" expression stat (stat)? )
183
#(FOR_INIT (variableDef | elist)?)
184
#(FOR_CONDITION (expression)?)
185
#(FOR_ITERATOR (elist)?)
188
| #("while" expression stat)
189
| #("do" stat expression)
190
| #("break" (IDENT)? )
191
| #("continue" (IDENT)? )
192
| #("return" (expression)? )
193
| #("switch" expression (caseGroup)*)
194
| #("throw" expression)
195
| #("synchronized" expression stat)
197
| slist // nested SLIST
202
: #(CASE_GROUP (#("case" expression) | "default")+ slist)
206
: #( "try" slist (handler)* (#("finally" slist))? )
210
: #( "catch" parameterDef slist )
214
: #( ELIST (expression)* )
221
expr: #(QUESTION expr expr expr) // trinary operator
222
| #(ASSIGN expr expr) // binary operators...
223
| #(PLUS_ASSIGN expr expr)
224
| #(MINUS_ASSIGN expr expr)
225
| #(STAR_ASSIGN expr expr)
226
| #(DIV_ASSIGN expr expr)
227
| #(MOD_ASSIGN expr expr)
228
| #(SR_ASSIGN expr expr)
229
| #(BSR_ASSIGN expr expr)
230
| #(SL_ASSIGN expr expr)
231
| #(BAND_ASSIGN expr expr)
232
| #(BXOR_ASSIGN expr expr)
233
| #(BOR_ASSIGN expr expr)
239
| #(NOT_EQUAL expr expr)
259
| #("instanceof" expr expr)
260
| #(UNARY_MINUS expr)
273
| #( "new" IDENT elist )
275
| #(ARRAY_DECLARATOR type)
276
| builtInType ("class")?
280
| #(METHOD_CALL primaryExpression elist)
281
| #(TYPECAST typeSpec expr)
289
| typeSpec // type name used with instanceof
293
: #(INDEX_OP primaryExpression expression)
305
( newArrayDeclarator (arrayInitializer)?
313
: #( ARRAY_DECLARATOR (newArrayDeclarator)? (expression)? )