将 lexer_stream 抽象为 core_stream,统一运行时核心组件的输入流模型。 移除了旧的 `lexer_stream.h` 定义,并将其功能完整迁移至 `core_stream.h` 中。 更新了内存流实现以适配新的 core_stream 接口,并修复部分资源释放问题。 同时调整日志模块包含方式,增强模块间解耦能力。 此变更影响词法分析器对输入流的操作方式,所有涉及 stream 的类型与函数均已替换为 core 前缀版本。 测试用例同步更新并验证通过。
62 lines
1.4 KiB
C
62 lines
1.4 KiB
C
/**
|
||
* @file lexer.h
|
||
* @brief C语言词法分析器核心数据结构与接口
|
||
*/
|
||
|
||
#ifndef __SMCC_CC_LEXER_H__
|
||
#define __SMCC_CC_LEXER_H__
|
||
|
||
#include <libcore.h>
|
||
#include "lexer_token.h"
|
||
|
||
typedef struct lexer_loc {
|
||
const char *name;
|
||
usize name_len;
|
||
usize line;
|
||
usize column;
|
||
usize offset;
|
||
} lexer_loc_t;
|
||
|
||
typedef struct lexer_token {
|
||
token_type_t type;
|
||
core_cvalue_t value;
|
||
lexer_loc_t loc;
|
||
} lexer_tok_t;
|
||
|
||
/**
|
||
* @brief 词法分析器核心结构体
|
||
*
|
||
* 封装词法分析所需的状态信息和缓冲区管理
|
||
*/
|
||
typedef struct cc_lexer {
|
||
core_stream_t* stream;
|
||
lexer_loc_t pos;
|
||
} smcc_lexer_t;
|
||
|
||
/**
|
||
* @brief 初始化词法分析器
|
||
* @param[out] lexer 要初始化的词法分析器实例
|
||
* @param[in] stream 输入流对象指针
|
||
*/
|
||
void lexer_init(smcc_lexer_t* lexer, core_stream_t* stream);
|
||
|
||
/**
|
||
* @brief 获取原始token
|
||
* @param[in] lexer 词法分析器实例
|
||
* @param[out] token 输出token存储位置
|
||
*
|
||
* 此函数会返回所有类型的token,包括空白符等无效token
|
||
*/
|
||
void lexer_get_token(smcc_lexer_t* lexer, lexer_tok_t* token);
|
||
|
||
/**
|
||
* @brief 获取有效token
|
||
* @param[in] lexer 词法分析器实例
|
||
* @param[out] token 输出token存储位置
|
||
*
|
||
* 此函数会自动跳过空白符等无效token,返回对语法分析有意义的token
|
||
*/
|
||
void lexer_get_valid_token(smcc_lexer_t* lexer, lexer_tok_t* token);
|
||
|
||
#endif
|