問題タブ [parsec]
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.
haskell - パーセクのアトパーセク`inClass`に相当
パーサーはより適切なエラーメッセージを生成する必要があるため、一部のコードをattoparsecからParsecに変換しています。attoparsecコードはinClass
(およびnotInClass
)を広範囲に使用します。inClass
発生を機械的に変換できるParsecの同様の機能はありますか?HayooとHoogleは、この問題についての洞察を提供しませんでした。
inClass "a-c'-)0-3-"
はと同等です\ x -> elem x "abc'()0123-"
が、後者は非効率的で、広い範囲に書き込むのは面倒です。
他に何も利用できない場合は、自分で関数を再実装します。
json - 不適切な JSON 文法の修正
解析について学習を始めたばかりで、JSON を読み取り、そのための単純なツリーを構築するために、(parsec を使用して) Haskell でこの単純なパーサーを作成しました。RFC 4627の文法を使用しています。
ただし、 string{"x":1 }
を解析しようとすると、出力が得られます。
これは、右中括弧 (]) または口ひげ (}) の前にスペースがある場合にのみ発生しているようです。
私は何を間違えましたか?終了記号の前に空白を避けると、完全に機能します。
haskell - パーセクで適切なケースフォールディングを行う方法
で適切なケースフォールディングを行う方法はありますか( fromParsec
のように動作するパーサーが必要だとします)。大文字と小文字を区別しない解析を行うコードは、を使用しますが、適切な大文字と小文字の区別はありません。だから私はこれがまったく可能かどうか戸惑っています。stringCI
Data.Attoparsec.Text
Text.Parsec.Token
char (toLower c) <|> char (toUpper c)
parsing - Parsec の解析と異なる構造の分離
私が異なるパーサーを持っているとしましょう。関数を定義したいのですが、.p1, ..., pk
pk :: Parser ([t1], ..., [tk])
pi :: Parser ti
これは、 p 1 ...p kのいずれかに一致する文字列のコレクションを (次々に) 解析し、対応するリストでそれらを分離します。簡単にするために、どの文字列も 2 つのパーサーに一致しないと仮定します。
私はなんとかそれを行うことができましたが、エレガントな方法を見つけるのに本当に苦労しています(できれば、多くのまたは他の組み込みパーセックパーサーを使用してください)。
parsing - Parsec を使用して正規表現を解析する
小さな正規表現パーサーを実装して Parsec を学ぼうとしています。BNF では、私の文法は次のようになります。
これを Haskell で次のように実装しようとしました。
ただし、ここにはいくつかの無限ループ (トークンを消費しない expr -> star -> expr など) があり、パーサーが永久にループします。star
の本質は、最後に必須トークンを消費することであるため、修正方法はよくわかりません。
何かご意見は?
parsing - FParsecのサンプル文法はサンプルを超えていますか?
プロジェクトリポジトリのサンプルを超える、FParsecで記述されたサンプル文法を探しています。
このGLSLの非常に優れた文法を見つけましたが、これが私が見つけた唯一のサンプルです。必要なのは、CやJavaScriptに似た言語の文法です。
haskell - この Parsec エラーから「文字または数字を期待する」を削除するにはどうすればよいですか?
Haskell に似た言語用の未完成のパーサーを使用して、Parsec で遊んでいます。
エラーメッセージには満足していませんが、正しく動作しているようです。
- 入力:
"foo (bar"
- エラー:
expecting letter or digit, operand or ")"
印刷のみにするにはどうすればよいexpecting operand or ")"
ですか?追加しようとしましたが、機能させること<?>
ができません。
これが私のコードです:
haskell - Parsec を使用して構成を解析する
ここで考えられる構成は仕様のツリーであり、各仕様には対応するキーワード (文字列) と型があることを念頭に置いています。このようなもの:
「型の型」がないので、これを適切に記述する方法がわかりませんが、今のところ気にしないでください。
さて、このようなツリーが与えられたので、可能な有効な構成を読み取ることができるパーサーを構築したいと思います。キーワード/タイプのペアを解析できるサブパーサーが既にあると思います。
たとえば、考えられる構成ツリーは次のとおりです。
長方形のサイズを指定できます。可能な構成ファイルは、たとえば次のようになります。
(構成ファイルは、改行で区切られたペアの単なるリスト、keyword = blah であると仮定しましょう。ここで、blah は、そのキーワードに対応するパーサーが処理できるものです。ただし、それらは任意の順序である可能性があり、1 つと一致する必要があります。ツリーの可能な「有効なサブセット」。有効なサブセットとは、最上位ノードを含む任意のサブセットであり、それが含む「and」ノードのすべての子を含み、「or」ノードの子を 1 つだけ含みます。)
そのようなパーサーの構築を開始する方法さえわかりません。続行する方法、または上記の ConfigTree データ型をより解析しやすいものに完全に再構築する方法について、誰かがいくつかのヒントを与えることができますか?
haskell - 単一の入力で複数の正しいパーサーから選択する
複数のパーサーが成功できる入力を解析する最良の方法を知りたいです。私は最初に失敗した試みと、より慣用的なものにできることを願っているエレガントでない解決策の概要を説明しました。
たとえば、次の文の「the」、「quick」、「fox」を独自のデータコンストラクターに入れたいと思います。
したがって、次の型構築子が与えられます。
解析の出力を次のようにしたいと思います。
2つの解決策は次のとおりです。
「choice」は、私が本当に必要としているのが最小の文字を消費しながら成功する最初のパーサーである場合に成功する最初のパーサーを返すため、最初の試行「test1」は目的の出力を生成しません。これは、入力が解析された後のソース位置を保持し、ソース位置が最も低いパーサーを使用して次に試みることです。
このケースは十分に一般的であるように思われるので、明らかなコンビネータの呪文が欠けているように感じます。誰かがより良い提案を提供できますか?
ありがとう!
-ディーチ
parsing - Haskell で特定の文字列を解析する
私は parsec Haskell ライブラリを使用しています。
次の種類の文字列を解析したい:
等
値 v1 と v2 のみを収集し、これらをデータ構造に格納するのは興味深いことです。
次のコードで試しました:
このようにして、入力が"[[v1]][[v2]]"
プログラムである場合は正常に動作し、次の出力が返されます。
入力が"xyz[[v1]][[v2]]"
の場合、プログラムは動作しません。特に、 を[[...]]
無視して、 に含まれるものだけが必要です"xyz"
。
[[...]]
また、コンテンツをデータ構造に保存したいと考えています。
この問題をどのように解決しますか?