这是一个玩具级的Parser Combinator,来自于自己的一个表达式解析器。但是我在sympy中发现了更好的实现,因此那个项目被废弃了😔,这个事情令我感到有些沮丧(呜呜呜要抱抱)。
但是,现在,我决定,将其语法分析的部分代码开源,且维护这个开源的东东。
借助Pb
,它可以让你体验到:
- 以一种自然的方式描述您的文法
- 较低的运行开销
- Header-ONLY, 告别讨厌的build
未来会考虑加入:
- 左递归消除
这意味着您无需使用令人感到迷茫的正则表达式,例如,在Pb
的帮助下,可以这样去表示一个数字:
// 对应于[0-9]+
// 这是输入的类型
using Tstr = ConstString;
// [0-9]
auto num_meta = InRange<Tstr>('0', '9');
// 正闭包+
auto numbers = num_meta * N(1, Infinity);
我个人认为这是非常吸引人的,尤其是构建一些简单的解析器的时候(例如解析一个数学表达式、一段json,等等),但是请注意,优雅与执行效率是不可兼得的,如果决定使用这样看起来更优雅的方式,那么势必要牺牲性能,选择Parser Generator(例如Yacc、PEG.js)以得到最好的性能。
所有源代码均使用GPL v2分发。前往LICENSE查看更多。
All sources use GPLv2 license.
请前往issue区或者提交新的pr,如果必须再发电子邮件。
Goto issue or create new pull requestion firstly. If necessary, e-mail me: juyanyan@foxmail.com.
本仓库注释与文档使用中文或者英语,推荐使用前者。
We use simplified Chinese or English in documents and comments. If necessary, you can use classical Chinese or traditional Chinese to write comments or documents.