Re: The new GEDCOM parser

[email protected] (Stephen Woodbridge) Mon, 05 Nov 2012 08:54:49 -0500
Newsgroups perl.gedcom
Message-ID <[email protected]>
Hi Ron,

This all sounds great. I have a question on your choice of using a tree 
structure, can you explain that more? Are you thinking of the file being 
the root, then having leaves like: indi, fams, famc, etc and then each 
of these have their respective data hanging off those objects? Or are 
you thinking the tree would represent the family relationships? I don't 
see how the later will work.

-Steve

On 11/5/2012 2:04 AM, Ron Savage wrote:
> Hi
>
> The new GEDCOM parser
>      This document is a collection of ideas which have been percolating
> in my mind for a long time.
>
>      Comments welcome.
>
> Ideas
>    Module name
>      Genealogy::Gedcom::Parser.
>
>      A place-holder, Genealogy::Gedcom
>      <http://metacpan.org/release/Genealogy-Gedcom>, is already on CPAN.
>
>      Note: This module was written before the new, major tools now
> available were released. See Tools below.
>
>    ETA
>      There is no ETA for the parser.
>
>      However, certain Perl-based tools are now available which will make
>      coding a simple task. See Tools below.
>
>      See also 'Famous Last Words' :-).
>
>    UTF-8
>      The code will accept input files in utf-8, and generate files
> containing utf-8 characters.
>
>    Apache and mod_perl
>      These will not be required. I only mention these because references
> to them appear in the Gedcom.pm distro.
>
>    Logging
>      The code will have a built-in logger, so debugging, e.g., can be
> turned on with a parameter to new().
>
>      This logger will use Log::Handler. See Tools below.
>
>    Sub-classing
>      Sub-classing the main module will be trivial, and samples will be
>      provided.
>
>      Sub-classing will be done with Hash::FieldHash. See Tools and the
> FAQ below.
>
>    Grammars and grammar generators
>      Like Gedcom.pm, the code will read a GEDCOM grammar in BNF from a
> file.
>      I'll run this phase before shipping the module, so you don't have to.
>      See Tools below, specifically Marpa::Rules::Simple.
>
>      Bascially, this means the startling complexity of the code in
> Gedcom.pm is a thing of the past.
>
>    Operating the parser
>      Using Marpa, callbacks are triggered when input is recognized.
>
>      So, when lines like these are encountered:
>
>              1 @<XREF:FAM>@ FAM
>              2 RIN <AUTOMATED_RECORD_ID>
>
>      Marpa will automatically call the callback attached to each tag.
>
>      Callbacks will probably have names like 'do_fam' and 'do_rin', i.e.
> of the format 'do_$tag'.
>
>      The parameters passed to the callback include the non-tag text on
> the line.
>
>      Default callbacks for all tags will be provided, each one doing its
> part in parsing the parameters to the tag, and storing the result.
>
>      The result will probably be stored in a tree. See Tools below,
>      specifically Tree::DAG_Node.
>
>    Database support
>      A DBD::SQLite database is possible.
>
>    Tools
>      o Hash::FieldHash
>          Simplifies class-building.
>
>          As for the obvious question, why not use Moose, see the FAQ below.
>
>      o Log::Handling
>          Simplifies logging.
>
>      o Marpa::R2
>          This is the modern way to do parsing.
>
>          Home page <http://jeffreykegler.github.com/Marpa-web-site/>.
>
>          Jeffrey's blog about Marpa
>          <http://jeffreykegler.github.com/Ocean-of-Awareness-blog/>.
>
>          My recent article about lexing and parsing with Marpa
>
> <http://www.perl.com/pub/2012/10/an-overview-of-lexing-and-parsing.html>.
>
>      o MarpaX::Simple::Rules
>          This module reads a grammar in BNF and generates a Marpa grammar.
>
>          Hence it will read a BNF version of the GEDCOM spec and output
> the matching Marpa grammar.
>
>      o Tree::DAG_Node
>          The most sophisticated tree-handling code on CPAN. I've recently
>          become co-maintainer of this module.
>
> FAQ
>    Why did you choose Hash::FieldHash over Moose?
>      My policy is to use the light-weight Hash::FieldHash for stand-alone
>      modules and Moose for applications.
>
>    Why did you choose to store the data in a tree?
>      A GEDCOM file's structure can be viewed as a tree, so my initial
> plan is to store the data likewise.
>
>