43
@tan_go238 @tan_go238 カレー実装パターン 久しぶりのHoge駆動勉強会 カレー実装パターン 13727日土曜日

Implement curry

Embed Size (px)

Citation preview

Page 1: Implement curry

@tan_go238@tan_go238

カレー実装パターン久しぶりのHoge駆動勉強会

カレー実装パターン

13年7月27日土曜日

Page 2: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

Twitter :@tan_go238言語 : Java、PHP興味 : Curry 、JVM

13年7月27日土曜日

Page 3: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

緊急告知

http://www.plugram.co.jp/recruit/

13年7月27日土曜日

Page 4: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

今日の献立今日の献立

13年7月27日土曜日

Page 5: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

今日の献立

•チキンカレー

http://www.muji.net/store/cmdty/detail/4934761733838

13年7月27日土曜日

Page 6: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

材料(チキンカレー)鶏肉 1羽玉ねぎ 5~6個生姜・ニンニクすりおろしMIX 大さじ2杯トマト缶 1つカシューナッツペースト塩 適量味噌 適量ギー 適量ヨーグルト 300g水 4L

ホールスパイスマスタードシード 小さじ2シナモン 1片カルダモン 8個クローブ 6個クミンシード 小さじ1/2赤唐辛子 2本ベイリーフ 2枚

パウダースパイスコリアンダー 大さじ3ターメリック 大さじ1パプリカ 大さじ1

13年7月27日土曜日

Page 7: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

詳しくは

http://bit.ly/1afuoIW

13年7月27日土曜日

Page 8: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

カレー実装パターンカレー実装パターン

13年7月27日土曜日

Page 9: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

ニンニクと生姜を炒める

玉ねぎを炒める

トマトを入れて炒める

スパイスを入れる

隠し味投入&煮込む

実装パターン(調理手順)

13年7月27日土曜日

Page 10: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

実装パターン(調理手順)ニンニクと生姜を炒める

玉ねぎを炒める

トマトを入れて炒める

スパイスを入れる

隠し味投入&煮込む

ホールスパイスを炒める

鶏肉を入れて煮込む 隠し味

ナッツ系、フルーツ系

鶏ガラスープを作る

13年7月27日土曜日

Page 11: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

スパイスについてスパイスについて

13年7月27日土曜日

Page 12: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

スパイスとは

http://www.flickr.com/photos/crobj/5519129659/

13年7月27日土曜日

Page 13: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

スパイスの配合

辛味

香り 色

臭み消し

カルダモン、クミン、クローブ、シナモン、ナツメグ、フェヌグリーク

唐辛子、黒胡椒、生姜

ターメリック、パプリカ、サフラン

コリアンダー、ベイリーフ

13年7月27日土曜日

Page 14: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

温度

40℃                60℃             100℃

カルダモン

シナモン

生姜

スターアニス

フェンネル

オールスパイス

コリアンダー

クミン

クローブ

ナツメグ

フェヌグリーク

セージ

セロリ

ニンニク

黒胡椒 唐辛子

精油成分について

精油成分が揮発してスパイスの香りになるスパイスの種類によって揮発しやすい温度が異なるため、精油が揮発しやすい温度環境を作ることが大切

入れる順序が大事

13年7月27日土曜日

Page 15: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

実装パターン(スパイス)

メインの食材(鶏など)を決める

メインに合うよう色・香りなどを設計する

温度を考慮してスパイスの入れる順序を決める

調理

13年7月27日土曜日

Page 16: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

お家で出来るオレオレカレースパイスの調合が難しい場合は、市販のカレールーをちょっと薄めにして少量のスパイスを使用するところから始めると良いです

13年7月27日土曜日

Page 17: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

お家で出来るオレオレカレー

野菜・肉などを切る

鍋で炒めて水とカレールーを入れる

煮込む

完成

クローブ、カルダモン、クミンを炒める

ココナッツオイルでマスターシードを炒めたやつを合わせる カシューナッツを

ペーストにして入れる

13年7月27日土曜日

Page 18: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

参考書籍

http://amzn.to/16le2gR

13年7月27日土曜日

Page 19: Implement curry

ありがとうございました!

13年7月27日土曜日

Page 20: Implement curry

One more curry...

13年7月27日土曜日

Page 21: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

言語実装パターン言語実装パターンざっくりわ か る

13年7月27日土曜日

Page 22: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

言語実装パターンとは

http://amzn.to/vXwEcF

13年7月27日土曜日

Page 23: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

字句解析器を作る

構文解析器を作る

抽象構文木を生成&走査器を作る

記号表を生成する(スコープ、クラス)

ざっくりわかる言語実装パターン

13年7月27日土曜日

Page 24: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

Structure of a Typical Compiler

lexical analysis

syntactic analysis

interpreter

IR code generation

optimization

code generationsemantic analysis

character stream

tokens

AST

annotated AST

IR

IR

target language

“words”

“sentences”

http://www.cs.colostate.edu/~mstrout/CS553Fall06/slides/lecture02c-ugradrev.pdf

13年7月27日土曜日

Page 25: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

字句解析器を作る

構文解析器を作る

抽象構文木を生成&走査器を作る

記号表を生成する(スコープ、クラス)

ざっくりわかる言語実装パターンとの対応

AST

lexical analysis

syntactic analysis

semantic analysis

13年7月27日土曜日

Page 26: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

字句解析器を作る

<e l ement a t t r= ”hoge ” />

例)XML

13年7月27日土曜日

Page 27: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

字句解析器を作る

<e l ement a t t r= ”hoge ” />TAG_OPEN WS EQ WS

ELEMENT ATTR_KEY ATTR_VALUE TAG_CLOSE

例)XML

13年7月27日土曜日

Page 28: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

字句解析器を作る

デモ

[backpaper,da i ksy, i r o f ]LBRACK RBRACKCOMMA COMMANAME NAME NAME

13年7月27日土曜日

Page 29: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

構文解析器を作る

[ backpaper,da i ksy, i r o f ]

list : '[' elements ']' ;

elements : element (',' element)* ;

element : NAME | list ;

NAME : ('a'..'z' |'A'..'Z' )+ ;

13年7月27日土曜日

Page 30: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

構文解析器を作る

[ a , b , c ] [ a , [ b , c ] , d ]

13年7月27日土曜日

Page 31: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

構文解析器を作るデモ

options {backtrack=true;memoize=true}

stat : list EOF | assign EOF ;

assign : list '=' list ;

list : '[' elements ']' ;

elements : element (',' element)* ;

element : NAME '=' NAME | NAME | list ;

NAME : LETTER+ ;

fragment

LETTER : 'a'..'z'|'A'..'Z';

WS : (' '|'\t'|'\n'|'\r')+ {skip();} ;

13年7月27日土曜日

Page 32: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

抽象構文木を作る

5 * [1 , 2]

抽象構文木を作るコツ構文解析時、規則の中へ入る度に構文解析木に新しい中間ノードを追加しながら解析を行う

13年7月27日土曜日

Page 33: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

抽象構文木を作る

void <<規則名>>() { RuleNode r = new RuleNode(“<<規則名>>”); if ( root == null ) root = r; // rootノードの場合 else currentNode.addChild(r); // 現在位置のノードに追加 ParseTree _save = currentNode; currentNode = r; // この規則へと下る <<規則処理のコード>> currentNode = _save; // ノード変数元の値に戻す}

13年7月27日土曜日

Page 34: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

構文解析木の訪問器を作る public void visit(VecMathNode n) {

switch (n.token.type) {

case Token.ID: visit((VarNode) n); break;

case Token.ASSIGN: visit((AssignNode) n); break;

case Token.PLUS: visit((AddNode) n); break;

case Token.MULT: print((MultNode) n); break;

case Token.DOT: visit((DotProductNode) n); break;

case Token.INT: visit((IntNode) n); break;

case Token.VEC: visit((VectorNode) n); break;

case Token.STAT_LIST: visit((StatListNode) n); break;

default: throw new UnsupportedOperationException();

}

}

13年7月27日土曜日

Page 35: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

構文解析木の訪問器を作る

デモ

13年7月27日土曜日

Page 36: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

記号表を生成する

記号表とは変数やメソッドなどのプログラム実体につける名前の表

13年7月27日土曜日

Page 37: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

記号表を生成する

l i il l

13年7月27日土曜日

Page 38: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

記号表を生成する

13年7月27日土曜日

Page 39: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

記号表を生成する記号を解決する

currentScope.resolve(<<記号の名前>>)

public Symbol resolve(String name) { Symbol s = members.get(name); // 自スコープ内を検索 if ( s != null ) return s; // 自スコープ内で見つけたら返す if ( enclosingScope != null ) { // 外包スコープがあるか return enclosingScope.resolve(name); // 外包スコープを検索 } return null; // 見つからなかった}

13年7月27日土曜日

Page 40: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

記号表を生成する

デモ

13年7月27日土曜日

Page 41: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

言語実装パターンはもっと詳しい基本的な構文解析パターン   1. 文法を変換して再帰的下向き認識器を作成する   2. LL(1) 再帰的下向き字句解析器   3. LL(1) 再帰的下向き構文解析器   4. LL(k) 再帰的下向き構文解析器

高度な構文解析パターン   5. 後戻り構文解析器   6. メモ化構文解析器   7. 述語制御構文解析器

中間形式木の構築   8. 構文解析木   9. 均質抽象構文木  10. 正規化非均質抽象構文木  11. 非正規化非均質抽象構文木

木の走査と書換え  12. 組込み非均質木走査器  13. 外部木訪問器  14. 木文法  15. 木パターン照合器

プログラム記号の記録と識別  16. 単一スコープのための記号表  17. 入れ子スコープのための記号表

データ集合体のための記号表管理  18. データ集合体のための記号表  19. クラスのための記号表

静的型付け規則を守らせる  20. 静的な式の型を計算する  21. 自動型昇格  22. 静的型安全を守らせる  23. 多態型安全性を守らせる

13年7月27日土曜日

Page 42: Implement curry

Hoge Driven Curry Implementation Patterns

COPYRIGHT 2013 PLUGRAM, INC.

言語実装パターンはもっと詳しい高級インタプリタの構築  24. 構文主導インタプリタ  25. 木方式インタプリタ

バイトコードインタプリタの構築  26. バイトコードアセンブラ  27. スタック方式バイトコードインタプリタ  28. レジスタ方式バイトコードインタプリタ

コンピュータ言語の変換  29. 構文主導変換機  30. 規則方式変換器  31. 目的構成体ごとに固有の生成期クラス

13年7月27日土曜日

Page 43: Implement curry

ありがとうございました!

13年7月27日土曜日