1

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 解析器,跳过这两个(或根据其他组合器定义它们)会很方便,但我想确保我没有遗漏任何重要的东西。

4

2 回答 2

1

你是对的,除了e+写成一个没有&.

e+ := e e*
于 2013-04-27T02:13:05.830 回答
0

[扩展你和 280Z28 所说的话......]

  • +可以根据序列定义,*并且可能&(尽管后一种扩展并不常用):

    x+ == x x*
    x+ == &x x*
    
  • ?可以根据选择来定义:

    x? == x / (empty)
    
  • &可以定义为!

    &x = !!x
    
于 2013-07-24T04:50:17.030 回答