java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - interpreter

20
ヽ(*゚д゚)ノInterpreterパターン 1 2011/04/25 第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』 2011426日火曜日

Upload: tomohito-ozaki

Post on 11-Jul-2015

932 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter

ヽ(*゚д゚)ノ<Interpreterパターン

12011/04/25

第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』2011年4月26日火曜日

Page 2: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter

ID:yuroyoroゆろよろ

2

お前、誰よ?

2011年4月26日火曜日

Page 3: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter

Interpreterパターンって

3

2011年4月26日火曜日

Page 4: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter

文字列などを構文規則に従って

字句毎にオブジェクトに変換して

実行する機能を持たせる

4

2011年4月26日火曜日

Page 5: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter

ようはミニ言語を

作るパターン

5

2011年4月26日火曜日

Page 6: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter

登場人物

Parser :

構文解析してExpression作る

Expression :

構文の要素を表す

要素に応じた振る舞いを持つ

6

2011年4月26日火曜日

Page 7: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter

例えば

7

2011年4月26日火曜日

Page 8: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter

プログラミング言語

ほむほむ

8

2011年4月26日火曜日

Page 9: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter

ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ ほむ9

2011年4月26日火曜日

Page 10: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter

プログラミング言語

A

と同じなので略

10

2011年4月26日火曜日

Page 11: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter

電卓だと

11

2011年4月26日火曜日

Page 12: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter

Parser

“1 + 2 * 3”

+

1 *

2 3

抽象構文木(AST)

Expression自体が計算する能力を

持つ

2011年4月26日火曜日

Page 13: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter

Expression

interface Expr {

int calc();

}

13

構文木の要素を表す

計算する処理

2011年4月26日火曜日

Page 14: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter

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

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

Parserは、

自分で実装していいし

ライブラリ使ってもいい

(Parser Combinatorとか

LRとか)

16

2011年4月26日火曜日

Page 17: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter

Expressionは

木構造やLinkedListなど

自己再帰的な構造

17

2011年4月26日火曜日

Page 18: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter

たいていの場合

構文木はツリーになるので

Compositeパターンと似る

18

2011年4月26日火曜日

Page 19: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter

Expressionは自身が

計算能力を持つ

19

2011年4月26日火曜日

Page 20: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Interpreter

BNFで定義できるなら

機械的に書ける

20

2011年4月26日火曜日