Peg I

最近有的没的每天勾上几行代码,在写一个 C 的 Peg 解析器。 Peg 算是个蛮现代的一门解析技术,相比较 lex/yacc, antlr, ll, lr 等等。 写得有点慢,写到差点不想写好几次,希望可以坚持到发版 0.1.0。 很无耻的起了个名字,叫 jupeg,哈哈。 我不太喜欢 peg/leg 这种风格的库;它跟 lex/yacc 一样,用了不少黑魔法,代码一半 C,一半是长得奇奇怪怪的宏代码。 我更喜欢纯粹的通过函数调用的解析库,目前的接口如下:

#include <jupeg.h>

#define MY_GRAMMAR_RULES "..."
#define MY_CODE "..."

int main(int argc, char* argv[]) {
    jupeg_grammar_t grammar = jupeg_grammar_init(MY_GRAMMAR_RULES);
    jupeg_token_t root = jupeg_grammar_parse(grammar, MY_CODE);

    // visit token tree from root, converting it to an AST nodes.
    my_expr expr = my_visit_func(root);

    jupeg_token_free(root);
    jupeg_grammar_free(grammar);

    return 0;
}