B 编码 parser 的 API 实现
更多...
#include "bparser.h"
#include "util.h"
#include <string.h>
struct BNode* bparser |
( |
char * |
bcode | ) |
|
解析 B 编码
顶层封装,进行错误检查以及屏蔽私有结构体。
用户负责释放抽象语法树。
- 参数
-
- 返回
- 动态生成的语法树根结点
void free_bnode |
( |
struct BNode ** |
pbnode | ) |
|
构造一个新的语法结点
- 参数
-
- 返回
- 动态分配的语法结点
static void parse_back |
( |
struct State * |
st, |
|
|
int |
n |
|
) |
| |
|
inlinestatic |
static struct BNode * parse_bcode |
( |
struct State * |
st | ) |
|
|
static |
解析 B 编码
会向前看一个字节递归下降地进行解析。
- 参数
-
- 返回
- 动态分配的B编码语法结点
static struct BNode* parse_bcode_is_dict |
( |
struct State * |
st | ) |
|
|
static |
递归下降地解析字典
本函数假设调用者已经消耗了字典的起始字符 'd'. 函数内部消耗终止字符 'e'.
- 参数
-
- 返回
- 动态分配的字典结点
static struct BNode* parse_bcode_is_int |
( |
struct State * |
st | ) |
|
|
static |
解析整型
本函数假设调用者已经消耗了整型的起始字符 'i'. 函数内部消耗终止字符 'e'.
- 参数
-
- 返回
- 动态分配的整型结点
static char* parse_bcode_is_key |
( |
struct State * |
st, |
|
|
size_t * |
len_o |
|
) |
| |
|
static |
解析字符串(字典键)
这是解析串的子集,可以为解析串和解析字典所复用
- 参数
-
st | parser 状态 |
len_o | 如果不为 NULL, 写入字符串长度 |
- 返回
- 动态分配的字符串
static struct BNode* parse_bcode_is_list |
( |
struct State * |
st | ) |
|
|
static |
递归下降地解析列表
本函数假设调用者已经消耗了列表的起始字符 'l'. 函数内部消耗终止字符 'e'.
- 参数
-
- 返回
- 动态分配的列表结点
static struct BNode* parse_bcode_is_str |
( |
struct State * |
st | ) |
|
|
static |
解析串
与解析字符串(字典键)不同,串可以是二进制语义,要记录长度。
- 参数
-
- 返回
- 动态分配的串结点
static char parse_get_char |
( |
struct State * |
st | ) |
|
|
inlinestatic |
static size_t parse_get_int |
( |
struct State * |
st | ) |
|
|
inlinestatic |
从数据流中取出一个长整型
- 参数
-
- 返回
- 返回匹配的长整型
static char* parse_get_str |
( |
struct State * |
st, |
|
|
size_t |
length |
|
) |
| |
|
inlinestatic |
从数据流中取出一个给定长度的字符串
- 参数
-
st | 指向状态记录 |
length | 字符串长度(不含 '\0') |
- 返回
- 动态分配的字符数组指针
static size_t pos |
( |
struct State * |
st | ) |
|
|
inlinestatic |