#!/usr/bin/perl -w
use strict;
use Parse::RecDescent;
use Data::Dumper;
use Storable;
my $grammar_file = shift;
my $storable = shift; # optional
unless (defined $grammar_file) {
print "Usage: $0 grammar_file\n";
exit 1;
}
unless (-f $grammar_file) {
die "Grammar file $grammar_file does not exit";
}
my $grammar = '';
{
open G, $grammar_file;
local $/;
$grammar = <G>;
close G;
}
# Enable warnings within the Parse::RecDescent module.
$::RD_ERRORS = 1; # Make sure the parser dies when it encounters an error
$::RD_WARN = 1; # Enable warnings. This will warn on unused rules &c.
$::RD_HINT = 1; # Give out hints to help fix problems.
my $parser = Parse::RecDescent->new($grammar);
my $content = '';
{
local $/;
$content = <>;
}
$::res = {};
my $p_res = $parser->file($content);
store($::res, $storable) if (defined $storable && length($storable) > 0);
print Dumper $::res;