Parsecパッケージを使用してHaskellでパーサーを作成しようとしています。入力のルールの一部では、パーサーがルールのオプションと一致する必要があります。ルールのうち、複数のルールが一致する可能性がありますが、少なくとも1つのルールが一致する必要があります。一致しない場合、パーサーはエラーを生成することが予想されます。
例を挙げましょう。とという名前の2つのParsecルールがあると仮定first
しmore
ます。次の可能性があります。
- 入力が一致し、その後に;
first
が続きます。more
- 入力は一致するだけ
first
です; またはその - 入力はにのみ一致し
more
ます。
first
いずれの場合も、またはの少なくとも1つがmore
一致する必要があります。これを行う方法についてのアイデアはありますか?使用することを考えました<|>
が、正しく理解していれば、ルールの1つ(つまり、最初に成功したルール)にしか一致しません。
編集:
明確化:とが両方とも一致する場合はfirst
、more
両方の結果を返す必要があります。一方だけが一致する場合、もう一方の戻り値は、のようなnull値になる可能性がありますが、との両方をNothing
返すことはできません。Nothing
first
more