java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - interpreter
TRANSCRIPT
![Page 1: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/1.jpg)
ヽ(*゚д゚)ノ<Interpreterパターン
12011/04/25
第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』2011年4月26日火曜日
![Page 2: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/2.jpg)
ID:yuroyoroゆろよろ
2
お前、誰よ?
2011年4月26日火曜日
![Page 3: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/3.jpg)
Interpreterパターンって
3
2011年4月26日火曜日
![Page 4: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/4.jpg)
文字列などを構文規則に従って
字句毎にオブジェクトに変換して
実行する機能を持たせる
4
2011年4月26日火曜日
![Page 5: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/5.jpg)
ようはミニ言語を
作るパターン
5
2011年4月26日火曜日
![Page 6: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/6.jpg)
登場人物
Parser :
構文解析してExpression作る
Expression :
構文の要素を表す
要素に応じた振る舞いを持つ
6
2011年4月26日火曜日
![Page 7: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/7.jpg)
例えば
7
2011年4月26日火曜日
![Page 8: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/8.jpg)
プログラミング言語
ほむほむ
8
2011年4月26日火曜日
![Page 9: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/9.jpg)
ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ9
2011年4月26日火曜日
![Page 10: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/10.jpg)
プログラミング言語
A
と同じなので略
10
2011年4月26日火曜日
![Page 11: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/11.jpg)
電卓だと
11
2011年4月26日火曜日
![Page 12: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/12.jpg)
Parser
“1 + 2 * 3”
+
1 *
2 3
抽象構文木(AST)
Expression自体が計算する能力を
持つ
2011年4月26日火曜日
![Page 13: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/13.jpg)
Expression
interface Expr {
int calc();
}
13
構文木の要素を表す
計算する処理
2011年4月26日火曜日
![Page 14: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/14.jpg)
Expression
class Num implements Expr{
int n = 0;
public Num(int n) { this.n = n; }
public int calc(){ return this.n; }
}
14
数字の要素を表す
計算結果は単に数字を返す
2011年4月26日火曜日
![Page 15: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/15.jpg)
Expression
class Add implements Expr{
Expr left ;
Expr right;
public Add(Expr l, Expr r) {
this.left = l; this.right = r;
}
public int calc(){
return left.calc() + right.calc();
}
}15
+の要素を表す
右辺と左辺(Expr型)
計算結果は右辺と左辺の結果を足す
2011年4月26日火曜日
![Page 16: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/16.jpg)
Parserは、
自分で実装していいし
ライブラリ使ってもいい
(Parser Combinatorとか
LRとか)
16
2011年4月26日火曜日
![Page 17: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/17.jpg)
Expressionは
木構造やLinkedListなど
自己再帰的な構造
17
2011年4月26日火曜日
![Page 18: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/18.jpg)
たいていの場合
構文木はツリーになるので
Compositeパターンと似る
18
2011年4月26日火曜日
![Page 19: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/19.jpg)
Expressionは自身が
計算能力を持つ
19
2011年4月26日火曜日
![Page 20: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter](https://reader033.vdocuments.mx/reader033/viewer/2022052700/55a05bee1a28abf9678b47d1/html5/thumbnails/20.jpg)
BNFで定義できるなら
機械的に書ける
20
2011年4月26日火曜日