PEG 解析器的 Wikipedia 文章定义了以下组合子:
2.Given any existing parsing expressions e, e1, and e2,
a new parsing expression can be constructed using the following operators:
Sequence: e1 e2
Ordered choice: e1 / e2
Zero-or-more: e*
One-or-more: e+
Optional: e?
And-predicate: &e
Not-predicate: !e
所有这些组合器真的有必要吗?在我看来, Optional 和 One-Or-More 可以很容易地实现为
e+ = e* & e
e? = e / ""
我这样说是对的,还是有什么基本的东西要求这两种形式是独立的原子?我正在构建自己的 PEG 解析器,跳过这两个(或根据其他组合器定义它们)会很方便,但我想确保我没有遗漏任何重要的东西。