#ifndef MALACHSCRIPT_LEXTOKENKIND_HPP #define MALACHSCRIPT_LEXTOKENKIND_HPP #include #include 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