Haskellで処理系を作る
良記事がたくさんあるがどんどん忘れるので各記事に以下の項目をメモっておこう
リンク
概要
いつ読み返したら役立ちそうか
やってることのメモ
まとめ
HaskellでHaskellコンパイラを書く記事
これめっちゃすごいなmrsekut.icon*2
parserなども手書き
型計算も型推論も、evalもLLVMも載ってる
Parsecを使ってHaskellでScheme処理系を作る記事
Haskell入門者も対象にしてるっぽいがそれにしてはハードルがある気がする
ErrorTを使っていたり、さすがに情報が少し古い
REPLの作り方
エラー処理
関数の定義
あとたまに翻訳がバグっているmrsekut.icon
概要
infixlを使って演算子の結合力を数値で表現でしている
いつ読み返したら役立ちそうか
やってることのメモ
infixl
演算子の左結合性宣言
decoratorみたいな?
数字は結合の強さ
数字が小さいほど結合力が弱くなる
infixは結合の強さのみを宣言
課題
文脈自由文法を自分で矛盾なく定義できるようになる
てかそもそも読める
↑これだけを見て、実装をかける
コンパイラを作る時に最初のターゲットを決めると良いかも
この記事では、qsort関数の実装
qsortは使っているものが多いので、最初の目標としては微妙だった
最初にGHCのソースを読もうと思ったけど微妙だった
Haskell得意でもない、コンパイラを書いたこともない、ので
構文解析にはAlexとHappyを使った
Lex、YaccのHaskell版
結合性の解決
fixity resolution
ってなんだmrsekut.icon
型の検証を行う
型推論、型検査
変数のrename (α変換
HaskellにあってCore言語にない書き方をCore言語のものに変換する
パターンマッチの変換
5章がパターンマッチの脱糖について
Core言語
知らないこと多すぎて頭に入ってこないので↑読む
いつ読み返したら良さそうか
Parserの型
code:hs
[]のときerrorを表現
返り値のStringは消費しなかったあまりの文字列
型変数aで型a用のparserの型を作る
いつ読み返したら良さそうか