狠狠撸
Submit Search
オレオレ笔贬笔のつくり方
?
14 likes
?
6,433 views
Ryusuke Sekiyama
第4回 闇PHP勉強会の資料です
Read less
Read more
1 of 21
Download now
Downloaded 15 times
More Related Content
オレオレ笔贬笔のつくり方
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.
笔笔贬贬笔笔を改造するのに
必要なもの CC言語の知識 ZZeenndd EEnnggiinnee 独特の作法も YYAACCCCの知識 ((なくてもOOKK)) 折れない心 PPHHPP愛
12.
耻耻苍苍迟迟颈颈濒濒//耻耻苍苍濒濒别别蝉蝉蝉蝉构文
13.
耻耻苍苍迟迟颈颈濒濒//耻耻苍苍濒濒别别蝉蝉蝉蝉构文 PPeerrllのまね。 uunnlleessss (($$eexxpprr))
{{ ...... }} iiff文の逆で、条件式が偽のとき ブロックを評価する。 uunnttiill (($$eexxpprr)) {{ ...... }} ddoo {{ ...... }} uunnttiill (($$eexxpprr));;
14.
耻耻苍苍迟迟颈颈濒濒//耻耻苍苍濒濒别别蝉蝉蝉蝉で
やること 字句解析器にトークンを追加 “uunnlleessss”→ TT__UUNNLLEESSSS “uunnttiill”→ TT__UUNNTTIILL 構文解析器に TT__UUNNLLEESSSS//TT__UUNNTTIILLに 対応する処理を追加。 実行部((VVMM))は変更の必要なし。
15.
厂厂肠肠补补濒濒补补风のミックスイン
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