後者ですね、残念
A = Be | Ce | De | F
Be = B*
Ce = C?
De = D >> string "" --この種もε?
これを書き換えるとすると
A = B' | C | D | e
B' = B+
最も外側にある<|>までさかのぼってこの種の変換をする
再帰関数を書くことでうまくいくかもしれないけど
正しく動くのか検証出来そうにないです
Maybe C -> C
みたいにパース結果の型も変わるだろうし

色々と調べてみて
RFCにあるようなBNFをそのまま記述するだけで何とかなる、
みたいな夢のパーサジェネレータはないのかなと思いました
そういうのを実現出来るものがあるとすれば
GLRみたいなアルゴリズムを実装するしかないんでしょうね
そうすると実用的な速度では動かないから
実用レベルでは、もうちょっと細かいハックが色々と要るってことなのかな