#ifndef TSL_TOKENIZER_H #define TSL_TOKENIZER_H #include #include typedef struct { const char *data; size_t size; } TslStringView; typedef enum { TSL_TOKEN_END_OF_FILE, TSL_TOKEN_UNEXPECTED_SYMBOL, TSL_TOKEN_IDENTIFIER, TSL_TOKEN_STRING, TSL_TOKEN_NUM, TSL_TOKEN_BOOL, TSL_TOKEN_NULL, TSL_TOKEN_EQUAL, TSL_TOKEN_LBRACE, TSL_TOKEN_RBRACE, TSL_TOKEN_LBRACKET, TSL_TOKEN_RBRACKET, TSL_TOKEN_COLON, TSL_TOKEN_COMMA } TslToken; typedef struct { const char *code; size_t code_size; size_t code_index; TslStringView identifier; TslStringView string; int bool_value; int64_t number_value; } TslTokenizer; void tsl_tokenizer_init(TslTokenizer *self, const char *code, size_t code_size); TslToken tsl_tokenizer_next(TslTokenizer *self); int tsl_tokenizer_accept(TslTokenizer *self, TslToken expected_token); #endif /* TSL_TOKENIZER_H */