12

レクサーフェーズと解析フェーズを1つのフェーズに混在させると、Parsecパーサーが読みにくくなるだけでなく、速度が低下することがあります。1つの解決策は、Alexをトークナイザーとして使用し、次にParsecをトークンストリームのパーサーとして使用することです。

これは問題ありませんが、コンパイルパイプラインに前処理フェーズが1つ追加されたり、haskellの「IDE」とうまく統合されなかったりするため、Alexを取り除くことができればさらに良いでしょう。アレックスのスタイルで、しかしライブラリとして、トークナイザーを記述するためのhaskellEDSL。

4

2 に答える 2

4

はい-http ://www.cse.unsw.edu.au/~chak/papers/Cha99.html

Hackageの前は、ManuelはCTK(コンパイラツールキット)と呼ばれるパッケージでコードをリリースしていました。最近のプロジェクトの状況はよくわかりません。

論文「LexingHaskellinHaskell」のトーマス・ハルグレンのレクサーはコードジェネレーターではなく動的だったと思いますが、リリースはHaskellのレクシングに合わせて調整されており、ライブラリ内の機械はより一般的です。IavorDiatchkiはコードをHackageに配置しました。

http://hackage.haskell.org/package/haskell-lexer

于 2011-10-13T17:13:47.487 に答える
3

レクサーとしてParsecを使用することもできます。最初に文字列をトークンに解析し、次にトークンをターゲットデータ型に解析します。

于 2011-10-13T10:28:34.070 に答える