23

Haskell パーサー コンビネータ (Parsec 内) が文脈依存文法を解析できることを読みました。これは Scala パーサー コンビネーターにも当てはまりますか? もしそうなら、これは "into" (別名 ">>") 関数の目的ですか?

Scala のパーサー コンビネータの実装と Haskell の実装の長所/短所は何ですか? それらは同じクラスの文法を受け入れますか? エラーメッセージを生成したり、他のさまざまな便利なことをしたりするのは簡単ですか?

packrat の構文解析 (Scala 2.8 で導入) は、この状況にどのように当てはまりますか?

ある言語の実装からの異なる演算子/関数/DSL-sugarが他の言語の実装にどのようにマッピングされるかを示すWebページまたはその他のリソースはありますか?

4

2 に答える 2

15

たくさん質問があります!

parsec(多くのHaskellパーサーコンビネーターライブラリの1つにすぎません)とparsecのScala実装の比較

Scalaコードはかなり新しいため、ここでは誰も比較を行っていませんが、ドキュメントを確認してください。

このアプローチに興味がある場合は、Haskellには他にも多くのパーサーコンビネーターライブラリがあることに注意してください。

Scalaのパーサーコンビネーターの実装とHaskellの実装の長所/短所は何ですか?

Haskellコードは10年以上前のものであり、よく理解されており、多くの例、多くのドキュメント、およびユーザーケースがあります。Scalaのものは比較的新しいものです。

packrat解析

packratの解析はまったく異なります。オリジナルのpackrat紙はHaskellで開発されましたが、その後さらに普及しました。

ある言語の実装とは異なる演算子/関数/DSL-sugarが他の言語の実装にどのようにマッピングされるかを示すWebページまたはその他のリソースはありますか?

いいえ、でもそれはかっこいいでしょう。ただし、ほとんどすべての(?)パーサーコンビネーターライブラリは、先駆的なパーセク実装に基づいているため、元のパーセクと多くを共有しています。

于 2010-03-13T07:29:04.730 に答える
7

次のテクニカルレポートもあります。

Scalaのパーサーコンビネーター

パーサーコンビネーターは、Haskellなどの関数型プログラミング言語でよく知られています。このホワイトペーパーでは、機能的なオブジェクト指向言語であるScalaでライブラリとして実装する方法について説明します。Scalaの柔軟な構文のおかげで、専用のパーサジェネレーターでサポートされているEBNF表記を厳密に近似することができます。初心者のために、最初に最小限のライブラリを最初から開発することにより、パーサーコンビネータの概念を説明します。次に、構文の一部として変数バインディングを示すためのサポートを含む、既存のScalaライブラリの詳細な説明に移ります。ライブラリの有用性を説明するために、いくつかの現実的な例を示します。

report.pdf(324K)

于 2010-03-16T13:42:02.020 に答える