Large parts of my current grammar consist of alternation lists which are 
easier entered into a file as follows:

+the(?) /bahamas?/ #bahamas 
chile
cuba
/d(a|e)nmark/

The items preceded with a plus are non-terminals and entered literally
The iterms preceded with a slash are regexps and are entered literally
The other items get single quote marks put around them

And all items are thrown into an alternation, such as

country: the(?) /bahamas?/  # bahamas
       | 'chile'
       | 'cuba'
       | /d(a|e)nmark/

This saves me from typing double quotes.
And sorting the file makes it easy to check for duplicate entries. Which 
is very possible when entering as many records as I am.
And of course it is nice to have the main grammar much smaller.

I'm starting to like Class::Base for all my OOP work, so I would probably 
have an API like:

my $o = Parse::RecDescent::Slurp(base => 'path/to/data/files/');
for my $rule (qw(city country state)) {
   $grammar = sprintf "$grammar\n%s\n", $o->slurp($rule) ; # rule and data 
file name are the same unless 2nd arg gives rule explicit name
}

my $p = Parse::RecDescent->new($grammar);

or maybe I should provide the grammar to the constructor and have slurp 
automatically tack the rules on at the end...

at any rate, I dont like how Class::Base takes named parms for the 
constructor but positional parms for the methods... I think I will see 
what 
perlmonks like for their OO-work.

Just brainstorming for now anyway... 

--
Terrence Brannon - SID W049945
614-213-2475 (office)
614-213-3426 (fax)
818-359-0893 (cell)

Reply via email to