PEG解析器:是“可选的”和“一个或多个”规则是必要的吗?

时间:2013-04-27 01:55:15

标签: parsing parser-combinators peg

维基百科关于PEG解析器的文章定义了以下组合器:

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

2 个答案:

答案 0 :(得分:1)

你是对的,只是e+被写成没有&的序列。

e+ := e e*

答案 1 :(得分:0)

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

  • +可以根据序列和*以及可能&来定义(虽然后一种扩展并不常用):

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

    x? == x / (empty)
    
  • &可以用!

    来定义
    &x = !!x