Skip to content

Commit e7fba78

Browse files
Rewire lambda expression in the proper place in the grammar hierarchy
(Lambdas are not primary expressions, but are top level expressions) All the scanner and parser handshake via Vanguard parser and various synthetic tokens are untouched. (so far)
1 parent f568d1a commit e7fba78

33 files changed

+484
-450
lines changed

org.eclipse.jdt.core.compiler.batch/grammar/java.g

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1751,7 +1751,6 @@ PrimaryNoNewArray -> ArrayAccess
17511751
-- Start of rules for JSR 335
17521752
-----------------------------------------------------------------------
17531753

1754-
PrimaryNoNewArray -> LambdaExpression
17551754
PrimaryNoNewArray -> ReferenceExpression
17561755
/:$readableName Expression:/
17571756

@@ -2083,6 +2082,17 @@ CastExpression ::= BeginIntersectionCast PushLPAREN CastNameAndBounds PushRPARE
20832082
/.$putCase consumeCastExpressionLL1WithBounds(); $break ./
20842083
CastExpression ::= PushLPAREN Name Dims AdditionalBoundsListOpt PushRPAREN InsideCastExpression UnaryExpressionNotPlusMinus
20852084
/.$putCase consumeCastExpressionWithNameArray(); $break ./
2085+
--------
2086+
CastExpression ::= PushLPAREN Name OnlyTypeArgumentsForCastExpression Dimsopt AdditionalBoundsListOpt PushRPAREN InsideCastExpression LambdaExpression
2087+
/.$putCase consumeCastExpressionWithGenericsArray(); $break ./
2088+
CastExpression ::= PushLPAREN Name OnlyTypeArgumentsForCastExpression '.' ClassOrInterfaceType Dimsopt AdditionalBoundsListOpt PushRPAREN InsideCastExpressionWithQualifiedGenerics LambdaExpression
2089+
/.$putCase consumeCastExpressionWithQualifiedGenericsArray(); $break ./
2090+
CastExpression ::= PushLPAREN Name PushRPAREN InsideCastExpressionLL1 LambdaExpression
2091+
/.$putCase consumeCastExpressionLL1(); $break ./
2092+
CastExpression ::= BeginIntersectionCast PushLPAREN CastNameAndBounds PushRPAREN InsideCastExpressionLL1WithBounds LambdaExpression
2093+
/.$putCase consumeCastExpressionLL1WithBounds(); $break ./
2094+
CastExpression ::= PushLPAREN Name Dims AdditionalBoundsListOpt PushRPAREN InsideCastExpression LambdaExpression
2095+
/.$putCase consumeCastExpressionWithNameArray(); $break ./
20862096
/:$readableName CastExpression:/
20872097

20882098
AdditionalBoundsListOpt ::= $empty
@@ -2188,14 +2198,16 @@ ConditionalOrExpression ::= ConditionalOrExpression '||' ConditionalAndExpressio
21882198
ConditionalExpression -> ConditionalOrExpression
21892199
ConditionalExpression ::= ConditionalOrExpression '?' Expression ':' ConditionalExpression
21902200
/.$putCase consumeConditionalExpression(OperatorIds.QUESTIONCOLON) ; $break ./
2201+
ConditionalExpression ::= ConditionalOrExpression '?' Expression ':' LambdaExpression
2202+
/.$putCase consumeConditionalExpression(OperatorIds.QUESTIONCOLON) ; $break ./
21912203
/:$readableName Expression:/
21922204

21932205
AssignmentExpression -> ConditionalExpression
21942206
AssignmentExpression -> Assignment
21952207
/:$readableName Expression:/
21962208
/:$recovery_template Identifier:/
21972209

2198-
Assignment ::= PostfixExpression AssignmentOperator AssignmentExpression
2210+
Assignment ::= PostfixExpression AssignmentOperator Expression
21992211
/.$putCase consumeAssignment(); $break ./
22002212
/:$readableName Assignment:/
22012213

@@ -2238,6 +2250,8 @@ AssignmentOperator ::= '|='
22382250
-- has been reduced.
22392251
Expression ::= AssignmentExpression
22402252
/.$putCase consumeExpression(); $break ./
2253+
Expression ::= LambdaExpression
2254+
/.$putCase consumeExpression(); $break ./
22412255
/:$readableName Expression:/
22422256
/:$recovery_template Identifier:/
22432257

@@ -2843,6 +2857,7 @@ AssignmentExpression_NotName -> Assignment
28432857
/:$readableName Expression:/
28442858

28452859
Expression_NotName -> AssignmentExpression_NotName
2860+
Expression_NotName -> LambdaExpression
28462861
/:$readableName Expression:/
28472862
-----------------------------------------------
28482863
-- 1.5 features : end of generics
@@ -3119,3 +3134,4 @@ UNDERSCORE ::= '_'
31193134

31203135
$end
31213136
-- need a carriage return after the $end
3137+

org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/Parser.java

Lines changed: 323 additions & 307 deletions
Large diffs are not rendered by default.

org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/ParserBasicInformation.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,20 @@ public interface ParserBasicInformation {
2222

2323
ERROR_SYMBOL = 138,
2424
MAX_NAME_LENGTH = 41,
25-
NUM_STATES = 1223,
25+
NUM_STATES = 1194,
2626

2727
NT_OFFSET = 138,
28-
SCOPE_UBOUND = 310,
29-
SCOPE_SIZE = 311,
30-
LA_STATE_OFFSET = 17648,
28+
SCOPE_UBOUND = 320,
29+
SCOPE_SIZE = 321,
30+
LA_STATE_OFFSET = 17560,
3131
MAX_LA = 1,
32-
NUM_RULES = 926,
32+
NUM_RULES = 933,
3333
NUM_TERMINALS = 138,
3434
NUM_NON_TERMINALS = 425,
3535
NUM_SYMBOLS = 563,
36-
START_STATE = 1015,
37-
EOFT_SYMBOL = 39,
38-
EOLT_SYMBOL = 39,
39-
ACCEPT_ACTION = 17647,
40-
ERROR_ACTION = 17648;
36+
START_STATE = 1486,
37+
EOFT_SYMBOL = 63,
38+
EOLT_SYMBOL = 63,
39+
ACCEPT_ACTION = 17559,
40+
ERROR_ACTION = 17560;
4141
}

org.eclipse.jdt.core.compiler.batch/src/org/eclipse/jdt/internal/compiler/parser/TerminalToken.java

Lines changed: 86 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -44,87 +44,87 @@ public enum TerminalToken {
4444
TokenNameCOMMENT_MARKDOWN(1005),
4545

4646
// BEGIN_AUTOGENERATED_REGION
47-
TokenNameIdentifier(22),
48-
TokenNameabstract(43),
49-
TokenNameassert(81),
47+
TokenNameIdentifier(12),
48+
TokenNameabstract(41),
49+
TokenNameassert(79),
5050
TokenNameboolean(104),
51-
TokenNamebreak(82),
51+
TokenNamebreak(80),
5252
TokenNamebyte(105),
5353
TokenNamecase(106),
5454
TokenNamecatch(107),
5555
TokenNamechar(108),
56-
TokenNameclass(71),
57-
TokenNamecontinue(83),
56+
TokenNameclass(68),
57+
TokenNamecontinue(81),
5858
TokenNameconst(136),
59-
TokenNamedefault(77),
60-
TokenNamedo(84),
59+
TokenNamedefault(74),
60+
TokenNamedo(82),
6161
TokenNamedouble(109),
62-
TokenNameelse(119),
63-
TokenNameenum(75),
62+
TokenNameelse(118),
63+
TokenNameenum(71),
6464
TokenNameextends(92),
65-
TokenNamefalse(53),
66-
TokenNamefinal(44),
65+
TokenNamefalse(51),
66+
TokenNamefinal(42),
6767
TokenNamefinally(117),
6868
TokenNamefloat(110),
69-
TokenNamefor(85),
69+
TokenNamefor(83),
7070
TokenNamegoto(137),
71-
TokenNameif(86),
71+
TokenNameif(84),
7272
TokenNameimplements(132),
7373
TokenNameimport(111),
74-
TokenNameinstanceof(17),
74+
TokenNameinstanceof(18),
7575
TokenNameint(112),
76-
TokenNameinterface(72),
76+
TokenNameinterface(69),
7777
TokenNamelong(113),
78-
TokenNamenative(45),
79-
TokenNamenew(38),
80-
TokenNamenon_sealed(46),
81-
TokenNamenull(54),
78+
TokenNamenative(43),
79+
TokenNamenew(37),
80+
TokenNamenon_sealed(44),
81+
TokenNamenull(52),
8282
TokenNamepackage(91),
83-
TokenNameprivate(47),
84-
TokenNameprotected(48),
85-
TokenNamepublic(49),
86-
TokenNamereturn(87),
83+
TokenNameprivate(45),
84+
TokenNameprotected(46),
85+
TokenNamepublic(47),
86+
TokenNamereturn(85),
8787
TokenNameshort(114),
88-
TokenNamestatic(40),
89-
TokenNamestrictfp(50),
90-
TokenNamesuper(35),
91-
TokenNameswitch(65),
92-
TokenNamesynchronized(41),
93-
TokenNamethis(36),
94-
TokenNamethrow(79),
95-
TokenNamethrows(120),
96-
TokenNametransient(51),
97-
TokenNametrue(55),
98-
TokenNametry(88),
88+
TokenNamestatic(38),
89+
TokenNamestrictfp(48),
90+
TokenNamesuper(33),
91+
TokenNameswitch(62),
92+
TokenNamesynchronized(39),
93+
TokenNamethis(34),
94+
TokenNamethrow(77),
95+
TokenNamethrows(119),
96+
TokenNametransient(49),
97+
TokenNametrue(53),
98+
TokenNametry(86),
9999
TokenNamevoid(115),
100-
TokenNamevolatile(52),
101-
TokenNamewhile(80),
100+
TokenNamevolatile(50),
101+
TokenNamewhile(78),
102102
TokenNamemodule(116),
103-
TokenNameopen(121),
104-
TokenNamerequires(122),
103+
TokenNameopen(120),
104+
TokenNamerequires(121),
105105
TokenNametransitive(127),
106-
TokenNameexports(123),
107-
TokenNameopens(124),
106+
TokenNameexports(122),
107+
TokenNameopens(123),
108108
TokenNameto(133),
109-
TokenNameuses(125),
110-
TokenNameprovides(126),
109+
TokenNameuses(124),
110+
TokenNameprovides(125),
111111
TokenNamewith(134),
112-
TokenNameIntegerLiteral(56),
113-
TokenNameLongLiteral(57),
114-
TokenNameFloatingPointLiteral(58),
115-
TokenNameDoubleLiteral(59),
116-
TokenNameCharacterLiteral(60),
117-
TokenNameStringLiteral(61),
118-
TokenNameTextBlock(62),
112+
TokenNameIntegerLiteral(54),
113+
TokenNameLongLiteral(55),
114+
TokenNameFloatingPointLiteral(56),
115+
TokenNameDoubleLiteral(57),
116+
TokenNameCharacterLiteral(58),
117+
TokenNameStringLiteral(59),
118+
TokenNameTextBlock(60),
119119
TokenNamePLUS_PLUS(2),
120120
TokenNameMINUS_MINUS(3),
121-
TokenNameEQUAL_EQUAL(19),
122-
TokenNameLESS_EQUAL(12),
123-
TokenNameGREATER_EQUAL(13),
124-
TokenNameNOT_EQUAL(20),
125-
TokenNameLEFT_SHIFT(18),
126-
TokenNameRIGHT_SHIFT(14),
127-
TokenNameUNSIGNED_RIGHT_SHIFT(16),
121+
TokenNameEQUAL_EQUAL(21),
122+
TokenNameLESS_EQUAL(14),
123+
TokenNameGREATER_EQUAL(15),
124+
TokenNameNOT_EQUAL(22),
125+
TokenNameLEFT_SHIFT(19),
126+
TokenNameRIGHT_SHIFT(13),
127+
TokenNameUNSIGNED_RIGHT_SHIFT(17),
128128
TokenNamePLUS_EQUAL(93),
129129
TokenNameMINUS_EQUAL(94),
130130
TokenNameMULTIPLY_EQUAL(95),
@@ -140,47 +140,47 @@ public enum TerminalToken {
140140
TokenNameAND_AND(30),
141141
TokenNamePLUS(4),
142142
TokenNameMINUS(5),
143-
TokenNameNOT(67),
144-
TokenNameREMAINDER(9),
145-
TokenNameXOR(25),
146-
TokenNameAND(21),
147-
TokenNameMULTIPLY(8),
143+
TokenNameNOT(64),
144+
TokenNameREMAINDER(10),
145+
TokenNameXOR(27),
146+
TokenNameAND(23),
147+
TokenNameMULTIPLY(9),
148148
TokenNameOR(28),
149-
TokenNameTWIDDLE(68),
150-
TokenNameDIVIDE(10),
151-
TokenNameGREATER(15),
152-
TokenNameLESS(11),
153-
TokenNameLPAREN(23),
154-
TokenNameRPAREN(24),
155-
TokenNameLBRACE(63),
156-
TokenNameRBRACE(33),
149+
TokenNameTWIDDLE(65),
150+
TokenNameDIVIDE(11),
151+
TokenNameGREATER(16),
152+
TokenNameLESS(7),
153+
TokenNameLPAREN(20),
154+
TokenNameRPAREN(25),
155+
TokenNameLBRACE(61),
156+
TokenNameRBRACE(35),
157157
TokenNameLBRACKET(6),
158-
TokenNameRBRACKET(70),
158+
TokenNameRBRACKET(73),
159159
TokenNameSEMICOLON(26),
160160
TokenNameQUESTION(29),
161-
TokenNameCOLON(66),
161+
TokenNameCOLON(70),
162162
TokenNameCOMMA(32),
163163
TokenNameDOT(1),
164-
TokenNameEQUAL(78),
165-
TokenNameAT(37),
164+
TokenNameEQUAL(76),
165+
TokenNameAT(36),
166166
TokenNameELLIPSIS(128),
167-
TokenNameARROW(118),
168-
TokenNameCOLON_COLON(7),
169-
TokenNameBeginLambda(64),
170-
TokenNameBeginIntersectionCast(69),
171-
TokenNameBeginTypeArguments(89),
172-
TokenNameElidedSemicolonAndRightBrace(73),
173-
TokenNameAT308(27),
167+
TokenNameARROW(126),
168+
TokenNameCOLON_COLON(8),
169+
TokenNameBeginLambda(75),
170+
TokenNameBeginIntersectionCast(67),
171+
TokenNameBeginTypeArguments(87),
172+
TokenNameElidedSemicolonAndRightBrace(88),
173+
TokenNameAT308(24),
174174
TokenNameAT308DOTDOTDOT(135),
175-
TokenNameCaseArrow(74),
175+
TokenNameCaseArrow(89),
176176
TokenNameRestrictedIdentifierYield(90),
177-
TokenNameRestrictedIdentifierrecord(76),
178-
TokenNameRestrictedIdentifiersealed(42),
177+
TokenNameRestrictedIdentifierrecord(72),
178+
TokenNameRestrictedIdentifiersealed(40),
179179
TokenNameRestrictedIdentifierpermits(129),
180180
TokenNameBeginCasePattern(130),
181181
TokenNameRestrictedIdentifierWhen(131),
182-
TokenNameUNDERSCORE(34),
183-
TokenNameEOF(39),
182+
TokenNameUNDERSCORE(66),
183+
TokenNameEOF(63),
184184
TokenNameERROR(138);
185185

186186
// END_AUTOGENERATED_REGION
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)