generated at
Haskellで処理系を作る
良記事がたくさんあるがどんどん忘れるので各記事に以下の項目をメモっておこう
リンク
概要
いつ読み返したら役立ちそうか
やってることのメモ


まとめ

HaskellでHaskellコンパイラを書く記事
これめっちゃすごいなmrsekutmrsekut
parserなども手書き
型計算も型推論も、evalもLLVMも載ってる


tnomura氏の記事
Parsecを使ってHaskellでScheme処理系を作る記事
Haskell入門者も対象にしてるっぽいがそれにしてはハードルがある気がする
ErrorTを使っていたり、さすがに情報が少し古い
REPLの作り方
エラー処理
関数の定義
あとたまに翻訳がバグっているmrsekut



概要
infixl を使って演算子の結合力を数値で表現でしている
いつ読み返したら役立ちそうか
やってることのメモ
infixl
演算子の左結合性宣言
decoratorみたいな?
数字は結合の強さ
数字が小さいほど結合力が弱くなる
infix は結合の強さのみを宣言
課題
文脈自由文法を自分で矛盾なく定義できるようになる
てかそもそも読める
↑これだけを見て、実装をかける


コンパイラを作る時に最初のターゲットを決めると良いかも
この記事では、qsort関数の実装
qsortは使っているものが多いので、最初の目標としては微妙だった
最初にGHCのソースを読もうと思ったけど微妙だった
Haskell得意でもない、コンパイラを書いたこともない、ので
Haskellでタイガーブックを実装した
構文解析にはAlexとHappyを使った
Lex、YaccのHaskell版
結合性の解決
fixity resolution
ってなんだmrsekut
型の検証を行う
型推論、型検査
ASTをCore言語(中間言語)に変換する
変数のrename (α変換
HaskellにあってCore言語にない書き方をCore言語のものに変換する
この辺に脱糖について書かれてる
パターンマッチの変換
5章がパターンマッチの脱糖について
Core言語
知らないこと多すぎて頭に入ってこないので↑読む
いつ読み返したら良さそうか





Parserの型
hs
type Parser a = String -> [(a, String)]
[] のときerrorを表現
返り値のStringは消費しなかったあまりの文字列
型変数 a で型 a 用のparserの型を作る
いつ読み返したら良さそうか





Haskell実装の参考プロジェクト