private void ScanDefault(LineProgress p)
 {
     while (!p.EndOfLine)
     {
         if (p.Char() == '$' && p.NextChar() == '@' && p.NextNextChar() == '"') // interpolated multiline string
         {
             p.Advance(3);
             p.StartString(State.InterpolatedMultiLineString);
             ScanMultiLineString(p, true);
         }
         else if (p.Char() == '$' && p.NextChar() == '"') // interpolated string
         {
             p.Advance(2);
             p.StartString(State.InterpolatedString);
             ScanString(p, true);
         }
         else
         if (p.Char() == '@' && p.NextChar() == '"') // multi-line string
         {
             p.Advance(2);
             p.StartString(State.MultiLineString);
             ScanMultiLineString(p, false);
         }
         else if (p.Char() == '"') // single-line string
         {
             p.Advance();
             p.StartString(State.String);
             ScanString(p, false);
         }
         else if (p.Char() == '\'') // character
         {
             p.Advance();
             ScanCharacter(p);
         }
         else if (p.Char() == '/' && p.NextChar() == '*') // multiline comment
         {
             p.Advance(2);
             p.State = State.MultilineComment;
             ScanMultiLineComment(p);
         }
         else if (p.Char() == '/' && p.NextChar() == '/') // single-line comment
         {
             p.AdvanceToEndOfLine();
         }
         else
         {
             p.Advance();
         }
     }
 }
 private void ScanMultiLineComment(LineProgress p, bool skipOnly = false)
 {
     while (!p.EndOfLine)
     {
         if (p.Char() == '*' && p.NextChar() == '/')
         {
             p.Advance(2);
             if (!skipOnly)
             {
                 p.State = State.Default;
             }
             return;
         }
         else
         {
             p.Advance();
         }
     }
 }