問題タブ [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.

0 投票する
1 に答える
233 参照

f# - 2 つの関数を返す関数の一般的な使用に対する値制限エラーの回避

次のように、FParsec createParserForwardedToRef 関数をジェネリック Expr ユニオンと共に使用したいと考えています。

値制限エラーが解消できません。exprCLR 関数に変換することはできませんexprR

通常、この状況にどのように対処しますか?

0 投票する
2 に答える
241 参照

parsing - FParsecパーサーコンビネーターを使用したイプシロンプロダクションの表現

BNFで文法の生成を次のように表現すると便利なことがよくあります。

ここで、εは空のプロダクションルールを表します。つまり、非終端記号「A」は、終端記号「車」、「自転車」、または何にも拡張できません。ただし、文法をリファクタリングしない限り、FParsecでそのような文法をどのように表現するかはわかりません。私は「選択」コンビネータ<|>を知っていますが、私が知る限り、「空の」コンビネータはありません。つまり、trueを返し、入力を消費しないコンビネータです。

FParsecのドキュメントを高低で検索しましたが、これを行うものは見つかりませんでした。これは一般的なシナリオのように思われるため、驚いています。私はFParsec(および一般的なコンビネータ)にかなり慣れていないので、適切な単語を使用していない可能性があります。ヒントはありますか?

0 投票する
2 に答える
240 参照

f# - パーサー識別子と自由形式のテキスト。これは FParsec で実行できますか?

フォローアップとして: fparsec で正確に 2 文字をテストするにはどうすればよいですか?

識別子のペアとそれに続く自由形式のテキストで構成される文字列を解析する必要があります。改行の後にちょうど 2 つの大文字とスペースが続く形式の識別子を見つけるパーサーを簡単に作成できます。前の識別子に関連付けられている自由形式のテキストは、識別子に続くすべてのものですが、次の識別子は含まれません。

たとえば、次のようになります。

2 つの識別子ABCD2 つのフリーフォーム テキストを 含む

Now is the \ntime for all good men.
Four score and seven years ago EF our.

私の問題は、自由形式のテキストには一致するが識別子には一致しないパーサーを作成する方法がわからないことです。これは、バックトラックを行う必要がある場合ですか?

これを行うことができますか?

0 投票する
1 に答える
158 参照

f# - 完全な入力を 2 回解析する

を使用して大文字と小文字を区別しない中置演算子を実現するためOperatorPrecedenceParserに、入力を前処理し、文字列リテラルで区切られたテキストとして解析しています。次に、テキスト部分を検索して、大文字にする必要がある中置演算子を探します ( に知られている演算子に準拠するためOPP)。その後、実際の解析が行われます。

私の質問は、両方のフェーズを 1 つのパーサーに結合できるかということです。私は試した

しかし、入力の最後で失敗し、一見scalarExpr. 入力は独立して解析できるので、 の問題preprocessだと思いますが、うまくいかないようです。これは可能ですか?scalarExpreof

参照用の他のパーサーは次のとおりです。

0 投票する
1 に答える
157 参照

f# - コンビネータ「between」が適用されたパーサーとして「choice」で機能しないのはなぜですか?

私が理解している限りでは、choiceコンビネータは暗黙的にpzeroパーサーをパーサー リストに追加し、fparsec が入力ストリームの次の部分の解析に失敗すると、ブラケットを検索する必要があります。

最小限の完全なコードは次のとおりです。

ただし、入力文字列の場合

次のエラーが発生しました: