#include typedef struct lexer_stream lexer_stream_t; #define lexer_stream_eof (-1) struct lexer_stream { const char* name; usize name_len; /// @brief 读取指定数量的字符到缓冲区 usize (*read_buf)(lexer_stream_t* stream, char* buffer, usize count); /// @brief 获取下一个字符 int (*peek_char)(lexer_stream_t* stream); /// @brief 重置字符流位置 void (*reset_char) (lexer_stream_t* stream); /// @brief 读取并消费下一个字符(移动流位置) int (*next_char)(lexer_stream_t* stream); /// @brief 释放资源 void (*free_stream) (lexer_stream_t* steam); }; #ifndef __SMCC_LEXER_NO_MEM_STREAM__ typedef struct lexer_mem_stream { lexer_stream_t stream; const char* data; usize data_length; usize curr_pos; usize peek_pos; cbool owned; } lexer_mem_stream_t; lexer_stream_t* lexer_mem_stream_init(lexer_mem_stream_t* stream, const char* data, usize length, cbool need_copy); #endif