問題タブ [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.
python - パーセクのPython実装?
最近、Ply を使用して Python でパーサーを作成しました (これは yacc を Python で再実装したものです)。パーサーをほぼ使い終えたとき、構文解析する必要がある文法では、構文解析中にルックアップを行ってレクサーに通知する必要があることに気付きました。レクサーに通知するためにルックアップを行わないと、言語の文字列を正しく解析できません。
文法規則からレクサーの状態を制御できることを考えると、パーサーモジュールのルックアップテーブルを使用してユースケースを解決すると思いますが、保守/テストが難しくなりすぎる可能性があります。そこで、他のオプションについて知りたいと思います。
Haskell では、構文解析関数 (コンビネーターとして知られる) のライブラリーである Parsec を使用します。Parsec の Python 実装はありますか? それとも、Python でコンテキスト依存のパーサーを構築できるように、構文解析機能を備えた他の製品品質のライブラリでしょうか?
編集:コンテキストフリーの解析での私の試みはすべて失敗しました。このため、ANTLR がここで役立つとは思いません。
parsing - 良いocamlパーサー?
flex/bisonの派生物ではない優れたocaml解析ライブラリを探しています。理想的には、パーセクの線に沿ったモナディックコンビネータライブラリが欲しいのですが、何も見つかりません。
私はhaskellを使用しますが、haskellのllvmバインディングを作成することは、私が当初考えていたよりも面倒です。
乾杯、
デュアン
windows - HaskellParsecコンパイルエラー
ビルド済みのインストーラーv6.8.2を介してHaskellをインストールしました。
このサンプルファイルをGHCでコンパイルしようとすると
次のエラーが発生します。
カバール経由でParsecをインストールしました。
何が悪いのかについて誰かが何か考えを持っていますか?
parsing - Haskell/Parsec で ParseError を上げる
ParseError
Parsec でエラー ( )を発生させる好ましい方法は何ですか? チェックを実行するパーサー内にいくつかのコードがあり、チェックが失敗した場合ParseError
は が返されます (つまりLeft ParseError
、実行中parse
)。
haskell - haskell で oneOf を使用すると、コンパイル時にエラーが発生する
私は Haskell の完全な初心者です。ダウンロードした Haskell ファイルをコンパイルしようとしていますが、エラーが発生します。
これで十分かどうかはわかりませんが、エラーのあるコードのセクションは次のとおりです。
haskell - Haskell の Parsec を使用して ByteString を解析する
Parsec を使用して文字列を解析することはできましたが、ByteString で同じことを行うことはできません。
Parsec を手動で文字列に変換せずに ByteStrings で動作させるにはどうすればよいですか?
これを達成するのは難しくないと感じています。私が間違っている?(Haskell初心者です^^)
ありがとう!
haskell - Parsecを使用して、foo2で終了し、すべてドットで区切られた0個以上のfoo1を解析するにはどうすればよいですか?
私がやろうとしていることはかなり単純に思えますが、私はパーセクのHaskell初心者なので、解決策は私にはわかりません。
私には2つのパーサーがあります。たとえば、中間項を解析し、終了項を解析できる場所foo1
を考えてみましょう。用語は記号で区切られます。foo2
foo1
foo2
"."
解析する必要のある文は
foo2
foo1.foo2
foo1.foo1.foo2
等々。
私の当初の考えは
しかし、それは唯一のケースを捕らえることはできませんfoo2
。
haskell - Parsec: バックトラッキングが機能しない
F# 型の構文を解析しようとしています。[F]Parsec 文法を書き始めて問題が発生したので、文法を次のように単純化しました。
FParsec で問題が発生した後、私は Parsec に切り替えました。なぜなら、私はそれを説明するための本の完全な章を持っているからです。この文法の私のコードは
問題は、Parsec がデフォルトでバックトラックしないことです。
私が最初に試みたのは、typeP の順序を変更することでした。
しかし、文法が左再帰であるため、これは単なるスタック オーバーフローidentP
ですarrowP
。次に、さまざまな場所で試しtry
ました。たとえば、
しかし、(1)スタックオーバーフローまたは(2)識別子に続く「->」の非認識の基本的な動作を変更することは何もないようです。
私の間違いは、Parsec 文法の記述に成功した人なら誰にでも明らかです。誰かがそれを指摘できますか?
parsing - Scala パーサー コンビネーターは Haskell の Parsec と比べてどうですか?
Haskell パーサー コンビネータ (Parsec 内) が文脈依存文法を解析できることを読みました。これは Scala パーサー コンビネーターにも当てはまりますか? もしそうなら、これは "into" (別名 ">>") 関数の目的ですか?
Scala のパーサー コンビネータの実装と Haskell の実装の長所/短所は何ですか? それらは同じクラスの文法を受け入れますか? エラーメッセージを生成したり、他のさまざまな便利なことをしたりするのは簡単ですか?
packrat の構文解析 (Scala 2.8 で導入) は、この状況にどのように当てはまりますか?
ある言語の実装からの異なる演算子/関数/DSL-sugarが他の言語の実装にどのようにマッピングされるかを示すWebページまたはその他のリソースはありますか?
haskell - アイテムの文字列を解析するHaskellparsec
最後の要素を除くすべてを1つのパーサーで解析する必要があり、最後の要素を別のパーサーで解析する必要があるリストを解析する必要があります。
もともと試しました
問題は、parse1がparse2入力を消費する可能性があることです。したがって、parse1は常にリスト全体を消費し、parse2には何も残しません。
文字列の最後の要素以外のすべてにparse1を適用してから、parse2を適用すると言う方法はありますか?