MalachScript/src/Parser/Lexer/LexTokenKind.hpp

275 lines
12 KiB
C++

#ifndef MALACHSCRIPT_LEXTOKENKIND_HPP
#define MALACHSCRIPT_LEXTOKENKIND_HPP
#include <cstdint>
#include <string>
namespace MalachScript::Parser {
enum class LexTokenKind : uint8_t {
Unknown,
EndOfFile,
Whitespace,
// Symbols
StarSymbol,
StarStarSymbol,
SlashSymbol,
PercentSymbol,
PlusSymbol,
MinusSymbol,
LessThanEqualsSymbol,
LessThanSymbol,
GreaterThanEqualsSymbol,
GreaterThanSymbol,
OpenParenthesisSymbol,
CloseParenthesisSymbol,
EqualsEqualsSymbol,
ExclamationMarkEqualsSymbol,
QuestionMarkSymbol,
ColonSymbol,
EqualsSymbol,
PlusEqualsSymbol,
MinusEqualsSymbol,
StarEqualsSymbol,
SlashEqualsSymbol,
PercentEqualsSymbol,
StarStarEqualsSymbol,
PlusPlusSymbol,
MinusMinusSymbol,
AmpersandSymbol,
CommaSymbol,
OpenCurlyParenthesisSymbol,
CloseCurlyParenthesisSymbol,
SemicolonSymbol,
VerticalLineSymbol,
CaretSymbol,
TildeSymbol,
LessThanLessThanSymbol,
GreaterThanGreaterThanSymbol,
GreaterThanGreaterThanGreaterThanSymbol,
AmpersandEqualsSymbol,
VerticalLineEqualsSymbol,
CaretEqualsSymbol,
LessThanLessThanEqualsSymbol,
GreaterThanGreaterThanEqualsSymbol,
GreaterThanGreaterThanGreaterThanEqualsSymbol,
DotSymbol,
AmpersandAmpersandSymbol,
VerticalLineVerticalLineSymbol,
ExclamationMarkSymbol,
OpenBlockParenthesisSymbol,
CloseBlockParenthesisSymbol,
CaretCaretSymbol,
AtSymbol,
ExclamationMarkIsSymbol,
ColonColonSymbol,
// Keywords
AndKeyword,
AbstractKeyword,
AutoKeyword,
BoolKeyword,
BreakKeyword,
CaseKeyword,
CastKeyword,
CatchKeyword,
ClassKeyword,
ConstKeyword,
ContinueKeyword,
DefaultKeyword,
DoKeyword,
DoubleKeyword,
ElseKeyword,
EnumKeyword,
ExplicitKeyword,
ExternalKeyword,
FalseKeyword,
FinalKeyword,
FloatKeyword,
ForKeyword,
FromKeyword,
FuncdefKeyword,
FunctionKeyword,
GetKeyword,
IfKeyword,
ImportKeyword,
InKeyword,
InoutKeyword,
IntKeyword,
InterfaceKeyword,
Int8Keyword,
Int16Keyword,
Int32Keyword,
Int64Keyword,
IsKeyword,
MixinKeyword,
NamespaceKeyword,
NotKeyword,
NullKeyword,
OrKeyword,
OutKeyword,
OverrideKeyword,
PrivateKeyword,
PropertyKeyword,
ProtectedKeyword,
ReturnKeyword,
SetKeyword,
SharedKeyword,
SuperKeyword,
SwitchKeyword,
ThisKeyword,
TrueKeyword,
TryKeyword,
TypedefKeyword,
UintKeyword,
Uint8Keyword,
Uint16Keyword,
Uint32Keyword,
Uint64Keyword,
VoidKeyword,
WhileKeyword,
XorKeyword,
// Literals
FloatLiteral,
IntegerLiteral,
StringLiteral,
Identifier,
};
class LexTokenKindHelper {
public:
static std::string ToString(LexTokenKind kind) {
switch (kind) {
case LexTokenKind::Unknown: return "Unknown";
case LexTokenKind::EndOfFile: return "EndOfFile";
case LexTokenKind::Whitespace: return "Whitespace";
case LexTokenKind::StarSymbol: return "*";
case LexTokenKind::StarStarSymbol: return "**";
case LexTokenKind::SlashSymbol: return "/";
case LexTokenKind::PercentSymbol: return "%";
case LexTokenKind::PlusSymbol: return "+";
case LexTokenKind::MinusSymbol: return "-";
case LexTokenKind::LessThanEqualsSymbol: return "<=";
case LexTokenKind::LessThanSymbol: return "<";
case LexTokenKind::GreaterThanEqualsSymbol: return ">=";
case LexTokenKind::GreaterThanSymbol: return ">";
case LexTokenKind::OpenParenthesisSymbol: return "(";
case LexTokenKind::CloseParenthesisSymbol: return ")";
case LexTokenKind::EqualsEqualsSymbol: return "==";
case LexTokenKind::ExclamationMarkEqualsSymbol: return "!=";
case LexTokenKind::QuestionMarkSymbol: return "?";
case LexTokenKind::ColonSymbol: return ":";
case LexTokenKind::EqualsSymbol: return "=";
case LexTokenKind::PlusEqualsSymbol: return "+=";
case LexTokenKind::MinusEqualsSymbol: return "-=";
case LexTokenKind::StarEqualsSymbol: return "*=";
case LexTokenKind::SlashEqualsSymbol: return "/=";
case LexTokenKind::PercentEqualsSymbol: return "%=";
case LexTokenKind::StarStarEqualsSymbol: return "**=";
case LexTokenKind::PlusPlusSymbol: return "++";
case LexTokenKind::MinusMinusSymbol: return "--";
case LexTokenKind::AmpersandSymbol: return "&";
case LexTokenKind::CommaSymbol: return ",";
case LexTokenKind::OpenCurlyParenthesisSymbol: return "{";
case LexTokenKind::CloseCurlyParenthesisSymbol: return "}";
case LexTokenKind::SemicolonSymbol: return ";";
case LexTokenKind::VerticalLineSymbol: return "|";
case LexTokenKind::CaretSymbol: return "^";
case LexTokenKind::TildeSymbol: return "~";
case LexTokenKind::LessThanLessThanSymbol: return "<<";
case LexTokenKind::GreaterThanGreaterThanSymbol: return ">>";
case LexTokenKind::GreaterThanGreaterThanGreaterThanSymbol: return ">>>";
case LexTokenKind::AmpersandEqualsSymbol: return "&=";
case LexTokenKind::VerticalLineEqualsSymbol: return "|=";
case LexTokenKind::CaretEqualsSymbol: return "^=";
case LexTokenKind::LessThanLessThanEqualsSymbol: return "<<=";
case LexTokenKind::GreaterThanGreaterThanEqualsSymbol: return ">>=";
case LexTokenKind::GreaterThanGreaterThanGreaterThanEqualsSymbol: return ">>>=";
case LexTokenKind::DotSymbol: return ".";
case LexTokenKind::AmpersandAmpersandSymbol: return "&";
case LexTokenKind::VerticalLineVerticalLineSymbol: return "||";
case LexTokenKind::ExclamationMarkSymbol: return "!";
case LexTokenKind::OpenBlockParenthesisSymbol: return "[";
case LexTokenKind::CloseBlockParenthesisSymbol: return "]";
case LexTokenKind::CaretCaretSymbol: return "^^";
case LexTokenKind::AtSymbol: return "@";
case LexTokenKind::ExclamationMarkIsSymbol: return "!=";
case LexTokenKind::ColonColonSymbol: return "::";
case LexTokenKind::AndKeyword: return "and";
case LexTokenKind::AbstractKeyword: return "abstract";
case LexTokenKind::AutoKeyword: return "auto";
case LexTokenKind::BoolKeyword: return "bool";
case LexTokenKind::BreakKeyword: return "break";
case LexTokenKind::CaseKeyword: return "case";
case LexTokenKind::CastKeyword: return "cast";
case LexTokenKind::CatchKeyword: return "catch";
case LexTokenKind::ClassKeyword: return "class";
case LexTokenKind::ConstKeyword: return "const";
case LexTokenKind::ContinueKeyword: return "continue";
case LexTokenKind::DefaultKeyword: return "default";
case LexTokenKind::DoKeyword: return "do";
case LexTokenKind::DoubleKeyword: return "double";
case LexTokenKind::ElseKeyword: return "else";
case LexTokenKind::EnumKeyword: return "enum";
case LexTokenKind::ExplicitKeyword: return "explicit";
case LexTokenKind::ExternalKeyword: return "external";
case LexTokenKind::FalseKeyword: return "false";
case LexTokenKind::FinalKeyword: return "final";
case LexTokenKind::FloatKeyword: return "float";
case LexTokenKind::ForKeyword: return "for";
case LexTokenKind::FromKeyword: return "from";
case LexTokenKind::FuncdefKeyword: return "funcdef";
case LexTokenKind::FunctionKeyword: return "function";
case LexTokenKind::GetKeyword: return "get";
case LexTokenKind::IfKeyword: return "if";
case LexTokenKind::ImportKeyword: return "import";
case LexTokenKind::InKeyword: return "in";
case LexTokenKind::InoutKeyword: return "inout";
case LexTokenKind::IntKeyword: return "int";
case LexTokenKind::InterfaceKeyword: return "interface";
case LexTokenKind::Int8Keyword: return "int8";
case LexTokenKind::Int16Keyword: return "int16";
case LexTokenKind::Int32Keyword: return "int32";
case LexTokenKind::Int64Keyword: return "int64";
case LexTokenKind::IsKeyword: return "is";
case LexTokenKind::MixinKeyword: return "mixin";
case LexTokenKind::NamespaceKeyword: return "namespace";
case LexTokenKind::NotKeyword: return "not";
case LexTokenKind::NullKeyword: return "null";
case LexTokenKind::OrKeyword: return "or";
case LexTokenKind::OutKeyword: return "out";
case LexTokenKind::OverrideKeyword: return "override";
case LexTokenKind::PrivateKeyword: return "private";
case LexTokenKind::PropertyKeyword: return "property";
case LexTokenKind::ProtectedKeyword: return "protected";
case LexTokenKind::ReturnKeyword: return "return";
case LexTokenKind::SetKeyword: return "set";
case LexTokenKind::SharedKeyword: return "shared";
case LexTokenKind::SuperKeyword: return "super";
case LexTokenKind::SwitchKeyword: return "switch";
case LexTokenKind::ThisKeyword: return "this";
case LexTokenKind::TrueKeyword: return "true";
case LexTokenKind::TryKeyword: return "try";
case LexTokenKind::TypedefKeyword: return "typedef";
case LexTokenKind::UintKeyword: return "uint";
case LexTokenKind::Uint8Keyword: return "uint8";
case LexTokenKind::Uint16Keyword: return "uint16";
case LexTokenKind::Uint32Keyword: return "uint32";
case LexTokenKind::Uint64Keyword: return "uint64";
case LexTokenKind::VoidKeyword: return "void";
case LexTokenKind::WhileKeyword: return "while";
case LexTokenKind::XorKeyword: return "xor";
case LexTokenKind::FloatLiteral: return "float";
case LexTokenKind::IntegerLiteral: return "integer";
case LexTokenKind::StringLiteral: return "string";
case LexTokenKind::Identifier: return "identifier";
}
return "FAIL";
}
};
}
#endif // MALACHSCRIPT_LEXTOKENKIND_HPP