Token Lexer::lex() {
++current_;
if (current_ >= end_) {
return Token(Token::Type::EndOfFile, get_current_location_());
}
if (std::isspace(*current_) && *current_ != '\n') {
return lex();
}
if (*current_ == '\n') {
return Token(Token::Type::EndOfLine, get_current_location_());
}
return Token(Token::Type::Unknown, get_current_location_());
}
VG9rZW4gTGV4ZXI6OmxleCgpIHsKICArK2N1cnJlbnRfOwogIAogIGlmIChjdXJyZW50XyA+PSBlbmRfKSB7CiAgICByZXR1cm4gVG9rZW4oVG9rZW46OlR5cGU6OkVuZE9mRmlsZSwgZ2V0X2N1cnJlbnRfbG9jYXRpb25fKCkpOwogIH0KICAKICBpZiAoc3RkOjppc3NwYWNlKCpjdXJyZW50XykgJiYgKmN1cnJlbnRfICE9ICdcbicpIHsKICAgIHJldHVybiBsZXgoKTsKICB9CiAgCiAgaWYgKCpjdXJyZW50XyA9PSAnXG4nKSB7CiAgICByZXR1cm4gVG9rZW4oVG9rZW46OlR5cGU6OkVuZE9mTGluZSwgZ2V0X2N1cnJlbnRfbG9jYXRpb25fKCkpOwogIH0KICAKICByZXR1cm4gVG9rZW4oVG9rZW46OlR5cGU6OlVua25vd24sIGdldF9jdXJyZW50X2xvY2F0aW9uXygpKTsKfQ==