『言語実装パターン』
https://gyazo.com/8920f9f3a2a17c38ef592f1df6c878e7
言語処理系を作る際の各フェーズでのデザインパターンの紹介など
だいぶ丁寧
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型で表現している感じ
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型を基底クラスにすることが多い
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