Skip to content

JuYanYan/Pb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pb

  这是一个玩具级的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)以得到最好的性能

LICENSE

  所有源代码均使用GPL v2分发。前往LICENSE查看更多。

  All sources use GPLv2 license.

Contact

  请前往issue区或者提交新的pr,如果必须再发电子邮件。

  Goto issue or create new pull requestion firstly. If necessary, e-mail me: juyanyan@foxmail.com.

Language

  本仓库注释与文档使用中文或者英语,推荐使用前者。

  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.

About

A simple and crude parser combinator for C++ 20. Parsing strings is easier!

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages