示例#1
0
 public Token.Token NextToken()
 {
     SkipWhiteSpace();
     if (EndOfSource())
     {
         return null;
     }
     if ("{}}[]:,".Contains(lookahead))
     {
         Token.Token ret = new Token.Token(Token.TokenType.SYMBOL, lookahead.ToString());
         Advance();
         return ret;
     }
     else if (lookahead == '"')
     {
         return String();
     }
     else if (Char.IsDigit(lookahead))
     {
         return Number();
     }
     else
     {
         return Word();
     }
 }
示例#2
0
 private Token.Token String()
 {
     String val = "";
     char prev = lookahead;
     while (true)
     {
         Advance();
         if (prev == '\\')
         {
             switch (lookahead)
             {
                 case 'n':
                     val += '\n';
                     break;
                 case 'r':
                     val += '\r';
                     break;
                 case '\\':
                     val += '\\';
                     break;
                 case '"':
                     val += '"';
                     break;
                 default:
                     throw new InvalidLexemeException("Invalid escape sequence \\" + lookahead);
             }
         }
         else
         {
             if (lookahead == '"')
             {
                 Token.Token ret = new Token.Token(Token.TokenType.STRING, val);
                 Advance();
                 return ret;
             }
             val += lookahead;
         }
         prev = lookahead;
     }
 }
 private void Advance()
 {
     currentToken = lexer.NextToken();
 }