IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 3422


Ignore:
Timestamp:
Mar 14, 2005, 6:44:01 PM (21 years ago)
Author:
jhoblitt
Message:

recompile the grammar for each parse run
add 'TYPE' support
allow '-' in name

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/PS-IPP-Metadata-Config/lib/PS/IPP/Metadata/Config.pm

    r3395 r3422  
    11# Copyright (c) 2005  Joshua Hoblitt
    22#
    3 # $Id: Config.pm,v 1.3 2005-03-09 23:44:18 jhoblitt Exp $
     3# $Id: Config.pm,v 1.4 2005-03-15 04:44:01 jhoblitt Exp $
    44
    55package PS::IPP::Metadata::Config;
     
    2525    my $class = shift;
    2626
    27     my $myparser = Parse::RecDescent->new( $grammar );
    28 
    29     my $self = { _parser => $myparser };
     27    my $self = {};
    3028
    3129    bless $self, $class;
     
    3937    my ( $self, $metadata ) = @_;
    4038
    41     my $tree = $self->{_parser}->startrule( $metadata );
     39    my $tree = Parse::RecDescent->new( $grammar )->startrule( $metadata );
    4240
    4341    return undef unless defined $tree;
     
    203201    | metadata
    204202    | blank_line
    205 #    | {
    206 #        use Carp qw( croak );
    207 #        $text =~ /([^\n]*)/;
    208 #        croak "Invalid statement at line $thisline near \"$1\"";
    209 #    }
     203    | typedef_declare
     204    | typedef
    210205
    211206scalar:
     
    260255
    261256metadata:
    262     metadata_name grammar metadata_end
     257    metadata_name <commit> grammar metadata_end
    263258        {{
    264259            class   => 'metadata',
     
    273268            comment => $item{comment},
    274269        }}
     270
     271typedef_declare:
     272    <skip:'[ \t\r]*'> 'TYPE' <commit> name name(s) "\n"
     273        {
     274            use Carp;
     275
     276            my $len = scalar @{ $item{'name(s)'} };
     277
     278            if (defined $thisparser->{local}{typedef}{ $item{name} }) {
     279                croak "refinition of TYPE $item{name}";   
     280            }
     281
     282            $thisparser->{local}{typedef}{ $item{name} } = $len;
     283
     284            $return = {
     285                class   => 'typedef_declare',
     286                name    => $item{name},
     287                value   => $item{'name(s)'},
     288            };
     289        }
     290    | <skip:'[ \t\r]*'> 'TYPE' <commit> name name(s) comment "\n"
     291        {{
     292            class   => 'typedef_declare',
     293            name    => $item{name},
     294            value   => $item{'name(s)'},
     295            comment => $item{comment},
     296        }}
     297
     298typedef:
     299    <skip:'[ \t\r]*'> name typedef_type name(s) "\n"
     300        {
     301            $return = {
     302                class   => 'typedef',
     303                name    => $item{name},
     304                type    => $item{typedef_type},
     305                value   => $item{'name(s)'},
     306            };
     307        }
     308
     309typedef_type: name
     310        {
     311            use Carp;
     312
     313            if ( ! defined $thisparser->{local}{typedef}{ $item{name} } ) {
     314                croak "missing TYPE defintion for $item{name}";
     315            }
     316
     317            $return = $item{name};
     318        }
    275319
    276320metadata_name:
     
    286330
    287331name:
    288     /[a-z][.\w]*/i
     332    /[a-z][.\w-]*/i
    289333
    290334vname:
Note: See TracChangeset for help on using the changeset viewer.