Submit Search
Upload
オレオレPHPのつくり方
•
14 likes
•
6,321 views
Ryusuke Sekiyama
Follow
第4回 闇PHP勉強会の資料です
Read less
Read more
Technology
Report
Share
Report
Share
1 of 21
Download now
Download to read offline
Recommended
8F Emacs seminar 1st
8F Emacs seminar 1st
toshi_pp
Emacs 使いが Vim を使ってみた(ちょっとだけGit)
Emacs 使いが Vim を使ってみた(ちょっとだけGit)
Yoshiyuki MIYAGI
fanscala1 1 インストールとreplまで
fanscala1 1 インストールとreplまで
Toshiki Shinozaki
Rubyで和暦をよみとる
Rubyで和暦をよみとる
Takashi Ota
Shell で制限付き並列処理をしよう
Shell で制限付き並列処理をしよう
博文 斉藤
第6回鹿児島node.jsの会資料_内村
第6回鹿児島node.jsの会資料_内村
Koichi Uchimura
TextMate
TextMate
Naoyuki Mitsuboshi
kvm-clock に時間を尋ねるのは間違っているだろうか
kvm-clock に時間を尋ねるのは間違っているだろうか
Takaaki Fukai
Recommended
8F Emacs seminar 1st
8F Emacs seminar 1st
toshi_pp
Emacs 使いが Vim を使ってみた(ちょっとだけGit)
Emacs 使いが Vim を使ってみた(ちょっとだけGit)
Yoshiyuki MIYAGI
fanscala1 1 インストールとreplまで
fanscala1 1 インストールとreplまで
Toshiki Shinozaki
Rubyで和暦をよみとる
Rubyで和暦をよみとる
Takashi Ota
Shell で制限付き並列処理をしよう
Shell で制限付き並列処理をしよう
博文 斉藤
第6回鹿児島node.jsの会資料_内村
第6回鹿児島node.jsの会資料_内村
Koichi Uchimura
TextMate
TextMate
Naoyuki Mitsuboshi
kvm-clock に時間を尋ねるのは間違っているだろうか
kvm-clock に時間を尋ねるのは間違っているだろうか
Takaaki Fukai
MmapScanner
MmapScanner
Masahiro Tomita
HSPでおいしいスープを飲む方法
HSPでおいしいスープを飲む方法
Hiroaki Murayama
Acct v3 binary
Acct v3 binary
Yutaka Matsuzawa
俺とMacとアダルトビデオ[社外版]
俺とMacとアダルトビデオ[社外版]
Mitsuki Ogasahara
tnct.Seminar9.03#1
tnct.Seminar9.03#1
Daichi Onodera
EmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べた
kyon mm
setTimeout関数の楽しみ
setTimeout関数の楽しみ
mtkn
Haskell超初心者勉強会17
Haskell超初心者勉強会17
Takashi Kawachi
fluent-plugin-resque_stat
fluent-plugin-resque_stat
Makoto Haruyama
Coffeescriptを初めて使う方へ
Coffeescriptを初めて使う方へ
Koya Fukuda
OCamlでJavaScriptが幸せ
OCamlでJavaScriptが幸せ
Sachirou Inoue
制約をつけて遊ぼう
制約をつけて遊ぼう
Fumihito Yokoyama
30days Albumの裏側〜監視・インフラCI事情〜 #monitoringcasual
30days Albumの裏側〜監視・インフラCI事情〜 #monitoringcasual
Takahiro Okumura
Of tutorials v4.0
Of tutorials v4.0
Etsuji Nomura
Play frameworkをエヴァンジェる
Play frameworkをエヴァンジェる
ke-m kamekoopa
Javaで最強のfizz buzz
Javaで最強のfizz buzz
yy yank
2017-12-04 Linuxの基本構造とBashでの扱い方
2017-12-04 Linuxの基本構造とBashでの扱い方
浩平 渡邉
Of tutorials v1606+
Of tutorials v1606+
Etsuji Nomura
Tmux
Tmux
harutsugu shimoji
PHP Conference Kansai 2015
PHP Conference Kansai 2015
Yasuo Harada
詳説ぺちぺち
詳説ぺちぺち
do_aki
JavaScript非同期処理 入門
JavaScript非同期処理 入門
Ishibashi Ryosuke
More Related Content
What's hot
MmapScanner
MmapScanner
Masahiro Tomita
HSPでおいしいスープを飲む方法
HSPでおいしいスープを飲む方法
Hiroaki Murayama
Acct v3 binary
Acct v3 binary
Yutaka Matsuzawa
俺とMacとアダルトビデオ[社外版]
俺とMacとアダルトビデオ[社外版]
Mitsuki Ogasahara
tnct.Seminar9.03#1
tnct.Seminar9.03#1
Daichi Onodera
EmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べた
kyon mm
setTimeout関数の楽しみ
setTimeout関数の楽しみ
mtkn
Haskell超初心者勉強会17
Haskell超初心者勉強会17
Takashi Kawachi
fluent-plugin-resque_stat
fluent-plugin-resque_stat
Makoto Haruyama
Coffeescriptを初めて使う方へ
Coffeescriptを初めて使う方へ
Koya Fukuda
OCamlでJavaScriptが幸せ
OCamlでJavaScriptが幸せ
Sachirou Inoue
制約をつけて遊ぼう
制約をつけて遊ぼう
Fumihito Yokoyama
30days Albumの裏側〜監視・インフラCI事情〜 #monitoringcasual
30days Albumの裏側〜監視・インフラCI事情〜 #monitoringcasual
Takahiro Okumura
Of tutorials v4.0
Of tutorials v4.0
Etsuji Nomura
Play frameworkをエヴァンジェる
Play frameworkをエヴァンジェる
ke-m kamekoopa
Javaで最強のfizz buzz
Javaで最強のfizz buzz
yy yank
2017-12-04 Linuxの基本構造とBashでの扱い方
2017-12-04 Linuxの基本構造とBashでの扱い方
浩平 渡邉
Of tutorials v1606+
Of tutorials v1606+
Etsuji Nomura
Tmux
Tmux
harutsugu shimoji
PHP Conference Kansai 2015
PHP Conference Kansai 2015
Yasuo Harada
What's hot
(20)
MmapScanner
MmapScanner
HSPでおいしいスープを飲む方法
HSPでおいしいスープを飲む方法
Acct v3 binary
Acct v3 binary
俺とMacとアダルトビデオ[社外版]
俺とMacとアダルトビデオ[社外版]
tnct.Seminar9.03#1
tnct.Seminar9.03#1
EmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べた
setTimeout関数の楽しみ
setTimeout関数の楽しみ
Haskell超初心者勉強会17
Haskell超初心者勉強会17
fluent-plugin-resque_stat
fluent-plugin-resque_stat
Coffeescriptを初めて使う方へ
Coffeescriptを初めて使う方へ
OCamlでJavaScriptが幸せ
OCamlでJavaScriptが幸せ
制約をつけて遊ぼう
制約をつけて遊ぼう
30days Albumの裏側〜監視・インフラCI事情〜 #monitoringcasual
30days Albumの裏側〜監視・インフラCI事情〜 #monitoringcasual
Of tutorials v4.0
Of tutorials v4.0
Play frameworkをエヴァンジェる
Play frameworkをエヴァンジェる
Javaで最強のfizz buzz
Javaで最強のfizz buzz
2017-12-04 Linuxの基本構造とBashでの扱い方
2017-12-04 Linuxの基本構造とBashでの扱い方
Of tutorials v1606+
Of tutorials v1606+
Tmux
Tmux
PHP Conference Kansai 2015
PHP Conference Kansai 2015
Viewers also liked
詳説ぺちぺち
詳説ぺちぺち
do_aki
JavaScript非同期処理 入門
JavaScript非同期処理 入門
Ishibashi Ryosuke
Php radomize
Php radomize
do_aki
セキュアな育毛
セキュアな育毛
Ishibashi Ryosuke
PHPエクステンションの開発tips
PHPエクステンションの開発tips
Yoshio Hanawa
zval をダイエットしてみた
zval をダイエットしてみた
Yoshio Hanawa
Php in ruby
Php in ruby
do_aki
超初心者向け!Php勉強法とプログラミングの基礎の基礎
超初心者向け!Php勉強法とプログラミングの基礎の基礎
Hiroyuki Sugimoto
SQLite2と3のエスケープ関数の違いとその対策
SQLite2と3のエスケープ関数の違いとその対策
Akishige TAKEKOSHI
HashTable と HashDos
HashTable と HashDos
Yuya Takeyama
JIT のコードを読んでみた
JIT のコードを読んでみた
y-uti
zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境
Yo Ya
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
Yahoo!デベロッパーネットワーク
PHP基礎勉強会
PHP基礎勉強会
Yuji Otani
php7's ast
php7's ast
do_aki
signal の話 或いは Zend Signals とは何か
signal の話 或いは Zend Signals とは何か
do_aki
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
Yoshio Hanawa
Zend framework 3 と zend expressive の話
Zend framework 3 と zend expressive の話
Satoru Yoshida
PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)
do_aki
PHP超入門@LL温泉
PHP超入門@LL温泉
Sotaro Karasawa
Viewers also liked
(20)
詳説ぺちぺち
詳説ぺちぺち
JavaScript非同期処理 入門
JavaScript非同期処理 入門
Php radomize
Php radomize
セキュアな育毛
セキュアな育毛
PHPエクステンションの開発tips
PHPエクステンションの開発tips
zval をダイエットしてみた
zval をダイエットしてみた
Php in ruby
Php in ruby
超初心者向け!Php勉強法とプログラミングの基礎の基礎
超初心者向け!Php勉強法とプログラミングの基礎の基礎
SQLite2と3のエスケープ関数の違いとその対策
SQLite2と3のエスケープ関数の違いとその対策
HashTable と HashDos
HashTable と HashDos
JIT のコードを読んでみた
JIT のコードを読んでみた
zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
PHP基礎勉強会
PHP基礎勉強会
php7's ast
php7's ast
signal の話 或いは Zend Signals とは何か
signal の話 或いは Zend Signals とは何か
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
Zend framework 3 と zend expressive の話
Zend framework 3 と zend expressive の話
PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)
PHP超入門@LL温泉
PHP超入門@LL温泉
オレオレPHPのつくり方
1.
オレオレPPHHPPの つくりかた
@@rrsskkyy 22001133..0033..0022 第44回闇PPHHPP勉強会
2.
自己紹介 関山 隆介
((TTwwiitttteerr @@rrsskkyy)) 主な使用言語は PPHHPP,, CC,, OObbjjeeccttiivvee--CC,, JJaavvaaSSccrriipptt PPHHPPの改造が生業趣味です 画像処理とか圧縮アルゴリズムと かに興味あ�ります
3.
アジェンダ PPHHPPスクリプトのコンパイルと実 行についてざっくりと。 実際にPPHHPPを改造したソースコー ドを題材に、PPHHPPを改造して構文 を追加する方法を紹介します。 GGiittHHuubbで本家pphhpp--ssrrccをffoorrkk。 hhttttppss::////ggiitthhuubb..ccoomm//rrsskkyy//pphhpp--ssrrcc
4.
PPHHPPの コンパイルと実行
5.
コンパイルと実行 PPHHPPスクリプトのコンパイルおよ び実行は関数ポインタの呼び出し で行われている。 zzeenndd__ccoommppiillee__ffiillee zzeenndd__ccoommppiillee__ssttrriinngg zzeenndd__eexxeeccuuttee
6.
コンパイル 字句解析してソースコードをトー クンに分解しつつ、構文解析して バイトコードを生成する。 字句解析器:: zzeenndd__llaanngguuaaggee__ssccaannnneerr..cc 構文解析器::
zzeenndd__llaanngguuaaggee__ppaarrsseerr..cc →これらを書き換えれば、新たな リテラルや構文を追加できる!
7.
コンパイル
8.
実行 バイトコードを走査しつつ、命令 ((ooppccooddee))に応じたコールバック 関数を呼び出す。 ooppccooddeeとコールバック関数は zzeenndd__vvmm__ddeeff..hh
で定義されている。 →これを書き換えれば、PPHHPPの挙 動を変えられる。
9.
仮想機械生成
10.
PPHHPPを 改造してみよう
11.
PPHHPPを改造するのに
必要なもの CC言語の知識 ZZeenndd EEnnggiinnee 独特の作法も YYAACCCCの知識 ((なくてもOOKK)) 折れない心 PPHHPP愛
12.
uunnttiill//uunnlleessss構文
13.
uunnttiill//uunnlleessss構文 PPeerrllのまね。 uunnlleessss (($$eexxpprr))
{{ ...... }} iiff文の逆で、条件式が偽のとき ブロックを評価する。 uunnttiill (($$eexxpprr)) {{ ...... }} ddoo {{ ...... }} uunnttiill (($$eexxpprr));;
14.
uunnttiill//uunnlleessssで
やること 字句解析器にトークンを追加 “uunnlleessss”→ TT__UUNNLLEESSSS “uunnttiill”→ TT__UUNNTTIILL 構文解析器に TT__UUNNLLEESSSS//TT__UUNNTTIILLに 対応する処理を追加。 実行部((VVMM))は変更の必要なし。
15.
SSccaallaa風のミックスイン
16.
ミックスイン構文 SSccaallaaの nneeww
AA wwiitthh BB のまね。 $$oobbjj == nneeww AA uussee BB;; $$oobbjj == nneeww AA uussee ((BB,, CC));; 構文解析の都合で、括弧なしで uussee BB,, CC と書けるようにするのは難しかった。 $$oobbjj == nneeww AA uussee $$xx;;
17.
ミックスイン構文で
やること 字句解析器は変更の必要なし。 構文解析器に nneeww AA uussee BB に対応 する処理を追加。 ミックスインに対応するooppccooddee 定義とコールバック関数を追加。
18.
改造PPHHPPのビルドに 必要なツール コンパイラの再生成に
rree22cc と BBiissoonn が、GGiittで取得したソース コードからのビルドには GGNNUU AAuuttoottoooollss が必要です。 hhttttpp::////ddooccss..pphhpp..nneett//mmaannuuaall//jjaa// iinnssttaallll..uunniixx..pphhpp
19.
改造PPHHPPをビルドする $ cd Zend $
php zend_vm_gen.php $ cd .. $ ./buildconf --force $ ./configure $ make
20.
質問タイム
21.
ご静聴 あ�りがとう ございました
Download now