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); } ?>