2005-01-31 [長年日記]
_ 付箋が貼れるといいなー (13:17)
Ruby 1.9をうまく動かせないんで、(Rubyのソースに関しては)パッケージマネージメントとインクリメンタル検索機能しか使えていないんだけど、それだけでも結構便利。あとできれば、これに付箋が貼りたい。付箋にコメントをつけて、さらに関連するコードにリンク(「(パッケージ名):ファイル名:行」なんて表記かな)を張ったりとかすると、解析とかレビューですごく使えそうだ。wema2がリリースされたら、gonzuiと重ねて動かすのにトライしてみたいなー。
_ PHPのparser (15:58)
RubyでPHPのパーサーを書くのは面倒くさそうだけど、PHPが存在する環境では、PHPのtokenizerをそのまま使うようにすれば、PHPに対応するのも簡単そうだなー。ひとまずPHPでparseした結果を適当なフォーマットで出力するコードだけ書いてみた。
<?php
function tokenize($source) {
$tokens = token_get_all($source);
$parsed = '';
$result = '';
foreach ($tokens as $token) {
if (is_array($token)) {
$type = $token[0];
$text = $token[1];
} else {
$type = 0; //literal?
$text = $token;
}
echo 'LINE: '.count(explode("\n", $parsed)).' LENGTH: '.strlen($parsed).' TYPE: '.$type.' TEXT: '.$text."\0";
$parsed .= $text;
}
}
if (isset($argv[1])) {
$source_file = $argv[1];
if (file_exists($source_file)) {
$source = file_get_contents($source_file);
} else {
die('FILE NOT EXISTS: '.$source_file);
}
} else {
$source = '';
$fp = fopen('php://stdin', 'r');
if ($fp) {
while (!feof($fp)) {
$source .= fread($fp, 4096);
}
fclose($fp);
}
}
tokenize($source);
?>
あとは、PHPのtypeで必要なものをgonzuiのtypeに読み替えたりしつつ、Ruby側でこの出力を取り込んでいけばいいのかな。あるいはPHPでRubyのソースコードを出力して、そのままevalさせたりとかできるんだろうか?
ただ、Rubyがわからなくてlangscan以下のディレクトリを見ても、何をやってるのかよくわからない。一回ちゃんとRubyのお勉強をしないと、いろいろ不都合(やりたいことがすぐにできない)が多いなー。
[TrackBack URL: http://tdiary.ishinao.net/tb.rb/20050131]


http://tokuhirom.dnsalias.org/~tokuhirom/wiki/GonzuiHacks
このへんに情報がちょびっとあります。
>tokuhiromさん
イナモデの方ですでに読ませてもらっていたんですけど、Rubyの文法レベルで理解できてないんで、ついていけませんでした(笑)。もうちょっとRubyのお勉強をしてから、あとでもう一度読ませていただきます。