65 lines
1.3 KiB
C
65 lines
1.3 KiB
C
#ifndef FLUP_TOKENIZER_H
|
|
#define FLUP_TOKENIZER_H
|
|
|
|
#include "../submodules/utilitiec/src/StringView/StringView.h"
|
|
#include <stdint.h>
|
|
|
|
enum TokenType {
|
|
TOKENTYPE_NONE,
|
|
TOKENTYPE_INTEGER,
|
|
TOKENTYPE_DOUBLE,
|
|
TOKENTYPE_IDENTIFIER,
|
|
TOKENTYPE_LEFT_BRACE,
|
|
TOKENTYPE_RIGHT_BRACE,
|
|
TOKENTYPE_AMPERSAND,
|
|
TOKENTYPE_PLUS,
|
|
TOKENTYPE_MINUS,
|
|
TOKENTYPE_MULTIPLY,
|
|
TOKENTYPE_DIVIDE,
|
|
TOKENTYPE_PIPE,
|
|
TOKENTYPE_ARROW,
|
|
TOKENTYPE_COLON,
|
|
TOKENTYPE_SEMICOLON,
|
|
TOKENTYPE_EQUALITY,
|
|
TOKENTYPE_INEQUALITY,
|
|
TOKENTYPE_LESSTHAN,
|
|
TOKENTYPE_LESSEQUAL,
|
|
TOKENTYPE_GREATERTHAN,
|
|
TOKENTYPE_GREATEREQUAL,
|
|
TOKENTYPE_COMMA,
|
|
TOKENTYPE_BIND,
|
|
TOKENTYPE_AS,
|
|
TOKENTYPE_LEFT_PAREN,
|
|
TOKENTYPE_RIGHT_PAREN,
|
|
TOKENTYPE_COMMENT,
|
|
TOKENTYPE_STRING,
|
|
TOKENTYPE_ERROR,
|
|
};
|
|
|
|
union TokenContent {
|
|
StringView identifier;
|
|
StringView error;
|
|
int64_t integer;
|
|
double decimal;
|
|
};
|
|
|
|
typedef struct TokenContext_s {
|
|
uint32_t row;
|
|
uint32_t col;
|
|
} TokenContext;
|
|
|
|
typedef struct Token_s {
|
|
enum TokenType type;
|
|
union TokenContent get;
|
|
TokenContext context;
|
|
} Token;
|
|
|
|
|
|
#define TOKEN_NONE ((Token) {.type = TOKENTYPE_NONE, .get = {.error = STRINGVIEW_NONE } } )
|
|
|
|
Token Tokenizer_NextToken(StringView* source, TokenContext* context);
|
|
const char* TokenType_ToString(enum TokenType type);
|
|
|
|
void Token_Print(Token* token);
|
|
|
|
#endif //header guard
|