20110910 闇鍋的php魔改造

25
闇闇 P H P 闇闇 2011/09/10 PHP カカカカカカカ 2011 Presented By do_aki

Upload: doaki

Post on 15-Jan-2015

5.394 views

Category:

Technology


5 download

DESCRIPTION

PHPカンファレンス2011 LTで話してきたスライドです

TRANSCRIPT

Page 1: 20110910 闇鍋的php魔改造

闇鍋的P H P魔改造

2011/09/10 PHP カンファレンス 2011Presented By do_aki

Page 2: 20110910 闇鍋的php魔改造

こんにちは!

Page 3: 20110910 闇鍋的php魔改造

do_aki ( どぅーあき )

インフラとか Webアプリケーション とかやってる系エンジニア

in (株)もしも

http://do-aki.net/

Page 4: 20110910 闇鍋的php魔改造

闇鍋的 PHP魔改造って?

Page 5: 20110910 闇鍋的php魔改造

$ 脳内 = [ Pure PHP =>  弄るところ少ない , Pecl =>  内部実装分からない ,];

Page 6: 20110910 闇鍋的php魔改造

内部実装は分からない

コンパイラの知識はある(かじった程度)

処理系に手を入れてみよう

Page 7: 20110910 闇鍋的php魔改造

闇鍋的にオレオレ PHPを作ってみた

Page 8: 20110910 闇鍋的php魔改造

用意するもの

• PHP の ソースコード (php-5.4 alpha3)

• PHP コンパイル環境• re2c ( 字句解析器 )• Bison ( 構文解析器 )

• 失敗してもめげない気持ち一番大事!

Page 9: 20110910 闇鍋的php魔改造

闇鍋オレオレ 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

Page 10: 20110910 闇鍋的php魔改造

zend_language_scanner.l

• 字句解析器に喰わせる

• この文字の羅列(トークン)にはこういう意味があるというのを定義(例:「 function 」 -> T_FUNCTION )

• このトークンがあったらこの処理をする(例: <?php -> ここから PHP スクリプトだよ       という状態遷移を発生)

Page 11: 20110910 闇鍋的php魔改造

zend_language_parser.y

• 構文解析器に喰わせる

• このトークンがこういう順序できたらこの処理をする

• ここに記述されないパタンは SyntaxError

 例: ○ foreach ($array as $var) {}    × while ($array as $var) {}

Page 12: 20110910 闇鍋的php魔改造

苦節  10日

make回数 100回以上

なんとか作り上げたものがこちら

Page 13: 20110910 闇鍋的php魔改造

日本語プログラミング言語

ぺちぺち

Page 14: 20110910 闇鍋的php魔改造

<?php function HelloPHP() { echo "Hello PHP World"; } HelloPHP(); PHP

ぺちぺち 関数 はろーぺちぺち () ここから 「 " はろー ぺちぺち わーるど " 」と表示 ここまで

はろーぺちぺち ();

ぺちぺち

Page 15: 20110910 闇鍋的php魔改造

ぺちぺち

初心者に、余計にやさしい PHP

Page 16: 20110910 闇鍋的php魔改造

条件分岐

もし [ 条件 ] ならば…

 そうでないならば…

条件おわり

Page 17: 20110910 闇鍋的php魔改造

繰り返し

繰り返し [ 条件 ] の間ここから

…ここまで

Page 18: 20110910 闇鍋的php魔改造

変数 / 条件 / 演算子

変数 : ほげ は 0 です

1 が 2 より小さい (1<2)1 が 2 より大きい (1>2)

1 足す 2 (1+2)10 を 3 で割った余り (10%3)

Page 19: 20110910 闇鍋的php魔改造

<?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

Page 20: 20110910 闇鍋的php魔改造

ぺちぺち

変数 : カウンタ は 1 です ;

繰り返し 変数 : カウンタ が 10 以下 の間 ここから もし 変数 : カウンタ を 2 で割った余り が   0 に等しい ならば   「 変数 : カウンタ ," は偶数です \n" 」と表示 ; そうでないならば   「 変数 : カウンタ ," は奇数です \n" 」と表示 ; 条件終わり

 変数 : カウンタ に 変数 : カウンタ 足す 1 を代入 ;ここまで

ぺちぺち

Page 21: 20110910 闇鍋的php魔改造

ぺちぺちは

PHP

Page 22: 20110910 闇鍋的php魔改造

Web アプリケーションとしても実行可

Page 23: 20110910 闇鍋的php魔改造

DEMO

Page 24: 20110910 闇鍋的php魔改造

内部構造知らなくてもここまでできる!

レッツ PHP 魔改造♪

詳しく聞きたい方は懇親会で!

Page 25: 20110910 闇鍋的php魔改造

ありがとうございました!