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

Post on 11-Jul-2015

931 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

12011/04/25

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

ID:yuroyoroゆろよろ

2

お前、誰よ?

2011年4月26日火曜日

Interpreterパターンって

3

2011年4月26日火曜日

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

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

実行する機能を持たせる

4

2011年4月26日火曜日

ようはミニ言語を

作るパターン

5

2011年4月26日火曜日

登場人物

Parser :

構文解析してExpression作る

Expression :

構文の要素を表す

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

6

2011年4月26日火曜日

例えば

7

2011年4月26日火曜日

プログラミング言語

ほむほむ

8

2011年4月26日火曜日

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

2011年4月26日火曜日

プログラミング言語

A

と同じなので略

10

2011年4月26日火曜日

電卓だと

11

2011年4月26日火曜日

Parser

“1 + 2 * 3”

+

1 *

2 3

抽象構文木(AST)

Expression自体が計算する能力を

持つ

2011年4月26日火曜日

Expression

interface Expr {

int calc();

}

13

構文木の要素を表す

計算する処理

2011年4月26日火曜日

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日火曜日

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日火曜日

Parserは、

自分で実装していいし

ライブラリ使ってもいい

(Parser Combinatorとか

LRとか)

16

2011年4月26日火曜日

Expressionは

木構造やLinkedListなど

自己再帰的な構造

17

2011年4月26日火曜日

たいていの場合

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

Compositeパターンと似る

18

2011年4月26日火曜日

Expressionは自身が

計算能力を持つ

19

2011年4月26日火曜日

BNFで定義できるなら

機械的に書ける

20

2011年4月26日火曜日

top related