generated at
『言語実装パターン』


言語処理系を作る際の各フェーズでのデザインパターンの紹介など
だいぶ丁寧
Java実装なのでOOPが前提にある


1章
未読

2章
pp.24-28未読


4章
syntax-directed
単一のパスで変換できる簡単な言語
いちいちIR (中間表現)を介さない
Markdown→HTMLの変換とか
psuedo-operation
宣言の構文など、演算子を含まないものを、擬似的に演算子を使って木構造にする
imaginary token
ツリーの根の部分にあたる適当な字句がない場合に、仮想字句を用いる
ex. C言語の変数宣言( int i; )などでは、 VERDECL という根にする
homogeneous tree
単一のデータ型のみで構築された木のこと
ASTの一つ一つのノードを表す型が、一種類で表現できるような木という意味
全ノードを以下の様なAST型で表現している感じ
ts
interface AST { token: Token; children: AST[]; addChild: (ast: AST) => AST; }
自作言語の Exp Add Exp Exp の感じなのはどっちだ #??
normalized child list
ASTの1ノードが持つ「子のノード」を AST[] という型で表現できるということ
これが例えば AST 以外に、 AddNode などの型で表現されるノードがある場合は、こうは表すことは出来ない
ts
interface AST { token: Token; children: AST[]; // ここの型が`AST[]`で行ける addChild: (ast: AST) => AST; }
均質木の場合のみこれが使える
いやー、微妙にわからんmrsekutmrsekut
単一の型以外を扱う場合、例えばデータ型を
tree visitor
heterogeneous tree
ASTのノードを表す型が複数ある木のこと
ノードの種類ごとに異なるデータ型を定義する
AST 型を基底クラスにすることが多い
ex. AST , AddNode , MultNode , IntNode , VectorNode ..
p.73~の早わかりANTLRから未読

5章
組み込み非均質木走査器
単純だが柔軟性が低い
外部木訪問器
手書きで書くのは大変
木文法
pp.93-107未読
pp.110-113未読

6章
記号の記録と識別
記号表の定義の仕方
ほぼ未読
ここざっくり読んでおきたいなmrsekut



7章
未読
記号の続き



8章
3つのパス
parserがASTを作成
木走査器がスコープ木を構築し、記号表の中身を埋める
記号を解決して、型を計算する
FindBugs
Coverity