問題タブ [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# - 'sepEndBy' は、'before' でラップされている場合はキャプチャしません
次のテキストを解析したい:
条件のリストのコンビネータから始めました。
where ステートメント (= を含むすべての行) の条件リストを渡すと、結果に 7 つの WhereConditions を含む応答が返されます。ステータスは「OK」です。しかし、エラーリストには「Expected newline」ErrorMessage が含まれています。
しかし、この種のリストを丸括弧で囲み、先頭に演算子を付けて、次の形のコンビネータで解析しようとすると、次のようになります。
ステータス「エラー」の返信を受け取ります。しかし、エラーリストは結果と同様に空です。
だから私はこの時点でちょっと立ち往生しています。まず、私のmultiConditionWhereListのsepByEnd1コンビネータが空でないエラー リストを生成し、最後に改行が必要な理由がわかりません。さらに重要なことに、リストを between ステートメントでラップすると、リストがキャプチャされない理由がわかりません。
参考として、ルールのセット全体と、問題を引き起こすルールの呼び出しを含めます。
regex - Fparsec と正規表現
FParsec のようなライブラリを使用してテキストを解析することの利点は、.NET 言語のプレーンな正規表現を使用することよりも優れていますか?
parsing - FParsec を使用して文字列値を解析する方法
別の文字列から単純な文字列を解析するにはどうすればよいですか。
FParsec チュートリアルには、次のコードが示されています。
バケット間のフロートを解析したくはありませんが、式内の文字列を解析したくありません。
通り。お気に入り:
Location := LocationKeyWord path EOL
ヘルパー関数が与えられた場合
そしてパーサー関数:let pLocation = ...
電話するとtest pLocation "Location /root/somepath"
印刷する必要があります"/root/somepath"
私の最初の試みは、チュートリアル コードを次のように変更することでした。
しかし、これは私にエラーを与えます:
parsing - FParsec の選択が予期しない動作をする
私は、私のより大きなプロジェクトのプロトタイプに FParsec を使用する予定です。そこで、以下に示すテスト プログラムを使用して、このライブラリを初めて体験することにしました。しかし、fparsec 'choice' 関数を使用して私の基本的なパーサー (動作しているように見える) を組み合わせると、予期しない動作が発生するようです。
基本的に、目標は、この単純な電卓パーサー コードがすべて、数値またはサブ式の積の合計を常に返すことです。サブ式は、式全体と同じ構造を持つ必要があります。
「choice」のドキュメントから理解したように、「choice」に指定されたパーサーのリストで指定されているように、代替案は左から右に試行されます。リストのさらに左にあるパーサーが失敗しても入力を消費した場合、後続のパーサーは試行されないことを理解しました。
それでも、上で述べたように、コードは機能するはずです。しかし、うまくいきません。
誰かが私にa)何がうまくいかないのか、そしてb)それを修正する方法を説明してくれれば幸いです。
私の主なプロジェクトでは、いくつかの入力からパーサーを計算することを計画しているため、予期しない方法でパーサーを信頼できる方法で組み合わせる方法を正確に理解する必要があります。
ここで、 $do test Sum "4 * 3 + 5 * 2" は次の出力で失敗します。
そして、なぜここに「*」が必要なのか、私には最も漠然とした考えさえありません。
f# - FParsec を使用して、開始文字と終了文字が異なる識別子を解析する方法
先頭と末尾の文字が異なる識別子を解析する最善の方法を見つけるのに苦労しています。たとえば、識別子の先頭文字は大文字と小文字のみで、識別子の途中には数字とコロンが含まれているとします。識別子の末尾はコロンではなく、アポストロフィである場合があります。
したがって、以下はすべて正当な識別子です。
ただし、次のものはそうではありません。
バックトラッキングを処理する最善の方法がわかりません。コロンは途中で問題ありませんが、識別子の最後にいるかどうかを判断するには、先読みが必要です。
編集:
提案をありがとう。正規表現を使用することは実用的なアプローチですが、そうでなければこれを行うためのクリーンで明白な方法がないように見えることに少しがっかりしています。