Haskell Hackathon 2008

出典: どう書くwiki

Category:Haskell Hackathon

目次

[編集] 開催日

[編集] チャット

[編集] コンパイラコンパイラ

コンパイラコンパイラ参照。 コンパイラコンパイラは構文解析に使います。ソースコードを構文木に変換します。Hugs 98 に yacc 用の文法が入っているので、yacc 互換のコンパイラコンパイラを使うと、動的言語の場合、楽かもしれません。

[編集] 文法定義

EBNF での定義は http://www.sampou.org/haskell/report-revised-j/syntax-iso.html

字句解析 → レイアウト規則(オフサイドルール)の処理 → 構文解析の3段階が必要です。

  • lex での字句解析の定義 - Hugs 98 は手作業でコーディングされています
  • yacc での構文解析の定義 - Hugs 98 にあります

レイアウト規則の問題は後回しにして実装するといいと思います。つまり、doなどは{}で囲うということです。

[編集] Hugs 98

Hugs 98 の src/parser.y に yacc 用の文法定義が入っています。

Expect 16 shift/reduce conflicts when passing this grammar through yacc, 
but don't worry; they should all be resolved in an appropriate manner.

だそうです。GHC 4.02 にも、ghc/interpreter/parser.y や ghc/compiler/parser/hsparser.y にも9年前の物が入っています。GHC 4.04 以降は、構文解析に Happy を使っています。

[編集] 参加者の方が作られた文法

[編集] コア構文

これだけあればHaskellは動く! Haskellコア構文

[編集] BNF 変換器

拡張されたBNF を入力とし、字句解析器と構文解析器を出力とする変換器が存在します。 これを用いれば、文法解析の手間が減るでしょう。

[編集] 構文解析ができてから実行まで

構文解析ができてから実行までにする必要がありそうなことを挙げてみる。参考: GHCを解析した資料 The GHC Commentary(英語)

[編集] 型推論

構文木ができたら、その要素が何の型なのか調べる。

[編集] 型クラス

型クラスを実装するならここでさらに、その型が型クラスのどのインスタンスであるかも推論する

[編集] 評価

Haskellの評価を参照。

[編集] IO

したかったら、Monad作ってIO Monadを作ってその副作用で読み書きする。


[編集] テストケース

Haskellテストケースを参照。

[編集] 現存する Haskell 実装

Haskell実装を参照。実装に関するネタバレが含まれていますので、何も見ないで作りたい人は、スルーしてください。

[編集] 実装に関する参考資料

GHCの作者らによるミニ関数型言語「Core Language」の実装のチュートリアル。 http://research.microsoft.com/~simonpj/Papers/pj-lester-book/

どう書く?org