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 つをスキップする (または他のコンビネーターで定義する) と便利ですが、重要なものを見逃していないことを確認したいと考えています。