1

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 / ""

私はこれを言っているのは正しいですか、それともこれらの 2 つの形が別々の原子であることを必要とする基本的な何かがあるのでしょうか? 私は独自の PEG パーサーを構築しており、これら 2 つをスキップする (または他のコンビネーターで定義する) と便利ですが、重要なものを見逃していないことを確認したいと考えています。

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 に答える