text: /*
   * The MIT License (MIT)
   *
   * Copyright (c) 2014 by Bart Kiers (original author) and Alexandre Vitorelli (contributor -> ported to CSharp)
   * Copyright (c) 2017 by Ivan Kochurkin (Positive Technologies):
      added ECMAScript 6 support, cleared and transformed to the universal grammar.
   * Copyright (c) 2018 by Juan Alvarez (contributor -> ported to Go)
   * Copyright (c) 2019 by Student Main (contributor -> ES2020)
   *
   * Permission is hereby granted, free of charge, to any person
   * obtaining a copy of this software and associated documentation
   * files (the "Software"), to deal in the Software without
   * restriction, including without limitation the rights to use,
   * copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the
   * Software is furnished to do so, subject to the following
   * conditions:
   *
   * The above copyright notice and this permission notice shall be
   * included in all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
   * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
   * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
   * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
   * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
   * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
   * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
   * OTHER DEALINGS IN THE SOFTWARE.
   */
  lexer grammar JavaScriptLexer;
  
  channels { ERROR }
  
  options { superClass=JavaScriptBaseLexer; }
  
  HashBangLine:                   { p.IsStartOfFile()}? '#!' ~[\r\n\u2028\u2029]*; // only allowed at start
  MultiLineComment:               '/*' .*? '*/'             -> channel(HIDDEN);
  SingleLineComment:              '//' ~[\r\n\u2028\u2029]* -> channel(HIDDEN);
  RegularExpressionLiteral:       '/' RegularExpressionFirstChar RegularExpressionChar* {p.IsRegexPossible()}? '/' IdentifierPart*;
  
  OpenBracket:                    '[';
  CloseBracket:                   ']';
  OpenParen:                      '(';
  CloseParen:                     ')';
  OpenBrace:                      '{' {l.ProcessOpenBrace();};
  CloseBrace:                     '}' {l.ProcessCloseBrace();};
  SemiColon:                      ';';
  Comma:                          ',';
  Assign:                         '=';
  QuestionMark:                   '?';
  Colon:                          ':';
  Ellipsis:                       '...';
  Dot:                            '.';
  PlusPlus:                       '++';
  MinusMinus:                     '--';
  Plus:                           '+';
  Minus:                          '-';
  BitNot:                         '~';
  Not:                            '!';
  Multiply:                       '*';
  Divide:                         '/';
  Modulus:                        '%';
  Power:                          '**';
  NullCoalesce:                   '??';
  Hashtag:                        '#';
  RightShiftArithmetic:           '>>';
  LeftShiftArithmetic:            '<<';
  RightShiftLogical:              '>>>';
  LessThan:                       '<';
  MoreThan:                       '>';
  LessThanEquals:                 '<=';
  GreaterThanEquals:              '>=';
  Equals_:                        '==';
  NotEquals:                      '!=';
  IdentityEquals:                 '===';
  IdentityNotEquals:              '!==';
  BitAnd:                         '&';
  BitXOr:                         '^';
  BitOr:                          '|';
  And:                            '&&';
  Or:                             '||';
  MultiplyAssign:                 '*=';
  DivideAssign:                   '/=';
  ModulusAssign:                  '%=';
  PlusAssign:                     '+=';
  MinusAssign:                    '-=';
  LeftShiftArithmeticAssign:      '<<=';
  RightShiftArithmeticAssign:     '>>=';
  RightShiftLogicalAssign:        '>>>=';
  BitAndAssign:                   '&=';
  BitXorAssign:                   '^=';
  BitOrAssign:                    '|=';
  PowerAssign:                    '**=';
  ARROW:                          '=>';
  
  /// Null Literals
  
  NullLiteral:                    'null';
  
  /// Boolean Literals
  
  BooleanLiteral:                 'true'
                |                 'false';
  
  /// Numeric Literals
  
  DecimalLiteral:                 DecimalIntegerLiteral '.' [0-9] [0-9_]* ExponentPart?
                |                 '.' [0-9] [0-9_]* ExponentPart?
                |                 DecimalIntegerLiteral ExponentPart?
                ;
  
  /// Numeric Literals
  
  HexIntegerLiteral:              '0' [xX] [0-9a-fA-F] HexDigit*;
  OctalIntegerLiteral:            '0' [0-7]+ {!p.IsStrictMode()}?;
  OctalIntegerLiteral2:           '0' [oO] [0-7] [_0-7]*;
  BinaryIntegerLiteral:           '0' [bB] [01] [_01]*;
  
  BigHexIntegerLiteral:           '0' [xX] [0-9a-fA-F] HexDigit* 'n';
  BigOctalIntegerLiteral:         '0' [oO] [0-7] [_0-7]* 'n';
  BigBinaryIntegerLiteral:        '0' [bB] [01] [_01]* 'n';
  BigDecimalIntegerLiteral:       DecimalIntegerLiteral 'n';
  
  /// Keywords
  
  Break:                          'break';
  Do:                             'do';
  Instanceof:                     'instanceof';
  Typeof:                         'typeof';
  Case:                           'case';
  Else:                           'else';
  New:                            'new';
  Var:                            'var';
  Catch:                          'catch';
  Finally:                        'finally';
  Return:                         'return';
  Void:                           'void';
  Continue:                       'continue';
  For:                            'for';
  Switch:                         'switch';
  While:                          'while';
  Debugger:                       'debugger';
  Function:                       'function';
  This:                           'this';
  With:                           'with';
  Default:                        'default';
  If:                             'if';
  Throw:                          'throw';
  Delete:                         'delete';
  In:                             'in';
  Try:                            'try';
  As:                             'as';
  From:                           'from';
  
  /// Future Reserved Words
  
  Class:                          'class';
  Enum:                           'enum';
  Extends:                        'extends';
  Super:                          'super';
  Const:                          'const';
  Export:                         'export';
  Import:                         'import';
  
  Async:                          'async';
  Await:                          'await';
  
  /// The following tokens are also considered to be FutureReservedWords
  /// when parsing strict mode
  
  Implements:                     'implements' {p.IsStrictMode()}?;
  Let:                            'let' {p.IsStrictMode()}?;
  Private:                        'private' {p.IsStrictMode()}?;
  Public:                         'public' {p.IsStrictMode()}?;
  Interface:                      'interface' {p.IsStrictMode()}?;
  Package:                        'package' {p.IsStrictMode()}?;
  Protected:                      'protected' {p.IsStrictMode()}?;
  Static:                         'static' {p.IsStrictMode()}?;
  Yield:                          'yield' {p.IsStrictMode()}?;
  
  /// Identifier Names and Identifiers
  
  Identifier:                     IdentifierStart IdentifierPart*;
  /// String Literals
  StringLiteral:                 ('"' DoubleStringCharacter* '"'
               |                  '\'' SingleStringCharacter* '\'') {l.ProcessStringLiteral();}
               ;
  
  // TODO: `${`tmp`}`
  TemplateStringLiteral:          '`' ('\\`' | ~'`')* '`';
  
  WhiteSpaces:                    [\t\u000B\u000C\u0020\u00A0]+ -> channel(HIDDEN);
  
  LineTerminator:                 [\r\n\u2028\u2029] -> channel(HIDDEN);
  
  /// Comments
  
  
  HtmlComment:                    '<!--' .*? '-->' -> channel(HIDDEN);
  CDataComment:                   '<![CDATA[' .*? ']]>' -> channel(HIDDEN);
  UnexpectedCharacter:            . -> channel(ERROR);
  
  // Fragment rules
  
  fragment DoubleStringCharacter
      : ~["\\\r\n]
      | '\\' EscapeSequence
      | LineContinuation
      ;
  
  fragment SingleStringCharacter
      : ~['\\\r\n]
      | '\\' EscapeSequence
      | LineContinuation
      ;
  
  fragment EscapeSequence
      : CharacterEscapeSequence
      | '0' // no digit ahead! TODO
      | HexEscapeSequence
      | UnicodeEscapeSequence
      | ExtendedUnicodeEscapeSequence
      ;
  
  fragment CharacterEscapeSequence
      : SingleEscapeCharacter
      | NonEscapeCharacter
      ;
  
  fragment HexEscapeSequence
      : 'x' HexDigit HexDigit
      ;
  
  fragment UnicodeEscapeSequence
      : 'u' HexDigit HexDigit HexDigit HexDigit
      | 'u' '{' HexDigit HexDigit+ '}'
      ;
  
  fragment ExtendedUnicodeEscapeSequence
      : 'u' '{' HexDigit+ '}'
      ;
  
  fragment SingleEscapeCharacter
      : ['"\\bfnrtv]
      ;
  
  fragment NonEscapeCharacter
      : ~['"\\bfnrtv0-9xu\r\n]
      ;
  
  fragment EscapeCharacter
      : SingleEscapeCharacter
      | [0-9]
      | [xu]
      ;
  
  fragment LineContinuation
      : '\\' [\r\n\u2028\u2029]
      ;
  
  fragment HexDigit
      : [_0-9a-fA-F]
      ;
  
  fragment DecimalIntegerLiteral
      : '0'
      | [1-9] [0-9_]*
      ;
  
  fragment ExponentPart
      : [eE] [+-]? [0-9_]+
      ;
  
  fragment IdentifierPart
      : IdentifierStart
      | UnicodeCombiningMark
      | UnicodeDigit
      | UnicodeConnectorPunctuation
      | '\u200C'
      | '\u200D'
      ;
  
  fragment IdentifierStart
      : UnicodeLetter
      | [$_]
      | '\\' UnicodeEscapeSequence
      ;
  
  fragment UnicodeLetter
      : [\u0041-\u005A]
      | [\u0061-\u007A]
      | [\u00AA]
      | [\u00B5]
      | [\u00BA]
      | [\u00C0-\u00D6]
      | [\u00D8-\u00F6]
      | [\u00F8-\u021F]
      | [\u0222-\u0233]
      | [\u0250-\u02AD]
      | [\u02B0-\u02B8]
      | [\u02BB-\u02C1]
      | [\u02D0-\u02D1]
      | [\u02E0-\u02E4]
      | [\u02EE]
      | [\u037A]
      | [\u0386]
      | [\u0388-\u038A]
      | [\u038C]
      | [\u038E-\u03A1]
      | [\u03A3-\u03CE]
      | [\u03D0-\u03D7]
      | [\u03DA-\u03F3]
      | [\u0400-\u0481]
      | [\u048C-\u04C4]
      | [\u04C7-\u04C8]
      | [\u04CB-\u04CC]
      | [\u04D0-\u04F5]
      | [\u04F8-\u04F9]
      | [\u0531-\u0556]
      | [\u0559]
      | [\u0561-\u0587]
      | [\u05D0-\u05EA]
      | [\u05F0-\u05F2]
      | [\u0621-\u063A]
      | [\u0640-\u064A]
      | [\u0671-\u06D3]
      | [\u06D5]
      | [\u06E5-\u06E6]
      | [\u06FA-\u06FC]
      | [\u0710]
      | [\u0712-\u072C]
      | [\u0780-\u07A5]
      | [\u0905-\u0939]
      | [\u093D]
      | [\u0950]
      | [\u0958-\u0961]
      | [\u0985-\u098C]
      | [\u098F-\u0990]
      | [\u0993-\u09A8]
      | [\u09AA-\u09B0]
      | [\u09B2]
      | [\u09B6-\u09B9]
      | [\u09DC-\u09DD]
      | [\u09DF-\u09E1]
      | [\u09F0-\u09F1]
      | [\u0A05-\u0A0A]
      | [\u0A0F-\u0A10]
      | [\u0A13-\u0A28]
      | [\u0A2A-\u0A30]
      | [\u0A32-\u0A33]
      | [\u0A35-\u0A36]
      | [\u0A38-\u0A39]
      | [\u0A59-\u0A5C]
      | [\u0A5E]
      | [\u0A72-\u0A74]
      | [\u0A85-\u0A8B]
      | [\u0A8D]
      | [\u0A8F-\u0A91]
      | [\u0A93-\u0AA8]
      | [\u0AAA-\u0AB0]
      | [\u0AB2-\u0AB3]
      | [\u0AB5-\u0AB9]
      | [\u0ABD]
      | [\u0AD0]
      | [\u0AE0]
      | [\u0B05-\u0B0C]
      | [\u0B0F-\u0B10]
      | [\u0B13-\u0B28]
      | [\u0B2A-\u0B30]
      | [\u0B32-\u0B33]
      | [\u0B36-\u0B39]
      | [\u0B3D]
      | [\u0B5C-\u0B5D]
      | [\u0B5F-\u0B61]
      | [\u0B85-\u0B8A]
      | [\u0B8E-\u0B90]
      | [\u0B92-\u0B95]
      | [\u0B99-\u0B9A]
      | [\u0B9C]
      | [\u0B9E-\u0B9F]
      | [\u0BA3-\u0BA4]
      | [\u0BA8-\u0BAA]
      | [\u0BAE-\u0BB5]
      | [\u0BB7-\u0BB9]
      | [\u0C05-\u0C0C]
      | [\u0C0E-\u0C10]
      | [\u0C12-\u0C28]
      | [\u0C2A-\u0C33]
      | [\u0C35-\u0C39]
      | [\u0C60-\u0C61]
      | [\u0C85-\u0C8C]
      | [\u0C8E-\u0C90]
      | [\u0C92-\u0CA8]
      | [\u0CAA-\u0CB3]
      | [\u0CB5-\u0CB9]
      | [\u0CDE]
      | [\u0CE0-\u0CE1]
      | [\u0D05-\u0D0C]
      | [\u0D0E-\u0D10]
      | [\u0D12-\u0D28]
      | [\u0D2A-\u0D39]
      | [\u0D60-\u0D61]
      | [\u0D85-\u0D96]
      | [\u0D9A-\u0DB1]
      | [\u0DB3-\u0DBB]
      | [\u0DBD]
      | [\u0DC0-\u0DC6]
      | [\u0E01-\u0E30]
      | [\u0E32-\u0E33]
      | [\u0E40-\u0E46]
      | [\u0E81-\u0E82]
      | [\u0E84]
      | [\u0E87-\u0E88]
      | [\u0E8A]
      | [\u0E8D]
      | [\u0E94-\u0E97]
      | [\u0E99-\u0E9F]
      | [\u0EA1-\u0EA3]
      | [\u0EA5]
      | [\u0EA7]
      | [\u0EAA-\u0EAB]
      | [\u0EAD-\u0EB0]
      | [\u0EB2-\u0EB3]
      | [\u0EBD-\u0EC4]
      | [\u0EC6]
      | [\u0EDC-\u0EDD]
      | [\u0F00]
      | [\u0F40-\u0F6A]
      | [\u0F88-\u0F8B]
      | [\u1000-\u1021]
      | [\u1023-\u1027]
      | [\u1029-\u102A]
      | [\u1050-\u1055]
      | [\u10A0-\u10C5]
      | [\u10D0-\u10F6]
      | [\u1100-\u1159]
      | [\u115F-\u11A2]
      | [\u11A8-\u11F9]
      | [\u1200-\u1206]
      | [\u1208-\u1246]
      | [\u1248]
      | [\u124A-\u124D]
      | [\u1250-\u1256]
      | [\u1258]
      | [\u125A-\u125D]
      | [\u1260-\u1286]
      | [\u1288]
      | [\u128A-\u128D]
      | [\u1290-\u12AE]
      | [\u12B0]
      | [\u12B2-\u12B5]
      | [\u12B8-\u12BE]
      | [\u12C0]
      | [\u12C2-\u12C5]
      | [\u12C8-\u12CE]
      | [\u12D0-\u12D6]
      | [\u12D8-\u12EE]
      | [\u12F0-\u130E]
      | [\u1310]
      | [\u1312-\u1315]
      | [\u1318-\u131E]
      | [\u1320-\u1346]
      | [\u1348-\u135A]
      | [\u13A0-\u13B0]
      | [\u13B1-\u13F4]
      | [\u1401-\u1676]
      | [\u1681-\u169A]
      | [\u16A0-\u16EA]
      | [\u1780-\u17B3]
      | [\u1820-\u1877]
      | [\u1880-\u18A8]
      | [\u1E00-\u1E9B]
      | [\u1EA0-\u1EE0]
      | [\u1EE1-\u1EF9]
      | [\u1F00-\u1F15]
      | [\u1F18-\u1F1D]
      | [\u1F20-\u1F39]
      | [\u1F3A-\u1F45]
      | [\u1F48-\u1F4D]
      | [\u1F50-\u1F57]
      | [\u1F59]
      | [\u1F5B]
      | [\u1F5D]
      | [\u1F5F-\u1F7D]
      | [\u1F80-\u1FB4]
      | [\u1FB6-\u1FBC]
      | [\u1FBE]
      | [\u1FC2-\u1FC4]
      | [\u1FC6-\u1FCC]
      | [\u1FD0-\u1FD3]
      | [\u1FD6-\u1FDB]
      | [\u1FE0-\u1FEC]
      | [\u1FF2-\u1FF4]
      | [\u1FF6-\u1FFC]
      | [\u207F]
      | [\u2102]
      | [\u2107]
      | [\u210A-\u2113]
      | [\u2115]
      | [\u2119-\u211D]
      | [\u2124]
      | [\u2126]
      | [\u2128]
      | [\u212A-\u212D]
      | [\u212F-\u2131]
      | [\u2133-\u2139]
      | [\u2160-\u2183]
      | [\u3005-\u3007]
      | [\u3021-\u3029]
      | [\u3031-\u3035]
      | [\u3038-\u303A]
      | [\u3041-\u3094]
      | [\u309D-\u309E]
      | [\u30A1-\u30FA]
      | [\u30FC-\u30FE]
      | [\u3105-\u312C]
      | [\u3131-\u318E]
      | [\u31A0-\u31B7]
      | [\u3400-\u4DBF]
      | [\u4E00-\u9FFF]
      | [\uA000-\uA48C]
      | [\uAC00]
      | [\uD7A3]
      | [\uF900-\uFA2D]
      | [\uFB00-\uFB06]
      | [\uFB13-\uFB17]
      | [\uFB1D]
      | [\uFB1F-\uFB28]
      | [\uFB2A-\uFB36]
      | [\uFB38-\uFB3C]
      | [\uFB3E]
      | [\uFB40-\uFB41]
      | [\uFB43-\uFB44]
      | [\uFB46-\uFBB1]
      | [\uFBD3-\uFD3D]
      | [\uFD50-\uFD8F]
      | [\uFD92-\uFDC7]
      | [\uFDF0-\uFDFB]
      | [\uFE70-\uFE72]
      | [\uFE74]
      | [\uFE76-\uFEFC]
      | [\uFF21-\uFF3A]
      | [\uFF41-\uFF5A]
      | [\uFF66-\uFFBE]
      | [\uFFC2-\uFFC7]
      | [\uFFCA-\uFFCF]
      | [\uFFD2-\uFFD7]
      | [\uFFDA-\uFFDC]
      ;
  
  fragment UnicodeCombiningMark
      : [\u0300-\u034E]
      | [\u0360-\u0362]
      | [\u0483-\u0486]
      | [\u0591-\u05A1]
      | [\u05A3-\u05B9]
      | [\u05BB-\u05BD]
      | [\u05BF]
      | [\u05C1-\u05C2]
      | [\u05C4]
      | [\u064B-\u0655]
      | [\u0670]
      | [\u06D6-\u06DC]
      | [\u06DF-\u06E4]
      | [\u06E7-\u06E8]
      | [\u06EA-\u06ED]
      | [\u0711]
      | [\u0730-\u074A]
      | [\u07A6-\u07B0]
      | [\u0901-\u0903]
      | [\u093C]
      | [\u093E-\u094D]
      | [\u0951-\u0954]
      | [\u0962-\u0963]
      | [\u0981-\u0983]
      | [\u09BC-\u09C4]
      | [\u09C7-\u09C8]
      | [\u09CB-\u09CD]
      | [\u09D7]
      | [\u09E2-\u09E3]
      | [\u0A02]
      | [\u0A3C]
      | [\u0A3E-\u0A42]
      | [\u0A47-\u0A48]
      | [\u0A4B-\u0A4D]
      | [\u0A70-\u0A71]
      | [\u0A81-\u0A83]
      | [\u0ABC]
      | [\u0ABE-\u0AC5]
      | [\u0AC7-\u0AC9]
      | [\u0ACB-\u0ACD]
      | [\u0B01-\u0B03]
      | [\u0B3C]
      | [\u0B3E-\u0B43]
      | [\u0B47-\u0B48]
      | [\u0B4B-\u0B4D]
      | [\u0B56-\u0B57]
      | [\u0B82-\u0B83]
      | [\u0BBE-\u0BC2]
      | [\u0BC6-\u0BC8]
      | [\u0BCA-\u0BCD]
      | [\u0BD7]
      | [\u0C01-\u0C03]
      | [\u0C3E-\u0C44]
      | [\u0C46-\u0C48]
      | [\u0C4A-\u0C4D]
      | [\u0C55-\u0C56]
      | [\u0C82-\u0C83]
      | [\u0CBE-\u0CC4]
      | [\u0CC6-\u0CC8]
      | [\u0CCA-\u0CCD]
      | [\u0CD5-\u0CD6]
      | [\u0D02-\u0D03]
      | [\u0D3E-\u0D43]
      | [\u0D46-\u0D48]
      | [\u0D4A-\u0D4D]
      | [\u0D57]
      | [\u0D82-\u0D83]
      | [\u0DCA]
      | [\u0DCF-\u0DD4]
      | [\u0DD6]
      | [\u0DD8-\u0DDF]
      | [\u0DF2-\u0DF3]
      | [\u0E31]
      | [\u0E34-\u0E3A]
      | [\u0E47-\u0E4E]
      | [\u0EB1]
      | [\u0EB4-\u0EB9]
      | [\u0EBB-\u0EBC]
      | [\u0EC8-\u0ECD]
      | [\u0F18-\u0F19]
      | [\u0F35]
      | [\u0F37]
      | [\u0F39]
      | [\u0F3E-\u0F3F]
      | [\u0F71-\u0F84]
      | [\u0F86-\u0F87]
      | [\u0F90-\u0F97]
      | [\u0F99-\u0FBC]
      | [\u0FC6]
      | [\u102C-\u1032]
      | [\u1036-\u1039]
      | [\u1056-\u1059]
      | [\u17B4-\u17D3]
      | [\u18A9]
      | [\u20D0-\u20DC]
      | [\u20E1]
      | [\u302A-\u302F]
      | [\u3099-\u309A]
      | [\uFB1E]
      | [\uFE20-\uFE23]
      ;
  
  fragment UnicodeDigit
      : [\u0030-\u0039]
      | [\u0660-\u0669]
      | [\u06F0-\u06F9]
      | [\u0966-\u096F]
      | [\u09E6-\u09EF]
      | [\u0A66-\u0A6F]
      | [\u0AE6-\u0AEF]
      | [\u0B66-\u0B6F]
      | [\u0BE7-\u0BEF]
      | [\u0C66-\u0C6F]
      | [\u0CE6-\u0CEF]
      | [\u0D66-\u0D6F]
      | [\u0E50-\u0E59]
      | [\u0ED0-\u0ED9]
      | [\u0F20-\u0F29]
      | [\u1040-\u1049]
      | [\u1369-\u1371]
      | [\u17E0-\u17E9]
      | [\u1810-\u1819]
      | [\uFF10-\uFF19]
      ;
  
  fragment UnicodeConnectorPunctuation
      : [\u005F]
      | [\u203F-\u2040]
      | [\u30FB]
      | [\uFE33-\uFE34]
      | [\uFE4D-\uFE4F]
      | [\uFF3F]
      | [\uFF65]
      ;
  
  fragment RegularExpressionFirstChar
      : ~[*\r\n\u2028\u2029\\/[]
      | RegularExpressionBackslashSequence
      | '[' RegularExpressionClassChar* ']'
      ;
  
  fragment RegularExpressionChar
      : ~[\r\n\u2028\u2029\\/[]
      | RegularExpressionBackslashSequence
      | '[' RegularExpressionClassChar* ']'
      ;
  
  fragment RegularExpressionClassChar
      : ~[\r\n\u2028\u2029\]\\]
      | RegularExpressionBackslashSequence
      ;
  
  fragment RegularExpressionBackslashSequence
      : '\\' ~[\r\n\u2028\u2029]
      ;
  