formatter parser实现 更多...
#include "mm_parser.h"
结构体 | |
struct | tagToken |
TOKEN结构 更多... | |
struct | tagMStrFmtParserState |
分析器状态 更多... | |
宏定义 | |
#define | MSTR_IMP_SOURCES 1 |
#define | LEX_PEEK_CHAR(pstr) (*(pstr)) |
peek一个字符 | |
#define | LEX_MOVE_TO_NEXT(pstr) |
move到下一个字符的位置 | |
#define | LEX_ACCEPT_TOKEN(tk, typ, at_pstr) |
ACCEPT一个token, 注意这个macro不会跳转 | |
#define | IS_NUMBER(ch) ((ch) >= '0' && (ch) <= '9') |
判断是否为一个number | |
#define | LEX_CURRENT_TOKEN(ps) ((ps)->token) |
取得当前Token | |
#define | PARSER_STAGE_BEGIN(s, new_s) ((ParserStage)((uint32_t)(s) | (uint32_t)(new_s))) |
表示一个stage开始 | |
#define | PARSER_STAGE_END(s, new_s) ((ParserStage)((uint32_t)(s) & ~(uint32_t)(new_s))) |
表示一个stage结束 | |
#define | IS_CHRONO_TOKEN_TYPE(type) |
判断是否为Chrono格式化需要的token | |
#define | IS_CHRONO_USERDEF_TOKEN_TYPE(type) |
判断是否为Chrono格式化需要的用户自定义token | |
类型定义 | |
typedef enum tagTokenType | TokenType |
Token的类型 | |
typedef struct tagToken | Token |
TOKEN结构 | |
typedef enum tagParserStage | ParserStage |
表示parser的各个stage | |
变量 | |
static const char *const | MFMT_DEFAULT_SPLIT = ", " |
默认的array split | |
static const usize_t | MFMT_DEFAULT_SPLIT_LENGTH = 2 |
static const char *const | MFMT_DEFAULT_CHRONO_DATE_SPLIT = "-" |
默认的年月日之间的分割 | |
static const usize_t | MFMT_DEFAULT_CHRONO_DATE_SPLIT_LENGTH = 1 |
static const char *const | MFMT_DEFAULT_CHRONO_TIME_SPLIT = ":" |
默认的时分秒之间的分割 | |
static const usize_t | MFMT_DEFAULT_CHRONO_TIME_SPLIT_LENGTH = 1 |
static const char *const | MFMT_DEFAULT_CHRONO_ITEM_SPLIT = " " |
默认的时间日期项之间的分割 | |
static const usize_t | MFMT_DEFAULT_CHRONO_ITEM_SPLIT_LENGTH = 1 |
static const char *const | MFMT_DEFAULT_CHRONO_SUBSEC_SPLIT = "." |
默认的毫秒项之间的分割 | |
static const usize_t | MFMT_DEFAULT_CHRONO_SUBSEC_SPLIT_LENGTH = 1 |
formatter parser实现
#define IS_CHRONO_TOKEN_TYPE | ( | type | ) |
判断是否为Chrono格式化需要的token
#define IS_CHRONO_USERDEF_TOKEN_TYPE | ( | type | ) |
判断是否为Chrono格式化需要的用户自定义token
#define IS_NUMBER | ( | ch | ) | ((ch) >= '0' && (ch) <= '9') |
判断是否为一个number
#define LEX_ACCEPT_TOKEN | ( | tk, | |
typ, | |||
at_pstr | |||
) |
#define LEX_CURRENT_TOKEN | ( | ps | ) | ((ps)->token) |
取得当前Token
#define LEX_MOVE_TO_NEXT | ( | pstr | ) |
move到下一个字符的位置
#define LEX_PEEK_CHAR | ( | pstr | ) | (*(pstr)) |
peek一个字符
#define MSTR_IMP_SOURCES 1 |
#define PARSER_STAGE_BEGIN | ( | s, | |
new_s | |||
) | ((ParserStage)((uint32_t)(s) | (uint32_t)(new_s))) |
表示一个stage开始
#define PARSER_STAGE_END | ( | s, | |
new_s | |||
) | ((ParserStage)((uint32_t)(s) & ~(uint32_t)(new_s))) |
表示一个stage结束
typedef enum tagParserStage ParserStage |
表示parser的各个stage
typedef enum tagTokenType TokenType |
Token的类型
enum tagParserStage |
enum tagTokenType |
Token的类型
|
static |
将字符串转为无符号整数值
str | 字符串 |
max_len | 最大读取的字符串长度 |
|
static |
取得下一个token
[out] | token | Token输出 |
[in] | str | 输入字符串, 会取得最前面的token |
[in] | offset | 输入str的偏移位置 |
[in] | stage | 这个值可以告诉lex, parser希望尝试识别什么样的token |
mstr_fmt_parse_goal | ( | MStrFmtParserState * | state, |
MStrFmtParseResult * | result | ||
) |
解析 replacement field
[in,out] | state | Parser状态 |
[out] | result | Parser结果 |
mstr_fmt_parser_end_position | ( | MStrFmtParserState * | state, |
const char * | pbeg | ||
) |
计算parser停止的位置
state | parser状态 |
pbeg | parser init时候传进去的inp指针 |
mstr_fmt_parser_init | ( | byte_t * | mem, |
const char * | inp, | ||
MStrFmtParserState ** | ppstate | ||
) |
初始化Parser状态
[in] | mem | 内存, 大小需要至少比 sizeof(MStrFmtParserState) 大 |
[in] | inp | 输入字符串 |
[out] | ppstate | 解析状态 |
|
static |
解析align
|
static |
解析定点数token里面的信息, 填充 MStrFmtArgProperty
|
static |
解析arg_id
|
static |
解析格式化的值类型
|
static |
解析 数组变量的格式化标记
|
static |
解析时间日期的值格式化的方式(chrono_spec)
|
static |
解析时间日期的值格式化的方式项
|
static |
表示当前需要token类型 tk, 不然返回 or_else
|
static |
解析一般的值格式化的方式(format_spec)
|
static |
表示当前需要token类型 tk, 不然返回 or_else
|
static |
解析格式化的方式 [format_spec | chrono_spec]
|
static |
解析可选的格式化描述: :
[format_spec | chrono_spec]
|
static |
解析可选的fill char或者format type
|
static |
指定符号的显示方式
|
static |
解析可选的split char
|
static |
解析可选的宽度, 默认为-1
|
static |
解析 replacement_field
|
static |
解析 单个变量的格式化标记
|
static |
解析split chars
|
static |
取得下一个token
[in,out] | state | 分析器状态 |
|
static |
尝试看看下一个token
[in,out] | state | 分析器状态 |
|
static |
默认的年月日之间的分割
|
static |
|
static |
默认的时间日期项之间的分割
|
static |
|
static |
默认的毫秒项之间的分割
|
static |
|
static |
默认的时分秒之间的分割
|
static |
|
static |
默认的array split
|
static |