2017-01-15 9 views
2

代替パーサーを使用する場合、どのパーサーが入力に一致するかを取得するオプションがあります。私の入力文字列が FParsec代替入力がパースされた入力を取得する

フォーマット以下
{firstPart_number} {secondPart_operator_symbol} {thirdPart} 

ようにすることができ

ここFIRSTPARTは、第2の部分はオペレータを解析する別のパーサーとthirdPartも(数、文字列のリストの)代替で、常に数です。

サンプル入力

1 + 2 
5 * 3 
1 in {2,45,6} 

私の判別組合は異なるタイプがあるので、私はそのパーサに基づいて、私は私の差別組合型のインスタンスを作成できるように入力を一致どのパーサ知りたいですか?私の最初の部分はパーサ間で同じであるが、第二と第三のパーサーが異なると私の現在の問題は、代替と試みパーサーを使用して解決した|>>

+0

あなたがどのようにしているかを見ることができるように(コード全体ではなく関連する短いスニペット)代替パーザをアップしますか?あなたが与えた説明だけからあなたのコードを描くのは難しいです。 – rmunn

+0

私が持っていた考えの1つは、それぞれの代替パーサを '| >>'演算子でラップすることができるということでした。 'pstr"(pstr "|" OpIn) "<|>(pstr" + "| >> OpPlus)<|>(pstr" in "| >> OpIn)'のようなものがあります。しかし、私はあなたのコードを見て、より良い提案をすることができます。 – rmunn

答えて

0

を使用して、そのインスタンス化の種類に基づいているFParsec、この状況を処理する方法

。試みが一致しない場合はバックトラックし、次の代替パーサーは入力を再び解析して一致させます