Parse::RecDescent始め

まだ、これを使うか決めてないんだけど、
実用Perlプログラミングに載ってたので、どんな感じか使ってみた。

use v5.14;
use strict;
use warnings;

use Parse::RecDescent;

my $parser = Parse::RecDescent->new( q{
    Source : "(" Text Source(s?) ")" {
        if ( @{$item[3]} ) {
            $return = $item[2] . ' -> ' . $item[3][0];
        }
        else {
            $return = $item[2];
        }
    }
    Text   : /[a-z]+/
} );

my $text = do { local $/; <DATA>; };
say $parser->Source( $text );

__DATA__
( aaa( bbb( ccc( ddd( eee( fff( ggg( hhh ) ) ) ) ) ) ) )

これを実行すると、こうなる。

$ perl aaa.pl
aaa -> bbb -> ccc -> ddd -> eee -> fff -> ggg -> hhh

こういうのをパースする予定はないんだけど、
こういうことも簡単に出来るって素敵デスね!

おしまい。

Leave a Comment