- 重命名和重构了多个文件,包括 lexer、parser 和 AST 相关代码 - 添加了日志功能,使用 LOG_* 宏替代原有的 error 和 warn 函数 - 优化了错误处理和内存分配方式 - 调整了代码结构,提高了模块化和可读性
		
			
				
	
	
		
			69 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef __SMCC_TOKBUF_H__
 | |
| #define __SMCC_TOKBUF_H__
 | |
| 
 | |
| #include <lib/rt/rt.h>
 | |
| 
 | |
| 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__
 |