Exemplo n.º 1
0
 inline void FileParse::checkComment(std::ifstream& fin) {
   char c;
   fin.get(c);
   // Make sure we are not at eof
   if (fin.eof()) return;
   // Check what kind of comment this is
   if (c=='/')      passComment(fin, false);
   else if (c=='*') passComment(fin, true);
   else             throw UnexpectedToken("In checkComment: Token: ["+toStr(c)+"].");
 }
Exemplo n.º 2
0
Token Lexer::getNextToken(){
    while( c != doneChar ){
        switch(c){
            case '#': passComment(); continue;
            case ' ': case '\t': case '\n': case '\r': passWhiteSpace(); continue;
            case '[': consume(); return Token(Token::Type::LBRACKET,"[");
            case ']': consume(); return Token(Token::Type::RBRACKET,"]");
            case '{': consume(); return Token(Token::Type::LBRACE,"{");
            case '}': consume(); return Token(Token::Type::RBRACE,"}");
            case ',': consume(); return Token(Token::Type::COMMA,",");
            case '(': consume(); return Token(Token::Type::LPAR,"(");
            case ')': consume(); return Token(Token::Type::RPAR,")");
            case ';': consume(); return Token(Token::Type::SEMICOLON,";");
            case '!': consume(); return Token(Token::Type::EXCLAM,"!");
            case '=': consume(); return Token(Token::Type::EQUALS,"=");
            case '<': consume(); return Token(Token::Type::LT,"<");
            case '>': consume(); return Token(Token::Type::GT,">");
            case '+': consume(); return Token(Token::Type::PLUS,"+");
            case '-': consume(); return Token(Token::Type::MINUS,"-");
            case '*': consume(); return Token(Token::Type::ASTERISK,"*");
            case '/': consume(); return Token(Token::Type::SLASH,"/");
            case '.': consume(); return Token(Token::Type::DOT,".");
            case ':': consume(); return Token(Token::Type::COLON,":");
            case '"': consume(); return Token(Token::Type::QUOTE,"\"");
            case '%': consume(); return Token(Token::Type::PERCENT,"%");
            case '0': case '1': case '2': case '3': case '4': case '5':
            case '6': case '7': case '8': case '9': return getNumber();
            default:
                if( isNameStartingChar(c) ){
                    return getNameToken();
                }else{
                    char arr[2] = {c,'\0'};
                    consume();
                    return Token(Token::Type::UNKNOWN,std::string(arr));
                }
        }
        
    }
    
    return Token(Token::Type::EOF_,"EOF");
    
}