blob: 923faa4ff5c6dffb4d8e5073b8b050de8265c9b7 [file] [log] [blame]
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001--main options
2%options ACTION, AN=JavaAction.java, GP=java,
3%options FILE-PREFIX=java, ESCAPE=$, PREFIX=TokenName, OUTPUT-SIZE=125 ,
4%options NOGOTO-DEFAULT, SINGLE-PRODUCTIONS, LALR=1 , TABLE,
5
6--error recovering options.....
7%options ERROR_MAPS
8
9--grammar understanding options
10%options first follow
11%options TRACE=FULL ,
12%options VERBOSE
13
14%options DEFERRED
15%options NAMES=MAX
16%options SCOPES
17
18--Usefull macros helping reading/writing semantic actions
19$Define
20$putCase
21/. case $rule_number : if (DEBUG) { System.out.println("$rule_text"); } //$NON-NLS-1$
22 ./
23
24$break
25/.
26 break;
27./
28
29
30$readableName
31/.1#$rule_number#./
32$compliance
33/.2#$rule_number#./
34$recovery
35/.2#$rule_number# recovery./
36$recovery_template
37/.3#$rule_number#./
38$no_statements_recovery
39/.4#$rule_number# 1./
40-- here it starts really ------------------------------------------
41$Terminals
42
43 Identifier
44
45 abstract assert boolean break byte case catch char class
46 continue const default do double else enum extends false final finally float
47 for goto if implements import instanceof int
48 interface long native new null package private
49 protected public return short static strictfp super switch
50 synchronized this throw throws transient true try void
51 volatile while
52
53-- {ObjectTeams: keywords
54 as base callin playedBy precedence readonly team tsuper when with within
55
Stephan Herrmannc4817302012-07-13 01:31:42 +020056-- The following symbols are recognized as keywords only in specific contexts:
Stephan Herrmann234bfec2011-04-26 08:26:58 +000057-- After "<-":
58 replace after before
59-- After "->":
60 get set
61
62-- Markus Witte}
63
64 IntegerLiteral
65 LongLiteral
66 FloatingPointLiteral
67 DoubleLiteral
68 CharacterLiteral
69 StringLiteral
70
71 PLUS_PLUS
72 MINUS_MINUS
73 EQUAL_EQUAL
74 LESS_EQUAL
75 GREATER_EQUAL
76 NOT_EQUAL
77 LEFT_SHIFT
78 RIGHT_SHIFT
79 UNSIGNED_RIGHT_SHIFT
80 PLUS_EQUAL
81 MINUS_EQUAL
82 MULTIPLY_EQUAL
83 DIVIDE_EQUAL
84 AND_EQUAL
85 OR_EQUAL
86 XOR_EQUAL
87 REMAINDER_EQUAL
88 LEFT_SHIFT_EQUAL
89 RIGHT_SHIFT_EQUAL
90 UNSIGNED_RIGHT_SHIFT_EQUAL
91 OR_OR
92 AND_AND
93 PLUS
94 MINUS
95 NOT
96 REMAINDER
97 XOR
98 AND
99 MULTIPLY
100 OR
101 TWIDDLE
102 DIVIDE
103 GREATER
104 LESS
105 LPAREN
106 RPAREN
107 LBRACE
108 RBRACE
109 LBRACKET
110 RBRACKET
111 SEMICOLON
112 QUESTION
113 COLON
114 COMMA
115 DOT
116 EQUAL
117 AT
118 ELLIPSIS
Stephan Herrmannc4817302012-07-13 01:31:42 +0200119 ARROW
120 COLON_COLON
121 BeginLambda
Stephan Herrmann307ebe32013-05-02 02:46:05 +0200122 BeginIntersectionCast
Stephan Herrmannc4817302012-07-13 01:31:42 +0200123 BeginTypeArguments
124 ElidedSemicolonAndRightBrace
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200125 AT308
126 AT308DOTDOTDOT
Stephan Herrmannc4817302012-07-13 01:31:42 +0200127
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000128-- {ObjectTeams
Stephan Herrmann31caeac2013-04-21 18:02:24 +0200129 ATOT
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000130 BINDIN
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000131 CALLOUT_OVERRIDE
Stephan Herrmann926e1182012-07-20 20:26:32 +0200132 SYNTHBINDOUT
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000133-- Markus Witte}
134-- BodyMarker
135
136$Alias
137
Stephan Herrmannc4817302012-07-13 01:31:42 +0200138 '::' ::= COLON_COLON
139 '->' ::= ARROW
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000140 '++' ::= PLUS_PLUS
141 '--' ::= MINUS_MINUS
142 '==' ::= EQUAL_EQUAL
143 '<=' ::= LESS_EQUAL
144 '>=' ::= GREATER_EQUAL
145 '!=' ::= NOT_EQUAL
146 '<<' ::= LEFT_SHIFT
147 '>>' ::= RIGHT_SHIFT
148 '>>>' ::= UNSIGNED_RIGHT_SHIFT
149 '+=' ::= PLUS_EQUAL
150 '-=' ::= MINUS_EQUAL
151 '*=' ::= MULTIPLY_EQUAL
152 '/=' ::= DIVIDE_EQUAL
153 '&=' ::= AND_EQUAL
154 '|=' ::= OR_EQUAL
155 '^=' ::= XOR_EQUAL
156 '%=' ::= REMAINDER_EQUAL
157 '<<=' ::= LEFT_SHIFT_EQUAL
158 '>>=' ::= RIGHT_SHIFT_EQUAL
159 '>>>=' ::= UNSIGNED_RIGHT_SHIFT_EQUAL
160 '||' ::= OR_OR
161 '&&' ::= AND_AND
162 '+' ::= PLUS
163 '-' ::= MINUS
164 '!' ::= NOT
165 '%' ::= REMAINDER
166 '^' ::= XOR
167 '&' ::= AND
168 '*' ::= MULTIPLY
169 '|' ::= OR
170 '~' ::= TWIDDLE
171 '/' ::= DIVIDE
172 '>' ::= GREATER
173 '<' ::= LESS
174 '(' ::= LPAREN
175 ')' ::= RPAREN
176 '{' ::= LBRACE
177 '}' ::= RBRACE
178 '[' ::= LBRACKET
179 ']' ::= RBRACKET
180 ';' ::= SEMICOLON
181 '?' ::= QUESTION
182 ':' ::= COLON
183 ',' ::= COMMA
184 '.' ::= DOT
185 '=' ::= EQUAL
186 '@' ::= AT
187 '...' ::= ELLIPSIS
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200188 '@308' ::= AT308
189 '@308...' ::= AT308DOTDOTDOT
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000190
191-- {ObjectTeams
Stephan Herrmann31caeac2013-04-21 18:02:24 +0200192 '@OT' ::= ATOT
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000193 '<-' ::= BINDIN
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000194 '=>' ::= CALLOUT_OVERRIDE
195-- Markus Witte}
196
197$Start
198 Goal
199
200$Rules
201
Stephan Herrmann44109d32011-08-02 14:34:26 +0000202/.// This method is part of an automatic generation : do NOT edit-modify
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000203protected void consumeRule(int act) {
204 switch ( act ) {
205./
206
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000207Goal ::= '++' CompilationUnit
208Goal ::= '--' MethodBody
209-- Initializer
210Goal ::= '>>' StaticInitializer
211Goal ::= '>>' Initializer
212-- error recovery
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200213-- Modifiersopt is used to properly consume a header and exit the rule reduction at the end of the parse() method
214Goal ::= '>>>' Header1 Modifiersopt
215Goal ::= '!' Header2 Modifiersopt
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000216Goal ::= '*' BlockStatements
217Goal ::= '*' CatchHeader
218-- JDOM
219Goal ::= '&&' FieldDeclaration
220Goal ::= '||' ImportDeclaration
221Goal ::= '?' PackageDeclaration
222Goal ::= '+' TypeDeclaration
223Goal ::= '/' GenericMethodDeclaration
224Goal ::= '&' ClassBodyDeclarations
225-- code snippet
226Goal ::= '%' Expression
227Goal ::= '%' ArrayInitializer
228-- completion parser
229Goal ::= '~' BlockStatementsopt
Stephan Herrmanna9ff5de2014-01-04 13:16:55 +0100230Goal ::= '{' BlockStatementopt
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000231-- source type converter
232Goal ::= '||' MemberValue
233-- syntax diagnosis
234Goal ::= '?' AnnotationTypeMemberDeclaration
Stephan Herrmann1460a602012-07-19 20:01:10 +0200235-- JSR 335 Reconnaissance missions.
236Goal ::= '->' ParenthesizedLambdaParameterList
Stephan Herrmann307ebe32013-05-02 02:46:05 +0200237Goal ::= '(' ParenthesizedCastNameAndBounds
238Goal ::= '<' ReferenceExpressionTypeArgumentsAndTrunk
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200239-- JSR 308 Reconnaissance mission.
Stephan Herrmann307ebe32013-05-02 02:46:05 +0200240Goal ::= '@' TypeAnnotations
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000241--{ObjectTeams new goals:
242Goal ::= ':' CallinParameterMappings
243Goal ::= ';' CalloutParameterMappings
244Goal ::= '^' ParameterMapping
245Goal ::= '<' MethodSpecShort
246Goal ::= '>' MethodSpecLong
247-- SH}
248/:$readableName Goal:/
249
250-- {ObjectTeams
251-- insert new Goals for Delta-Compiling
252-- for Callin/Callout-Binding
253-- Markus Witte}
254
255Literal -> IntegerLiteral
256Literal -> LongLiteral
257Literal -> FloatingPointLiteral
258Literal -> DoubleLiteral
259Literal -> CharacterLiteral
260Literal -> StringLiteral
261Literal -> null
262Literal -> BooleanLiteral
263/:$readableName Literal:/
264BooleanLiteral -> true
265BooleanLiteral -> false
266/:$readableName BooleanLiteral:/
267
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200268Type ::= PrimitiveType
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000269/.$putCase consumePrimitiveType(); $break ./
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200270Type -> ReferenceType
Stephan Herrmannc4817302012-07-13 01:31:42 +0200271/:$readableName Type:/
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000272
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200273PrimitiveType -> TypeAnnotationsopt NumericType
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000274/:$readableName PrimitiveType:/
275NumericType -> IntegralType
276NumericType -> FloatingPointType
277/:$readableName NumericType:/
278
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200279PrimitiveType -> TypeAnnotationsopt 'boolean'
280PrimitiveType -> TypeAnnotationsopt 'void'
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000281IntegralType -> 'byte'
282IntegralType -> 'short'
283IntegralType -> 'int'
284IntegralType -> 'long'
285IntegralType -> 'char'
286/:$readableName IntegralType:/
287FloatingPointType -> 'float'
288FloatingPointType -> 'double'
289/:$readableName FloatingPointType:/
290
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200291ReferenceType ::= ClassOrInterfaceType
292/.$putCase consumeReferenceType(); $break ./
293ReferenceType -> ArrayType
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000294/:$readableName ReferenceType:/
295
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200296---------------------------------------------------------------
297-- 1.5 feature
298---------------------------------------------------------------
299ClassOrInterfaceType -> ClassOrInterface
300ClassOrInterfaceType -> GenericType
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000301/:$readableName Type:/
302
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200303ClassOrInterface ::= Name
304/.$putCase consumeClassOrInterfaceName(); $break ./
305ClassOrInterface ::= GenericType '.' Name
306/.$putCase consumeClassOrInterface(); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000307/:$readableName Type:/
308
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200309GenericType ::= ClassOrInterface TypeArguments
310/.$putCase consumeGenericType(); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000311/:$readableName GenericType:/
312
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200313GenericType ::= ClassOrInterface '<' '>'
Stephan Herrmann44109d32011-08-02 14:34:26 +0000314/.$putCase consumeGenericTypeWithDiamond(); $break ./
315/:$readableName GenericType:/
316/:$compliance 1.7:/
317
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000318-- {ObjectTeams: "Base as Role" types:
Stephan Herrmann5fa7f312012-07-13 01:52:51 +0200319LiftingTypeopt ::= $empty
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000320
Stephan Herrmanna30fa6a2012-07-15 13:54:47 +0200321LiftingTypeopt ::= 'as' BeginLiftingType Type
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000322/.$putCase consumeLiftingType(); $break ./
323/:$readableName LiftingType:/
324
Stephan Herrmanna30fa6a2012-07-15 13:54:47 +0200325BeginLiftingType ::= $empty
326/.$putCase consumeBeginLiftingType(); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000327
Stephan Herrmann197438c2012-07-15 22:54:37 +0200328CatchLiftingTypeopt ::= $empty
329
330CatchLiftingTypeopt ::= 'as' Type
331/.$putCase consumeLiftingType(); $break ./
332/:$readableName LiftingType:/
333-- SH}
334
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000335-- {ObjectTeams: "base.R" types:
336
337BaseAnchoredType ::= 'base' '.' SimpleName
338/.$putCase consumeBaseAnchoredType(); $break ./
339/:$readableName QualifiedName:/
340
341-- Connecting BaseAnchoredType to other rules (2 variants):
342-- 1.) connect via Type->ReferenceType->ClassOrInterfaceType
343-- as well as via ClassType->ClassOrInterfaceType
Stephan Herrmann54e922a2013-04-04 18:33:48 +0200344ClassOrInterfaceType -> BaseAnchoredType
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000345/:$readableName BaseAnchoredType:/
346
347-- 2.) via ReferenceType we may add dimensions:
Stephan Herrmann54e922a2013-04-04 18:33:48 +0200348ReferenceType -> BaseAnchoredType Dims
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000349/:$readableName ArrayOfBaseAnchoredType:/
350-- SH}
351
352--
353-- These rules have been rewritten to avoid some conflicts introduced
354-- by adding the 1.1 features
355--
356-- ArrayType ::= PrimitiveType '[' ']'
357-- ArrayType ::= Name '[' ']'
358-- ArrayType ::= ArrayType '[' ']'
359--
360
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200361ArrayTypeWithTypeArgumentsName ::= GenericType '.' Name
362/.$putCase consumeArrayTypeWithTypeArgumentsName(); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000363/:$readableName ArrayTypeWithTypeArgumentsName:/
364
365ArrayType ::= PrimitiveType Dims
Stephan Herrmann44109d32011-08-02 14:34:26 +0000366/.$putCase consumePrimitiveArrayType(); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000367ArrayType ::= Name Dims
Stephan Herrmann44109d32011-08-02 14:34:26 +0000368/.$putCase consumeNameArrayType(); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000369ArrayType ::= ArrayTypeWithTypeArgumentsName Dims
Stephan Herrmann44109d32011-08-02 14:34:26 +0000370/.$putCase consumeGenericTypeNameArrayType(); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000371ArrayType ::= GenericType Dims
Stephan Herrmann44109d32011-08-02 14:34:26 +0000372/.$putCase consumeGenericTypeArrayType(); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000373/:$readableName ArrayType:/
374
375ClassType -> ClassOrInterfaceType
376/:$readableName ClassType:/
377
378--------------------------------------------------------------
379--------------------------------------------------------------
380
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200381Name ::= SimpleName
382/.$putCase consumeZeroTypeAnnotations(); $break ./
383Name -> TypeAnnotations SimpleName
384/:$compliance 1.8:/
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000385Name -> QualifiedName
386/:$readableName Name:/
387/:$recovery_template Identifier:/
388
389SimpleName -> 'Identifier'
390/:$readableName SimpleName:/
391
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200392UnannotatableName -> SimpleName
393UnannotatableName ::= UnannotatableName '.' SimpleName
394/.$putCase consumeUnannotatableQualifiedName(); $break ./
395/:$readableName UnannotatableQualifiedName:/
396
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000397QualifiedName ::= Name '.' SimpleName
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200398/.$putCase consumeQualifiedName(false); $break ./
399QualifiedName ::= Name '.' TypeAnnotations SimpleName
400/.$putCase consumeQualifiedName(true); $break ./
401/:$compliance 1.8:/
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000402/:$readableName QualifiedName:/
403
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200404TypeAnnotationsopt ::= $empty
405/.$putCase consumeZeroTypeAnnotations(); $break ./
406TypeAnnotationsopt -> TypeAnnotations
407/:$compliance 1.8:/
408/:$readableName TypeAnnotationsopt:/
409
Stephan Herrmann307ebe32013-05-02 02:46:05 +0200410-- Production name hardcoded in parser. Must be ::= and not ->
411TypeAnnotations ::= TypeAnnotations0
412/:$readableName TypeAnnotations:/
413
414TypeAnnotations0 -> TypeAnnotation
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200415/:$compliance 1.8:/
Stephan Herrmann307ebe32013-05-02 02:46:05 +0200416TypeAnnotations0 ::= TypeAnnotations0 TypeAnnotation
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200417/. $putCase consumeOneMoreTypeAnnotation(); $break ./
418/:$compliance 1.8:/
419/:$readableName TypeAnnotations:/
420
421TypeAnnotation ::= NormalTypeAnnotation
422/. $putCase consumeTypeAnnotation(); $break ./
423/:$compliance 1.8:/
424TypeAnnotation ::= MarkerTypeAnnotation
425/. $putCase consumeTypeAnnotation(); $break ./
426/:$compliance 1.8:/
427TypeAnnotation ::= SingleMemberTypeAnnotation
428/. $putCase consumeTypeAnnotation(); $break ./
429/:$compliance 1.8:/
430/:$readableName TypeAnnotation:/
431
432TypeAnnotationName ::= @308 UnannotatableName
433/.$putCase consumeAnnotationName() ; $break ./
434/:$readableName AnnotationName:/
435/:$compliance 1.8:/
436/:$recovery_template @ Identifier:/
437NormalTypeAnnotation ::= TypeAnnotationName '(' MemberValuePairsopt ')'
438/.$putCase consumeNormalAnnotation(true) ; $break ./
439/:$readableName NormalAnnotation:/
440/:$compliance 1.8:/
441MarkerTypeAnnotation ::= TypeAnnotationName
442/.$putCase consumeMarkerAnnotation(true) ; $break ./
443/:$readableName MarkerAnnotation:/
444/:$compliance 1.8:/
445SingleMemberTypeAnnotation ::= TypeAnnotationName '(' SingleMemberAnnotationMemberValue ')'
446/.$putCase consumeSingleMemberAnnotation(true) ; $break ./
447/:$readableName SingleMemberAnnotation:/
448/:$compliance 1.8:/
449
450RejectTypeAnnotations ::= $empty
451/.$putCase consumeNonTypeUseName(); $break ./
452/:$readableName RejectTypeAnnotations:/
453
454PushZeroTypeAnnotations ::= $empty
455/.$putCase consumeZeroTypeAnnotations(); $break ./
456/:$readableName ZeroTypeAnnotations:/
457
458VariableDeclaratorIdOrThis ::= 'this'
459/.$putCase consumeExplicitThisParameter(false); $break ./
460/:$compliance 1.8:/
461VariableDeclaratorIdOrThis ::= UnannotatableName '.' 'this'
462/.$putCase consumeExplicitThisParameter(true); $break ./
463/:$compliance 1.8:/
464VariableDeclaratorIdOrThis ::= VariableDeclaratorId
465/.$putCase consumeVariableDeclaratorIdParameter(); $break ./
466/:$readableName VariableDeclaratorId:/
467
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000468CompilationUnit ::= EnterCompilationUnit InternalCompilationUnit
469/.$putCase consumeCompilationUnit(); $break ./
470/:$readableName CompilationUnit:/
471
472InternalCompilationUnit ::= PackageDeclaration
473/.$putCase consumeInternalCompilationUnit(); $break ./
474InternalCompilationUnit ::= PackageDeclaration ImportDeclarations ReduceImports
475/.$putCase consumeInternalCompilationUnit(); $break ./
476InternalCompilationUnit ::= PackageDeclaration ImportDeclarations ReduceImports TypeDeclarations
477/.$putCase consumeInternalCompilationUnitWithTypes(); $break ./
478InternalCompilationUnit ::= PackageDeclaration TypeDeclarations
479/.$putCase consumeInternalCompilationUnitWithTypes(); $break ./
480InternalCompilationUnit ::= ImportDeclarations ReduceImports
481/.$putCase consumeInternalCompilationUnit(); $break ./
482InternalCompilationUnit ::= TypeDeclarations
483/.$putCase consumeInternalCompilationUnitWithTypes(); $break ./
484InternalCompilationUnit ::= ImportDeclarations ReduceImports TypeDeclarations
485/.$putCase consumeInternalCompilationUnitWithTypes(); $break ./
486InternalCompilationUnit ::= $empty
487/.$putCase consumeEmptyInternalCompilationUnit(); $break ./
488/:$readableName CompilationUnit:/
489
490ReduceImports ::= $empty
491/.$putCase consumeReduceImports(); $break ./
492/:$readableName ReduceImports:/
493
494EnterCompilationUnit ::= $empty
495/.$putCase consumeEnterCompilationUnit(); $break ./
496/:$readableName EnterCompilationUnit:/
497
498Header -> ImportDeclaration
499Header -> PackageDeclaration
500Header -> ClassHeader
501Header -> InterfaceHeader
502Header -> EnumHeader
503Header -> AnnotationTypeDeclarationHeader
504Header -> StaticInitializer
505Header -> RecoveryMethodHeader
506Header -> FieldDeclaration
507Header -> AllocationHeader
508Header -> ArrayCreationHeader
509--{ObjectTeams:
510Header -> RecoveryBindingHeader
511Header -> PrecedenceDeclaration
512-- SH}
513/:$readableName Header:/
514
515Header1 -> Header
516Header1 -> ConstructorHeader
517/:$readableName Header1:/
518
519Header2 -> Header
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200520Header2 -> EnumConstantHeader
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000521/:$readableName Header2:/
522
Stephan Herrmann29b019c2011-04-26 10:30:44 +0000523CatchHeader ::= 'catch' '(' CatchFormalParameter ')' '{'
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000524/.$putCase consumeCatchHeader(); $break ./
525/:$readableName CatchHeader:/
526
527ImportDeclarations -> ImportDeclaration
528ImportDeclarations ::= ImportDeclarations ImportDeclaration
529/.$putCase consumeImportDeclarations(); $break ./
530/:$readableName ImportDeclarations:/
531
532TypeDeclarations -> TypeDeclaration
533TypeDeclarations ::= TypeDeclarations TypeDeclaration
534/.$putCase consumeTypeDeclarations(); $break ./
535/:$readableName TypeDeclarations:/
536
537PackageDeclaration ::= PackageDeclarationName ';'
Stephan Herrmann44109d32011-08-02 14:34:26 +0000538/.$putCase consumePackageDeclaration(); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000539/:$readableName PackageDeclaration:/
540
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200541PackageDeclarationName ::= Modifiers 'package' PushRealModifiers Name RejectTypeAnnotations
Stephan Herrmann44109d32011-08-02 14:34:26 +0000542/.$putCase consumePackageDeclarationNameWithModifiers(); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000543/:$readableName PackageDeclarationName:/
544/:$compliance 1.5:/
545
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200546PackageDeclarationName ::= PackageComment 'package' Name RejectTypeAnnotations
547/.$putCase consumePackageDeclarationName(); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000548/:$readableName PackageDeclarationName:/
549
550PackageComment ::= $empty
Stephan Herrmann44109d32011-08-02 14:34:26 +0000551/.$putCase consumePackageComment(); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000552/:$readableName PackageComment:/
553
554ImportDeclaration -> SingleTypeImportDeclaration
555ImportDeclaration -> TypeImportOnDemandDeclaration
556-----------------------------------------------
557-- 1.5 feature
558-----------------------------------------------
559ImportDeclaration -> SingleStaticImportDeclaration
560--{ObjectTeams: base import:
561ImportDeclaration -> SingleBaseImportDeclaration
562-- SH}
563ImportDeclaration -> StaticImportOnDemandDeclaration
564/:$readableName ImportDeclaration:/
565
566SingleTypeImportDeclaration ::= SingleTypeImportDeclarationName ';'
567/.$putCase consumeImportDeclaration(); $break ./
568/:$readableName SingleTypeImportDeclaration:/
569
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200570-- {ObjectTeams: special case: allow 'team' in imported package/type name:
571-- orig: SingleTypeImportDeclarationName ::= 'import' Name RejectTypeAnnotations
Stephan Herrmann54e922a2013-04-04 18:33:48 +0200572SingleTypeImportDeclarationName ::= 'import' ImportName RejectTypeAnnotations
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000573/.$putCase consumeSingleTypeImportDeclarationName(); $break ./
574/:$readableName SingleTypeImportDeclarationName:/
575
Stephan Herrmann54e922a2013-04-04 18:33:48 +0200576ImportName -> Name
577-- FIXME: reject type annotations also for the first name:
578ImportName ::= Name '.' 'team' '.' Name
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000579/.$putCase consumeNameContainingTeam(); $break ./
580/:$readableName Name:/
581-- SH}
582
583TypeImportOnDemandDeclaration ::= TypeImportOnDemandDeclarationName ';'
584/.$putCase consumeImportDeclaration(); $break ./
585/:$readableName TypeImportOnDemandDeclaration:/
586
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200587TypeImportOnDemandDeclarationName ::= 'import' Name '.' RejectTypeAnnotations '*'
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000588/.$putCase consumeTypeImportOnDemandDeclarationName(); $break ./
589/:$readableName TypeImportOnDemandDeclarationName:/
590
591TypeDeclaration -> ClassDeclaration
592TypeDeclaration -> InterfaceDeclaration
593-- this declaration in part of a list od declaration and we will
594-- use and optimized list length calculation process
595-- thus we decrement the number while it will be incremend.....
596TypeDeclaration ::= ';'
597/. $putCase consumeEmptyTypeDeclaration(); $break ./
598-----------------------------------------------
599-- 1.5 feature
600-----------------------------------------------
601TypeDeclaration -> EnumDeclaration
602TypeDeclaration -> AnnotationTypeDeclaration
603/:$readableName TypeDeclaration:/
604
605--18.7 Only in the LALR(1) Grammar
606
607Modifiers -> Modifier
608Modifiers ::= Modifiers Modifier
609/.$putCase consumeModifiers2(); $break ./
610/:$readableName Modifiers:/
611
612Modifier -> 'public'
613Modifier -> 'protected'
614Modifier -> 'private'
615Modifier -> 'static'
616Modifier -> 'abstract'
617Modifier -> 'final'
618Modifier -> 'native'
619Modifier -> 'synchronized'
620Modifier -> 'transient'
621Modifier -> 'volatile'
622Modifier -> 'strictfp'
623Modifier ::= Annotation
624/.$putCase consumeAnnotationAsModifier(); $break ./
625-- {ObjectTeams
626Modifier -> 'team'
627Modifier -> 'callin'
628Modifier -> 'readonly'
629-- Markus Witte}
630/:$readableName Modifier:/
631
632--18.8 Productions from 8: Class Declarations
633--ClassModifier ::=
634-- 'abstract'
635-- | 'final'
636-- | 'public'
637--18.8.1 Productions from 8.1: Class Declarations
638
639ClassDeclaration ::= ClassHeader ClassBody
640/.$putCase consumeClassDeclaration(); $break ./
641/:$readableName ClassDeclaration:/
642
643--{ObjectTeams: playedBy & guard predicate support:
644-- orig: ClassHeader ::= ClassHeaderName ClassHeaderExtendsopt ClassHeaderImplementsopt
645ClassHeader ::= ClassHeaderName ClassHeaderExtendsopt ClassHeaderImplementsopt ClassHeaderPlayedByopt Predicateopt
646-- MW+SH}
647/.$putCase consumeClassHeader(); $break ./
648/:$readableName ClassHeader:/
649
650-----------------------------------------------
651-- 1.5 features : generics
652-----------------------------------------------
653ClassHeaderName ::= ClassHeaderName1 TypeParameters
654/.$putCase consumeTypeHeaderNameWithTypeParameters(); $break ./
655
656ClassHeaderName -> ClassHeaderName1
657/:$readableName ClassHeaderName:/
658
659ClassHeaderName1 ::= Modifiersopt 'class' 'Identifier'
660/.$putCase consumeClassHeaderName1(); $break ./
661/:$readableName ClassHeaderName:/
662
663ClassHeaderExtends ::= 'extends' ClassType
664/.$putCase consumeClassHeaderExtends(); $break ./
665/:$readableName ClassHeaderExtends:/
666
667ClassHeaderImplements ::= 'implements' InterfaceTypeList
668/.$putCase consumeClassHeaderImplements(); $break ./
669/:$readableName ClassHeaderImplements:/
670
671-- {ObjectTeams: ==== playedBy ====
672ClassHeaderPlayedByopt ::= $empty
673ClassHeaderPlayedByopt -> ClassHeaderPlayedBy
674/:$readableName ClassHeaderPlayedBy:/
675
676ClassHeaderPlayedBy ::= 'playedBy' ClassType
677/.$putCase consumeClassHeaderPlayedBy(); $break ./
678/:$readableName ClassHeaderPlayedBy:/
679
680-- Markus Witte}
681
682--{ObjectTeams: ==== predicates ====
683Predicateopt ::= $empty
684Predicateopt -> Predicate
685
686Predicate -> RolePredicate
687Predicate -> BasePredicate
688
689RolePredicate ::= PredicateHeader PredicateBody
690/:$readableName Predicate:/
691
692PredicateHeader ::= 'when'
693/.$putCase consumePredicate(false); $break ./
694/:$readableName PredicateHeader:/
695
696BasePredicate ::= BasePredicateHeader ForceBaseIsIdentifier PredicateBody RestoreBaseKeyword
697/:$readableName Predicate:/
698
699BasePredicateHeader ::= 'base' 'when'
700/.$putCase consumePredicate(true); $break ./
701/:$readableName PredicateHeader:/
702
703PredicateBody ::= '(' ForceNoDiet Expression RestoreDiet ')'
704/.$putCase consumePredicateExpression(); $break ./
705/:$readableName PredicateBody:/
706
707PredicateBody ::= '(' ')'
708/.$putCase consumePredicateMissingExpression(); $break ./
709
710
711ForceBaseIsIdentifier ::= $empty
712/.$putCase consumeForceBaseIsIdentifier(); $break ./
713/:$readableName ForceBaseIsIdentifier:/
714
715RestoreBaseKeyword ::= $empty
716/.$putCase consumeRestoreBaseKeyword(); $break ./
717/:$readableName RestoreBaseKeyword:/
718-- SH}
719
720InterfaceTypeList -> InterfaceType
721InterfaceTypeList ::= InterfaceTypeList ',' InterfaceType
722/.$putCase consumeInterfaceTypeList(); $break ./
723/:$readableName InterfaceTypeList:/
724
725InterfaceType ::= ClassOrInterfaceType
726/.$putCase consumeInterfaceType(); $break ./
727/:$readableName InterfaceType:/
728
729ClassBody ::= '{' ClassBodyDeclarationsopt '}'
730/:$readableName ClassBody:/
731/:$no_statements_recovery:/
732
733ClassBodyDeclarations ::= ClassBodyDeclaration
734ClassBodyDeclarations ::= ClassBodyDeclarations ClassBodyDeclaration
735/.$putCase consumeClassBodyDeclarations(); $break ./
736/:$readableName ClassBodyDeclarations:/
737
738ClassBodyDeclaration -> ClassMemberDeclaration
739ClassBodyDeclaration -> StaticInitializer
740ClassBodyDeclaration -> ConstructorDeclaration
741--1.1 feature
742ClassBodyDeclaration ::= Diet NestedMethod CreateInitializer Block
743/.$putCase consumeClassBodyDeclaration(); $break ./
744/:$readableName ClassBodyDeclaration:/
745
746Diet ::= $empty
747/.$putCase consumeDiet(); $break./
748/:$readableName Diet:/
749
750Initializer ::= Diet NestedMethod CreateInitializer Block
751/.$putCase consumeClassBodyDeclaration(); $break ./
752/:$readableName Initializer:/
753
754CreateInitializer ::= $empty
755/.$putCase consumeCreateInitializer(); $break./
756/:$readableName CreateInitializer:/
757
758ClassMemberDeclaration -> FieldDeclaration
759ClassMemberDeclaration -> MethodDeclaration
760
761-- {ObjectTeams
762ClassMemberDeclaration -> BindingDeclaration
763ClassMemberDeclaration -> PrecedenceDeclaration
764-- Markus Witte}
765
766--1.1 feature
767ClassMemberDeclaration -> ClassDeclaration
768--1.1 feature
769ClassMemberDeclaration -> InterfaceDeclaration
770-- 1.5 feature
771ClassMemberDeclaration -> EnumDeclaration
772ClassMemberDeclaration -> AnnotationTypeDeclaration
773/:$readableName ClassMemberDeclaration:/
774
775-- Empty declarations are not valid Java ClassMemberDeclarations.
776-- However, since the current (2/14/97) Java compiler accepts them
777-- (in fact, some of the official tests contain this erroneous
778-- syntax)
779ClassMemberDeclaration ::= ';'
780/.$putCase consumeEmptyTypeDeclaration(); $break./
781
782GenericMethodDeclaration -> MethodDeclaration
783GenericMethodDeclaration -> ConstructorDeclaration
784/:$readableName GenericMethodDeclaration:/
785
786--18.8.2 Productions from 8.3: Field Declarations
787--VariableModifier ::=
788-- 'public'
789-- | 'protected'
790-- | 'private'
791-- | 'static'
792-- | 'final'
793-- | 'transient'
794-- | 'volatile'
795
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200796FieldDeclaration ::= Modifiersopt Type VariableDeclarators ';'
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000797/.$putCase consumeFieldDeclaration(); $break ./
798/:$readableName FieldDeclaration:/
799
800VariableDeclarators -> VariableDeclarator
801VariableDeclarators ::= VariableDeclarators ',' VariableDeclarator
802/.$putCase consumeVariableDeclarators(); $break ./
803/:$readableName VariableDeclarators:/
Stephan Herrmannc4817302012-07-13 01:31:42 +0200804/:$recovery_template Identifier:/
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000805
806VariableDeclarator ::= VariableDeclaratorId EnterVariable ExitVariableWithoutInitialization
807VariableDeclarator ::= VariableDeclaratorId EnterVariable '=' ForceNoDiet VariableInitializer RestoreDiet ExitVariableWithInitialization
808/:$readableName VariableDeclarator:/
809/:$recovery_template Identifier:/
810
811EnterVariable ::= $empty
812/.$putCase consumeEnterVariable(); $break ./
813/:$readableName EnterVariable:/
814
815ExitVariableWithInitialization ::= $empty
816/.$putCase consumeExitVariableWithInitialization(); $break ./
817/:$readableName ExitVariableWithInitialization:/
818
819ExitVariableWithoutInitialization ::= $empty
820/.$putCase consumeExitVariableWithoutInitialization(); $break ./
821/:$readableName ExitVariableWithoutInitialization:/
822
823ForceNoDiet ::= $empty
824/.$putCase consumeForceNoDiet(); $break ./
825/:$readableName ForceNoDiet:/
826RestoreDiet ::= $empty
827/.$putCase consumeRestoreDiet(); $break ./
828/:$readableName RestoreDiet:/
829
830VariableDeclaratorId ::= 'Identifier' Dimsopt
831/:$readableName VariableDeclaratorId:/
832/:$recovery_template Identifier:/
833
834VariableInitializer -> Expression
835VariableInitializer -> ArrayInitializer
836/:$readableName VariableInitializer:/
837/:$recovery_template Identifier:/
838
839--18.8.3 Productions from 8.4: Method Declarations
840--MethodModifier ::=
841-- 'public'
842-- | 'protected'
843-- | 'private'
844-- | 'static'
845-- | 'abstract'
846-- | 'final'
847-- | 'native'
848-- | 'synchronized'
849--
850
851MethodDeclaration -> AbstractMethodDeclaration
852MethodDeclaration ::= MethodHeader MethodBody
853/.$putCase // set to true to consume a method with a body
Stephan Herrmann5d5b2c32014-01-02 00:10:41 +0100854 consumeMethodDeclaration(true, false); $break ./
855/:$readableName MethodDeclaration:/
856
857MethodDeclaration ::= DefaultMethodHeader MethodBody
858/.$putCase // set to true to consume a method with a body
859 consumeMethodDeclaration(true, true); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000860/:$readableName MethodDeclaration:/
861
862AbstractMethodDeclaration ::= MethodHeader ';'
863/.$putCase // set to false to consume a method without body
Stephan Herrmann5d5b2c32014-01-02 00:10:41 +0100864 consumeMethodDeclaration(false, false); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000865/:$readableName MethodDeclaration:/
866
867MethodHeader ::= MethodHeaderName FormalParameterListopt MethodHeaderRightParen MethodHeaderExtendedDims MethodHeaderThrowsClauseopt
868/.$putCase consumeMethodHeader(); $break ./
869/:$readableName MethodDeclaration:/
870
Stephan Herrmann307ebe32013-05-02 02:46:05 +0200871DefaultMethodHeader ::= DefaultMethodHeaderName FormalParameterListopt MethodHeaderRightParen MethodHeaderExtendedDims MethodHeaderThrowsClauseopt
872/.$putCase consumeMethodHeader(); $break ./
873/:$readableName MethodDeclaration:/
874
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000875MethodHeaderName ::= Modifiersopt TypeParameters Type 'Identifier' '('
876/.$putCase consumeMethodHeaderNameWithTypeParameters(false); $break ./
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200877MethodHeaderName ::= Modifiersopt Type 'Identifier' '('
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000878/.$putCase consumeMethodHeaderName(false); $break ./
879/:$readableName MethodHeaderName:/
880
Stephan Herrmann307ebe32013-05-02 02:46:05 +0200881DefaultMethodHeaderName ::= ModifiersWithDefault TypeParameters Type 'Identifier' '('
882/.$putCase consumeMethodHeaderNameWithTypeParameters(false); $break ./
883DefaultMethodHeaderName ::= ModifiersWithDefault Type 'Identifier' '('
884/.$putCase consumeMethodHeaderName(false); $break ./
885/:$readableName MethodHeaderName:/
886
887ModifiersWithDefault ::= Modifiersopt 'default' Modifiersopt
888/.$putCase consumePushCombineModifiers(); $break ./
889/:$readableName Modifiers:/
890/:$compliance 1.8:/
891
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000892MethodHeaderRightParen ::= ')'
893/.$putCase consumeMethodHeaderRightParen(); $break ./
894/:$readableName ):/
895/:$recovery_template ):/
896
897MethodHeaderExtendedDims ::= Dimsopt
898/.$putCase consumeMethodHeaderExtendedDims(); $break ./
899/:$readableName MethodHeaderExtendedDims:/
900
901MethodHeaderThrowsClause ::= 'throws' ClassTypeList
902/.$putCase consumeMethodHeaderThrowsClause(); $break ./
903/:$readableName MethodHeaderThrowsClause:/
904
905ConstructorHeader ::= ConstructorHeaderName FormalParameterListopt MethodHeaderRightParen MethodHeaderThrowsClauseopt
906/.$putCase consumeConstructorHeader(); $break ./
907/:$readableName ConstructorDeclaration:/
908
Stephan Herrmann44109d32011-08-02 14:34:26 +0000909ConstructorHeaderName ::= Modifiersopt TypeParameters 'Identifier' '('
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000910/.$putCase consumeConstructorHeaderNameWithTypeParameters(); $break ./
Stephan Herrmann44109d32011-08-02 14:34:26 +0000911ConstructorHeaderName ::= Modifiersopt 'Identifier' '('
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000912/.$putCase consumeConstructorHeaderName(); $break ./
913/:$readableName ConstructorHeaderName:/
914
915FormalParameterList -> FormalParameter
916FormalParameterList ::= FormalParameterList ',' FormalParameter
917/.$putCase consumeFormalParameterList(); $break ./
918/:$readableName FormalParameterList:/
919
920--1.1 feature
Stephan Herrmann01b4e312013-04-04 20:53:28 +0200921--{ObjectTeams: inserted LiftingTypeopt:
922FormalParameter ::= Modifiersopt Type LiftingTypeopt VariableDeclaratorIdOrThis
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000923/.$putCase consumeFormalParameter(false); $break ./
Stephan Herrmann01b4e312013-04-04 20:53:28 +0200924FormalParameter ::= Modifiersopt Type LiftingTypeopt PushZeroTypeAnnotations '...' VariableDeclaratorIdOrThis
Stephan Herrmannc4817302012-07-13 01:31:42 +0200925/.$putCase consumeFormalParameter(true); $break ./
926/:$compliance 1.5:/
Stephan Herrmann01b4e312013-04-04 20:53:28 +0200927FormalParameter ::= Modifiersopt Type LiftingTypeopt @308... TypeAnnotations '...' VariableDeclaratorIdOrThis
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000928/.$putCase consumeFormalParameter(true); $break ./
929/:$readableName FormalParameter:/
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200930/:$compliance 1.8:/
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000931/:$recovery_template Identifier Identifier:/
Stephan Herrmann5fa7f312012-07-13 01:52:51 +0200932-- SH}
Stephan Herrmann197438c2012-07-15 22:54:37 +0200933CatchFormalParameter ::= Modifiersopt CatchType CatchLiftingTypeopt VariableDeclaratorId
Stephan Herrmann44109d32011-08-02 14:34:26 +0000934/.$putCase consumeCatchFormalParameter(); $break ./
935/:$readableName FormalParameter:/
936/:$recovery_template Identifier Identifier:/
937
938CatchType ::= UnionType
939/.$putCase consumeCatchType(); $break ./
940/:$readableName CatchType:/
941
Stephan Herrmannee9076e2013-04-04 16:21:27 +0200942UnionType ::= Type
Stephan Herrmann44109d32011-08-02 14:34:26 +0000943/.$putCase consumeUnionTypeAsClassType(); $break ./
944UnionType ::= UnionType '|' Type
945/.$putCase consumeUnionType(); $break ./
946/:$readableName UnionType:/
947/:$compliance 1.7:/
948
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000949ClassTypeList -> ClassTypeElt
950ClassTypeList ::= ClassTypeList ',' ClassTypeElt
951/.$putCase consumeClassTypeList(); $break ./
952/:$readableName ClassTypeList:/
953
954ClassTypeElt ::= ClassType
955/.$putCase consumeClassTypeElt(); $break ./
956/:$readableName ClassType:/
957
958-- {ObjectTeams: added Predicateopt
959MethodBody ::= Predicateopt NestedMethod '{' BlockStatementsopt '}'
960/.$putCase consumeMethodBody(); $break ./
961/:$readableName MethodBody:/
962/:$no_statements_recovery:/
963-- SH}
964
965NestedMethod ::= $empty
966/.$putCase consumeNestedMethod(); $break ./
967/:$readableName NestedMethod:/
968
969-- {ObjectTeams ========== METHOD BINDINGS ==========
970BindingDeclaration -> CalloutBinding
971BindingDeclaration -> CallinBinding
972BindingDeclaration -> InvalidCallinBinding
973/:$readableName BindingDeclaration:/
974
975-- ==== CALLOUT: ====
976
977-- LONG:
978CalloutBinding ::= CalloutHeaderLong CalloutParameterMappingsopt
979/.$putCase consumeCalloutBindingLong(); $break ./
980/:$readableName CalloutBinding:/
981
982CalloutHeaderLong ::= CalloutBindingLeftLong MethodSpecLong
983/.$putCase consumeCalloutHeader(); $break ./
984/:$readableName CalloutHeader:/
985
986CalloutHeaderLong ::= CalloutBindingLeftLong CalloutFieldSpecLong
987/.$putCase consumeCalloutHeader(); $break ./
988/:$readableName CalloutHeader:/
989
990CalloutBindingLeftLong ::= MethodSpecLong CalloutKind
991/.$putCase consumeCalloutBindingLeft(true); $break ./
992/:$readableName CalloutBindingLeft:/
993
994
995-- SHORT:
996-- Note(SH): Modifiersopt is needed to make grammar LALR(1), in real life modifiers must be empty
997-- Note(SH): This rule includes callout to field short (there cannot be a distinct FieldSpecShort)
998CalloutBinding ::= Modifiersopt CalloutBindingLeftShort CalloutModifieropt MethodSpecShort ';'
999/.$putCase consumeCalloutHeader(); $break ./
1000/:$readableName CalloutHeader:/
1001
1002CalloutBindingLeftShort ::= MethodSpecShort CalloutKind
1003/.$putCase consumeCalloutBindingLeft(false); $break ./
1004/:$readableName CalloutBindingLeft:/
1005
1006-- this one added to give better message for parameter mappings despite of missing signatures:
1007-- Note(SH): Modifiersopt is needed to make grammar LALR(1), in real life modifiers must be empty
1008CalloutBinding ::= Modifiersopt CalloutBindingLeftShort CalloutModifieropt MethodSpecShort CalloutParameterMappings
1009/.$putCase consumeCalloutParameterMappingsInvalid(); $break ./
1010
1011-- SYMBOLS:
1012CalloutKind -> '->'
1013CalloutKind -> '=>'
1014/:$readableName CalloutKind:/
1015
1016CalloutModifieropt ::= $empty
1017CalloutModifieropt -> CalloutModifier
1018/:$readableName CalloutModifier:/
1019-- get set
1020CalloutModifier ::= 'get'
1021/.$putCase consumeCalloutModifier(TokenNameget); $break ./
1022/:$readableName CalloutModifier:/
1023CalloutModifier ::= 'set'
1024/.$putCase consumeCalloutModifier(TokenNameset); $break ./
1025/:$readableName CalloutModifier:/
1026
1027
1028---- CALLOUT-BINDING-PARAMETERMAPPING
1029CalloutParameterMappingsopt -> CalloutParameterMappings
1030CalloutParameterMappingsopt ::= ';'
1031/.$putCase consumeParameterMappingsEmpty(); $break ./
1032/:$readableName EmptyParameterMappings:/
1033
1034
1035CalloutParameterMappings ::= 'with' NestedParamMappings '{' CalloutParameterMappingList ,opt '}'
Stephan Herrmann926e1182012-07-20 20:26:32 +02001036/.$putCase consumeParameterMappings(); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001037/:$readableName CalloutParameterMappings:/
1038
1039-- note that this rule is needed for diagnose parsing where bodies of parameter mappings are ignored
1040CalloutParameterMappingList ::= $empty
1041/:$readableName EmptyParameterMappings:/
1042
1043CalloutParameterMappingList -> ParameterMapping
1044CalloutParameterMappingList ::= CalloutParameterMappingList ',' ParameterMapping
1045/.$putCase consumeParameterMappingList(); $break ./
1046/:$readableName CalloutParameterMappingList:/
1047
Stephan Herrmann926e1182012-07-20 20:26:32 +02001048
1049ParameterMapping ::= Expression SYNTHBINDOUT 'Identifier'
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001050/.$putCase consumeParameterMappingOut(); $break ./
1051
1052ParameterMapping ::= 'Identifier' '<-' ForceBaseIsIdentifier Expression RestoreBaseKeyword
1053/.$putCase consumeParameterMappingIn(); $break ./
1054/:$readableName ParameterMapping:/
1055
1056
1057NestedParamMappings ::= $empty
1058/.$putCase consumeNestedParamMappings(); $break ./
1059/:$readableName NestedParameterMappings:/
1060
1061-- ==== CALLIN-BINDING: ====
1062
1063-- LONG:
1064CallinBinding ::= CallinHeaderLong CallinParameterMappingsopt
1065/.$putCase consumeCallinBindingLong(); $break ./
1066/:$readableName CallinBinding:/
1067
1068CallinHeaderLong ::= CallinBindingLeftLong CallinModifier MethodSpecsLong Predicateopt
1069/.$putCase consumeCallinHeader(); $break ./
1070/:$readableName CallinHeader:/
1071
1072-- Note(SH): Modifiersopt is needed to make grammar LALR(1), in real life modifiers must be empty
1073CallinHeaderLong ::= Modifiersopt CallinLabel CallinBindingLeftLong CallinModifier MethodSpecsLong Predicateopt
1074/.$putCase consumeCallinHeader(); $break ./
1075
1076CallinBindingLeftLong ::= MethodSpecLong '<-'
1077/.$putCase consumeCallinBindingLeft(true); $break ./
1078/:$readableName CallinBindingLeft:/
1079
1080-- SHORT:
1081-- Note(SH): Modifiersopt is needed to make grammar LALR(1), in real life modifiers must be empty
1082CallinBinding ::= Modifiersopt CallinBindingLeftShort CallinModifier BaseMethodSpecsShort Predicateopt ';'
1083/.$putCase consumeCallinHeader(); $break ./
1084
1085-- Note(SH): Modifiersopt is needed to make grammar LALR(1), in real life modifiers must be empty (2 OCCURENCES!)
1086CallinBinding ::= Modifiersopt CallinLabel Modifiersopt CallinBindingLeftShort CallinModifier BaseMethodSpecsShort Predicateopt ';'
1087/.$putCase consumeCallinHeader(); $break ./
1088
1089CallinBindingLeftShort ::= MethodSpecShort '<-'
1090/.$putCase consumeCallinBindingLeft(false); $break ./
1091/:$readableName CallinBindingLeft:/
1092
1093-- LABEL:
1094CallinLabel ::= SimpleName ':'
1095/.$putCase consumeCallinLabel(); $break ./
1096/:$readableName CallinLabel:/
1097
1098-- MODIFIER:
1099CallinModifier ::= 'replace'
1100/.$putCase consumeCallinModifier(TokenNamereplace); $break ./
1101/:$readableName CallinModifier:/
1102
1103CallinModifier ::= 'before'
1104/.$putCase consumeCallinModifier(TokenNamebefore); $break ./
1105/:$readableName CallinModifier:/
1106
1107CallinModifier ::= 'after'
1108/.$putCase consumeCallinModifier(TokenNameafter); $break ./
1109/:$readableName CallinModifier:/
1110
1111
1112-- These rules are added to parse invalid callin-bindings without replace/before/after modifier
1113InvalidCallinModifier ::= $empty
1114/.$putCase consumeCallinModifierMissing(); $break ./
1115/:$readableName InvalidCallinModifier:/
1116
1117-- Note(SH): Modifiersopt is needed to make grammar LALR(1), in real life modifiers must be empty
1118InvalidCallinBinding ::= Modifiersopt CallinBindingLeftShort InvalidCallinModifier BaseMethodSpecsShort
1119/.$putCase consumeCallinBindingInvalid(false,false); $break ./
1120/:$readableName InvalidCallinBinding:/
1121
1122InvalidCallinBinding ::= Modifiersopt CallinLabel Modifiersopt CallinBindingLeftShort InvalidCallinModifier BaseMethodSpecsShort
1123/.$putCase consumeCallinBindingInvalid(false,false); $break ./
1124/:$readableName InvalidCallinBinding:/
1125
1126InvalidCallinBinding ::= Modifiersopt CallinBindingLeftShort CallinModifier BaseMethodSpecsShort CallinParameterMappings
1127/.$putCase consumeCallinBindingInvalid(false,true); $break ./
1128/:$readableName InvalidCallinBinding:/
1129
1130InvalidCallinBinding ::= Modifiersopt CallinLabel Modifiersopt CallinBindingLeftShort CallinModifier BaseMethodSpecsShort CallinParameterMappings
1131/.$putCase consumeCallinBindingInvalid(false,true); $break ./
1132/:$readableName InvalidCallinBinding:/
1133
1134InvalidCallinBinding ::= CallinBindingLeftLong InvalidCallinModifier MethodSpecsLong CallinParameterMappingsopt
1135/.$putCase consumeCallinBindingInvalid(true,false); $break ./
1136/:$readableName InvalidCallinBinding:/
1137
1138InvalidCallinBinding ::= Modifiersopt CallinLabel CallinBindingLeftLong InvalidCallinModifier MethodSpecsLong CallinParameterMappingsopt
1139/.$putCase consumeCallinBindingInvalid(true,false); $break ./
1140/:$readableName InvalidCallinBinding:/
1141
1142
1143---- CALLIN-BINDING-PARAMETERMAPPING
1144CallinParameterMappingsopt -> CallinParameterMappings
1145CallinParameterMappingsopt ::= ';'
1146/.$putCase consumeParameterMappingsEmpty(); $break ./
1147/:$readableName EmptyParameterMappings:/
1148
1149CallinParameterMappings ::= 'with' NestedParamMappings '{' CallinParameterMappingList ,opt '}'
Stephan Herrmann926e1182012-07-20 20:26:32 +02001150/.$putCase consumeParameterMappings(); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001151/:$readableName CallinParameterMappings:/
1152
1153-- note that this rule is needed for diagnose parsing where bodies of parameter mappings are ignored
1154CallinParameterMappingList ::= $empty
1155/:$readableName EmptyParameterMappings:/
1156
1157CallinParameterMappingList -> ParameterMapping
1158CallinParameterMappingList ::= CallinParameterMappingList ',' ParameterMapping
1159/.$putCase consumeParameterMappingList(); $break ./
1160/:$readableName ParameterMappingList:/
1161
1162-- ==== METHOD_SPEC: ====
1163
1164MethodSpecShort ::= SimpleName
1165/.$putCase consumeMethodSpecShort(); $break ./
1166/:$readableName MethodSpecShort:/
1167
1168MethodSpecLong ::= MethodHeaderName FormalParameterListopt MethodHeaderRightParen
1169/.$putCase consumeMethodSpecLong(false); $break ./
1170/:$readableName MethodSpecLong:/
1171
1172-- explicitly handle this error case:
1173MethodSpecLong ::= ConstructorHeaderName FormalParameterListopt MethodHeaderRightParen
1174/.$putCase consumeMethodSpecLongCtor(); $break ./
1175/:$readableName IllegalMethodSpecLong:/
1176
1177-- base of callin can use '+' after return type:
1178BaseMethodSpecLong ::= MethodHeaderName FormalParameterListopt MethodHeaderRightParen
1179/.$putCase consumeMethodSpecLong(false); $break ./
1180/:$readableName MethodSpecLong:/
1181
1182BaseMethodSpecLong ::= MethodSpecNamePlus FormalParameterListopt MethodHeaderRightParen
1183/.$putCase consumeMethodSpecLong(true); $break ./
1184/:$readableName MethodSpecLong:/
1185
Stephan Herrmann12a20742013-04-25 20:12:57 +02001186BaseMethodSpecLong ::= ConstructorHeaderName FormalParameterListopt MethodHeaderRightParen
1187/.$putCase consumeMethodSpecLong(false); $break ./
1188/:$readableName ConstructorSpecLong:/
1189
Stephan Herrmann54e922a2013-04-04 18:33:48 +02001190MethodSpecNamePlus ::= Modifiersopt Type '+' 'Identifier' '('
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001191/.$putCase consumeMethodHeaderName(false); $break ./
1192/:$readableName MethodSpecName:/
1193
1194CalloutFieldSpecLong ::= CalloutModifier Type 'Identifier'
1195/.$putCase consumeFieldSpecLong(); $break ./
1196/:$readableName CallloutFieldSpec:/
1197
1198BaseMethodSpecsShort -> BaseMethodSpecListShort
1199/:$readableName MethodSpecsShort:/
1200
1201BaseMethodSpecListShort -> BaseMethodSpecShort
1202BaseMethodSpecListShort ::= BaseMethodSpecListShort ',' BaseMethodSpecShort
1203/.$putCase consumeMethodSpecList(); $break ./
1204/:$readableName MethodSpecListShort:/
1205
1206BaseMethodSpecShort -> MethodSpecShort
1207
1208MethodSpecsLong -> MethodSpecListLong
1209/:$readableName MethodSpecsLong:/
1210
1211MethodSpecListLong -> BaseMethodSpecLong
1212MethodSpecListLong ::= MethodSpecListLong ',' BaseMethodSpecLong
1213/.$putCase consumeMethodSpecList(); $break ./
1214/:$readableName MethodSpecListLong:/
1215
1216-- ==== PRECEDENCE DECLARATION ====
1217PrecedenceDeclaration ::= 'precedence' BindingNames ';'
1218/.$putCase consumePrecedenceDeclaration(false); $break ./
1219/:$readableName PrecedenceDeclaration:/
1220
1221PrecedenceDeclaration ::= 'precedence' 'after' BindingNames ';'
1222/.$putCase consumePrecedenceDeclaration(true); $break ./
1223/:$readableName PrecedenceAfterDeclaration:/
1224
1225BindingNames -> BindingName
1226BindingNames ::= BindingNames ',' BindingName
1227/.$putCase consumeBindingNames(); $break ./
1228/:$readableName CallinBindingNames:/
1229
1230BindingName ::= Name
1231/.$putCase consumeBindingName(); $break ./
1232/:$readableName CallinBindingName:/
1233-- Markus Witte}
1234
1235--18.8.4 Productions from 8.5: Static Initializers
1236
Stephan Herrmannee9076e2013-04-04 16:21:27 +02001237StaticInitializer ::= StaticOnly Block
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001238/.$putCase consumeStaticInitializer(); $break./
1239/:$readableName StaticInitializer:/
1240
1241StaticOnly ::= 'static'
1242/.$putCase consumeStaticOnly(); $break ./
1243/:$readableName StaticOnly:/
1244
1245--18.8.5 Productions from 8.6: Constructor Declarations
1246--ConstructorModifier ::=
1247-- 'public'
1248-- | 'protected'
1249-- | 'private'
1250--
1251--
1252ConstructorDeclaration ::= ConstructorHeader MethodBody
1253/.$putCase consumeConstructorDeclaration() ; $break ./
1254-- These rules are added to be able to parse constructors with no body
1255ConstructorDeclaration ::= ConstructorHeader ';'
1256/.$putCase consumeInvalidConstructorDeclaration() ; $break ./
1257/:$readableName ConstructorDeclaration:/
1258
1259-- the rules ExplicitConstructorInvocationopt has been expanded
1260-- in the rule below in order to make the grammar lalr(1).
1261
1262ExplicitConstructorInvocation ::= 'this' '(' ArgumentListopt ')' ';'
1263/.$putCase consumeExplicitConstructorInvocation(0, THIS_CALL); $break ./
1264
1265ExplicitConstructorInvocation ::= OnlyTypeArguments 'this' '(' ArgumentListopt ')' ';'
1266/.$putCase consumeExplicitConstructorInvocationWithTypeArguments(0,THIS_CALL); $break ./
1267
1268ExplicitConstructorInvocation ::= 'super' '(' ArgumentListopt ')' ';'
1269/.$putCase consumeExplicitConstructorInvocation(0,SUPER_CALL); $break ./
1270
1271ExplicitConstructorInvocation ::= OnlyTypeArguments 'super' '(' ArgumentListopt ')' ';'
1272/.$putCase consumeExplicitConstructorInvocationWithTypeArguments(0,SUPER_CALL); $break ./
1273
1274-- {ObjectTeams
1275ExplicitConstructorInvocation ::= 'tsuper' '(' ArgumentListopt ')' ';'
1276/.$putCase consumeExplicitConstructorInvocation(0,TSUPER_CALL); $break ./
1277
1278ExplicitConstructorInvocation ::= Name '.' 'tsuper' '(' ArgumentListopt ')' ';'
1279/.$putCase consumeExplicitConstructorInvocation(2,TSUPER_CALL); $break ./
1280-- Markus Witte}
1281
1282--1.1 feature
1283ExplicitConstructorInvocation ::= Primary '.' 'super' '(' ArgumentListopt ')' ';'
1284/.$putCase consumeExplicitConstructorInvocation(1, SUPER_CALL); $break ./
1285
1286ExplicitConstructorInvocation ::= Primary '.' OnlyTypeArguments 'super' '(' ArgumentListopt ')' ';'
1287/.$putCase consumeExplicitConstructorInvocationWithTypeArguments(1, SUPER_CALL); $break ./
1288
1289--1.1 feature
1290ExplicitConstructorInvocation ::= Name '.' 'super' '(' ArgumentListopt ')' ';'
1291/.$putCase consumeExplicitConstructorInvocation(2, SUPER_CALL); $break ./
1292
1293ExplicitConstructorInvocation ::= Name '.' OnlyTypeArguments 'super' '(' ArgumentListopt ')' ';'
1294/.$putCase consumeExplicitConstructorInvocationWithTypeArguments(2, SUPER_CALL); $break ./
1295
1296--1.1 feature
1297ExplicitConstructorInvocation ::= Primary '.' 'this' '(' ArgumentListopt ')' ';'
1298/.$putCase consumeExplicitConstructorInvocation(1, THIS_CALL); $break ./
1299
1300ExplicitConstructorInvocation ::= Primary '.' OnlyTypeArguments 'this' '(' ArgumentListopt ')' ';'
1301/.$putCase consumeExplicitConstructorInvocationWithTypeArguments(1, THIS_CALL); $break ./
1302
1303--1.1 feature
1304ExplicitConstructorInvocation ::= Name '.' 'this' '(' ArgumentListopt ')' ';'
1305/.$putCase consumeExplicitConstructorInvocation(2, THIS_CALL); $break ./
1306
1307ExplicitConstructorInvocation ::= Name '.' OnlyTypeArguments 'this' '(' ArgumentListopt ')' ';'
1308/.$putCase consumeExplicitConstructorInvocationWithTypeArguments(2, THIS_CALL); $break ./
1309/:$readableName ExplicitConstructorInvocation:/
1310
1311-- {ObjectTeams
1312BaseConstructorExpression ::= 'base' '(' ArgumentListopt ')'
1313/.$putCase consumeExplicitConstructorInvocationBase(0); $break ./
1314/:$readableName BaseConstructorInvocation:/
1315
1316BaseConstructorInvocation ::= 'base' '(' ArgumentListopt ')'
1317/.$putCase consumeExplicitConstructorInvocationBase(1); $break ./
1318/:$readableName BaseConstructorInvocation:/
1319
1320BaseConstructorInvocation ::= Primary . 'base' '(' ArgumentListopt ')'
1321/.$putCase consumeExplicitConstructorInvocationBase(2); $break ./
1322/:$readableName QualifiedBaseConstructorInvocation:/
1323
1324BaseConstructorInvocation ::= Name . 'base' '(' ArgumentListopt ')'
1325/.$putCase consumeExplicitConstructorInvocationBase(3); $break ./
1326/:$readableName QualifiedBaseConstructorInvocation:/
1327-- Markus Witte}
1328
1329--18.9 Productions from 9: Interface Declarations
1330
1331--18.9.1 Productions from 9.1: Interface Declarations
1332--InterfaceModifier ::=
1333-- 'public'
1334-- | 'abstract'
1335--
1336InterfaceDeclaration ::= InterfaceHeader InterfaceBody
1337/.$putCase consumeInterfaceDeclaration(); $break ./
1338/:$readableName InterfaceDeclaration:/
1339
1340-- {ObjectTeams
1341-- orig: InterfaceHeader ::= InterfaceHeaderName InterfaceHeaderExtendsopt
1342InterfaceHeader ::= InterfaceHeaderName InterfaceHeaderExtendsopt ClassHeaderPlayedByopt
1343-- SH}
1344/.$putCase consumeInterfaceHeader(); $break ./
1345/:$readableName InterfaceHeader:/
1346
1347-----------------------------------------------
1348-- 1.5 features : generics
1349-----------------------------------------------
1350InterfaceHeaderName ::= InterfaceHeaderName1 TypeParameters
1351/.$putCase consumeTypeHeaderNameWithTypeParameters(); $break ./
1352
1353InterfaceHeaderName -> InterfaceHeaderName1
1354/:$readableName InterfaceHeaderName:/
1355
1356InterfaceHeaderName1 ::= Modifiersopt interface Identifier
1357/.$putCase consumeInterfaceHeaderName1(); $break ./
1358/:$readableName InterfaceHeaderName:/
1359
1360InterfaceHeaderExtends ::= 'extends' InterfaceTypeList
1361/.$putCase consumeInterfaceHeaderExtends(); $break ./
1362/:$readableName InterfaceHeaderExtends:/
1363
1364InterfaceBody ::= '{' InterfaceMemberDeclarationsopt '}'
1365/:$readableName InterfaceBody:/
1366
1367InterfaceMemberDeclarations -> InterfaceMemberDeclaration
1368InterfaceMemberDeclarations ::= InterfaceMemberDeclarations InterfaceMemberDeclaration
1369/.$putCase consumeInterfaceMemberDeclarations(); $break ./
1370/:$readableName InterfaceMemberDeclarations:/
1371
1372--same as for class members
1373InterfaceMemberDeclaration ::= ';'
1374/.$putCase consumeEmptyTypeDeclaration(); $break ./
1375/:$readableName InterfaceMemberDeclaration:/
1376
Stephan Herrmannc4817302012-07-13 01:31:42 +02001377
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001378InterfaceMemberDeclaration -> ConstantDeclaration
Stephan Herrmann307ebe32013-05-02 02:46:05 +02001379InterfaceMemberDeclaration ::= DefaultMethodHeader MethodBody
Stephan Herrmannc4817302012-07-13 01:31:42 +02001380/:$compliance 1.8:/
Stephan Herrmann307ebe32013-05-02 02:46:05 +02001381/.$putCase consumeInterfaceMethodDeclaration(false); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001382InterfaceMemberDeclaration ::= MethodHeader MethodBody
Stephan Herrmannc4817302012-07-13 01:31:42 +02001383/.$putCase consumeInterfaceMethodDeclaration(false); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001384/:$readableName InterfaceMemberDeclaration:/
Stephan Herrmann307ebe32013-05-02 02:46:05 +02001385-- the next rule is illegal but allows to give a more canonical error message from inside consumeInterfaceMethodDeclaration():
1386InterfaceMemberDeclaration ::= DefaultMethodHeader ';'
1387/:$compliance 1.8:/
1388/.$putCase consumeInterfaceMethodDeclaration(true); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001389
1390-- These rules are added to be able to parse constructors inside interface and then report a relevent error message
1391InvalidConstructorDeclaration ::= ConstructorHeader MethodBody
Stephan Herrmann44109d32011-08-02 14:34:26 +00001392/.$putCase consumeInvalidConstructorDeclaration(true); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001393InvalidConstructorDeclaration ::= ConstructorHeader ';'
Stephan Herrmann44109d32011-08-02 14:34:26 +00001394/.$putCase consumeInvalidConstructorDeclaration(false); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001395/:$readableName InvalidConstructorDeclaration:/
1396
1397-- These rules are added to be able to parse initializers inside an interface and then report a relevent error message (bug 212713)
1398InvalidInitializer -> StaticInitializer
1399InvalidInitializer -> Initializer
1400/:$readableName InvalidInitializer:/
1401
Stephan Herrmannee9076e2013-04-04 16:21:27 +02001402
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001403InterfaceMemberDeclaration -> AbstractMethodDeclaration
1404InterfaceMemberDeclaration -> InvalidConstructorDeclaration
1405InterfaceMemberDeclaration -> InvalidInitializer
1406--1.1 feature
1407InterfaceMemberDeclaration -> ClassDeclaration
1408--1.1 feature
1409InterfaceMemberDeclaration -> InterfaceDeclaration
1410InterfaceMemberDeclaration -> EnumDeclaration
1411InterfaceMemberDeclaration -> AnnotationTypeDeclaration
1412--{ObjectTeams: bindings in role interfaces:
1413InterfaceMemberDeclaration -> BindingDeclaration
1414-- SH}
1415/:$readableName InterfaceMemberDeclaration:/
1416
1417ConstantDeclaration -> FieldDeclaration
1418/:$readableName ConstantDeclaration:/
1419
1420PushLeftBrace ::= $empty
1421/.$putCase consumePushLeftBrace(); $break ./
1422/:$readableName PushLeftBrace:/
1423
1424ArrayInitializer ::= '{' PushLeftBrace ,opt '}'
1425/.$putCase consumeEmptyArrayInitializer(); $break ./
1426ArrayInitializer ::= '{' PushLeftBrace VariableInitializers '}'
1427/.$putCase consumeArrayInitializer(); $break ./
1428ArrayInitializer ::= '{' PushLeftBrace VariableInitializers , '}'
1429/.$putCase consumeArrayInitializer(); $break ./
1430/:$readableName ArrayInitializer:/
1431/:$recovery_template Identifier:/
1432
1433VariableInitializers ::= VariableInitializer
1434VariableInitializers ::= VariableInitializers ',' VariableInitializer
1435/.$putCase consumeVariableInitializers(); $break ./
1436/:$readableName VariableInitializers:/
1437
1438Block ::= OpenBlock '{' BlockStatementsopt '}'
1439/.$putCase consumeBlock(); $break ./
1440/:$readableName Block:/
1441
1442OpenBlock ::= $empty
1443/.$putCase consumeOpenBlock() ; $break ./
1444/:$readableName OpenBlock:/
1445
Stephan Herrmanna9ff5de2014-01-04 13:16:55 +01001446BlockStatements ::= BlockStatement
1447/.$putCase consumeBlockStatement() ; $break ./
1448/:$readableName BlockStatements:/
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001449BlockStatements ::= BlockStatements BlockStatement
1450/.$putCase consumeBlockStatements() ; $break ./
1451/:$readableName BlockStatements:/
1452
Stephan Herrmanna9ff5de2014-01-04 13:16:55 +01001453-- Production name hardcoded in parser. Must be ::= and not ->
1454BlockStatementopt ::= BlockStatementopt0
1455/:$readableName BlockStatementopt:/
1456BlockStatementopt0 -> $empty
1457BlockStatementopt0 -> BlockStatement
1458/:$readableName BlockStatementopt0:/
1459
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001460BlockStatement -> LocalVariableDeclarationStatement
1461BlockStatement -> Statement
1462--1.1 feature
1463BlockStatement -> ClassDeclaration
1464BlockStatement ::= InterfaceDeclaration
1465/.$putCase consumeInvalidInterfaceDeclaration(); $break ./
1466/:$readableName BlockStatement:/
1467BlockStatement ::= AnnotationTypeDeclaration
1468/.$putCase consumeInvalidAnnotationTypeDeclaration(); $break ./
1469/:$readableName BlockStatement:/
1470BlockStatement ::= EnumDeclaration
1471/.$putCase consumeInvalidEnumDeclaration(); $break ./
1472/:$readableName BlockStatement:/
1473
1474LocalVariableDeclarationStatement ::= LocalVariableDeclaration ';'
1475/.$putCase consumeLocalVariableDeclarationStatement(); $break ./
1476/:$readableName LocalVariableDeclarationStatement:/
1477
Stephan Herrmannee9076e2013-04-04 16:21:27 +02001478LocalVariableDeclaration ::= Type PushModifiers VariableDeclarators
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001479/.$putCase consumeLocalVariableDeclaration(); $break ./
1480-- 1.1 feature
1481-- The modifiers part of this rule makes the grammar more permissive.
1482-- The only modifier here is final. We put Modifiers to allow multiple modifiers
1483-- This will require to check the validity of the modifier
Stephan Herrmannee9076e2013-04-04 16:21:27 +02001484LocalVariableDeclaration ::= Modifiers Type PushRealModifiers VariableDeclarators
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001485/.$putCase consumeLocalVariableDeclaration(); $break ./
1486/:$readableName LocalVariableDeclaration:/
1487
1488PushModifiers ::= $empty
1489/.$putCase consumePushModifiers(); $break ./
1490/:$readableName PushModifiers:/
1491
1492PushModifiersForHeader ::= $empty
1493/.$putCase consumePushModifiersForHeader(); $break ./
1494/:$readableName PushModifiersForHeader:/
1495
1496PushRealModifiers ::= $empty
1497/.$putCase consumePushRealModifiers(); $break ./
1498/:$readableName PushRealModifiers:/
1499
1500Statement -> StatementWithoutTrailingSubstatement
1501Statement -> LabeledStatement
1502Statement -> IfThenStatement
1503Statement -> IfThenElseStatement
1504Statement -> WhileStatement
1505Statement -> ForStatement
1506-- {ObjectTeams
1507Statement -> WithinStatement
1508-- Markus Witte}
1509-----------------------------------------------
1510-- 1.5 feature
1511-----------------------------------------------
1512Statement -> EnhancedForStatement
1513/:$readableName Statement:/
1514/:$recovery_template ;:/
1515
1516StatementNoShortIf -> StatementWithoutTrailingSubstatement
1517StatementNoShortIf -> LabeledStatementNoShortIf
1518StatementNoShortIf -> IfThenElseStatementNoShortIf
1519StatementNoShortIf -> WhileStatementNoShortIf
1520StatementNoShortIf -> ForStatementNoShortIf
1521-----------------------------------------------
1522-- 1.5 feature
1523-----------------------------------------------
1524StatementNoShortIf -> EnhancedForStatementNoShortIf
1525/:$readableName Statement:/
1526
1527StatementWithoutTrailingSubstatement -> AssertStatement
1528StatementWithoutTrailingSubstatement -> Block
1529StatementWithoutTrailingSubstatement -> EmptyStatement
1530StatementWithoutTrailingSubstatement -> ExpressionStatement
1531StatementWithoutTrailingSubstatement -> SwitchStatement
1532StatementWithoutTrailingSubstatement -> DoStatement
1533StatementWithoutTrailingSubstatement -> BreakStatement
1534StatementWithoutTrailingSubstatement -> ContinueStatement
1535StatementWithoutTrailingSubstatement -> ReturnStatement
1536StatementWithoutTrailingSubstatement -> SynchronizedStatement
1537StatementWithoutTrailingSubstatement -> ThrowStatement
1538StatementWithoutTrailingSubstatement -> TryStatement
Stephan Herrmann44109d32011-08-02 14:34:26 +00001539StatementWithoutTrailingSubstatement -> TryStatementWithResources
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001540/:$readableName Statement:/
1541
1542EmptyStatement ::= ';'
1543/.$putCase consumeEmptyStatement(); $break ./
1544/:$readableName EmptyStatement:/
1545
1546LabeledStatement ::= Label ':' Statement
1547/.$putCase consumeStatementLabel() ; $break ./
1548/:$readableName LabeledStatement:/
1549
1550LabeledStatementNoShortIf ::= Label ':' StatementNoShortIf
1551/.$putCase consumeStatementLabel() ; $break ./
1552/:$readableName LabeledStatement:/
1553
1554Label ::= 'Identifier'
Stephan Herrmannee9076e2013-04-04 16:21:27 +02001555/.$putCase consumeLabel() ; $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001556/:$readableName Label:/
1557
1558ExpressionStatement ::= StatementExpression ';'
1559/. $putCase consumeExpressionStatement(); $break ./
1560ExpressionStatement ::= ExplicitConstructorInvocation
1561/:$readableName Statement:/
1562
1563StatementExpression ::= Assignment
1564StatementExpression ::= PreIncrementExpression
1565StatementExpression ::= PreDecrementExpression
1566StatementExpression ::= PostIncrementExpression
1567StatementExpression ::= PostDecrementExpression
1568StatementExpression ::= MethodInvocation
1569StatementExpression ::= ClassInstanceCreationExpression
1570-- {ObjectTeams
1571StatementExpression ::= BaseConstructorInvocation
1572-- SH}
1573/:$readableName Expression:/
1574
Stephan Herrmann44109d32011-08-02 14:34:26 +00001575IfThenStatement ::= 'if' '(' Expression ')' Statement
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001576/.$putCase consumeStatementIfNoElse(); $break ./
1577/:$readableName IfStatement:/
1578
Stephan Herrmann44109d32011-08-02 14:34:26 +00001579IfThenElseStatement ::= 'if' '(' Expression ')' StatementNoShortIf 'else' Statement
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001580/.$putCase consumeStatementIfWithElse(); $break ./
1581/:$readableName IfStatement:/
1582
Stephan Herrmann44109d32011-08-02 14:34:26 +00001583IfThenElseStatementNoShortIf ::= 'if' '(' Expression ')' StatementNoShortIf 'else' StatementNoShortIf
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001584/.$putCase consumeStatementIfWithElse(); $break ./
1585/:$readableName IfStatement:/
1586
1587SwitchStatement ::= 'switch' '(' Expression ')' OpenBlock SwitchBlock
1588/.$putCase consumeStatementSwitch() ; $break ./
1589/:$readableName SwitchStatement:/
1590
1591SwitchBlock ::= '{' '}'
1592/.$putCase consumeEmptySwitchBlock() ; $break ./
1593
1594SwitchBlock ::= '{' SwitchBlockStatements '}'
1595SwitchBlock ::= '{' SwitchLabels '}'
1596SwitchBlock ::= '{' SwitchBlockStatements SwitchLabels '}'
1597/.$putCase consumeSwitchBlock() ; $break ./
1598/:$readableName SwitchBlock:/
1599
1600SwitchBlockStatements -> SwitchBlockStatement
1601SwitchBlockStatements ::= SwitchBlockStatements SwitchBlockStatement
1602/.$putCase consumeSwitchBlockStatements() ; $break ./
1603/:$readableName SwitchBlockStatements:/
1604
1605SwitchBlockStatement ::= SwitchLabels BlockStatements
1606/.$putCase consumeSwitchBlockStatement() ; $break ./
1607/:$readableName SwitchBlockStatement:/
1608
1609SwitchLabels -> SwitchLabel
1610SwitchLabels ::= SwitchLabels SwitchLabel
1611/.$putCase consumeSwitchLabels() ; $break ./
1612/:$readableName SwitchLabels:/
1613
1614SwitchLabel ::= 'case' ConstantExpression ':'
1615/. $putCase consumeCaseLabel(); $break ./
1616
1617SwitchLabel ::= 'default' ':'
1618/. $putCase consumeDefaultLabel(); $break ./
1619/:$readableName SwitchLabel:/
1620
1621WhileStatement ::= 'while' '(' Expression ')' Statement
1622/.$putCase consumeStatementWhile() ; $break ./
1623/:$readableName WhileStatement:/
1624
1625WhileStatementNoShortIf ::= 'while' '(' Expression ')' StatementNoShortIf
1626/.$putCase consumeStatementWhile() ; $break ./
1627/:$readableName WhileStatement:/
1628
1629DoStatement ::= 'do' Statement 'while' '(' Expression ')' ';'
1630/.$putCase consumeStatementDo() ; $break ./
1631/:$readableName DoStatement:/
1632
1633ForStatement ::= 'for' '(' ForInitopt ';' Expressionopt ';' ForUpdateopt ')' Statement
1634/.$putCase consumeStatementFor() ; $break ./
1635/:$readableName ForStatement:/
1636
1637ForStatementNoShortIf ::= 'for' '(' ForInitopt ';' Expressionopt ';' ForUpdateopt ')' StatementNoShortIf
1638/.$putCase consumeStatementFor() ; $break ./
1639/:$readableName ForStatement:/
1640
1641--the minus one allows to avoid a stack-to-stack transfer
1642ForInit ::= StatementExpressionList
1643/.$putCase consumeForInit() ; $break ./
1644ForInit -> LocalVariableDeclaration
1645/:$readableName ForInit:/
1646
1647ForUpdate -> StatementExpressionList
1648/:$readableName ForUpdate:/
1649
1650StatementExpressionList -> StatementExpression
1651StatementExpressionList ::= StatementExpressionList ',' StatementExpression
1652/.$putCase consumeStatementExpressionList() ; $break ./
1653/:$readableName StatementExpressionList:/
1654
1655-- {ObjectTeams
1656WithinStatement ::= 'within' '(' Expression ')' Statement
1657/.$putCase consumeWithinStatement(); $break ./
1658/:$readableName WithinStatement:/
1659-- Markus Witte}
1660
1661-- 1.4 feature
1662AssertStatement ::= 'assert' Expression ';'
1663/.$putCase consumeSimpleAssertStatement() ; $break ./
1664/:$compliance 1.4:/
1665
1666AssertStatement ::= 'assert' Expression ':' Expression ';'
1667/.$putCase consumeAssertStatement() ; $break ./
1668/:$readableName AssertStatement:/
1669/:$compliance 1.4:/
1670
1671BreakStatement ::= 'break' ';'
1672/.$putCase consumeStatementBreak() ; $break ./
1673
1674BreakStatement ::= 'break' Identifier ';'
1675/.$putCase consumeStatementBreakWithLabel() ; $break ./
1676/:$readableName BreakStatement:/
1677
1678ContinueStatement ::= 'continue' ';'
1679/.$putCase consumeStatementContinue() ; $break ./
1680
1681ContinueStatement ::= 'continue' Identifier ';'
1682/.$putCase consumeStatementContinueWithLabel() ; $break ./
1683/:$readableName ContinueStatement:/
1684
1685ReturnStatement ::= 'return' Expressionopt ';'
1686/.$putCase consumeStatementReturn() ; $break ./
1687/:$readableName ReturnStatement:/
1688
1689ThrowStatement ::= 'throw' Expression ';'
1690/.$putCase consumeStatementThrow(); $break ./
1691/:$readableName ThrowStatement:/
1692
Stephan Herrmann44109d32011-08-02 14:34:26 +00001693SynchronizedStatement ::= OnlySynchronized '(' Expression ')' Block
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001694/.$putCase consumeStatementSynchronized(); $break ./
1695/:$readableName SynchronizedStatement:/
1696
1697OnlySynchronized ::= 'synchronized'
1698/.$putCase consumeOnlySynchronized(); $break ./
1699/:$readableName OnlySynchronized:/
1700
1701TryStatement ::= 'try' TryBlock Catches
Stephan Herrmann44109d32011-08-02 14:34:26 +00001702/.$putCase consumeStatementTry(false, false); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001703TryStatement ::= 'try' TryBlock Catchesopt Finally
Stephan Herrmann44109d32011-08-02 14:34:26 +00001704/.$putCase consumeStatementTry(true, false); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001705/:$readableName TryStatement:/
1706
Stephan Herrmann44109d32011-08-02 14:34:26 +00001707TryStatementWithResources ::= 'try' ResourceSpecification TryBlock Catchesopt
1708/.$putCase consumeStatementTry(false, true); $break ./
1709TryStatementWithResources ::= 'try' ResourceSpecification TryBlock Catchesopt Finally
1710/.$putCase consumeStatementTry(true, true); $break ./
1711/:$readableName TryStatementWithResources:/
1712/:$compliance 1.7:/
1713
1714ResourceSpecification ::= '(' Resources ;opt ')'
1715/.$putCase consumeResourceSpecification(); $break ./
1716/:$readableName ResourceSpecification:/
1717/:$compliance 1.7:/
1718
1719;opt ::= $empty
1720/.$putCase consumeResourceOptionalTrailingSemiColon(false); $break ./
1721;opt ::= ';'
1722/.$putCase consumeResourceOptionalTrailingSemiColon(true); $break ./
1723/:$readableName ;:/
1724/:$compliance 1.7:/
1725
1726Resources ::= Resource
1727/.$putCase consumeSingleResource(); $break ./
1728Resources ::= Resources TrailingSemiColon Resource
1729/.$putCase consumeMultipleResources(); $break ./
1730/:$readableName Resources:/
1731/:$compliance 1.7:/
1732
1733TrailingSemiColon ::= ';'
1734/.$putCase consumeResourceOptionalTrailingSemiColon(true); $break ./
1735/:$readableName ;:/
1736/:$compliance 1.7:/
1737
Stephan Herrmannee9076e2013-04-04 16:21:27 +02001738Resource ::= Type PushModifiers VariableDeclaratorId EnterVariable '=' ForceNoDiet VariableInitializer RestoreDiet ExitVariableWithInitialization
Stephan Herrmann44109d32011-08-02 14:34:26 +00001739/.$putCase consumeResourceAsLocalVariableDeclaration(); $break ./
1740/:$readableName Resource:/
1741/:$compliance 1.7:/
1742
Stephan Herrmannee9076e2013-04-04 16:21:27 +02001743Resource ::= Modifiers Type PushRealModifiers VariableDeclaratorId EnterVariable '=' ForceNoDiet VariableInitializer RestoreDiet ExitVariableWithInitialization
Stephan Herrmann44109d32011-08-02 14:34:26 +00001744/.$putCase consumeResourceAsLocalVariableDeclaration(); $break ./
1745/:$readableName Resource:/
1746/:$compliance 1.7:/
1747
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001748TryBlock ::= Block ExitTryBlock
1749/:$readableName Block:/
1750
1751ExitTryBlock ::= $empty
1752/.$putCase consumeExitTryBlock(); $break ./
1753/:$readableName ExitTryBlock:/
1754
1755Catches -> CatchClause
1756Catches ::= Catches CatchClause
1757/.$putCase consumeCatches(); $break ./
1758/:$readableName Catches:/
1759
Stephan Herrmann29b019c2011-04-26 10:30:44 +00001760CatchClause ::= 'catch' '(' CatchFormalParameter ')' Block
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001761/.$putCase consumeStatementCatch() ; $break ./
1762/:$readableName CatchClause:/
1763
Stephan Herrmannee9076e2013-04-04 16:21:27 +02001764Finally ::= 'finally' Block
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001765/:$readableName Finally:/
1766/:$recovery_template finally { }:/
1767
1768--18.12 Productions from 14: Expressions
1769
1770--for source positioning purpose
1771PushLPAREN ::= '('
1772/.$putCase consumeLeftParen(); $break ./
1773/:$readableName (:/
1774/:$recovery_template (:/
1775PushRPAREN ::= ')'
1776/.$putCase consumeRightParen(); $break ./
1777/:$readableName ):/
1778/:$recovery_template ):/
1779
1780Primary -> PrimaryNoNewArray
1781Primary -> ArrayCreationWithArrayInitializer
1782Primary -> ArrayCreationWithoutArrayInitializer
1783/:$readableName Expression:/
1784
1785PrimaryNoNewArray -> Literal
1786PrimaryNoNewArray ::= 'this'
1787/.$putCase consumePrimaryNoNewArrayThis(); $break ./
1788
Stephan Herrmann44109d32011-08-02 14:34:26 +00001789PrimaryNoNewArray ::= PushLPAREN Expression_NotName PushRPAREN
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001790/.$putCase consumePrimaryNoNewArray(); $break ./
1791
Stephan Herrmann44109d32011-08-02 14:34:26 +00001792PrimaryNoNewArray ::= PushLPAREN Name PushRPAREN
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001793/.$putCase consumePrimaryNoNewArrayWithName(); $break ./
1794
1795PrimaryNoNewArray -> ClassInstanceCreationExpression
1796--{ObjectTeams:
1797PrimaryNoNewArray -> BaseConstructorExpression
1798-- SH}
1799PrimaryNoNewArray -> FieldAccess
1800--1.1 feature
1801PrimaryNoNewArray ::= Name '.' 'this'
1802/.$putCase consumePrimaryNoNewArrayNameThis(); $break ./
1803PrimaryNoNewArray ::= Name '.' 'super'
1804/.$putCase consumePrimaryNoNewArrayNameSuper(); $break ./
1805
1806--1.1 feature
Stephan Herrmann44109d32011-08-02 14:34:26 +00001807--PrimaryNoNewArray ::= Type '.' 'class'
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001808--inline Type in the previous rule in order to make the grammar LL1 instead
1809-- of LL2. The result is the 3 next rules.
1810
1811PrimaryNoNewArray ::= Name '.' 'class'
1812/.$putCase consumePrimaryNoNewArrayName(); $break ./
1813
1814PrimaryNoNewArray ::= Name Dims '.' 'class'
1815/.$putCase consumePrimaryNoNewArrayArrayType(); $break ./
1816
1817PrimaryNoNewArray ::= PrimitiveType Dims '.' 'class'
1818/.$putCase consumePrimaryNoNewArrayPrimitiveArrayType(); $break ./
1819
1820PrimaryNoNewArray ::= PrimitiveType '.' 'class'
1821/.$putCase consumePrimaryNoNewArrayPrimitiveType(); $break ./
1822
1823--{ObjectTeams: R<@t>.class
1824-- (start with RelationalExpression to make the grammer LL1, further syntax checking in Parser)
Stephan Herrmann459d4952013-09-07 19:48:58 +02001825RelationalExpression ::= RelationalExpression '<' AnyTypeAnchor '>' '.' 'class'
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001826/.$putCase consumeRoleClassLiteral(); $break ./
1827-- SH}
1828
1829PrimaryNoNewArray -> MethodInvocation
1830PrimaryNoNewArray -> ArrayAccess
Stephan Herrmannc4817302012-07-13 01:31:42 +02001831
1832-----------------------------------------------------------------------
1833-- Start of rules for JSR 335
1834-----------------------------------------------------------------------
1835
1836PrimaryNoNewArray -> LambdaExpression
1837PrimaryNoNewArray -> ReferenceExpression
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001838/:$readableName Expression:/
Stephan Herrmannc4817302012-07-13 01:31:42 +02001839
Stephan Herrmann307ebe32013-05-02 02:46:05 +02001840-- Production name hardcoded in parser. Must be ::= and not ->
1841ReferenceExpressionTypeArgumentsAndTrunk ::= ReferenceExpressionTypeArgumentsAndTrunk0
1842/:$readableName ReferenceExpressionTypeArgumentsAndTrunk:/
1843
1844ReferenceExpressionTypeArgumentsAndTrunk0 ::= OnlyTypeArguments Dimsopt
Stephan Herrmann1460a602012-07-19 20:01:10 +02001845/.$putCase consumeReferenceExpressionTypeArgumentsAndTrunk(false); $break ./
1846/:$compliance 1.8:/
Stephan Herrmann307ebe32013-05-02 02:46:05 +02001847ReferenceExpressionTypeArgumentsAndTrunk0 ::= OnlyTypeArguments '.' ClassOrInterfaceType Dimsopt
Stephan Herrmann1460a602012-07-19 20:01:10 +02001848/.$putCase consumeReferenceExpressionTypeArgumentsAndTrunk(true); $break ./
1849/:$readableName ReferenceExpressionTypeArgumentsAndTrunk:/
Stephan Herrmannc4817302012-07-13 01:31:42 +02001850/:$compliance 1.8:/
1851
Stephan Herrmannee9076e2013-04-04 16:21:27 +02001852ReferenceExpression ::= PrimitiveType Dims '::' NonWildTypeArgumentsopt IdentifierOrNew
Stephan Herrmanneffbeb02013-04-04 21:43:04 +02001853/.$putCase consumeReferenceExpressionTypeForm(true); $break ./
Stephan Herrmann1460a602012-07-19 20:01:10 +02001854/:$compliance 1.8:/
1855
Stephan Herrmanneffbeb02013-04-04 21:43:04 +02001856ReferenceExpression ::= Name Dimsopt '::' NonWildTypeArgumentsopt IdentifierOrNew
1857/.$putCase consumeReferenceExpressionTypeForm(false); $break ./
Stephan Herrmann1460a602012-07-19 20:01:10 +02001858/:$compliance 1.8:/
1859
1860-- BeginTypeArguments is a synthetic token the scanner concocts to help disambiguate
1861-- between '<' as an operator and '<' in '<' TypeArguments '>'
Stephan Herrmannee9076e2013-04-04 16:21:27 +02001862ReferenceExpression ::= Name BeginTypeArguments ReferenceExpressionTypeArgumentsAndTrunk '::' NonWildTypeArgumentsopt IdentifierOrNew
Stephan Herrmann1460a602012-07-19 20:01:10 +02001863/.$putCase consumeReferenceExpressionGenericTypeForm(); $break ./
1864/:$compliance 1.8:/
1865
Stephan Herrmannc4817302012-07-13 01:31:42 +02001866ReferenceExpression ::= Primary '::' NonWildTypeArgumentsopt Identifier
1867/.$putCase consumeReferenceExpressionPrimaryForm(); $break ./
Stephan Herrmann1460a602012-07-19 20:01:10 +02001868/:$compliance 1.8:/
Stephan Herrmannc4817302012-07-13 01:31:42 +02001869ReferenceExpression ::= 'super' '::' NonWildTypeArgumentsopt Identifier
1870/.$putCase consumeReferenceExpressionSuperForm(); $break ./
1871/:$readableName ReferenceExpression:/
1872/:$compliance 1.8:/
1873
1874NonWildTypeArgumentsopt ::= $empty
1875/.$putCase consumeEmptyTypeArguments(); $break ./
1876NonWildTypeArgumentsopt -> OnlyTypeArguments
1877/:$readableName NonWildTypeArgumentsopt:/
1878/:$compliance 1.8:/
1879
1880IdentifierOrNew ::= 'Identifier'
1881/.$putCase consumeIdentifierOrNew(false); $break ./
1882IdentifierOrNew ::= 'new'
1883/.$putCase consumeIdentifierOrNew(true); $break ./
1884/:$readableName IdentifierOrNew:/
1885/:$compliance 1.8:/
1886
Stephan Herrmann1725edb2014-01-04 14:15:31 +01001887--{ObjectTeams: replace invocation from consumeToken()
1888-- orig: LambdaExpression ::= LambdaParameters '->' LambdaBody
1889LambdaExpression ::= LambdaParameters '->' EnterLambda LambdaBody
1890-- orig:
Stephan Herrmannc4817302012-07-13 01:31:42 +02001891/.$putCase consumeLambdaExpression(); $break ./
1892/:$readableName LambdaExpression:/
1893/:$compliance 1.8:/
Stephan Herrmann1725edb2014-01-04 14:15:31 +01001894-- OT:
1895EnterLambda ::= $empty
1896/.$putCase consumeLambdaHeader(); $break ./
1897-- SH}
Stephan Herrmannc4817302012-07-13 01:31:42 +02001898
Stephan Herrmanna9ff5de2014-01-04 13:16:55 +01001899NestedLambda ::= $empty
1900/.$putCase consumeNestedLambda(); $break ./
1901/:$readableName NestedLambda:/
1902
1903LambdaParameters ::= Identifier NestedLambda
Stephan Herrmannc4817302012-07-13 01:31:42 +02001904/.$putCase consumeTypeElidedLambdaParameter(false); $break ./
1905/:$readableName TypeElidedFormalParameter:/
1906/:$compliance 1.8:/
1907
1908-- to make the grammar LALR(1), the scanner transforms the input string to
1909-- contain synthetic tokens to signal start of lambda parameter list.
Stephan Herrmanna9ff5de2014-01-04 13:16:55 +01001910LambdaParameters -> BeginLambda NestedLambda LambdaParameterList
Stephan Herrmannc4817302012-07-13 01:31:42 +02001911/:$readableName LambdaParameters:/
1912/:$compliance 1.8:/
1913
Stephan Herrmann307ebe32013-05-02 02:46:05 +02001914-- Production name hardcoded in parser. Must be ::= and not ->
1915ParenthesizedLambdaParameterList ::= LambdaParameterList
Stephan Herrmann1460a602012-07-19 20:01:10 +02001916/:$readableName ParenthesizedLambdaParameterList:/
Stephan Herrmann307ebe32013-05-02 02:46:05 +02001917
1918LambdaParameterList -> PushLPAREN FormalParameterListopt PushRPAREN
1919LambdaParameterList -> PushLPAREN TypeElidedFormalParameterList PushRPAREN
1920/:$readableName LambdaParameterList:/
Stephan Herrmann1460a602012-07-19 20:01:10 +02001921/:$compliance 1.8:/
1922
Stephan Herrmannc4817302012-07-13 01:31:42 +02001923TypeElidedFormalParameterList -> TypeElidedFormalParameter
1924TypeElidedFormalParameterList ::= TypeElidedFormalParameterList ',' TypeElidedFormalParameter
1925/.$putCase consumeFormalParameterList(); $break ./
1926/:$readableName TypeElidedFormalParameterList:/
1927/:$compliance 1.8:/
1928
1929-- to work around a shift reduce conflict, we accept Modifiersopt prefixed
1930-- identifier - downstream phases should reject input strings with modifiers.
1931TypeElidedFormalParameter ::= Modifiersopt Identifier
1932/.$putCase consumeTypeElidedLambdaParameter(true); $break ./
1933/:$readableName TypeElidedFormalParameter:/
1934/:$compliance 1.8:/
1935
1936-- A lambda body of the form x is really '{' return x; '}'
1937LambdaBody -> ElidedLeftBraceAndReturn Expression ElidedSemicolonAndRightBrace
Stephan Herrmanna9ff5de2014-01-04 13:16:55 +01001938LambdaBody -> Block
Stephan Herrmannc4817302012-07-13 01:31:42 +02001939/:$readableName LambdaBody:/
1940/:$compliance 1.8:/
1941
1942ElidedLeftBraceAndReturn ::= $empty
1943/.$putCase consumeElidedLeftBraceAndReturn(); $break ./
1944/:$readableName ElidedLeftBraceAndReturn:/
1945/:$compliance 1.8:/
1946
1947-----------------------------------------------------------------------
1948-- End of rules for JSR 335
1949-----------------------------------------------------------------------
1950
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001951--1.1 feature
1952--
1953-- In Java 1.0 a ClassBody could not appear at all in a
1954-- ClassInstanceCreationExpression.
1955--
1956
1957AllocationHeader ::= 'new' ClassType '(' ArgumentListopt ')'
1958/.$putCase consumeAllocationHeader(); $break ./
1959/:$readableName AllocationHeader:/
1960
Stephan Herrmann6cecadb2012-02-26 01:08:39 +01001961ClassInstanceCreationExpression ::= 'new' OnlyTypeArguments ClassType EnterInstanceCreationArgumentList '(' ArgumentListopt ')' UnqualifiedClassBodyopt
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001962/.$putCase consumeClassInstanceCreationExpressionWithTypeArguments(); $break ./
1963
Stephan Herrmann6cecadb2012-02-26 01:08:39 +01001964ClassInstanceCreationExpression ::= 'new' ClassType EnterInstanceCreationArgumentList '(' ArgumentListopt ')' UnqualifiedClassBodyopt
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001965/.$putCase consumeClassInstanceCreationExpression(); $break ./
1966--1.1 feature
1967
Stephan Herrmann6cecadb2012-02-26 01:08:39 +01001968ClassInstanceCreationExpression ::= Primary '.' 'new' OnlyTypeArguments ClassType EnterInstanceCreationArgumentList '(' ArgumentListopt ')' QualifiedClassBodyopt
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001969/.$putCase consumeClassInstanceCreationExpressionQualifiedWithTypeArguments() ; $break ./
1970
Stephan Herrmann6cecadb2012-02-26 01:08:39 +01001971ClassInstanceCreationExpression ::= Primary '.' 'new' ClassType EnterInstanceCreationArgumentList '(' ArgumentListopt ')' QualifiedClassBodyopt
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001972/.$putCase consumeClassInstanceCreationExpressionQualified() ; $break ./
1973
1974--1.1 feature
Stephan Herrmann6cecadb2012-02-26 01:08:39 +01001975ClassInstanceCreationExpression ::= ClassInstanceCreationExpressionName 'new' ClassType EnterInstanceCreationArgumentList '(' ArgumentListopt ')' QualifiedClassBodyopt
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001976/.$putCase consumeClassInstanceCreationExpressionQualified() ; $break ./
1977/:$readableName ClassInstanceCreationExpression:/
1978
Stephan Herrmann6cecadb2012-02-26 01:08:39 +01001979ClassInstanceCreationExpression ::= ClassInstanceCreationExpressionName 'new' OnlyTypeArguments ClassType EnterInstanceCreationArgumentList '(' ArgumentListopt ')' QualifiedClassBodyopt
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001980/.$putCase consumeClassInstanceCreationExpressionQualifiedWithTypeArguments() ; $break ./
1981/:$readableName ClassInstanceCreationExpression:/
1982
Stephan Herrmann6cecadb2012-02-26 01:08:39 +01001983EnterInstanceCreationArgumentList ::= $empty
1984/.$putCase consumeEnterInstanceCreationArgumentList(); $break ./
1985/:$readableName EnterInstanceCreationArgumentList:/
1986
Stephan Herrmann234bfec2011-04-26 08:26:58 +00001987ClassInstanceCreationExpressionName ::= Name '.'
1988/.$putCase consumeClassInstanceCreationExpressionName() ; $break ./
1989/:$readableName ClassInstanceCreationExpressionName:/
1990
1991UnqualifiedClassBodyopt ::= $empty --test made using null as contents
1992/.$putCase consumeClassBodyopt(); $break ./
1993UnqualifiedClassBodyopt ::= UnqualifiedEnterAnonymousClassBody ClassBody
1994/:$readableName ClassBody:/
1995/:$no_statements_recovery:/
1996
1997UnqualifiedEnterAnonymousClassBody ::= $empty
1998/.$putCase consumeEnterAnonymousClassBody(false); $break ./
1999/:$readableName EnterAnonymousClassBody:/
2000
2001QualifiedClassBodyopt ::= $empty --test made using null as contents
2002/.$putCase consumeClassBodyopt(); $break ./
2003QualifiedClassBodyopt ::= QualifiedEnterAnonymousClassBody ClassBody
2004/:$readableName ClassBody:/
2005/:$no_statements_recovery:/
2006
2007QualifiedEnterAnonymousClassBody ::= $empty
2008/.$putCase consumeEnterAnonymousClassBody(true); $break ./
2009/:$readableName EnterAnonymousClassBody:/
2010
2011ArgumentList ::= Expression
2012ArgumentList ::= ArgumentList ',' Expression
2013/.$putCase consumeArgumentList(); $break ./
2014/:$readableName ArgumentList:/
2015
Stephan Herrmannee9076e2013-04-04 16:21:27 +02002016ArrayCreationHeader ::= 'new' PrimitiveType DimWithOrWithOutExprs
Stephan Herrmann234bfec2011-04-26 08:26:58 +00002017/.$putCase consumeArrayCreationHeader(); $break ./
Stephan Herrmannee9076e2013-04-04 16:21:27 +02002018
Stephan Herrmann234bfec2011-04-26 08:26:58 +00002019ArrayCreationHeader ::= 'new' ClassOrInterfaceType DimWithOrWithOutExprs
2020/.$putCase consumeArrayCreationHeader(); $break ./
2021/:$readableName ArrayCreationHeader:/
2022
Stephan Herrmannee9076e2013-04-04 16:21:27 +02002023ArrayCreationWithoutArrayInitializer ::= 'new' PrimitiveType DimWithOrWithOutExprs
Stephan Herrmann234bfec2011-04-26 08:26:58 +00002024/.$putCase consumeArrayCreationExpressionWithoutInitializer(); $break ./
2025/:$readableName ArrayCreationWithoutArrayInitializer:/
2026
Stephan Herrmannee9076e2013-04-04 16:21:27 +02002027ArrayCreationWithArrayInitializer ::= 'new' PrimitiveType DimWithOrWithOutExprs ArrayInitializer
Stephan Herrmann234bfec2011-04-26 08:26:58 +00002028/.$putCase consumeArrayCreationExpressionWithInitializer(); $break ./
2029/:$readableName ArrayCreationWithArrayInitializer:/
2030
2031ArrayCreationWithoutArrayInitializer ::= 'new' ClassOrInterfaceType DimWithOrWithOutExprs
2032/.$putCase consumeArrayCreationExpressionWithoutInitializer(); $break ./
2033
2034ArrayCreationWithArrayInitializer ::= 'new' ClassOrInterfaceType DimWithOrWithOutExprs ArrayInitializer
2035/.$putCase consumeArrayCreationExpressionWithInitializer(); $break ./
2036
2037DimWithOrWithOutExprs ::= DimWithOrWithOutExpr
2038DimWithOrWithOutExprs ::= DimWithOrWithOutExprs DimWithOrWithOutExpr
2039/.$putCase consumeDimWithOrWithOutExprs(); $break ./
2040/:$readableName Dimensions:/
2041
Stephan Herrmannee9076e2013-04-04 16:21:27 +02002042DimWithOrWithOutExpr ::= TypeAnnotationsopt '[' Expression ']'
2043DimWithOrWithOutExpr ::= TypeAnnotationsopt '[' ']'
Stephan Herrmann234bfec2011-04-26 08:26:58 +00002044/. $putCase consumeDimWithOrWithOutExpr(); $break ./
2045/:$readableName Dimension:/
2046-- -----------------------------------------------
2047
2048Dims ::= DimsLoop
2049/. $putCase consumeDims(); $break ./
2050/:$readableName Dimensions:/
2051DimsLoop -> OneDimLoop
2052DimsLoop ::= DimsLoop OneDimLoop
2053/:$readableName Dimensions:/
2054OneDimLoop ::= '[' ']'
Stephan Herrmannc4817302012-07-13 01:31:42 +02002055/. $putCase consumeOneDimLoop(false); $break ./
Stephan Herrmannc4817302012-07-13 01:31:42 +02002056OneDimLoop ::= TypeAnnotations '[' ']'
2057/:$compliance 1.8:/
Stephan Herrmannee9076e2013-04-04 16:21:27 +02002058/. $putCase consumeOneDimLoop(true); $break ./
2059/:$readableName Dimension:/
Stephan Herrmann234bfec2011-04-26 08:26:58 +00002060
2061FieldAccess ::= Primary '.' 'Identifier'
2062/.$putCase consumeFieldAccess(false); $break ./
2063
2064FieldAccess ::= 'super' '.' 'Identifier'
2065/.$putCase consumeFieldAccess(true); $break ./
2066/:$readableName FieldAccess:/
2067
2068MethodInvocation ::= Name '(' ArgumentListopt ')'
2069/.$putCase consumeMethodInvocationName(); $break ./
2070
2071MethodInvocation ::= Name '.' OnlyTypeArguments 'Identifier' '(' ArgumentListopt ')'
2072/.$putCase consumeMethodInvocationNameWithTypeArguments(); $break ./
2073
2074MethodInvocation ::= Primary '.' OnlyTypeArguments 'Identifier' '(' ArgumentListopt ')'
2075/.$putCase consumeMethodInvocationPrimaryWithTypeArguments(); $break ./
2076
2077MethodInvocation ::= Primary '.' 'Identifier' '(' ArgumentListopt ')'
2078/.$putCase consumeMethodInvocationPrimary(); $break ./
2079
2080MethodInvocation ::= 'super' '.' OnlyTypeArguments 'Identifier' '(' ArgumentListopt ')'
2081/.$putCase consumeMethodInvocationSuperWithTypeArguments(); $break ./
2082
2083MethodInvocation ::= 'super' '.' 'Identifier' '(' ArgumentListopt ')'
2084/.$putCase consumeMethodInvocationSuper(); $break ./
2085
2086-- {ObjectTeams
2087MethodInvocation ::= 'tsuper' '.' 'Identifier' '(' ArgumentListopt ')'
2088/.$putCase consumeMethodInvocationTSuper(UNQUALIFIED); $break ./
2089
2090MethodInvocation ::= 'tsuper' '.' OnlyTypeArguments 'Identifier' '(' ArgumentListopt ')'
2091/.$putCase consumeMethodInvocationTSuperWithTypeArguments(0); $break ./
2092
2093MethodInvocation ::= Name '.' 'tsuper' '.' 'Identifier' '(' ArgumentListopt ')'
2094/.$putCase consumeMethodInvocationTSuper(QUALIFIED); $break ./
2095
2096MethodInvocation ::= Name '.' 'tsuper' '.' OnlyTypeArguments 'Identifier' '(' ArgumentListopt ')'
2097/.$putCase consumeMethodInvocationTSuperWithTypeArguments(2); $break ./
2098
2099MethodInvocation ::= 'base' '.' 'Identifier' '(' ArgumentListopt ')'
2100/.$putCase consumeMethodInvocationBase(false); $break ./
2101
2102MethodInvocation ::= 'base' '.' OnlyTypeArguments 'Identifier' '(' ArgumentListopt ')'
2103/.$putCase consumeMethodInvocationBaseWithTypeArguments(false); $break ./
2104
2105MethodInvocation ::= 'base' '.' 'super' '.' 'Identifier' '(' ArgumentListopt ')'
2106/.$putCase consumeMethodInvocationBase(true); $break ./
2107
2108MethodInvocation ::= 'base' '.' 'super' '.' OnlyTypeArguments 'Identifier' '(' ArgumentListopt ')'
2109/.$putCase consumeMethodInvocationBaseWithTypeArguments(true); $break ./
2110-- Markus Witte}
2111
2112/:$readableName MethodInvocation:/
2113
2114ArrayAccess ::= Name '[' Expression ']'
2115/.$putCase consumeArrayAccess(true); $break ./
2116ArrayAccess ::= PrimaryNoNewArray '[' Expression ']'
2117/.$putCase consumeArrayAccess(false); $break ./
2118ArrayAccess ::= ArrayCreationWithArrayInitializer '[' Expression ']'
2119/.$putCase consumeArrayAccess(false); $break ./
2120/:$readableName ArrayAccess:/
2121
2122PostfixExpression -> Primary
2123PostfixExpression ::= Name
2124/.$putCase consumePostfixExpression(); $break ./
2125PostfixExpression -> PostIncrementExpression
2126PostfixExpression -> PostDecrementExpression
2127/:$readableName Expression:/
2128
2129PostIncrementExpression ::= PostfixExpression '++'
2130/.$putCase consumeUnaryExpression(OperatorIds.PLUS,true); $break ./
2131/:$readableName PostIncrementExpression:/
2132
2133PostDecrementExpression ::= PostfixExpression '--'
2134/.$putCase consumeUnaryExpression(OperatorIds.MINUS,true); $break ./
2135/:$readableName PostDecrementExpression:/
2136
2137--for source managment purpose
2138PushPosition ::= $empty
2139 /.$putCase consumePushPosition(); $break ./
2140/:$readableName PushPosition:/
2141
2142UnaryExpression -> PreIncrementExpression
2143UnaryExpression -> PreDecrementExpression
2144UnaryExpression ::= '+' PushPosition UnaryExpression
2145/.$putCase consumeUnaryExpression(OperatorIds.PLUS); $break ./
2146UnaryExpression ::= '-' PushPosition UnaryExpression
2147/.$putCase consumeUnaryExpression(OperatorIds.MINUS); $break ./
2148UnaryExpression -> UnaryExpressionNotPlusMinus
2149/:$readableName Expression:/
2150
2151PreIncrementExpression ::= '++' PushPosition UnaryExpression
2152/.$putCase consumeUnaryExpression(OperatorIds.PLUS,false); $break ./
2153/:$readableName PreIncrementExpression:/
2154
2155PreDecrementExpression ::= '--' PushPosition UnaryExpression
2156/.$putCase consumeUnaryExpression(OperatorIds.MINUS,false); $break ./
2157/:$readableName PreDecrementExpression:/
2158
2159UnaryExpressionNotPlusMinus -> PostfixExpression
2160UnaryExpressionNotPlusMinus ::= '~' PushPosition UnaryExpression
2161/.$putCase consumeUnaryExpression(OperatorIds.TWIDDLE); $break ./
2162UnaryExpressionNotPlusMinus ::= '!' PushPosition UnaryExpression
2163/.$putCase consumeUnaryExpression(OperatorIds.NOT); $break ./
2164UnaryExpressionNotPlusMinus -> CastExpression
2165/:$readableName Expression:/
2166
Stephan Herrmann307ebe32013-05-02 02:46:05 +02002167CastExpression ::= PushLPAREN PrimitiveType Dimsopt AdditionalBoundsListOpt PushRPAREN InsideCastExpression UnaryExpression
Stephan Herrmann234bfec2011-04-26 08:26:58 +00002168/.$putCase consumeCastExpressionWithPrimitiveType(); $break ./
Stephan Herrmann307ebe32013-05-02 02:46:05 +02002169CastExpression ::= PushLPAREN Name OnlyTypeArgumentsForCastExpression Dimsopt AdditionalBoundsListOpt PushRPAREN InsideCastExpression UnaryExpressionNotPlusMinus
Stephan Herrmann234bfec2011-04-26 08:26:58 +00002170/.$putCase consumeCastExpressionWithGenericsArray(); $break ./
Stephan Herrmann307ebe32013-05-02 02:46:05 +02002171CastExpression ::= PushLPAREN Name OnlyTypeArgumentsForCastExpression '.' ClassOrInterfaceType Dimsopt AdditionalBoundsListOpt PushRPAREN InsideCastExpressionWithQualifiedGenerics UnaryExpressionNotPlusMinus
Stephan Herrmann234bfec2011-04-26 08:26:58 +00002172/.$putCase consumeCastExpressionWithQualifiedGenericsArray(); $break ./
Stephan Herrmannee9076e2013-04-04 16:21:27 +02002173CastExpression ::= PushLPAREN Name PushRPAREN InsideCastExpressionLL1 UnaryExpressionNotPlusMinus
Stephan Herrmann234bfec2011-04-26 08:26:58 +00002174/.$putCase consumeCastExpressionLL1(); $break ./
Stephan Herrmann307ebe32013-05-02 02:46:05 +02002175CastExpression ::= BeginIntersectionCast PushLPAREN CastNameAndBounds PushRPAREN InsideCastExpressionLL1WithBounds UnaryExpressionNotPlusMinus
2176/.$putCase consumeCastExpressionLL1WithBounds(); $break ./
2177CastExpression ::= PushLPAREN Name Dims AdditionalBoundsListOpt PushRPAREN InsideCastExpression UnaryExpressionNotPlusMinus
Stephan Herrmann234bfec2011-04-26 08:26:58 +00002178/.$putCase consumeCastExpressionWithNameArray(); $break ./
2179/:$readableName CastExpression:/
2180
Stephan Herrmann307ebe32013-05-02 02:46:05 +02002181AdditionalBoundsListOpt ::= $empty
2182/.$putCase consumeZeroAdditionalBounds(); $break ./
2183/:$readableName AdditionalBoundsListOpt:/
2184AdditionalBoundsListOpt -> AdditionalBoundList
2185/:$compliance 1.8:/
2186/:$readableName AdditionalBoundsListOpt:/
2187
2188-- Production name hardcoded in parser. Must be ::= and not ->
2189ParenthesizedCastNameAndBounds ::= '(' CastNameAndBounds ')'
2190/:$readableName ParenthesizedCastNameAndBounds:/
2191
2192CastNameAndBounds -> Name AdditionalBoundList
2193/:$compliance 1.8:/
2194/:$readableName CastNameAndBounds:/
2195
Stephan Herrmann234bfec2011-04-26 08:26:58 +00002196OnlyTypeArgumentsForCastExpression ::= OnlyTypeArguments
2197/.$putCase consumeOnlyTypeArgumentsForCastExpression(); $break ./
2198/:$readableName TypeArguments:/
2199
2200InsideCastExpression ::= $empty
2201/.$putCase consumeInsideCastExpression(); $break ./
2202/:$readableName InsideCastExpression:/
2203InsideCastExpressionLL1 ::= $empty
2204/.$putCase consumeInsideCastExpressionLL1(); $break ./
2205/:$readableName InsideCastExpression:/
Stephan Herrmann307ebe32013-05-02 02:46:05 +02002206InsideCastExpressionLL1WithBounds ::= $empty
2207/.$putCase consumeInsideCastExpressionLL1WithBounds (); $break ./
2208/:$readableName InsideCastExpression:/
Stephan Herrmann234bfec2011-04-26 08:26:58 +00002209InsideCastExpressionWithQualifiedGenerics ::= $empty
2210/.$putCase consumeInsideCastExpressionWithQualifiedGenerics(); $break ./
2211/:$readableName InsideCastExpression:/
2212
2213MultiplicativeExpression -> UnaryExpression
2214MultiplicativeExpression ::= MultiplicativeExpression '*' UnaryExpression
2215/.$putCase consumeBinaryExpression(OperatorIds.MULTIPLY); $break ./
2216MultiplicativeExpression ::= MultiplicativeExpression '/' UnaryExpression
2217/.$putCase consumeBinaryExpression(OperatorIds.DIVIDE); $break ./
2218MultiplicativeExpression ::= MultiplicativeExpression '%' UnaryExpression
2219/.$putCase consumeBinaryExpression(OperatorIds.REMAINDER); $break ./
2220/:$readableName Expression:/
2221
2222AdditiveExpression -> MultiplicativeExpression
2223AdditiveExpression ::= AdditiveExpression '+' MultiplicativeExpression
2224/.$putCase consumeBinaryExpression(OperatorIds.PLUS); $break ./
2225AdditiveExpression ::= AdditiveExpression '-' MultiplicativeExpression
2226/.$putCase consumeBinaryExpression(OperatorIds.MINUS); $break ./
2227/:$readableName Expression:/
2228
2229ShiftExpression -> AdditiveExpression
Stephan Herrmann44109d32011-08-02 14:34:26 +00002230ShiftExpression ::= ShiftExpression '<<' AdditiveExpression
Stephan Herrmann234bfec2011-04-26 08:26:58 +00002231/.$putCase consumeBinaryExpression(OperatorIds.LEFT_SHIFT); $break ./
Stephan Herrmann44109d32011-08-02 14:34:26 +00002232ShiftExpression ::= ShiftExpression '>>' AdditiveExpression
Stephan Herrmann234bfec2011-04-26 08:26:58 +00002233/.$putCase consumeBinaryExpression(OperatorIds.RIGHT_SHIFT); $break ./
2234ShiftExpression ::= ShiftExpression '>>>' AdditiveExpression
2235/.$putCase consumeBinaryExpression(OperatorIds.UNSIGNED_RIGHT_SHIFT); $break ./
2236/:$readableName Expression:/
2237
2238RelationalExpression -> ShiftExpression
Stephan Herrmann44109d32011-08-02 14:34:26 +00002239RelationalExpression ::= RelationalExpression '<' ShiftExpression
Stephan Herrmann234bfec2011-04-26 08:26:58 +00002240/.$putCase consumeBinaryExpression(OperatorIds.LESS); $break ./
Stephan Herrmann44109d32011-08-02 14:34:26 +00002241RelationalExpression ::= RelationalExpression '>' ShiftExpression
Stephan Herrmann234bfec2011-04-26 08:26:58 +00002242/.$putCase consumeBinaryExpression(OperatorIds.GREATER); $break ./
2243RelationalExpression ::= RelationalExpression '<=' ShiftExpression
2244/.$putCase consumeBinaryExpression(OperatorIds.LESS_EQUAL); $break ./
2245RelationalExpression ::= RelationalExpression '>=' ShiftExpression
2246/.$putCase consumeBinaryExpression(OperatorIds.GREATER_EQUAL); $break ./
2247/:$readableName Expression:/
2248
2249InstanceofExpression -> RelationalExpression
2250InstanceofExpression ::= InstanceofExpression 'instanceof' ReferenceType
2251/.$putCase consumeInstanceOfExpression(); $break ./
2252/:$readableName Expression:/
2253
2254EqualityExpression -> InstanceofExpression
2255EqualityExpression ::= EqualityExpression '==' InstanceofExpression
2256/.$putCase consumeEqualityExpression(OperatorIds.EQUAL_EQUAL); $break ./
2257EqualityExpression ::= EqualityExpression '!=' InstanceofExpression
2258/.$putCase consumeEqualityExpression(OperatorIds.NOT_EQUAL); $break ./
2259/:$readableName Expression:/
2260
2261AndExpression -> EqualityExpression
2262AndExpression ::= AndExpression '&' EqualityExpression
2263/.$putCase consumeBinaryExpression(OperatorIds.AND); $break ./
2264/:$readableName Expression:/
2265
2266ExclusiveOrExpression -> AndExpression
2267ExclusiveOrExpression ::= ExclusiveOrExpression '^' AndExpression
2268/.$putCase consumeBinaryExpression(OperatorIds.XOR); $break ./
2269/:$readableName Expression:/
2270
2271InclusiveOrExpression -> ExclusiveOrExpression
2272InclusiveOrExpression ::= InclusiveOrExpression '|' ExclusiveOrExpression
2273/.$putCase consumeBinaryExpression(OperatorIds.OR); $break ./
2274/:$readableName Expression:/
2275
2276ConditionalAndExpression -> InclusiveOrExpression
2277ConditionalAndExpression ::= ConditionalAndExpression '&&' InclusiveOrExpression
2278/.$putCase consumeBinaryExpression(OperatorIds.AND_AND); $break ./
2279/:$readableName Expression:/
2280
2281ConditionalOrExpression -> ConditionalAndExpression
2282ConditionalOrExpression ::= ConditionalOrExpression '||' ConditionalAndExpression
2283/.$putCase consumeBinaryExpression(OperatorIds.OR_OR); $break ./
2284/:$readableName Expression:/
2285
2286ConditionalExpression -> ConditionalOrExpression
2287ConditionalExpression ::= ConditionalOrExpression '?' Expression ':' ConditionalExpression
2288/.$putCase consumeConditionalExpression(OperatorIds.QUESTIONCOLON) ; $break ./
2289/:$readableName Expression:/
2290
2291AssignmentExpression -> ConditionalExpression
2292AssignmentExpression -> Assignment
2293/:$readableName Expression:/
2294/:$recovery_template Identifier:/
2295
2296Assignment ::= PostfixExpression AssignmentOperator AssignmentExpression
2297/.$putCase consumeAssignment(); $break ./
2298/:$readableName Assignment:/
2299
2300-- this rule is added to parse an array initializer in a assigment and then report a syntax error knowing the exact senario
2301InvalidArrayInitializerAssignement ::= PostfixExpression AssignmentOperator ArrayInitializer
2302/:$readableName ArrayInitializerAssignment:/
2303/:$recovery:/
2304Assignment ::= InvalidArrayInitializerAssignement
2305/.$putcase ignoreExpressionAssignment();$break ./
2306/:$recovery:/
2307
2308AssignmentOperator ::= '='
2309/.$putCase consumeAssignmentOperator(EQUAL); $break ./
2310AssignmentOperator ::= '*='
2311/.$putCase consumeAssignmentOperator(MULTIPLY); $break ./
2312AssignmentOperator ::= '/='
2313/.$putCase consumeAssignmentOperator(DIVIDE); $break ./
2314AssignmentOperator ::= '%='
2315/.$putCase consumeAssignmentOperator(REMAINDER); $break ./
2316AssignmentOperator ::= '+='
2317/.$putCase consumeAssignmentOperator(PLUS); $break ./
2318AssignmentOperator ::= '-='
2319/.$putCase consumeAssignmentOperator(MINUS); $break ./
2320AssignmentOperator ::= '<<='
2321/.$putCase consumeAssignmentOperator(LEFT_SHIFT); $break ./
2322AssignmentOperator ::= '>>='
2323/.$putCase consumeAssignmentOperator(RIGHT_SHIFT); $break ./
2324AssignmentOperator ::= '>>>='
2325/.$putCase consumeAssignmentOperator(UNSIGNED_RIGHT_SHIFT); $break ./
2326AssignmentOperator ::= '&='
2327/.$putCase consumeAssignmentOperator(AND); $break ./
2328AssignmentOperator ::= '^='
2329/.$putCase consumeAssignmentOperator(XOR); $break ./
2330AssignmentOperator ::= '|='
2331/.$putCase consumeAssignmentOperator(OR); $break ./
2332/:$readableName AssignmentOperator:/
2333/:$recovery_template =:/
2334
Stephan Herrmannc4817302012-07-13 01:31:42 +02002335-- For handling lambda expressions, we need to know when a full Expression
2336-- has been reduced.
2337Expression ::= AssignmentExpression
2338/.$putCase consumeExpression(); $break ./
Stephan Herrmann234bfec2011-04-26 08:26:58 +0000