@@ -296,14 +296,14 @@ hexDigit = [0-9A-Fa-f]
296296CHAR_ESCAPE_SEQUENCE = \\ [^\r\n]
297297UNICODE_ESCAPE = \\ u+ {hexDigit}{hexDigit}{hexDigit}{hexDigit} // Scala supports 1. multiple `u` chars after `\` 2. even \u000A ('\n') and \u000D (unlike Java)
298298ESCAPE_SEQUENCE = {UNICODE_ESCAPE} | {CHAR_ESCAPE_SEQUENCE}
299- CHARACTER_LITERAL = "'" ( [^ \\\' \r\n] | {ESCAPE_SEQUENCE} | {OCTAL_ESCAPE_LITERAL} )( "'" | \\ ) | \'\\ u000A\' | "'''" // TODO: \'\\u000A\' is redundunt, remove
299+ CHARACTER_LITERAL = "'" ( [^ \\\' \r\n] | {ESCAPE_SEQUENCE} | {OCTAL_ESCAPE_LITERAL} )( "'" | \\ ) | \'\\ u000A\' // TODO: \'\\u000A\' is redundunt, remove
300300
301301STRING_BEGIN = \" ( [^ \\\" \r\n] | {CHAR_ESCAPE_SEQUENCE} )*
302302STRING_LITERAL = {STRING_BEGIN} \"
303303MULTI_LINE_STRING = \"\"\" ( ( \" ( \" )?)? [^ \" ] )* \"\"\" ( \" )* // Multi-line string
304304
305305// Dedented string literals (Scala 3) - uses single quotes
306- DEDENTED_STRING = \'\'\' + ( ( \' ( \' )?)? [^ \' ] )* \'\'\' + // Dedented multiline string
306+ DEDENTED_STRING = \'\'\' ( ( \' ( \' )?)? [^ \' ] )* \'\'\' ( \' )* // Dedented multiline string
307307
308308// //////String Interpolation////////
309309INTERPOLATED_STRING_ID = {varid}
@@ -561,11 +561,11 @@ XML_BEGIN = "<" ("_" | [:jletter:]) | "<!--" | "<?" ("_" | [:jletter:]) | "<![CD
561561
562562{MULTI_LINE_STRING} { return process(tMULTILINE_STRING); }
563563
564- {DEDENTED_STRING} { if (isScala3) return process(tDEDENTED_STRING); else return process(tIDENTIFIER); }
565-
566564// TODO: incomplete strings should be handled the same way with interpolated strings
567565// what can be parsed should be parsed as tSTRING,
568566// tWRONG_LINE_BREAK_IN_STRING error token should be added at unexpected new line should
567+ {DEDENTED_STRING} { if (isScala3) return process(tDEDENTED_STRING); else return process(tIDENTIFIER); }
568+
569569{WRONG_STRING} { return process(tWRONG_STRING); }
570570
571571
0 commit comments