From ec891471f559f74384fc1103e4d2847c48fab288 Mon Sep 17 00:00:00 2001 From: Erik Ernst Date: Fri, 27 Sep 2024 12:24:40 +0000 Subject: [PATCH] Add support in Dart.g for separators in numeric literals Change-Id: I2b0ba97b9b89803b28358b94959e31276eda3af2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/387222 Commit-Queue: Erik Ernst Reviewed-by: Johnni Winther --- tools/spec_parser/Dart.g | 23 ++++++++++++++++------ tools/spec_parser/dart_spec_parser/Dart.g4 | 23 ++++++++++++++++------ 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/tools/spec_parser/Dart.g b/tools/spec_parser/Dart.g index 43196007bda..fe4af2f3b5d 100644 --- a/tools/spec_parser/Dart.g +++ b/tools/spec_parser/Dart.g @@ -4,6 +4,8 @@ // CHANGES: // +// v0.50 Add support for digit separators in numeric literals. +// // v0.49 Add support for static and top-level members with no implementation. // // v0.48 Add support for enhanced parts. @@ -1734,7 +1736,12 @@ DIGIT fragment EXPONENT - : ('e' | 'E') ('+' | '-')? DIGIT+ + : ('e' | 'E') ('+' | '-')? DIGITS + ; + +fragment +DIGITS + : DIGIT ('_'* DIGIT)* ; fragment @@ -1744,6 +1751,11 @@ HEX_DIGIT | DIGIT ; +fragment +HEX_DIGITS + : HEX_DIGIT ('_'* HEX_DIGIT)* + ; + // Reserved words (if updated, update `reservedWord` as well). ASSERT @@ -2031,14 +2043,13 @@ WHEN // Lexical tokens that are not words. NUMBER - : DIGIT+ '.' DIGIT+ EXPONENT? - | DIGIT+ EXPONENT? - | '.' DIGIT+ EXPONENT? + : DIGITS ('.' DIGITS)? EXPONENT? + | '.' DIGITS EXPONENT? ; HEX_NUMBER - : '0x' HEX_DIGIT+ - | '0X' HEX_DIGIT+ + : '0x' HEX_DIGITS + | '0X' HEX_DIGITS ; RAW_SINGLE_LINE_STRING diff --git a/tools/spec_parser/dart_spec_parser/Dart.g4 b/tools/spec_parser/dart_spec_parser/Dart.g4 index 33bf5733a73..1c8d737d7f3 100644 --- a/tools/spec_parser/dart_spec_parser/Dart.g4 +++ b/tools/spec_parser/dart_spec_parser/Dart.g4 @@ -4,6 +4,8 @@ // CHANGES: // +// v0.51 Add support for digit separators in numeric literals. +// // v0.50 Add support for static and top-level members with no implementation. // // v0.49 Add support for enhanced parts. @@ -1740,7 +1742,12 @@ DIGIT fragment EXPONENT - : ('e' | 'E') ('+' | '-')? DIGIT+ + : ('e' | 'E') ('+' | '-')? DIGITS + ; + +fragment +DIGITS + : DIGIT ('_'* DIGIT)* ; fragment @@ -1750,6 +1757,11 @@ HEX_DIGIT | DIGIT ; +fragment +HEX_DIGITS + : HEX_DIGIT ('_'* HEX_DIGIT)* + ; + // Reserved words (if updated, update `reservedWord` as well). ASSERT @@ -2037,14 +2049,13 @@ WHEN // Lexical tokens that are not words. NUMBER - : DIGIT+ '.' DIGIT+ EXPONENT? - | DIGIT+ EXPONENT? - | '.' DIGIT+ EXPONENT? + : DIGITS ('.' DIGITS)? EXPONENT? + | '.' DIGITS EXPONENT? ; HEX_NUMBER - : '0x' HEX_DIGIT+ - | '0X' HEX_DIGIT+ + : '0x' HEX_DIGITS + | '0X' HEX_DIGITS ; RAW_SINGLE_LINE_STRING