Haskellで処理系を作る
良記事がたくさんあるがどんどん忘れるので各記事に以下の項目をメモっておこう
リンク
概要
いつ読み返したら役立ちそうか
やってることのメモ
まとめ
HaskellでLexerを作る
HaskellでParserを作る
HaskellでCodeGenを作る
HaskellでReplを作る
HaskellでLLVMを触る
Type Chekerを作る
HaskellでTypeInferを作る
Haskellで処理系のテストを書く
Write Your a Haskell
HaskellでHaskellコンパイラを書く記事
これめっちゃすごいなmrsekut.icon*2
parserなども手書き
型計算も型推論も、evalもLLVMも載ってる
48時間でSchemeを書こう - Wikibooks
github
tnomura氏の記事
Parsecを使ってHaskellでScheme処理系を作る記事
Haskell入門者も対象にしてるっぽいがそれにしてはハードルがある気がする
ErrorTを使っていたり、さすがに情報が少し古い
REPLの作り方
エラー処理
関数の定義
あとたまに翻訳がバグっているmrsekut.icon
Haskell 上で簡単なプログラミング言語を作る - Qiita
概要
infixlを使って演算子の結合力を数値で表現でしている
いつ読み返したら役立ちそうか
やってることのメモ
infixl
演算子の左結合性宣言
decoratorみたいな?
数字は結合の強さ
数字が小さいほど結合力が弱くなる
http://walk.northcol.org/haskell/operators/
infixは結合の強さのみを宣言
課題
文脈自由文法を自分で矛盾なく定義できるようになる
てかそもそも読める
↑これだけを見て、実装をかける
Haskell コンパイラを書こう!
github
コンパイラを作る時に最初のターゲットを決めると良いかも
この記事では、qsort関数の実装
qsortは使っているものが多いので、最初の目標としては微妙だった
最初にGHCのソースを読もうと思ったけど微妙だった
Haskell得意でもない、コンパイラを書いたこともない、ので
Haskellでタイガーブックを実装した
github
構文解析にはAlexとHappyを使った
Lex、YaccのHaskell版
結合性の解決
fixity resolution
ってなんだmrsekut.icon
『How to make ad-hoc polymorphism less ad hoc』
『Typing Haskell in Haskell』
意味解析
型の検証を行う
型推論、型検査
ASTをCore言語(中間言語)に変換する
変数のrename (α変換
脱糖
HaskellにあってCore言語にない書き方をCore言語のものに変換する
この辺に脱糖について書かれてる
パターンマッチの変換
The Implementation of Functional Programming Lansugesという本があるらしい
5章がパターンマッチの脱糖について
Core言語
https://uhideyuki.sakura.ne.jp/studs/index.cgi/ja/HaskellInHaskell#p10
知らないこと多すぎて頭に入ってこないので↑読む
いつ読み返したら良さそうか
関数型プログラミング言語の定義&実装の仕方の例 - Qiita
Parserの型
code:hs
type Parser a = String -> (a, String)
[]のときerrorを表現
返り値のStringは消費しなかったあまりの文字列
型変数aで型a用のparserの型を作る
いつ読み返したら良さそうか
『プログラミングHaskell』 8章
http://www.nct9.ne.jp/m_hiroi/func/haskell33.html
Haskell実装の参考プロジェクト
Mud
Malgo
hsjoihs/camphorscript: A C-like language designed to help write brainf*ck
github/semantic: Parsing, analyzing, and comparing source code across many languages