Advertisement

オレオレPHPのつくり方

Engineer at Zynga Japan
Mar. 11, 2013
Advertisement

More Related Content

Recently uploaded(20)

Advertisement

オレオレ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. ご静聴 あ�りがとう ございました
Advertisement