『言語実装パターン』
言語処理系を作る際の各フェーズでのデザインパターンの紹介など
だいぶ丁寧
Java実装なのでOOPが前提にある
1章
未読
2章
pp.24-28未読
4章
syntax-directed
単一のパスで変換できる簡単な言語
Markdown→HTMLの変換とか
psuedo-operation
宣言の構文など、演算子を含まないものを、擬似的に演算子を使って木構造にする
imaginary token
ツリーの根の部分にあたる適当な字句がない場合に、仮想字句を用いる
ex. C言語の変数宣言( int i;
)などでは、 VERDECL
という根にする
homogeneous tree
単一のデータ型のみで構築された木のこと
ASTの一つ一つのノードを表す型が、一種類で表現できるような木という意味
全ノードを以下の様なAST型で表現している感じ
tsinterface AST {
token: Token;
children: AST[];
addChild: (ast: AST) => AST;
}
自作言語の
Exp
や
Add Exp Exp
の感じなのはどっちだ
#??normalized child list
ASTの1ノードが持つ「子のノード」を AST[]
という型で表現できるということ
これが例えば AST
以外に、 AddNode
などの型で表現されるノードがある場合は、こうは表すことは出来ない
tsinterface AST {
token: Token;
children: AST[]; // ここの型が`AST[]`で行ける
addChild: (ast: AST) => AST;
}
いやー、微妙にわからん


単一の型以外を扱う場合、例えばデータ型を
tree visitor
heterogeneous tree
ノードの種類ごとに異なるデータ型を定義する
AST
型を基底クラスにすることが多い
ex. AST
, AddNode
, MultNode
, IntNode
, VectorNode
..
p.73~の早わかりANTLRから未読
5章
組み込み非均質木走査器
単純だが柔軟性が低い
外部木訪問器
手書きで書くのは大変
木文法
pp.93-107未読
pp.110-113未読
6章
記号の記録と識別
ほぼ未読
ここざっくり読んでおきたいな

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