MalachScript/src/Parser/Lexer/LexTokenKind.hpp

275 lines
12 KiB
C++
Raw Normal View History

2020-10-05 15:45:00 +00:00
#ifndef MALACHSCRIPT_LEXTOKENKIND_HPP
#define MALACHSCRIPT_LEXTOKENKIND_HPP
#include <cstdint>
#include <string>
2020-10-05 15:45:00 +00:00
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,
2020-10-04 16:30:53 +00:00
// 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,
2020-10-04 15:15:28 +00:00
// Literals
FloatLiteral,
IntegerLiteral,
StringLiteral,
2020-10-04 16:30:53 +00:00
Identifier,
};
class LexTokenKindHelper {
public:
static std::string ToString(LexTokenKind kind) {
switch (kind) {
case LexTokenKind::Unknown: return "Unknown";
case LexTokenKind::EndOfFile: return "EndOfFile";
2021-01-06 12:32:06 +00:00
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";
}
};
}
2020-10-05 15:45:00 +00:00
#endif // MALACHSCRIPT_LEXTOKENKIND_HPP