275 lines
12 KiB
C++
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
|