CORBA-IDL

 view release on metacpan or  search on metacpan

lib/CORBA/IDL/ParserFactory.pm  view on Meta::CPAN

        $pos = index($argumentative,$first);
        if ($pos >= 0) {
            if (defined($args[$pos+1]) and ($args[$pos+1] eq ':')) {
                shift(@ARGV);
                if ($rest eq q{}) {
                    $rest = shift(@ARGV);
                }
                $parser->YYData->{"opt_$first"} = $rest;
            }
            else {
                $parser->YYData->{"opt_$first"} = 1;
                if ($rest eq q{}) {
                    shift(@ARGV);
                }
                else {
                    $ARGV[0] = "-$rest";
                }
            }
        }
        else {
            push @{$parser->YYData->{args}}, shift(@ARGV);
        }
    }
}

sub Configure {
    my $parser = shift;
    my %attr = @_;
    while ( my ($key, $value) = each(%attr) ) {
        if (defined $value) {
            $parser->YYData->{$key} = $value;
        }
    }
    return $parser;
}

sub Run {
    my $parser = shift;
    my $preprocessor = $parser->YYData->{preprocessor};

    if ($preprocessor) {
        my @args;
        @args = @{$parser->YYData->{args}}
                if (exists $parser->YYData->{args});
        push @args, @_;

        open $parser->YYData->{fh}, "$preprocessor @args|"
                or die "can't open @_ ($!).\n";
    }
    else {
        my $file = shift;
        if (ref $file) {
            $parser->YYData->{fh} = $file;
            $parser->YYData->{srcname} = shift;
        }
        else {
            open $parser->YYData->{fh}, $file
                    or die "can't open $file ($!).\n";
            $parser->YYData->{srcname} = shift || $file;
        }
        my @st = stat($parser->YYData->{srcname});
        $parser->YYData->{srcname_size} = $st[7];
        $parser->YYData->{srcname_mtime} = $st[9];
    }

    CORBA::IDL::Lexer::InitLexico($parser);
    $parser->YYData->{doc} = q{};
    $parser->YYData->{curr_node} = undef;
    $parser->YYData->{curr_itf} = undef;
    $parser->YYData->{prop} = 0;
    $parser->YYData->{native} = 0;
    $parser->YYParse(
            yylex   => \&CORBA::IDL::Lexer::Lexer,
            yyerror => sub { return; },
#           yydebug => 0x17,
    );

#    Bit Value    Outputs
#    0x01         Token reading (useful for Lexer debugging)
#    0x02         States information
#    0x04         Driver actions (shifts, reduces, accept...)
#    0x08         Parse Stack dump
#    0x10         Error Recovery tracing

    close $parser->YYData->{fh};
    delete $parser->{RULES};
    delete $parser->{STATES};
    delete $parser->{STACK};

    if (exists $parser->YYData->{symbtab}) {
        $parser->YYData->{symbtab}->CheckForward();
        $parser->YYData->{symbtab}->CheckRepositoryID();
    }
}

sub DisplayStatus {
    my $parser = shift;
    if (exists $parser->YYData->{nb_error}) {
        my $nb = $parser->YYData->{nb_error};
        print "$nb error(s).\n"
    }
    if (        $parser->YYData->{verbose_warning}
            and exists $parser->YYData->{nb_warning} ) {
        my $nb = $parser->YYData->{nb_warning};
        print "$nb warning(s).\n"
    }
    if (        $parser->YYData->{verbose_info}
            and exists $parser->YYData->{nb_info} ) {
        my $nb = $parser->YYData->{nb_info};
        print "$nb info(s).\n"
    }
    if (        $parser->YYData->{verbose_deprecated}
            and exists $parser->YYData->{nb_deprecated} ) {
        my $nb = $parser->YYData->{nb_deprecated};
        print "$nb deprecated(s).\n"
    }
}

sub Export {
    my $parser = shift;
    if ( our $IDL_VERSION ge '3.0' ) {



( run in 0.657 second using v1.01-cache-2.11-cpan-39bf76dae61 )