Advertisement
Guest User

Untitled

a guest
Jul 1st, 2014
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.08 KB | None | 0 0
  1. Token::Token getToken(std::istream *Stream) {
  2.     static char Current = 0;
  3.  
  4.     do {
  5.         Current = Stream->get();
  6.     } while(isspace(Current));
  7.  
  8.     switch(Current) {
  9.         case '=': return (Stream->peek() == '=' ? Stream->get(), Token::Equals            : Token::Assign);
  10.         case '!': return (Stream->peek() == '=' ? Stream->get(), Token::NotEquals         : Token::Not);
  11.         case '<': return (Stream->peek() == '=' ? Stream->get(), Token::LesserThanEquals  : Token::LesserThan);
  12.         case '>': return (Stream->peek() == '=' ? Stream->get(), Token::GreaterThanEquals : Token::GreaterThan);
  13.  
  14.         case '(': case '[': case '{': case ')':
  15.         case ']': case '}': case '+': case '-':
  16.         case '*': case '/': case ',': case ';':
  17.         case ':': case '.':
  18.             return Token::Token(Current);
  19.  
  20.         case '0': case '1': case '2': case '3':
  21.         case '4': case '5': case '6': case '7':
  22.         case '8': case '9': {
  23.             std::string NumberStr(1, Current);
  24.  
  25.             for(auto Next : *Stream) {
  26.                 if(!isdigit(Next) || Next != '.') {
  27.                     break;
  28.                 }
  29.  
  30.                 NumberStr += Next;
  31.             }
  32.         }
  33.  
  34.         case '\"': case '\'': {
  35.             char Start = Current;
  36.             StringValue = "";
  37.  
  38.             do {
  39.                 StringValue += Current;
  40.             } while((Current = Stream->get()) && Current != Start);
  41.  
  42.             StringValue += Current;
  43.         }
  44.  
  45.         default: {
  46.             if(isalpha(Current) || Current == '_') {
  47.                 std::string Temp (1, Current);
  48.  
  49.                 while((Current = Stream->get()) && (isalnum(Current) || Current == '_')) {
  50.                     Temp += Current;
  51.                 }
  52.  
  53.                 Stream->putback(Current);
  54.  
  55.                 if(Temp == "True" || Temp == "False") {
  56.                     BoolValue = Temp;
  57.                     return Token::Boolean;
  58.                 }
  59.  
  60.                 NameValue = Temp;
  61.                 return isKeyword(Temp) ? Token::Keyword : Token::Name;
  62.             }
  63.         }
  64.     }
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement