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