問題タブ [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.
combinators - FParsec スタイル; コンビネータとモナド スタイルの違いを示しますか?
私は約 2 か月間 F# を初めて使用し、最近FParsec チュートリアルを終了し、さらに例を探し始めました。読めば読むほど混乱し、スタイルへの言及を目にするようになりました。もっとスタイルを探して、このリストを思いついた.
- コンビネータ スタイル
- モナディックスタイル
- 矢印のスタイル
- ダイレクトスタイル
誰かがすべてのスタイルをリストし、それぞれが一般的な問題でどのように機能するかを説明および実証できますか。
の中へ
使用する
編集
FParsecのコメントと区切り文字ベースの構文から、コンビネータとモナド スタイルを拾いました。
Direct Style は常に Direct Style Monadic Parser として表示されます
アロー スタイルがParsec に登場: Direct Style Monadic Parser Combinators For The Real World私はこれをすべて読んでいません。
編集
提案ごと
コンビネータ スタイル
f# - F#を使用した日付の解析
FParsecが文字列に対して行うことを日付に対して行う「日付パーサー」ライブラリはありますか?
つまり、ルールを指定すると、ルールと照合されて、提供されたパターンが認識されます。
逆に、いくつかの解析ルールに基づいて日付を生成するライブラリはありますか?アイデアは、ユーザーに「リアルタイム」の完了を提供して、有効な将来のfparsecマッチングにユーザーを導くことです。
(この生成的構文解析の問題は、人里離れた構文解析サークルに名前がありますか?)
f# - FParsec の文字列と CharStream<'a>
fsharp に名前を含めることができる大きな文を解析したいと思います。名前は、名 + 姓の形式であると仮定します。名のリストがない場合 (見つけられない、後で実行します)、名は姓と同じ長さ 4 以上の文字列であると言います。
非常にスマートなパーサーを試してみると
したがって、両方で機能しますが、問題は 4 文字しか消費しないことです。これは Christophe にとって望ましい動作ではありません。私は言葉全体を消費したいと思います。
FParsec に単語全体を消費するように指示するにはどうすればよいですか? ただし、単語が 4 文字未満の場合は失敗します。
f# - 空白を処理するための FParsec に関するアドバイス
次の形式を持つ「引用符」を解析するための次の部分式があります
したがって、私はそれを解析するためにこのパーセク式を持っています
セパレーター式がコンテンツを消費し始めるため、入力に末尾のスペースがある場合を除いて、正常に動作します。することが。
私は fparsec をよく知らないので、これを書くためのより良い方法があるかどうか疑問に思います。それは少し重いようです(もちろん、それでも非常に扱いやすいですが)
haskell - Haskell パーセクを FParsec に変換する
この Haskell コードを翻訳する方法:
FParsecに? パフォーマンスを向上させるためには、モナド構文を使用しないことをお勧めします。
前もって感謝します、アレクサンダー。
少し誤解を招いて申し訳ありません。Haskell コードをコンパイル可能にするために、問題を少し修正しました。
*p_set_elem_char* の計算を再現できるようになりました。
私を助けてくれたすべての人に心から感謝します。
私は独自の概算を作成しましたが、残念ながらそれほど機能的ではありません。
f# - 空白に敏感なFParsec
私はFParsecを使用して空白に敏感なパーサーを実装しようとしています。そして、n
空白の文字で始まるテキストの行を解析する関数を定義するという赤ちゃんのステップから始めています。
これが私がこれまでに持っているものです:
私の問題は私が走るとき
runParserOnString test 1 "test" " hi\n there\nyou" |> printfn "%A"
「あなた」でエラーが発生します。attempt
私は、状態の変化をさかのぼって追跡Error
し、自分のステータスがソフトな失敗を与えるので戻るという印象を受けました。
["hi"; "there"]
パーサーから戻るにはどうすればよいですか?
xml - F# でのパターン マッチング XML
新しいライブラリ: XParsec
この質問は、F# 3.0 でのストリームと型に依存しない、非線形で拡張可能なパーセクの実装につながりました - FParsec に触発され、Char と線形ストリームから解放され、簡素化されました: http://corsis.github.com/XParsec/
パターン
どこ
コード
入力
出力
質問
簡潔なパターン宣言からコードの実行まで自動的に移行するために、次のことを考えています。
- FParsec を使用して AST へのパターン宣言を解析する
- ASTを評価する
しかし、私が何かをする前に、私は知りたいです:
- AST に頼らずに、F# 関数とコンポジションを直接使用してコードを宣言するための (適用可能な) EDSL (/その一部) を誰でも作成できますか?
- XML で同様のパターン マッチが可能なライブラリはありますか?
- 私のアプローチに関するコメントはありますか?
parsing - FParsec コンビネータをパーサーに変えるパーサーまで?
これには本当に簡単な答えがあると確信していますが、私は一日中これを見つめていて、それを理解することができません.
チュートリアルに従って、JSON パーサーを実装しています。自分自身に挑戦するために、number
パーサーを自分で実装しています。
これは私がこれまでに得たものです:
問題は、それdigit
がParser<char,_>
であるのに対し、 の 2 番目のオプションはint
ですParser<string,_>
。通常、コンビネータを使用して にdigit
変換しParser<char,_>
ますか、それとも何か他にすべきことはありますか?
.net - FParsec - 標準入力ストリームから解析する方法
FParsec を使用して、標準入力ストリームから正常に解析できないようです。私は自分のケースをこの非常に単純なコードに減らしました:
しかし、プログラムを実行し、文字列テストを入力してEnterキーを押すと、そこでハングし、理由がわかりません..
解決策は何ですか?
visual-studio-2010 - VS2012 での F# 2.0 プロジェクトのコンパイル
fparsec と fsharp powerpack を利用して、F# 2.0 コンパイラ/SDK に対して動作するいくつかの F# プロジェクトを含む VS2010 用のソリューションがあります。
次に、メインの開発マシンを VS2012 にアップグレードし、ソリューションをロードして、問題なくコンパイルできました。
ただし、Windows 8 と VS2012 を搭載した別のマシンを再構築したところ、プロジェクトが F# 3.0 をターゲットにしており、fparsec/fsharp powerpack がコンパイルされていないように見えるため、そのマシンにソリューションをロードするとコンパイルが失敗します。
この新しい Windows 8 マシンに FSharp 2.0 SDK をインストールすることは可能ですか (そうであれば、どこから入手できますか?)、ソリューションを再度コンパイルするか、両方でこれを機能させるために何か他のことをする必要がありますか?古い機械と新しい機械?
2012-10-25 更新
VS2012 の再起動後にコンパイルが機能するようになりましたが、コードを実行すると、F# コードに関連する予期しないエラーが発生します。
これは、最初に VS2010 が F# と共にインストールされ、次に vs2012 にアップグレードされたマシンで同じコードをコンパイル/実行する場合には発生しません - vs2012 がインストールされたマシンでのみ発生します。
何か案は?