前の日 / 次の日 / 最新

WinChalow

2005 : Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2004 : Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

2004-07-28 Wed

ChangeLog パーザ


パーザのみを独立したモジュールにすると、なにかと便利ですね。
Parse::RecDescent を使った簡単なパーザを試作してみました。はあと

EUCコードで入出力することを前提していますので、nkf からパイプしてください。今回は動作確認だけなので、chalow とはデータ構造が異なります。いずれは chalow 互換になる予定です。

RecDescentを使うと、ChangeLog の論理構造を記述するだけですむので(作るのはたいへんだったけど結果的には)非常にシンプルになります。

#! perl -w
# Parse ChangeLog
# Copyright: (C) Project PaoPei with zuihu 2004 JAPAN
# $Id: remoteclog.txt,v 1.2 2004/12/06 08:58:45 zuihu Exp $

package ParseChangeLog;
use strict;
use Parse::RecDescent;
use Data::Dumper;

our $VERSION = '0.1';

my $grammar = q(

file: entry(s)
{
my %file;
for (@{$item[1]})
{
(my $date = $_->[1]->[0]->[0]) =~ s/\-//og;
$file{$date} = $_->[1];
}
\%file;
}

entry: entryheader item(s)
{
my @entry;
push @entry, $item[1], $item[2];
[ $item[1], \@entry ];
}

entryheader: date user
{[$item[1], $item[2]]}
 | date
{[$item[1]]}

date: /\d{4}-\d\d-\d\d/ /(\s\(.+?\))?/
{$item[1]}

user: /.+/
{$item[1]}

item: itemheader itembody(s)
{ [$item[1], $item[2]] }
 | itemheader
{ [$item[1]] }

itemheader: /^\* / /([^\:]+)/ /:\s*/
{$item[2]}

itembody: /^(?!(\* .+?:|\d{4}-\d\d\-\d\d))(.*)/
{$item[1]}

);

my $text;
{
  local $/ = undef;
  $text = <STDIN>;
}
my $log = Parse::RecDescent->new($grammar)->file($text);
print Dumper($log);

ChangeLogメモ ついにブレークか!?


論客で知られる橋本大也氏が ChangeLogメモを採用しておられるとのことだ。さすがに慧眼である。秀丸マクロも使っておられるらしい。
[http://www.ringolab.com/note/daiya/archives/001889.html]

地味でニッチな((C)たつを氏)ChangeLogメモであるが、そろそろブレークの兆しが感じられるのではないだろうか。

そういえば本家chalowの RC2 がリリースされている。お盆明けには正式リリースになりそうだ。
[http://nais.to/~yto/clog/2004-07-26.html]

このところ常用していたアンテナが故障中のため、どうしても世間の動きからとりのこされがちである。アンテナのコードが読んでも分からない。書いたプログラマはバカか(って自分か...)。クラスタリングを道家の秘法で煮詰めればメタデータができると思ったのだが、コーディングレベルでいきづまっていてはお話にならない。

アンテナがないと困るのも事実だから、超クセの強いシステムではあるが、それなりにセマンティック的には有効なのかもしれない。そう思うとちょっとうれしい。山にでもこもって考え直そう。

2004-07 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31