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)+"]."); }
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"); }