6

Haskell を学ぶ (そして自分を苦しめる) 演習として、構成可能な Haskell コード ビューティファイアーを作成することを検討しています。

dataインポートの並べ替え、並べ替え/グループ化、classステートメント、セクション間の行数などの選択肢を指定する、JSON または YAML (またはそれ以上のもの) で記述された構成ファイルをサポートします。

抽象構文木 (AST) を生成し、コメントを保持する Haskell 98 用のパーサーを探しています。言語拡張機能を備えた GHC の解析はおまけです。

そのようなものがなければ、再帰降下パーサー、または Parsec またはパーサー ジェネレーターを使用するパーサーを作成できると思います。たぶん、自分で転がすと学習が増えるでしょう(そして拷問:-))。

オープン ソース ライセンスの 1 つの下で利用可能な完全な Haskell->AST パーサーはありますか? このプロジェクトが進展したら、github にアップします。

4

2 に答える 2

16

haskell-src-extsパッケージにはパーサーが含まれています。パーサーはほとんどの GHC 拡張を解析するだけではありません。また、構文 XML リテラルなどの一般的な拡張機能も認識します。parseModuleWithCommentsコメント情報にもアクセスしたい場合は、関数を使用する必要があります。

ただし、コメントは実際の構文ツリーには格納されないことに注意してください。それらは、位置情報を含むコメントの個別のリストとして保存されます。コメントをツリーに含める必要がある場合は、線形マージ アルゴリズムを使用してツリーをリストとマージすることにより、ツリーにコメントを含めるのはかなり簡単です (両方のシーケンスは "並べ替えられた" と見なすことができます)。「注釈付き」AST は各ノードに任意のメタデータを含めることができるため (デフォルトでは のみ)、コメントは関連する AST ノードとともに保存することもできますSrcSpanInfo。実際のhaskell-src-extsパッケージでこれが行われていないのは、AST パーサーがコメント パーサーより前に書かれているためと考えられます。

于 2012-09-18T12:53:02.610 に答える
2

Haskellコードを自動フォーマットする非常にシンプルなツールを作成しました。これは、からの解析およびきれいな印刷機能を使用して行いますhaskell-src-extshttps://github.com/djv/small/blob/master/tidy.hsで見つけることができます。それは、より柔軟で強力な何かの始まりになる可能性があります。

于 2012-09-28T04:35:31.100 に答える