Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re: Writing an ODL parser?

by pc88mxer (Vicar)
on Jul 29, 2008 at 19:22 UTC ( #700901=note: print w/ replies, xml ) Need Help??


in reply to Writing an ODL parser?

You might consider writing a parser which is just "good enough" for the files you want to process. Since structures seem to end on line boundaries, you can try something like this:

my $root = {}; my @stack; my $object = $root; use Data::Dumper; while (<DATA>) { if (m{^\s*\/\*}) { next } # assume single line comment elsif (m/^\s*END(_OBJECT)?/) { $object = pop(@stack); } elsif (m/^\s*OBJECT\s*=\s*(\S+)/) { my $new = { parent => $object, type = $1 }; push(@{$object->{children}}, $new); push(@stack, $object); $object = $new; } elsif (m/^\s*(\w+)\s*=\s*(\S*)/) { my $property = $1; my $value = $2; if ($value =~ m/^"/) { while ( (($value =~ tr/"//) % 2 != 0) && defined($_ = <DATA>)) { s/^\s*//; $value .= $_; } } $object->{$property} = $value; } } print Dumper($root);
The string literal parsing is admittedly a little cheesy since I don't know what the rules are for representing literals in ODL files.


Comment on Re: Writing an ODL parser?
Download Code
Re^2: Writing an ODL parser?
by dHarry (Abbot) on Jul 30, 2008 at 14:12 UTC

    Thanks for the effort!

    You might consider writing a parser which is just "good enough" for the files you want to process. Since structures seem to end on line boundaries, you can try something like this: ...

    Writing something just "good enough" was exactly my first approach:-) But now I want to improve and make it more generic. As you can read in my reply to moritz the values can be a bit tricky.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://700901]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (15)
As of 2015-07-06 18:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (80 votes), past polls