問題タブ [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 投票する
0 に答える
187 参照

parsing - Fparsec の再帰文法が StackOverflowException をスローする

私はこのコードを持っています

評価されると、StackoverflowExcpetion がスローされます。問題は、無限再帰なしでどのように書くことができるかということです。

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

parsing - 括弧付きの FParsec 構文解析式

私は最初のパーサーをコーディングしています。それは F# にあり、私は FParsec で使用しています。

私のパーサーはtrue and false(true and false or true)true(((true and false or true)))などを解析しますが、これは正しいです。

しかし、次のような場合は解析しません(true and false) or true。テキストの途中に括弧があると失敗します。

どうすれば解決できますか?

サンプルコード:

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

parsing - OperatorPrecedenceParser が Optional (opt) 式を解析するようにする

私のプロジェクト用に特定のドメイン固有言語を実装するパーサーを実装しています。

私が苦労している側面の 1 つは、式全体がオプションになるような式 (FParsec の OperatorPrecedenceParser を使用して実装される) を作成することです。

ネット上の多くの例とほぼ同じ方法で、パーサー OPP を実装しました。また、行末コメントの空白が消費される場所をずらしてみました。ただし、ボットの場合、私の試みはどれも機能しないようです(式と行末コメントの両方がオプションです)

具体的には(以下の例で実装されているように)、以下を正常に解析できるようにしようとしています。

ここで、式はオプションであり、式の後にオプションのコメントがあります。「KeyValue:」はこの例ではハードコードされていますが、私が持っているメインのパーサー コードでは、これは識別子です。

注: 以下のサンプルについて。2 つの float の単純な中置加算を解析する最小限の式を実装しました。完全なパーサーはさらに多くの機能を実装しています。

NB2。式には、: と式の間に少なくとも 1 つの空白が必要です。# コメント文字は、式にはまったく表示されません。

「オプション」という表現をどのようにすればよいですか。以下の eKeyValue FParsec パーサー タイプを参照してください。

以下の例には、6 つの事例が含まれています。すべてのケースが機能するはずです。wsBeforeEOL を用語の最後に追加して、オプション (opt) という式を追加しようとしましたが、何も機能しないようです。OPP は常に消費され、失敗することはないようです。

以下のサンプル プログラムの出力は次のようになります。

サンプル プログラムは次のとおりです (上記のテスト ケースは Main() 関数にあります。

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

parsing - FParsec で同種のリストを解析するにはどうすればよいですか?

FParsec で同種の json のような配列を解析しようとすると問題が発生します。問題を再現する短い例に分解しました。

関数を使用しtestて試してみると、次の結果が得られます。

演算子を使用するときにP_INT_VALUEとの順序を入れ替えると、解析は成功しますが、同様のエラーで失敗します。基本的に、私が最初に使用するパーサーは、使用しようとするものです。P_BOOL_VALUE<|>[true,false][1,2,3]

LHS がユーザー状態を変更した場合、オペレーターが RHS パーサーを試行しないことは理解して<|>いますが、それがどのように発生するのかわかりません。P_BOOL_VALUE と P_INT_VALUE には共通の開始文字がないため、間違ったデータ型を解析しようとすると、両方ともすぐに失敗するはずです。Int が「false」または「true」で始まることはなく、bool が数字で始まることもありません。

私は何を間違っていますか?