(Lexer)+to_string functions for Err, Err::Type
This commit is contained in:
@@ -533,40 +533,44 @@ namespace Lexer
|
|||||||
return stream.str();
|
return stream.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string to_string(const Err::Type &type)
|
||||||
|
{
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case Err::Type::OK:
|
||||||
|
return "OK";
|
||||||
|
case Err::Type::INVALID_CHAR_LITERAL:
|
||||||
|
return "INVALID_CHAR_LITERAL";
|
||||||
|
case Err::Type::INVALID_CHAR_LITERAL_ESCAPE_SEQUENCE:
|
||||||
|
return "INVALID_CHAR_LITERAL_ESCAPE_SEQUENCE";
|
||||||
|
case Err::Type::INVALID_STRING_LITERAL:
|
||||||
|
return "INVALID_STRING_LITERAL";
|
||||||
|
case Err::Type::INVALID_NUMBER_LITERAL:
|
||||||
|
return "INVALID_NUMBER_LITERAL";
|
||||||
|
case Err::Type::INVALID_PREPROCESSOR_DIRECTIVE:
|
||||||
|
return "INVALID_PREPROCESSOR_DIRECTIVE";
|
||||||
|
case Err::Type::UNKNOWN_LEXEME:
|
||||||
|
return "UNKNOWN_LEXEME";
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string to_string(const Err &err)
|
||||||
|
{
|
||||||
|
std::stringstream stream;
|
||||||
|
stream << err.line << ":" << err.col << ": ";
|
||||||
|
stream << to_string(err.type);
|
||||||
|
return stream.str();
|
||||||
|
}
|
||||||
|
|
||||||
std::ostream &operator<<(std::ostream &os, const Token &t)
|
std::ostream &operator<<(std::ostream &os, const Token &t)
|
||||||
{
|
{
|
||||||
return os << to_string(t);
|
return os << to_string(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ostream &operator<<(std::ostream &os, const Err &lerr)
|
std::ostream &operator<<(std::ostream &os, const Err &err)
|
||||||
{
|
{
|
||||||
os << lerr.line << ":" << lerr.col << ": ";
|
return os << to_string(err);
|
||||||
switch (lerr.type)
|
|
||||||
{
|
|
||||||
case Err::Type::OK:
|
|
||||||
os << "OK";
|
|
||||||
break;
|
|
||||||
case Err::Type::INVALID_CHAR_LITERAL:
|
|
||||||
os << "INVALID_CHAR_LITERAL";
|
|
||||||
break;
|
|
||||||
case Err::Type::INVALID_CHAR_LITERAL_ESCAPE_SEQUENCE:
|
|
||||||
os << "INVALID_CHAR_LITERAL_ESCAPE_SEQUENCE";
|
|
||||||
break;
|
|
||||||
case Err::Type::INVALID_STRING_LITERAL:
|
|
||||||
os << "INVALID_STRING_LITERAL";
|
|
||||||
break;
|
|
||||||
case Err::Type::INVALID_NUMBER_LITERAL:
|
|
||||||
os << "INVALID_NUMBER_LITERAL";
|
|
||||||
break;
|
|
||||||
case Err::Type::INVALID_PREPROCESSOR_DIRECTIVE:
|
|
||||||
os << "INVALID_PREPROCESSOR_DIRECTIVE";
|
|
||||||
break;
|
|
||||||
case Err::Type::UNKNOWN_LEXEME:
|
|
||||||
os << "UNKNOWN_LEXEME";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return os;
|
|
||||||
}
|
}
|
||||||
} // namespace Lexer
|
} // namespace Lexer
|
||||||
|
|||||||
@@ -97,6 +97,8 @@ namespace Lexer
|
|||||||
};
|
};
|
||||||
|
|
||||||
std::ostream &operator<<(std::ostream &, const Err &);
|
std::ostream &operator<<(std::ostream &, const Err &);
|
||||||
|
std::string to_string(const Err::Type &);
|
||||||
|
std::string to_string(const Err &);
|
||||||
|
|
||||||
Err tokenise_buffer(std::string_view, std::vector<Token *> &);
|
Err tokenise_buffer(std::string_view, std::vector<Token *> &);
|
||||||
} // namespace Lexer
|
} // namespace Lexer
|
||||||
|
|||||||
Reference in New Issue
Block a user