From 0fcfcc12d7bea6283303ea952ae529b6f478ed50 Mon Sep 17 00:00:00 2001 From: Erik Ernst Date: Fri, 13 Jan 2023 08:56:58 +0000 Subject: [PATCH] Several small corrections, based on SDK issue #50982 Bug: 50982 Change-Id: I786ddb49172702f143dfddda2d3ff6ba0d3c6327 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/279000 Commit-Queue: Erik Ernst Reviewed-by: William Hesse --- tools/spec_parser/Dart.g | 73 +++++++++++++++------------------------- 1 file changed, 27 insertions(+), 46 deletions(-) diff --git a/tools/spec_parser/Dart.g b/tools/spec_parser/Dart.g index b4c65deb9fe..8f14ec4a971 100644 --- a/tools/spec_parser/Dart.g +++ b/tools/spec_parser/Dart.g @@ -4,6 +4,12 @@ // CHANGES: // +// 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 +// precautions are needed in order to parse a part file). Corrected spacing +// in several rules. +// // v0.26 Add missing `metadata` in `partDeclaration`. // // v0.25 Update pattern rules following changes to the patterns feature @@ -112,7 +118,7 @@ import java.util.Stack; public boolean parseLibrary(String filePath) throws RecognitionException { this.filePath = filePath; errorHasOccurred = false; - libraryDefinition(); + startSymbol(); return !errorHasOccurred; } @@ -129,7 +135,7 @@ import java.util.Stack; // neither `async`, `async*`, nor `sync*`. void startNonAsyncFunction() { asyncEtcAreKeywords.push(false); } - // Use this to indicate that we are now leaving any funciton. + // Use this to indicate that we are now leaving any function. void endFunction() { asyncEtcAreKeywords.pop(); } // Whether we can recognize AWAIT/YIELD as an identifier/typeIdentifier. @@ -198,6 +204,11 @@ import java.util.Stack; // ---------------------------------------- Grammar rules. +startSymbol + : libraryDefinition + | partDeclaration + ; + libraryDefinition : FEFF? SCRIPT_TAG? libraryName? @@ -258,11 +269,6 @@ functionSignature : type? identifierNotFUNCTION formalParameterPart ; -functionBodyPrefix - : ASYNC? '=>' - | (ASYNC | ASYNC '*' | SYNC '*')? LBRACE - ; - functionBody : '=>' { startNonAsyncFunction(); } expression { endFunction(); } ';' | { startNonAsyncFunction(); } block { endFunction(); } @@ -608,11 +614,6 @@ stringLiteral : (multiLineString | singleLineString)+ ; -// Not used in the specification (needed here for ). -stringLiteralWithoutInterpolation - : singleStringWithoutInterpolation+ - ; - setOrMapLiteral : CONST? typeArguments? LBRACE elements? RBRACE ; @@ -637,35 +638,35 @@ recordField ; elements - : element (',' element)* ','? + : element (',' element)* ','? ; element - : expressionElement - | mapElement - | spreadElement - | ifElement - | forElement + : expressionElement + | mapElement + | spreadElement + | ifElement + | forElement ; expressionElement - : expression + : expression ; mapElement - : expression ':' expression + : expression ':' expression ; spreadElement - : ('...' | '...?') expression + : ('...' | '...?') expression ; ifElement - : ifCondition element (ELSE element)? + : ifCondition element (ELSE element)? ; forElement - : AWAIT? FOR '(' forLoopParts ')' element + : AWAIT? FOR '(' forLoopParts ')' element ; constructorTearoff @@ -698,10 +699,6 @@ functionExpressionBody | ASYNC '=>' { startAsyncFunction(); } expression { endFunction(); } ; -functionExpressionBodyPrefix - : ASYNC? '=>' - ; - functionExpressionWithoutCascade : formalParameterPart functionExpressionWithoutCascadeBody ; @@ -723,10 +720,6 @@ functionPrimaryBody { startAsyncFunction(); } block { endFunction(); } ; -functionPrimaryBodyPrefix - : (ASYNC | ASYNC '*' | SYNC '*')? LBRACE - ; - thisExpression : THIS ; @@ -1146,7 +1139,7 @@ outerPattern ; patternAssignment - : outerPattern '=' expression + : outerPattern '=' expression ; statements @@ -1353,13 +1346,11 @@ partHeader ; partDeclaration - : partHeader (metadata topLevelDefinition)* EOF + : FEFF? partHeader (metadata topLevelDefinition)* EOF ; -// In the specification a plain is used. -// TODO(eernst): Check whether it creates ambiguities to do that. uri - : stringLiteralWithoutInterpolation + : stringLiteral ; configurableUri @@ -1510,16 +1501,6 @@ symbolLiteral : '#' (operator | (identifier ('.' identifier)*) | VOID) ; -// Not used in the specification (needed here for ). -singleStringWithoutInterpolation - : RAW_SINGLE_LINE_STRING - | RAW_MULTI_LINE_STRING - | SINGLE_LINE_STRING_DQ_BEGIN_END - | SINGLE_LINE_STRING_SQ_BEGIN_END - | MULTI_LINE_STRING_DQ_BEGIN_END - | MULTI_LINE_STRING_SQ_BEGIN_END - ; - singleLineString : RAW_SINGLE_LINE_STRING | SINGLE_LINE_STRING_SQ_BEGIN_END