#ifndef __SMCC_TOKBUF_H__ #define __SMCC_TOKBUF_H__ #include typedef struct loc { const char *fname; int line; int col; short len; } loc_t; typedef enum tok_type { TK_BASIC_INVALID, // 错误占位 TK_BASIC_KEYWORD, // 关键字 TK_BASIC_OPERATOR, // 操作符 TK_BASIC_IDENTIFIER, // 标识符 TK_BASIC_LITERAL, // 字面量 TK_BASIC_PUNCTUATOR, // 标点符号 TK_BASIC_EOF // 结束标记 } tok_type_t; typedef union ctype { u8_t u8; u16_t u16; u32_t u32; u64_t u64; i8_t i8; i16_t i16; i32_t i32; i64_t i64; f32_t f32; f64_t f64; iptr_t iptr; uptr_t uptr; void* ptr; } ctype_t; typedef struct tok { tok_type_t type; int sub_type; loc_t loc; ctype_t val; } tok_t; // typedef void(*tok_stream_close_func)(void* stream); // typedef void(*tok_stream_get_func)(void* stream, tok_t* token); // typedef struct tok_stream { // int cur; // int end; // int cap_mask; // tok_t* buf; // void* stream; // tok_stream_close_func close; // tok_stream_get_func gettok; // } tok_stream_t; // void init_toks(tok_stream_t* tokbuf, int cap, // tok_stream_close_func close, tok_stream_get_func gettok, void* stream); // int toks_next( tok_stream_t* toks, tok_t* out); // int toks_peek( tok_stream_t* toks, tok_t* out, int lookahead); // const tok_t* toks_peek_unsafe(tok_stream_t* toks, int lookahead); // int toks_reset(tok_stream_t* toks); // int toks_seek( tok_stream_t* toks, int pos); // int toks_close(tok_stream_t* toks); #endif // __SMCC_TOKEN_H__