SlideShare uma empresa Scribd logo
1 de 43
Baixar para ler offline
@tan_go238@tan_go238
カレー実装パターン
久しぶりのHoge駆動勉強会
カレー実装パターン
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
Twitter :@tan_go238
言語 : Java、PHP
興味 : Curry 、JVM
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
緊急告知
http://www.plugram.co.jp/recruit/
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
今日の献立今日の献立
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
今日の献立
•チキンカレー
http://www.muji.net/store/cmdty/detail/4934761733838
13年7月27日土曜日
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日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
詳しくは
http://bit.ly/1afuoIW
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
カレー実装パターンカレー実装パターン
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
ニンニクと生姜を炒める
玉ねぎを炒める
トマトを入れて炒める
スパイスを入れる
隠し味投入&煮込む
実装パターン(調理手順)
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
実装パターン(調理手順)
ニンニクと生姜を炒める
玉ねぎを炒める
トマトを入れて炒める
スパイスを入れる
隠し味投入&煮込む
ホールスパイスを
炒める
鶏肉を
入れて煮込む 隠し味
ナッツ系、フルーツ系
鶏ガラスープを作る
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
スパイスについてスパイスについて
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
スパイスとは
http://www.flickr.com/photos/crobj/5519129659/
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
スパイスの配合
辛味
香り 色
臭み
消し
カルダモン、クミン、クローブ、
シナモン、ナツメグ、フェヌグリーク
唐辛子、黒胡椒、生姜
ターメリック、
パプリカ、サフラン
コリアンダー、ベイリーフ
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
温度
40℃                60℃             100℃
カルダモン
シナモン
生姜
スターアニス
フェンネル
オールスパイス
コリアンダー
クミン
クローブ
ナツメグ
フェヌグリーク
セージ
セロリ
ニンニク
黒胡椒 唐辛子
精油成分について
精油成分が揮発してスパイスの香りになる
スパイスの種類によって揮発しやすい温度が異なるため、
精油が揮発しやすい温度環境を作ることが大切
入れる順序が大事
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
実装パターン(スパイス)
メインの食材(鶏など)を決める
メインに合うよう色・香りなどを設計する
温度を考慮してスパイスの入れる順序を決める
調理
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
お家で出来るオレオレカレー
スパイスの調合が難しい場合は、
市販のカレールーをちょっと薄めにして
少量のスパイスを使用するところから始めると良いです
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
お家で出来るオレオレカレー
野菜・肉などを切る
鍋で炒めて水とカレールーを入れる
煮込む
完成
クローブ、カルダモン、
クミンを炒める
ココナッツオイルで
マスターシードを
炒めたやつを合わせる カシューナッツを
ペーストにして入れる
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
参考書籍
http://amzn.to/16le2gR
13年7月27日土曜日
ありがとうございました!
13年7月27日土曜日
One more curry...
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
言語実装パターン言語実装パターンざっくり
わ か る
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
言語実装パターンとは
http://amzn.to/vXwEcF
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
字句解析器を作る
構文解析器を作る
抽象構文木を生成&走査器を作る
記号表を生成する(スコープ、クラス)
ざっくりわかる言語実装パターン
13年7月27日土曜日
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日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
字句解析器を作る
構文解析器を作る
抽象構文木を生成&走査器を作る
記号表を生成する(スコープ、クラス)
ざっくりわかる言語実装パターンとの対応
AST
lexical analysis
syntactic analysis
semantic analysis
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
字句解析器を作る
< el e me nt attr= hoge />
例)XML
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
字句解析器を作る
< el e me nt attr= hoge />
TAG_OPEN WS EQ WS
ELEMENT ATTR_KEY ATTR_VALUE TAG_CLOSE
例)XML
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
字句解析器を作る
デモ
[ba c kp aper, daiksy,irof]
LBRACK RBRACKCOMMA COMMANAME NAME NAME
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
構文解析器を作る
[ba c kp aper, daiksy,irof]
list : '[' elements ']' ;
elements : element (',' element)* ;
element : NAME | list ;
NAME : ('a'..'z' |'A'..'Z' )+ ;
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
構文解析器を作る
[a,b ,c] [a,[b,c],d]
13年7月27日土曜日
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日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
抽象構文木を作る
5 * [1 , 2]
抽象構文木を作るコツ
構文解析時、規則の中へ入る度に構文
解析木に新しい中間ノードを追加しな
がら解析を行う
13年7月27日土曜日
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日土曜日
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日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
構文解析木の訪問器を作る
デ モ
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
記号表を生成する
記号表とは
変数やメソッドなどのプログラム実体
につける名前の表
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
記号表を生成する
l i il l
13年7月27日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
記号表を生成する
13年7月27日土曜日
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日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
記号表を生成する
デ モ
13年7月27日土曜日
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日土曜日
Hoge Driven Curry Implementation Patterns
COPYRIGHT 2013 PLUGRAM, INC.
言語実装パターンはもっと詳しい
高級インタプリタの構築
  24. 構文主導インタプリタ
  25. 木方式インタプリタ
バイトコードインタプリタの構築
  26. バイトコードアセンブラ
  27. スタック方式バイトコードインタプリタ
  28. レジスタ方式バイトコードインタプリタ
コンピュータ言語の変換
  29. 構文主導変換機
  30. 規則方式変換器
  31. 目的構成体ごとに固有の生成期クラス
13年7月27日土曜日
ありがとうございました!
13年7月27日土曜日

Mais conteúdo relacionado

Mais de Go Tanaka

Mais de Go Tanaka (16)

Jvm internal
Jvm internalJvm internal
Jvm internal
 
CPU
CPUCPU
CPU
 
Knockout bindings
Knockout bindingsKnockout bindings
Knockout bindings
 
Log4j 2 writing
Log4j 2 writingLog4j 2 writing
Log4j 2 writing
 
Log4j 2 source code reading
Log4j 2 source code readingLog4j 2 source code reading
Log4j 2 source code reading
 
InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012InvokeDynamic at #shikadriven 2012
InvokeDynamic at #shikadriven 2012
 
Studying Network #1
Studying Network #1Studying Network #1
Studying Network #1
 
Inside The Java Virtual Machine
Inside The Java Virtual MachineInside The Java Virtual Machine
Inside The Java Virtual Machine
 
FxUG HTML5
FxUG HTML5FxUG HTML5
FxUG HTML5
 
Nettyらへん
NettyらへんNettyらへん
Nettyらへん
 
T2 reading 20101126
T2 reading 20101126T2 reading 20101126
T2 reading 20101126
 
Kanjava20110302
Kanjava20110302Kanjava20110302
Kanjava20110302
 
GWT♥HTML5
GWT♥HTML5GWT♥HTML5
GWT♥HTML5
 
Slim3 Gwt In Action
Slim3 Gwt In ActionSlim3 Gwt In Action
Slim3 Gwt In Action
 
はじめてのPHP
はじめてのPHPはじめてのPHP
はじめてのPHP
 
T2 - 関ジャバ1月27日
T2 - 関ジャバ1月27日T2 - 関ジャバ1月27日
T2 - 関ジャバ1月27日
 

Último

研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
atsushi061452
 

Último (16)

ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
 
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
 
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
 
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
研究紹介スライド: オフライン強化学習に基づくロボティックスワームの制御器の設計
 
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
 
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
 
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。
 
Keywordmap overview material/CINC.co.ltd
Keywordmap overview material/CINC.co.ltdKeywordmap overview material/CINC.co.ltd
Keywordmap overview material/CINC.co.ltd
 
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdfネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
 
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
 
Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )
 
情報を表現するときのポイント
情報を表現するときのポイント情報を表現するときのポイント
情報を表現するときのポイント
 
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
 
20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf
 
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイルLoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
 
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
 

Implement curry

  • 2. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. Twitter :@tan_go238 言語 : Java、PHP 興味 : Curry 、JVM 13年7月27日土曜日
  • 3. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 緊急告知 http://www.plugram.co.jp/recruit/ 13年7月27日土曜日
  • 4. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 今日の献立今日の献立 13年7月27日土曜日
  • 5. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 今日の献立 •チキンカレー http://www.muji.net/store/cmdty/detail/4934761733838 13年7月27日土曜日
  • 6. 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日土曜日
  • 7. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 詳しくは http://bit.ly/1afuoIW 13年7月27日土曜日
  • 8. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. カレー実装パターンカレー実装パターン 13年7月27日土曜日
  • 9. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. ニンニクと生姜を炒める 玉ねぎを炒める トマトを入れて炒める スパイスを入れる 隠し味投入&煮込む 実装パターン(調理手順) 13年7月27日土曜日
  • 10. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 実装パターン(調理手順) ニンニクと生姜を炒める 玉ねぎを炒める トマトを入れて炒める スパイスを入れる 隠し味投入&煮込む ホールスパイスを 炒める 鶏肉を 入れて煮込む 隠し味 ナッツ系、フルーツ系 鶏ガラスープを作る 13年7月27日土曜日
  • 11. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. スパイスについてスパイスについて 13年7月27日土曜日
  • 12. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. スパイスとは http://www.flickr.com/photos/crobj/5519129659/ 13年7月27日土曜日
  • 13. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. スパイスの配合 辛味 香り 色 臭み 消し カルダモン、クミン、クローブ、 シナモン、ナツメグ、フェヌグリーク 唐辛子、黒胡椒、生姜 ターメリック、 パプリカ、サフラン コリアンダー、ベイリーフ 13年7月27日土曜日
  • 14. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 温度 40℃                60℃             100℃ カルダモン シナモン 生姜 スターアニス フェンネル オールスパイス コリアンダー クミン クローブ ナツメグ フェヌグリーク セージ セロリ ニンニク 黒胡椒 唐辛子 精油成分について 精油成分が揮発してスパイスの香りになる スパイスの種類によって揮発しやすい温度が異なるため、 精油が揮発しやすい温度環境を作ることが大切 入れる順序が大事 13年7月27日土曜日
  • 15. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 実装パターン(スパイス) メインの食材(鶏など)を決める メインに合うよう色・香りなどを設計する 温度を考慮してスパイスの入れる順序を決める 調理 13年7月27日土曜日
  • 16. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. お家で出来るオレオレカレー スパイスの調合が難しい場合は、 市販のカレールーをちょっと薄めにして 少量のスパイスを使用するところから始めると良いです 13年7月27日土曜日
  • 17. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. お家で出来るオレオレカレー 野菜・肉などを切る 鍋で炒めて水とカレールーを入れる 煮込む 完成 クローブ、カルダモン、 クミンを炒める ココナッツオイルで マスターシードを 炒めたやつを合わせる カシューナッツを ペーストにして入れる 13年7月27日土曜日
  • 18. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 参考書籍 http://amzn.to/16le2gR 13年7月27日土曜日
  • 21. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 言語実装パターン言語実装パターンざっくり わ か る 13年7月27日土曜日
  • 22. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 言語実装パターンとは http://amzn.to/vXwEcF 13年7月27日土曜日
  • 23. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 字句解析器を作る 構文解析器を作る 抽象構文木を生成&走査器を作る 記号表を生成する(スコープ、クラス) ざっくりわかる言語実装パターン 13年7月27日土曜日
  • 24. 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日土曜日
  • 25. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 字句解析器を作る 構文解析器を作る 抽象構文木を生成&走査器を作る 記号表を生成する(スコープ、クラス) ざっくりわかる言語実装パターンとの対応 AST lexical analysis syntactic analysis semantic analysis 13年7月27日土曜日
  • 26. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 字句解析器を作る < el e me nt attr= hoge /> 例)XML 13年7月27日土曜日
  • 27. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 字句解析器を作る < el e me nt attr= hoge /> TAG_OPEN WS EQ WS ELEMENT ATTR_KEY ATTR_VALUE TAG_CLOSE 例)XML 13年7月27日土曜日
  • 28. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 字句解析器を作る デモ [ba c kp aper, daiksy,irof] LBRACK RBRACKCOMMA COMMANAME NAME NAME 13年7月27日土曜日
  • 29. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 構文解析器を作る [ba c kp aper, daiksy,irof] list : '[' elements ']' ; elements : element (',' element)* ; element : NAME | list ; NAME : ('a'..'z' |'A'..'Z' )+ ; 13年7月27日土曜日
  • 30. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 構文解析器を作る [a,b ,c] [a,[b,c],d] 13年7月27日土曜日
  • 31. 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日土曜日
  • 32. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 抽象構文木を作る 5 * [1 , 2] 抽象構文木を作るコツ 構文解析時、規則の中へ入る度に構文 解析木に新しい中間ノードを追加しな がら解析を行う 13年7月27日土曜日
  • 33. 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日土曜日
  • 34. 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日土曜日
  • 35. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 構文解析木の訪問器を作る デ モ 13年7月27日土曜日
  • 36. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 記号表を生成する 記号表とは 変数やメソッドなどのプログラム実体 につける名前の表 13年7月27日土曜日
  • 37. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 記号表を生成する l i il l 13年7月27日土曜日
  • 38. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 記号表を生成する 13年7月27日土曜日
  • 39. 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日土曜日
  • 40. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 記号表を生成する デ モ 13年7月27日土曜日
  • 41. 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日土曜日
  • 42. Hoge Driven Curry Implementation Patterns COPYRIGHT 2013 PLUGRAM, INC. 言語実装パターンはもっと詳しい 高級インタプリタの構築   24. 構文主導インタプリタ   25. 木方式インタプリタ バイトコードインタプリタの構築   26. バイトコードアセンブラ   27. スタック方式バイトコードインタプリタ   28. レジスタ方式バイトコードインタプリタ コンピュータ言語の変換   29. 構文主導変換機   30. 規則方式変換器   31. 目的構成体ごとに固有の生成期クラス 13年7月27日土曜日