chore: flat out the file structure
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
#ifndef FURAS_TOKEN_HPP
|
||||
#define FURAS_TOKEN_HPP
|
||||
|
||||
#include <cstdint>
|
||||
#include <string_view>
|
||||
|
||||
namespace furas {
|
||||
|
||||
struct token {
|
||||
enum type {
|
||||
Identifier = 0, /**< An identifier. */
|
||||
Signed, /**< A signed integer. */
|
||||
Unsigned, /**< An unsigned integer. */
|
||||
|
||||
// Markers
|
||||
Monkey, /**< Constant marker (`@`). */
|
||||
Dolar, /**< Type marker(`$`). */
|
||||
Sha256, /**< Label marker(`#`). */
|
||||
Percent, /**< Variable marker(`%`). The more the better. */
|
||||
|
||||
EqSign, /**< `=` */
|
||||
Dot, /**< . */
|
||||
Colon, /**< `:` */
|
||||
|
||||
// Keywords
|
||||
Func, /**< `func` keyword for defining functions. */
|
||||
Type, /**< `type` keyword for defining types. */
|
||||
Native, /**< `native` keyword for native functions. :v: */
|
||||
Import, /**< `import` keyword for importing functions and types. */
|
||||
Public, /**< `public` access specifier. */
|
||||
Private, /**< `private` access specifier. */
|
||||
Allocate, /**< `allocate` keyword for global variables. */
|
||||
|
||||
// Instructions
|
||||
Push,
|
||||
Array,
|
||||
Slice,
|
||||
Get,
|
||||
Set,
|
||||
Drop,
|
||||
Dup,
|
||||
Swap,
|
||||
Clone,
|
||||
Ref,
|
||||
Add,
|
||||
Sub,
|
||||
Mul,
|
||||
Div,
|
||||
Mod,
|
||||
Eq,
|
||||
Neq,
|
||||
Lt,
|
||||
Gt,
|
||||
Le,
|
||||
Ge,
|
||||
Ptrof,
|
||||
Sizeof,
|
||||
Lenof,
|
||||
Load,
|
||||
Store,
|
||||
LoadGlobal,
|
||||
StoreGlobal,
|
||||
Call,
|
||||
Jmp,
|
||||
Jnz,
|
||||
Ret,
|
||||
|
||||
Count
|
||||
} type = Count;
|
||||
union value {
|
||||
std::nullptr_t null = nullptr;
|
||||
std::string_view string;
|
||||
std::int64_t integer;
|
||||
std::uint64_t uint;
|
||||
} value;
|
||||
|
||||
token(enum type type)
|
||||
: type(type) {}
|
||||
|
||||
token(enum type type, std::string_view string)
|
||||
: type(type) {
|
||||
value.string = string;
|
||||
}
|
||||
|
||||
token(std::uint64_t num)
|
||||
: type(Unsigned) {
|
||||
value.uint = num;
|
||||
}
|
||||
|
||||
token(std::int64_t num)
|
||||
: type(Signed) {
|
||||
value.integer = num;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace furas
|
||||
|
||||
#endif // FURAS_TOKEN_HPP
|
||||
Reference in New Issue
Block a user