20110910 闇鍋的php魔改造
DESCRIPTION
PHPカンファレンス2011 LTで話してきたスライドですTRANSCRIPT
闇鍋的P H P魔改造
2011/09/10 PHP カンファレンス 2011Presented By do_aki
こんにちは!
do_aki ( どぅーあき )
インフラとか Webアプリケーション とかやってる系エンジニア
in (株)もしも
http://do-aki.net/
闇鍋的 PHP魔改造って?
$ 脳内 = [ Pure PHP => 弄るところ少ない , Pecl => 内部実装分からない ,];
内部実装は分からない
コンパイラの知識はある(かじった程度)
処理系に手を入れてみよう
闇鍋的にオレオレ PHPを作ってみた
用意するもの
• PHP の ソースコード (php-5.4 alpha3)
• PHP コンパイル環境• re2c ( 字句解析器 )• Bison ( 構文解析器 )
• 失敗してもめげない気持ち一番大事!
闇鍋オレオレ PHP のレシピ
1.ソースコードを展開2. ./configure 3. Zend/zend_language_scanner.l
Zend/zend_language_parser.y を書換4.不要なファイルの削除
rm Zend/zend_language_{scanner,parser}.c
5. make
zend_language_scanner.l
• 字句解析器に喰わせる
• この文字の羅列(トークン)にはこういう意味があるというのを定義(例:「 function 」 -> T_FUNCTION )
• このトークンがあったらこの処理をする(例: <?php -> ここから PHP スクリプトだよ という状態遷移を発生)
zend_language_parser.y
• 構文解析器に喰わせる
• このトークンがこういう順序できたらこの処理をする
• ここに記述されないパタンは SyntaxError
例: ○ foreach ($array as $var) {} × while ($array as $var) {}
苦節 10日
make回数 100回以上
なんとか作り上げたものがこちら
日本語プログラミング言語
ぺちぺち
<?php function HelloPHP() { echo "Hello PHP World"; } HelloPHP(); PHP
ぺちぺち 関数 はろーぺちぺち () ここから 「 " はろー ぺちぺち わーるど " 」と表示 ここまで
はろーぺちぺち ();
ぺちぺち
ぺちぺち
初心者に、余計にやさしい PHP
条件分岐
もし [ 条件 ] ならば…
そうでないならば…
条件おわり
繰り返し
繰り返し [ 条件 ] の間ここから
…ここまで
変数 / 条件 / 演算子
変数 : ほげ は 0 です
1 が 2 より小さい (1<2)1 が 2 より大きい (1>2)
1 足す 2 (1+2)10 を 3 で割った余り (10%3)
<?php$counter = 1;while($counter <= 10) { if ($counter % 2 === 0) { echo $counter, " is even\n"; } else { echo $counter, " is odd\n"; } $counter = $counter + 1;}
PHP
ぺちぺち
変数 : カウンタ は 1 です ;
繰り返し 変数 : カウンタ が 10 以下 の間 ここから もし 変数 : カウンタ を 2 で割った余り が 0 に等しい ならば 「 変数 : カウンタ ," は偶数です \n" 」と表示 ; そうでないならば 「 変数 : カウンタ ," は奇数です \n" 」と表示 ; 条件終わり
変数 : カウンタ に 変数 : カウンタ 足す 1 を代入 ;ここまで
ぺちぺち
ぺちぺちは
PHP
Web アプリケーションとしても実行可
能
DEMO
内部構造知らなくてもここまでできる!
レッツ PHP 魔改造♪
詳しく聞きたい方は懇親会で!
ありがとうございました!