Correct enumEntry, cf. https://github.com/dart-lang/language/pull/2773

Change-Id: Ia2a5565b4162cff9e53bdb699da59cd6d52a04a5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/279010
Commit-Queue: Erik Ernst <eernst@google.com>
Reviewed-by: William Hesse <whesse@google.com>
diff --git a/tools/spec_parser/Dart.g b/tools/spec_parser/Dart.g
index 8f14ec4..89d964a 100644
--- a/tools/spec_parser/Dart.g
+++ b/tools/spec_parser/Dart.g
@@ -4,6 +4,9 @@
 
 // CHANGES:
 //
+// v0.28 Add support for `new` in `enumEntry`, e.g., `enum E { x.new(); }`.
+// Add `identifierOrNew` non-terminal to simplify the grammar.
+//
 // v0.27 Remove unused non-terminals; make handling of interpolation in URIs
 // consistent with the language specification. Make `partDeclaration` a
 // start symbol in addition to `libraryDefinition` (such that no special
@@ -472,11 +475,17 @@
     ;
 
 constructorName
-    :    typeIdentifier ('.' (identifier | NEW))?
+    :    typeIdentifier ('.' identifierOrNew)?
+    ;
+
+// TODO: Add this in the language specification, use it in grammar rules.
+identifierOrNew
+    :    identifier
+    |    NEW
     ;
 
 redirection
-    :    ':' THIS ('.' (identifier | NEW))? arguments
+    :    ':' THIS ('.' identifierOrNew)? arguments
     ;
 
 initializers
@@ -485,7 +494,7 @@
 
 initializerListEntry
     :    SUPER arguments
-    |    SUPER '.' (identifier | NEW) arguments
+    |    SUPER '.' identifierOrNew arguments
     |    fieldInitializer
     |    assertion
     ;
@@ -525,7 +534,7 @@
 
 enumEntry
     :    metadata identifier argumentPart?
-    |    metadata identifier typeArguments? '.' identifier arguments
+    |    metadata identifier typeArguments? '.' identifierOrNew arguments
     ;
 
 typeParameter
@@ -976,8 +985,8 @@
     ;
 
 qualifiedName
-    :    typeIdentifier '.' (identifier | NEW)
-    |    typeIdentifier '.' typeIdentifier '.' (identifier | NEW)
+    :    typeIdentifier '.' identifierOrNew
+    |    typeIdentifier '.' typeIdentifier '.' identifierOrNew
     ;
 
 typeIdentifier
@@ -1494,7 +1503,7 @@
 constructorDesignation
     :    typeIdentifier
     |    qualifiedName
-    |    typeName typeArguments ('.' (identifier | NEW))?
+    |    typeName typeArguments ('.' identifierOrNew)?
     ;
 
 symbolLiteral