flup/src/tokenizer.h

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