2013-04-27 65 views
1

的Wikipedia文章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 

是否所有这些组合子?这在我看来,可选和一个或更多的可以很容易地为

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

难道我说错此实现,还是有一些基本的东西,需要在这两种形式是单独的原子?我正在构建自己的PEG解析器,并且跳过这两个(或者以其他组合器的形式定义它们)会很方便,但我想确保我不会错过任何重要的东西。

+0

对我来说很有意义。我认为他们真的只是为了方便,因为他们很常见。 – 2013-04-27 02:01:41

回答

1

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

e+ := e e* 
+0

'e +'也可以*写成'&e e *'(注意:与问题中的顺序相反)。 – danfuzz 2013-07-24 04:45:47

0

[关于扩大你和280Z28说...]

  • +可以在序列方面与*和可能&(尽管后者扩张不常用)来定义:

    x+ == x x* 
    x+ == &x x* 
    
  • ?可以在所选择的术语来定义:

    x? == x/(empty) 
    
  • &可以在!来定义:

    &x = !!x