1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
use strict;
use warnings;
package LispParser;
use base qw( Parser::MGC );
use constant pattern_ident => qr{[[:alnum:]+*/._:-]+};
sub parse
{
my $self = shift;
$self->sequence_of( sub {
$self->any_of(
sub { $self->token_int },
sub { $self->token_string },
sub { \$self->token_ident },
sub { $self->scope_of( "(", \&parse, ")" ) }
);
} );
}
use Data::Dumper;
if( !caller ) {
my $parser = __PACKAGE__->new;
print Dumper( $parser->from_file( $ARGV[0] ) );
}
1;
|