SlideShare a Scribd company logo
1 of 56
非実用的  Boost Spirit Qi  入門 2011/5/14 Boost  勉強会 名古屋 @yak_ex /  新 康孝
自己紹介 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Spirit  との馴れ初め ,[object Object],[object Object],[object Object],[object Object],[object Object],※ プラグインは  axpdf--.spi β 版として公開中 ,[object Object]
Boost Spirit  とは? ,[object Object],[object Object],[object Object],[object Object]
Boost Spirit  とは? ,[object Object],[object Object],[object Object],[object Object],結論:  Boost Spirit  = 変態
これが  Spirit  の力だ! ,[object Object],[object Object],[object Object],[object Object],<key>=<value> が  std::map  に突っ込まれる 型と出力変数定義 入力定義 出力 へ  ん  た  い
高度に発達した C++ は魔法と区別がつかない アーサー・ C++ ・クラーク
Boost Spirit  とは? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],← 今回のテーマ
Spirit Qi  入門 ,[object Object]
アジェンダ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Boost Spirit  とは? ,[object Object],[object Object],[object Object]
構文解析と  EBNF ,[object Object],[object Object],10 20 30 40 - * + 0 ( - 4 3 0  0 * ) 2 + 0 1
構文解析と  EBNF ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Boost Spirit  の  rule ,[object Object],[object Object],[object Object],[object Object],C++  の式として有効 ,[object Object],[object Object],[object Object],[object Object]
Boost Spirit  の  rule ,[object Object],[object Object],[object Object],[object Object]
Boost Spirit  の  rule ,[object Object],etc. 文字列  abc  を読む lit(“abc”) abc  いずれか 1 文字を読む char_(“abc”) a ~ b の範囲の 1 文字を読む char_(‘a’, ‘b’) isgraph()  が  true  な 1 文字を読む graph a 1 文字を読む lit(‘a’) 整数値を読む int_ 任意の 1 文字を読む char_
Boost Spirit  の  rule ,[object Object],etc. p  の  N  回の繰り返し repeat(N)[p] p  内部で大文字、小文字を区別しない no_case[p] p  の  N  回以上の繰り返し repeat(N,inf)[p] p  の  N ~ M  回の繰り返し repeat(N,M)[p] p  先頭で空白をスキップ、 p  内部では空白をスキップしない lexeme[p]
Boost Spirit  の  rule ,[object Object],etc. p  が  0 or 1  回 -a b  でない  a a - b p  の  0  回以上の繰り返し *a 選択( a  あるいは  b ) a | b b  で区切られた  a  の繰り返し a % b p  の  1  回以上の繰り返し +a 連接(普通に繋げる) a >> b
これが  Spirit  の力だ! ,[object Object],[object Object],[object Object],[object Object],<key>=<value> が  std::map  に突っ込まれる へ  ん  た  い
Boost Spirit  の  rule ,[object Object],0 回以上の繰り返し 内部スキップなし 0 回以上の繰り返し =  以外の表示文字 = 内部スキップなし 表示文字の  0  回以上の繰り返し <key>=<value> の繰り返し
で、出力は?
で、出力は? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],※ tuple, vector  は代表で  Fusion  シーケンス  /  コンテナなら何でも良い ※ 詳細は「 Quick Reference 」 の「 Compound Attribute Rules 」を参照
で、出力は? ,[object Object],[object Object],[object Object],[object Object],※ Fusion  は前回勉強会の  cpp_akira  さんの発表も参照 BOOST_FUSION_DEFINE_STRUCT( (yak)(pdf), indirect_ref, (int, number) (int, generation) ) 構造体  yak::pdf::indirect_ref  が  tuple<int, int>  相当になる
これが  Spirit  の力だ! ,[object Object],[object Object],[object Object],[object Object],<key>=<value> が  std::map  に突っ込まれる へ  ん  た  い
出力先 ,[object Object],[object Object],[object Object],※ vector<char>  と  string  は互換 ->これらも互換 *(*(graph - char_('=')) >> lit('=') >> *graph) *(*char >> *char) ,[object Object],[object Object],[object Object],Rule の属性 代入先 *(lexeme[*(graph - char_('='))] >> lit('=') >> lexeme[*graph])
Spirit.Qi  入門 完 まだ  Spirit  の 変態フェイズは 終了してないぜ!!
アジェンダ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
拡張性 ,[object Object],[object Object],[object Object],[object Object]
Boost Spirit  の  rule  (再掲) ,[object Object],etc. p  の  N  回の繰り返し repeat(N)[p] p  内部で大文字、小文字を区別しない no_case[p] p  の  N  回以上の繰り返し repeat(N,inf)[p] p  の  N ~ M  回の繰り返し repeat(N,M)[p] p  先頭で空白をスキップ、 p  内部では空白をスキップしない lexeme[p]
Directive  の自作 ,[object Object],[object Object],[object Object],[object Object],[object Object]
Directive  の自作 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],※ 今回  semantic action  には全く触れませんので  Tutorial  参照
Directive  の自作 ,[object Object]
Directive  の自作 ,[object Object],※ Directive  内部の  Parser  の型 delimited(delimiter)[parser]
Directive  の自作 ,[object Object],※ 属性
Directive  の自作 ,[object Object],[object Object],引数の  0  番目要素 Directive  の引数の型:  Delimiter 1 つ delimited (delimiter) [parser] Parser  の コンストラクタ呼び出し
Directive  の自作 ,[object Object]
Directive  の自作 ,[object Object],[object Object],[object Object],[object Object],※ 入力を微妙に変更
ね、簡単でしょう?
代替手段 ,[object Object],[object Object],[object Object],引数 引数 値を捨てる 引数の型 属性
非実用的入門
Customization point ,[object Object],[object Object]
Customization point ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Customization point  の関係 例)  Foo >> *Bar  の結果の戻し先として型  Qux  の変数  qux  が渡された場合    ※  Foo >> *Bar  の属性が  Qux  型であるとは限らない!    ※ 大枠だけ図示、 ::type  や  ::call  も省略 is_container<Qux> handles_container<Foo> handles_container<*Bar> push_back_container<Qux,Foo_temp>(qux, foo_temp); foo_temp ← Foo  読み出し container_value<Qux>::type foo_temp; true true qux ← Foo  読み出し false true qux ← *Bar  読み出し ※ * ならデフォルト true   false なら↑と同様の処理 clear_value<Bar> push_back_container<Qux,Bar_attr> を内部で利用
Customization point  の関係 例)  Foo >> *Bar  の結果の戻し先として型  Qux  の変数  qux  が渡された場合    ※  Foo >> *Bar  の属性が  Qux  型であるとは限らない!    ※ 大枠だけ図示、 ::type  や  ::call  も省略 is_container<Qux> is_container<QA> transform_attribute<QA, Foo_attr>::type foo_temp = transform_attribute<QA, Foo_attr>::pre(qa); false true 前ページと同様の処理 false Qux  は  2  要素の Fusion  シーケンス tuple<QA, QB> とする foo_temp ← Foo  読み出し transform_attribute<QA, Foo_attr>::post(qa, foo_temp); QB と *Bar の属性について上と同様の処理 Foo  は何? rule  や  attr_cast Foo_attr foo_temp; 他 ※ デフォルトは内部で  assign_to  を使用 ※ 内部で  assign_to_*  族を使用 assign_to(foo_temp, qa); foo_temp ← Foo  読み出し
アジェンダ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Spirit Qi  とうまく付き合うために ,[object Object],  ->コーヒーでも飲んで優雅に待つといいよ! ※ axpdf--.spi  だとフルビルドに約  10  分 ,[object Object],[object Object]
Spirit Qi  とうまく付き合うために ,[object Object]
見えてる範囲 20% 縮小表示 画像補正しないと薄くて文字が 分からないレベル
Spirit Qi  とうまく付き合うために ,[object Object],[object Object],[object Object]
error  で検索 ココ 20% 縮小表示
Spirit Qi  とうまく付き合うために ,[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],Spirit Qi  とうまく付き合うために
[object Object],[object Object],[object Object],Spirit Qi  とうまく付き合うために 277 行目
[object Object],Spirit Qi  とうまく付き合うために   ->プログラムは思った通りに動かない。    書いたとおりに動く。 ,[object Object],[object Object]
まとめ ,[object Object],[object Object],[object Object],[object Object],[object Object]
ご静聴ありがとうございました

More Related Content

What's hot

JDK 10 へようこそ
JDK 10 へようこそJDK 10 へようこそ
JDK 10 へようこそDavid Buck
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会Akihiko Matuura
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexprGenya Murakami
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードShigenori Sagawa
 
boost::shared_ptr tutorial
boost::shared_ptr tutorialboost::shared_ptr tutorial
boost::shared_ptr tutorialNU_Pan
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターンMoriharu Ohzu
 
Boost.Flyweight
Boost.FlyweightBoost.Flyweight
Boost.Flyweightgintenlabo
 
ドキッ!記号だらけの無名関数
ドキッ!記号だらけの無名関数ドキッ!記号だらけの無名関数
ドキッ!記号だらけの無名関数Shinya Hayakawa
 
ErlangでErlagVM上で動く言語の作り方
ErlangでErlagVM上で動く言語の作り方ErlangでErlagVM上で動く言語の作り方
ErlangでErlagVM上で動く言語の作り方osamu kimura
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるHideyuki Tanaka
 
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」Hiro H.
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみたSatoshi Sato
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5azumakuniyuki 🐈
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputingNoboru Irieda
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかYuki Miyatake
 

What's hot (20)

JDK 10 へようこそ
JDK 10 へようこそJDK 10 へようこそ
JDK 10 へようこそ
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
boost::shared_ptr tutorial
boost::shared_ptr tutorialboost::shared_ptr tutorial
boost::shared_ptr tutorial
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターン
 
Boost.Flyweight
Boost.FlyweightBoost.Flyweight
Boost.Flyweight
 
ドキッ!記号だらけの無名関数
ドキッ!記号だらけの無名関数ドキッ!記号だらけの無名関数
ドキッ!記号だらけの無名関数
 
ErlangでErlagVM上で動く言語の作り方
ErlangでErlagVM上で動く言語の作り方ErlangでErlagVM上で動く言語の作り方
ErlangでErlagVM上で動く言語の作り方
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
 
オープンソースソフトウェア検索サーバ Solr入門
オープンソースソフトウェア検索サーバ Solr入門オープンソースソフトウェア検索サーバ Solr入門
オープンソースソフトウェア検索サーバ Solr入門
 
闇魔術を触ってみた
闇魔術を触ってみた闇魔術を触ってみた
闇魔術を触ってみた
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
 

Similar to Impractical Introduction of Boost Spirit Qi [PPT]

Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perlJiro Nishiguchi
 
Brief introduction of Boost.ICL
Brief introduction of Boost.ICLBrief introduction of Boost.ICL
Brief introduction of Boost.ICLyak1ex
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competitionyak1ex
 
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61TATSUYA HAYAMIZU
 
Boost jp9 program_options
Boost jp9 program_optionsBoost jp9 program_options
Boost jp9 program_optionsnyaocat
 
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talkmitamex4u
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説do_aki
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門natrium11321
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)Hiro H.
 
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Hiro H.
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competitionyak1ex
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Yuto Takei
 
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」Hiro H.
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPAkira Takahashi
 

Similar to Impractical Introduction of Boost Spirit Qi [PPT] (20)

Study3 boost
Study3 boostStudy3 boost
Study3 boost
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perl
 
Brief introduction of Boost.ICL
Brief introduction of Boost.ICLBrief introduction of Boost.ICL
Brief introduction of Boost.ICL
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
 
C++0x総復習
C++0x総復習C++0x総復習
C++0x総復習
 
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61
 
Boost Tour 1.50.0
Boost Tour 1.50.0Boost Tour 1.50.0
Boost Tour 1.50.0
 
Boost jp9 program_options
Boost jp9 program_optionsBoost jp9 program_options
Boost jp9 program_options
 
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
 
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
 
Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)Hello Dark-Side C# (Part. 1)
Hello Dark-Side C# (Part. 1)
 
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
 

More from yak1ex

Introduction to programming competition [revised][PDF]
Introduction to programming competition [revised][PDF]Introduction to programming competition [revised][PDF]
Introduction to programming competition [revised][PDF]yak1ex
 
Introduction to programming competition [revised]
Introduction to programming competition [revised]Introduction to programming competition [revised]
Introduction to programming competition [revised]yak1ex
 
Introduction to programming competition
Introduction to programming competitionIntroduction to programming competition
Introduction to programming competitionyak1ex
 
Brief introduction of Boost.ICL [PDF]
Brief introduction of Boost.ICL [PDF]Brief introduction of Boost.ICL [PDF]
Brief introduction of Boost.ICL [PDF]yak1ex
 
Brief introduction of Boost.ICL
Brief introduction of Boost.ICLBrief introduction of Boost.ICL
Brief introduction of Boost.ICLyak1ex
 
GC in C++0x [eng]
GC in C++0x [eng]GC in C++0x [eng]
GC in C++0x [eng]yak1ex
 
GC in C++0x
GC in C++0xGC in C++0x
GC in C++0xyak1ex
 

More from yak1ex (7)

Introduction to programming competition [revised][PDF]
Introduction to programming competition [revised][PDF]Introduction to programming competition [revised][PDF]
Introduction to programming competition [revised][PDF]
 
Introduction to programming competition [revised]
Introduction to programming competition [revised]Introduction to programming competition [revised]
Introduction to programming competition [revised]
 
Introduction to programming competition
Introduction to programming competitionIntroduction to programming competition
Introduction to programming competition
 
Brief introduction of Boost.ICL [PDF]
Brief introduction of Boost.ICL [PDF]Brief introduction of Boost.ICL [PDF]
Brief introduction of Boost.ICL [PDF]
 
Brief introduction of Boost.ICL
Brief introduction of Boost.ICLBrief introduction of Boost.ICL
Brief introduction of Boost.ICL
 
GC in C++0x [eng]
GC in C++0x [eng]GC in C++0x [eng]
GC in C++0x [eng]
 
GC in C++0x
GC in C++0xGC in C++0x
GC in C++0x
 

Recently uploaded

20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 

Recently uploaded (8)

20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 

Impractical Introduction of Boost Spirit Qi [PPT]

  • 1. 非実用的 Boost Spirit Qi 入門 2011/5/14 Boost 勉強会 名古屋 @yak_ex / 新 康孝
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26. Spirit.Qi 入門 完 まだ Spirit の 変態フェイズは 終了してないぜ!!
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 39.
  • 41.
  • 42.
  • 43. Customization point の関係 例) Foo >> *Bar の結果の戻し先として型 Qux の変数 qux が渡された場合    ※ Foo >> *Bar の属性が Qux 型であるとは限らない!    ※ 大枠だけ図示、 ::type や ::call も省略 is_container<Qux> handles_container<Foo> handles_container<*Bar> push_back_container<Qux,Foo_temp>(qux, foo_temp); foo_temp ← Foo 読み出し container_value<Qux>::type foo_temp; true true qux ← Foo 読み出し false true qux ← *Bar 読み出し ※ * ならデフォルト true   false なら↑と同様の処理 clear_value<Bar> push_back_container<Qux,Bar_attr> を内部で利用
  • 44. Customization point の関係 例) Foo >> *Bar の結果の戻し先として型 Qux の変数 qux が渡された場合    ※ Foo >> *Bar の属性が Qux 型であるとは限らない!    ※ 大枠だけ図示、 ::type や ::call も省略 is_container<Qux> is_container<QA> transform_attribute<QA, Foo_attr>::type foo_temp = transform_attribute<QA, Foo_attr>::pre(qa); false true 前ページと同様の処理 false Qux は 2 要素の Fusion シーケンス tuple<QA, QB> とする foo_temp ← Foo 読み出し transform_attribute<QA, Foo_attr>::post(qa, foo_temp); QB と *Bar の属性について上と同様の処理 Foo は何? rule や attr_cast Foo_attr foo_temp; 他 ※ デフォルトは内部で assign_to を使用 ※ 内部で assign_to_* 族を使用 assign_to(foo_temp, qa); foo_temp ← Foo 読み出し
  • 45.
  • 46.
  • 47.
  • 48. 見えてる範囲 20% 縮小表示 画像補正しないと薄くて文字が 分からないレベル
  • 49.
  • 50. error で検索 ココ 20% 縮小表示
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.