Successfully reported this slideshow.

オレオレPHPのつくり方

14

Share

Upcoming SlideShare
8F Emacs seminar 1st
8F Emacs seminar 1st
Loading in …3
×
1 of 21
1 of 21

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

オレオレPHPのつくり方

  1. 1. オレオレPPHHPPの つくりかた @@rrsskkyy 22001133..0033..0022 第44回闇PPHHPP勉強会
  2. 2. 自己紹介 関山 隆介 ((TTwwiitttteerr @@rrsskkyy)) 主な使用言語は PPHHPP,, CC,, OObbjjeeccttiivvee--CC,, JJaavvaaSSccrriipptt PPHHPPの改造が生業趣味です 画像処理とか圧縮アルゴリズムと かに興味あ�ります
  3. 3. アジェンダ PPHHPPスクリプトのコンパイルと実 行についてざっくりと。 実際にPPHHPPを改造したソースコー ドを題材に、PPHHPPを改造して構文 を追加する方法を紹介します。 GGiittHHuubbで本家pphhpp--ssrrccをffoorrkk。 hhttttppss::////ggiitthhuubb..ccoomm//rrsskkyy//pphhpp--ssrrcc
  4. 4. PPHHPPの コンパイルと実行
  5. 5. コンパイルと実行 PPHHPPスクリプトのコンパイルおよ び実行は関数ポインタの呼び出し で行われている。 zzeenndd__ccoommppiillee__ffiillee zzeenndd__ccoommppiillee__ssttrriinngg zzeenndd__eexxeeccuuttee
  6. 6. コンパイル 字句解析してソースコードをトー クンに分解しつつ、構文解析して バイトコードを生成する。 字句解析器:: zzeenndd__llaanngguuaaggee__ssccaannnneerr..cc 構文解析器:: zzeenndd__llaanngguuaaggee__ppaarrsseerr..cc →これらを書き換えれば、新たな リテラルや構文を追加できる!
  7. 7. コンパイル
  8. 8. 実行 バイトコードを走査しつつ、命令 ((ooppccooddee))に応じたコールバック 関数を呼び出す。 ooppccooddeeとコールバック関数は zzeenndd__vvmm__ddeeff..hh で定義されている。 →これを書き換えれば、PPHHPPの挙 動を変えられる。
  9. 9. 仮想機械生成
  10. 10. PPHHPPを 改造してみよう
  11. 11. PPHHPPを改造するのに 必要なもの CC言語の知識 ZZeenndd EEnnggiinnee 独特の作法も YYAACCCCの知識 ((なくてもOOKK)) 折れない心 PPHHPP愛
  12. 12. uunnttiill//uunnlleessss構文
  13. 13. uunnttiill//uunnlleessss構文 PPeerrllのまね。 uunnlleessss (($$eexxpprr)) {{ ...... }} iiff文の逆で、条件式が偽のとき ブロックを評価する。 uunnttiill (($$eexxpprr)) {{ ...... }} ddoo {{ ...... }} uunnttiill (($$eexxpprr));;
  14. 14. uunnttiill//uunnlleessssで やること 字句解析器にトークンを追加 “uunnlleessss”→ TT__UUNNLLEESSSS “uunnttiill”→ TT__UUNNTTIILL 構文解析器に TT__UUNNLLEESSSS//TT__UUNNTTIILLに 対応する処理を追加。 実行部((VVMM))は変更の必要なし。
  15. 15. SSccaallaa風のミックスイン
  16. 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. 17. ミックスイン構文で やること 字句解析器は変更の必要なし。 構文解析器に nneeww AA uussee BB に対応 する処理を追加。 ミックスインに対応するooppccooddee 定義とコールバック関数を追加。
  18. 18. 改造PPHHPPのビルドに 必要なツール コンパイラの再生成に rree22cc と BBiissoonn が、GGiittで取得したソース コードからのビルドには GGNNUU AAuuttoottoooollss が必要です。 hhttttpp::////ddooccss..pphhpp..nneett//mmaannuuaall//jjaa// iinnssttaallll..uunniixx..pphhpp
  19. 19. 改造PPHHPPをビルドする $ cd Zend $ php zend_vm_gen.php $ cd .. $ ./buildconf --force $ ./configure $ make
  20. 20. 質問タイム
  21. 21. ご静聴 あ�りがとう ございました

×