問題タブ [fparsec]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
f# - 2 つの関数を返す関数の一般的な使用に対する値制限エラーの回避
次のように、FParsec createParserForwardedToRef 関数をジェネリック Expr ユニオンと共に使用したいと考えています。
値制限エラーが解消できません。expr
CLR 関数に変換することはできませんexprR
。
通常、この状況にどのように対処しますか?
parsing - FParsecパーサーコンビネーターを使用したイプシロンプロダクションの表現
BNFで文法の生成を次のように表現すると便利なことがよくあります。
ここで、εは空のプロダクションルールを表します。つまり、非終端記号「A」は、終端記号「車」、「自転車」、または何にも拡張できません。ただし、文法をリファクタリングしない限り、FParsecでそのような文法をどのように表現するかはわかりません。私は「選択」コンビネータ<|>
を知っていますが、私が知る限り、「空の」コンビネータはありません。つまり、trueを返し、入力を消費しないコンビネータです。
FParsecのドキュメントを高低で検索しましたが、これを行うものは見つかりませんでした。これは一般的なシナリオのように思われるため、驚いています。私はFParsec(および一般的なコンビネータ)にかなり慣れていないので、適切な単語を使用していない可能性があります。ヒントはありますか?
f# - パーサー識別子と自由形式のテキスト。これは FParsec で実行できますか?
フォローアップとして: fparsec で正確に 2 文字をテストするにはどうすればよいですか?
識別子のペアとそれに続く自由形式のテキストで構成される文字列を解析する必要があります。改行の後にちょうど 2 つの大文字とスペースが続く形式の識別子を見つけるパーサーを簡単に作成できます。前の識別子に関連付けられている自由形式のテキストは、識別子に続くすべてのものですが、次の識別子は含まれません。
たとえば、次のようになります。
2 つの識別子AB
とCD
2 つのフリーフォーム テキストを 含む
Now is the \ntime for all good men.
Four score and seven years ago EF our.
私の問題は、自由形式のテキストには一致するが識別子には一致しないパーサーを作成する方法がわからないことです。これは、バックトラックを行う必要がある場合ですか?
これを行うことができますか?
f# - 完全な入力を 2 回解析する
を使用して大文字と小文字を区別しない中置演算子を実現するためOperatorPrecedenceParser
に、入力を前処理し、文字列リテラルで区切られたテキストとして解析しています。次に、テキスト部分を検索して、大文字にする必要がある中置演算子を探します ( に知られている演算子に準拠するためOPP
)。その後、実際の解析が行われます。
私の質問は、両方のフェーズを 1 つのパーサーに結合できるかということです。私は試した
しかし、入力の最後で失敗し、一見scalarExpr
. 入力は独立して解析できるので、 の問題preprocess
だと思いますが、うまくいかないようです。これは可能ですか?scalarExpr
eof
参照用の他のパーサーは次のとおりです。
f# - コンビネータ「between」が適用されたパーサーとして「choice」で機能しないのはなぜですか?
私が理解している限りでは、choiceコンビネータは暗黙的にpzeroパーサーをパーサー リストに追加し、fparsec が入力ストリームの次の部分の解析に失敗すると、ブラケットを検索する必要があります。
最小限の完全なコードは次のとおりです。
ただし、入力文字列の場合
次のエラーが発生しました: