feat(lexer): 添加词法分析器对##操作符的支持

- 重命名lexer_token.h为scc_lexer_token.h以保持命名一致性
- 在词法分析器中实现##操作符的识别和处理
- 修改头文件包含路径和类型定义的位置
- 修复token结构体定义的顺序问题

fix(lexer): 初始化lexer中的cur变量避免未初始化问题

- 在scc_lexer_get_token函数中初始化scc_sstream_char_t cur变量

refactor(core): 增强ring缓冲区功能并添加cstring比较函数

- 在scc_core_ring.h中添加空值检查防止fill函数为空时崩溃
- 添加scc_ring_by_buffer宏用于通过缓冲区创建ring实例
- 在scc_core_str.h中添加scc_cstring_cmp函数用于字符串比较
This commit is contained in:
zzy
2026-02-18 18:17:52 +08:00
parent 2de5ae59f5
commit 9d85dc130d
6 changed files with 38 additions and 12 deletions

View File

@@ -88,7 +88,7 @@ static inline cbool next_char(scc_lexer_t *lexer, scc_cstring_t *lexeme,
#define set_err_token(token) ((token)->type = SCC_TOK_UNKNOWN)
void scc_lexer_get_token(scc_lexer_t *lexer, scc_lexer_tok_t *token) {
scc_sstream_char_t cur;
scc_sstream_char_t cur = {0};
scc_cstring_t lex = scc_cstring_create(); // 临时lexeme
// 尝试预览第一个字符
@@ -439,7 +439,11 @@ void scc_lexer_get_token(scc_lexer_t *lexer, scc_lexer_tok_t *token) {
token->type = SCC_TOK_COND;
break;
case '#':
token->type = SCC_TOK_SHARP;
if (next.character == '#') {
token->type = SCC_TOK_SHARP_SHARP;
next_char(lexer, &lex, &cur);
} else
token->type = SCC_TOK_SHARP;
break;
default:
token->type = SCC_TOK_UNKNOWN;