『言語実装パターン』
https://gyazo.com/8920f9f3a2a17c38ef592f1df6c878e7
言語処理系を作る際の各フェーズでのデザインパターンの紹介など
だいぶ丁寧
Java実装なのでOOPが前提にある
/mrsekut-book-4873115329
1章
未読
2章
LL法
再帰下降構文解析
pp.24-28未読
4章
AST
構文主導
syntax-directed
単一のパスで変換できる簡単な言語
いちいちIR (中間表現)を介さない
Markdown→HTMLの変換とか
疑似演算
psuedo-operation
宣言の構文など、演算子を含まないものを、擬似的に演算子を使って木構造にする
仮想字句
imaginary token
ツリーの根の部分にあたる適当な字句がない場合に、仮想字句を用いる
ex. C言語の変数宣言(int i;)などでは、VERDECLという根にする
均質木
homogeneous tree
単一のデータ型のみで構築された木のこと
ASTの一つ一つのノードを表す型が、一種類で表現できるような木という意味
全ノードを以下の様なAST型で表現している感じ
code:ts
interface AST {
token: Token;
children: AST[];
addChild: (ast: AST) => AST;
}
自作言語のExpやAdd Exp Expの感じなのはどっちだ #??
均質木?非均質木?
正規化子リスト
normalized child list
ASTの1ノードが持つ「子のノード」をAST[]という型で表現できるということ
これが例えばAST以外に、AddNodeなどの型で表現されるノードがある場合は、こうは表すことは出来ない
code:ts
interface AST {
token: Token;
children: AST[]; // ここの型がAST[]で行ける
addChild: (ast: AST) => AST;
}
均質木の場合のみこれが使える
いやー、微妙にわからんmrsekut.icon*2
単一の型以外を扱う場合、例えばデータ型を
木訪問器
tree visitor
非均質木
heterogeneous tree
ASTのノードを表す型が複数ある木のこと
ノードの種類ごとに異なるデータ型を定義する
AST型を基底クラスにすることが多い
ex.AST, AddNode, MultNode, IntNode,VectorNode..
p.73~の早わかりANTLRから未読
5章
トラバース
組み込み非均質木走査器
単純だが柔軟性が低い
外部木訪問器
手書きで書くのは大変
木文法
pp.93-107未読
項書き換え
pp.110-113未読
6章
記号の記録と識別
記号表の定義の仕方
ほぼ未読
ここざっくり読んでおきたいなmrsekut.icon
7章
未読
記号の続き
8章
型検査
3つのパス
parserがASTを作成
木走査器がスコープ木を構築し、記号表の中身を埋める
記号を解決して、型を計算する
静的バグ解析器
FindBugs
Coverity
#スクボ読書化した本