Parse::Yapp gdgd日記(0)
Parse::Yapp入門した。正直さっぱりだ。
h1にする
こんなやつを
*hoge123あ
こうするだけ
<h1>hoge123あ</h1>
Hoge.pm
%{ use strict; use warnings; use Data::Dumper; %} %% body : | h1 { my ($self, @patterns) = @_; return '<h1>' . $patterns[0] . '</h1>'; } ; h1 : '*' letters '\n' { my ($self, @patterns) = @_; return $patterns[1]; } ; letters : LETTER | letters LETTER ; %% sub yyerror {} sub yylex { my ($self) = @_; $self->YYData->{INPUT} || return ('', undef); for ($self->YYData->{INPUT}) { printf("[debug] %s\n", $_); s/^(\*)// and return($1,$1); s/^(\n)// and return($1,$1); s/^([^\n]+)// and return('LETTER' , $1 ) ; s/^(.)// and return($1,$1); } } sub run { my $self = shift; return $self->YYParse( yylex => \&yylex, yyerror => \&yyerror , yydebug => 0x1F ); }
hoge.pl
!/usr/bin/perl use strict; use warnings; use Hoge; my $hoge = Hoge->new(); $hoge->YYData->{INPUT} = "*hoge123あ\n"; my $result = $hoge->run; warn $result; 1;
結果
<h1>hoge123あ</h1> at ./hoge.pl line 13.
うーん
次はこれかな。
*ほげほげ *ほげほげ2
<h1>ほげほげ</h1> <h1>ほげほげ2</h1>
:help! Don't panic!