Parsing PEG解析器:是;“可选”;及;一个或多个“;有必要制定规则吗?

Parsing PEG解析器:是;“可选”;及;一个或多个“;有必要制定规则吗?,parsing,parser-combinators,peg,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-p

维基百科关于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
所有这些组合子真的有必要吗?在我看来,可选和一个或多个可以很容易地实现为

e+ = e* & e
e? = e / ""

我说的对吗,还是有什么基本的东西要求这两种形式是独立的原子?我正在构建我自己的PEG解析器,跳过这两个(或者用其他组合词定义它们)会很方便,但我想确保我没有遗漏任何重要的东西。

你是正确的,除了
e+
是作为一个序列编写的,没有
&

e+ := e e*

您是正确的,只是
e+
是作为一个序列编写的,没有
&

e+ := e e*

[扩展您和280Z28所说的内容…]

  • +
    可以按照顺序和
    *
    以及可能的
    &
    进行定义(尽管后者的扩展不常用):

  • 可根据选择进行定义:

    x? == x / (empty)
    
  • &
    可以用
    来定义

    &x = !!x
    

[扩展您和280Z28所说的内容…]

  • +
    可以按照顺序和
    *
    以及可能的
    &
    进行定义(尽管后者的扩展不常用):

  • 可根据选择进行定义:

    x? == x / (empty)
    
  • &
    可以用
    来定义

    &x = !!x
    

对我来说很有意义。我认为它们真的只是为了方便,因为它们太普通了。对我来说是有道理的。我认为它们真的只是为了方便,因为它们很常见。
e+
也可以写成
&e*
(注意:顺序与问题相反)。
e+
也可以写成
&e*
(注意:顺序与问题相反)。