- 添加 .gitignore 文件,忽略编译器生成的二进制文件 - 重构 lexer.c 文件,改进了关键字处理和字符串处理 - 更新前端的前端、解析器和 AST 相关文件,以适应新的词法分析器 - 优化了 token 相关的定义和函数,引入了新的 token 类型
76 lines
1.7 KiB
C
76 lines
1.7 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;
|
|
int len;
|
|
} loc_t;
|
|
|
|
typedef enum tok_basic_type {
|
|
TK_BASIC_INVALID, // 错误占位
|
|
TK_BASIC_KEYWORD, // 关键字
|
|
TK_BASIC_OPERATOR, // 操作符
|
|
TK_BASIC_IDENTIFIER, // 标识符
|
|
TK_BASIC_LITERAL, // 字面量
|
|
|
|
TK_BASIC_WHITESPACE, // 空白
|
|
TK_BASIC_COMMENT, // 注释
|
|
TK_BASIC_EOF // 结束标记
|
|
} tok_basic_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;
|
|
char ch;
|
|
int i;
|
|
|
|
// MUST BE strpool ptr
|
|
const char* str;
|
|
} ctype_t;
|
|
|
|
typedef struct tok {
|
|
tok_basic_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__
|