20110910 闇鍋的php魔改造

Post on 15-Jan-2015

5.398 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

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 魔改造♪

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

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

top related