libparse-recdescent-perl/demo/demo_perlparsing.pl

62 lines
963 B
Perl
Executable File

#! /usr/local/bin/perl -w
use Parse::RecDescent;
my $parse = Parse::RecDescent->new(<<'EndGrammar');
perl: <perl_quotelike>
{ print 'quotelike: [', join("|", @{$item[1]}), "]\n" }
| <skip: '-*'> <perl_variable>
{ print "variable: $item[-1]\n" }
| <perl_codeblock>
{ print "codeblock: $item[1]\n" }
| /.*/
{ print "unknown: $item[1]\n" }
EndGrammar
print "> ";
while (<DATA>) { # FOR DEMO CHANGE TO: while (<DATA>)
$parse->perl($_);
}
__DATA__
{$a=1};
$a;
{ $a = $b; \n $a =~ /$b/; \n @a = map /\s/ @b };
$_;
$a[1];
$_[1];
$a{cat};
$_{cat};
$a->[1];
$a->{"cat"}[1];
@$listref;
@{$listref};
$obj->nextval;
@{$obj->nextval};
@{$obj->nextval($cat,$dog)->{new}};
@{$obj->nextval($cat?$dog:$fish)->{new}};
@{$obj->nextval(cat()?$dog:$fish)->{new}};
$ a {'cat'};
$a::b::c{d}->{$e->()};
$#_;
$#array;
$#{array};
$var[$#var];
'a';
"b";
`c`;
'a\'';
'a\\';
'\\a';
"a\\";
"\\a";
"b\'\"\'";
`c '\`abc\`'`;
q{a};
qq{a};
qx{a};
s{a}/b/;
tr!a!b!;