parser
author "Tomas Zeman <tzeman@volny.cz>"
Thu, 26 Nov 2009 11:07:18 +0100
changeset 15 fb5c38cb93a9
parent 9 837e0e828d06
child 17 d39ff14a8964
permissions -rw-r--r--
cisco.grammar: parse au/tug inside sonet controller
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     1
#!/usr/bin/perl -w
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     2
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     3
use strict;
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     4
use Parse::RecDescent;
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     5
use Data::Dumper;
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     6
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     7
my $grammar_file = shift;
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     8
unless (defined $grammar_file) {
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     9
	print "Usage: $0 grammar_file\n";
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    10
	exit 1;
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    11
}
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    12
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    13
unless (-f $grammar_file) {
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    14
	die "Grammar file $grammar_file does not exit";
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    15
}
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    16
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    17
my $grammar = '';
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    18
{
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    19
	open G, $grammar_file;
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    20
	local $/;
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    21
	$grammar = <G>;
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    22
	close G;
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    23
}
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    24
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    25
# Enable warnings within the Parse::RecDescent module.
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    26
$::RD_ERRORS = 1; # Make sure the parser dies when it encounters an error
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    27
$::RD_WARN   = 1; # Enable warnings. This will warn on unused rules &c.
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    28
$::RD_HINT   = 1; # Give out hints to help fix problems.
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    29
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    30
my $parser = Parse::RecDescent->new($grammar);
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    31
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    32
my $content = '';
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    33
{
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    34
	local $/;
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    35
	$content = <>;
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    36
}
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    37
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    38
$::res = {};
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    39
my $p_res = $parser->file($content);
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    40
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    41
#print Dumper $p_res;
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    42
837e0e828d06 added generic parser
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    43
print Dumper $::res;