私はF#をかなり新しくしていますが、ここ数週間は参考資料を読んでいます。私は、ユーザー提供の入力文字列を処理して、構成要素を識別して分離したいと考えています。F#ユーザー入力をトークン化する方法:数字、単位、単語を区切る?
XYZホテル:220EUR /夜 プラス17.5%の税
で6泊の出力は、タプルのリストのようなもののようになります。
例えば、この入力用[( "XYZ"、Word); (「ホテル:」、ワード);
( "6"、Number)。 ( "夜"、Word);
( "at"、演算子); ( "220"、Number);
( "EUR"、CurrencyCode); ( "/"、 オペレータ)。 ( "夜"、ワード);
( "plus"、Operator); ( "17.5"、 番号); ( "%"、PerCent); ( "tax"、 Word)]
私はユーザー入力を処理しているので、何でもかまいません。したがって、ユーザが文法に従うことを期待することは問題ではない。私は数値(整数、浮動小数点数、負数など)、小単位(任意であるが、SIまたはImperial物理単位、通貨コード、私の例では「夜/ s」などのカウントを含むことができる) (at "" per "、" of "、" discount "などを含む)、および他のすべての単語を含む単語として使用することができます。
アクティブパターンマッチングを使用する必要があるという印象はありますか?しかし、私はどのように始めるべきか正確には分かりません。適切な参考資料または同様の例を指すポインタはすばらしいでしょう。
これは包括的な応答です。厳密な文法ではなく、フリーフォーマットのテキストを扱っていても、FParsecは良い解決策であると言っていますか? –
@David - 正確には、FParsecはテキスト解析ツールとして書かれており、それは柔軟なものです。 – ChaosPandion
私はあなたの例を走らせて、私は最も感銘を受けました。FParsecのドキュメントを読む必要があるので、必要に応じてこれを知的に修正することができます。 –