%item
#!/usr/bin/env perl use strict; use Parse::RecDescent; use Data::Dumper; my $grammar = q{ inputs : 'a' 'b' { print Data::Dumper::Dumper(%item); } }; my $parse = new Parse::RecDescent ($grammar); while (<>) { defined $parse->inputs($_) or print "Bad text!\n"; }
で、
$VAR1 = '__STRING2__'; $VAR2 = 'b'; $VAR3 = '__RULE__'; $VAR4 = 'inputs'; $VAR5 = '__STRING1__'; $VAR6 = 'a';
#!/usr/bin/env perl use strict; use Parse::RecDescent; use Data::Dumper; my $grammar = q{ inputs : a b { print Data::Dumper::Dumper(%item); } a : 'A' b : 'B' }; my $parse = new Parse::RecDescent ($grammar); while (<>) { defined $parse->inputs($_) or print "Bad text!\n"; }
で、
AB $VAR1 = '__RULE__'; $VAR2 = 'inputs'; $VAR3 = 'a'; $VAR4 = 'A'; $VAR5 = 'b'; $VAR6 = 'B';
同じルールで別な値が返ってくる場合
#!/usr/bin/env perl use strict; use Parse::RecDescent; use Data::Dumper; my $grammar = q{ inputs : a a { print Data::Dumper::Dumper(%item); } a : /\w/ }; my $parse = new Parse::RecDescent ($grammar); while (<>) { defined $parse->inputs($_) or print "Bad text!\n"; }
で、
AB $VAR1 = '__RULE__'; $VAR2 = 'inputs'; $VAR3 = 'a'; $VAR4 = 'B';
これで、良いの?と思ったら、そういう場合は別なルール名でラップしろとの説明があった