PHPで書いたいいかげんなPHP-REPL
とかくPHPの色々が全然わからんので(たとえば「あれ、Arrayってどう書くんだ」とか言うレベル)、対話環境がいる。Perlからphp -r hogehogeを呼び出すラッパだけだとあまりにもあまりだったので、PHPで書いた。ほんの少しだけ手を入れて、関数とかも定義しやすいように。ブラケットブレースを数えてるだけだったり。
% ./phpterm.php
php> $x = 342;
php> print "$x\n";
342
php> function hoge(){
print "hoge\n";
}
php> hoge();
hoge
php> function loop(){
for($i=0;$i<3;++$i){
print "$i\n";
}
}
php> loop();
0
1
2
php>無いよりマシ、かなあ。つーかこんな感じのもん、誰かちゃんと作ってると思うのだけど。以下コード。
#!/usr/bin/php <?php $prompt = "php> "; function isLine($line) { return preg_match("/[^{]+;\s*$/", $line); } function brakDepth($line) { $openNum = preg_match_all("/{/", $line, $out); $closeNum = preg_match_all("/}/", $line, $out); return $openNum - $closeNum; } function blockEnd($line) { return brakDepth($line)==0 and preg_match("/.+}\s*$/", $line)==1; } while($line = readline($prompt)){ if(!isLine($line)){ while(!blockEnd($line)){ $depth = brakDepth($line); for($i=brakDepth($line), $indentsp="";$i>0;--$i){ $indentsp .= " "; } $line .= readline($indentsp); } } eval($line); readline_add_history($line); } ?>