###################################
#!/usr/local/bin/perl
package Parser;
use 5.008007;
use strict;
use warnings;
require Exporter;
require DynaLoader;
our @ISA = qw(DynaLoader Exporter);
our %EXPORT_TAGS = ( 'all' => [ qw() ] );
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
our @EXPORT = qw();
our $VERSION = '1.261';
bootstrap Parser $VERSION;
# Preloaded methods go here.
##########################################################
sub new {
my $class = shift; $class = ref $class if ref $class;
my $self = { strip_autos=>0, @_};
bless $self, $class;
return $self;
}
sub read {
my $self = shift;
my %param = (@_);
if (!-r $param{filename}) { print "%Error: file not found: $param{filename}, stopped";}
$self->_read_xs($param{filename}, $param{strip_autos}||$self->{strip_autos});## error comes
}
...
#In Parser.XS:
# sub _read_xs {class}
# sub filename {class}
# sub lineno {class}
...
####
int
_read_xs (CLASS, filename, strip_autos)
SV *CLASS
char *filename
int strip_autos
PROTOTYPE: $$$
CODE:
{
static int/*bool*/ in_parser = 0;
if (!SvROK(CLASS)) {
in_parser = 0;
croak (" Parser::read() not called as class member") ;
}
if (!filename) {
in_parser = 0;
croak (" Parser::read() filename=> parameter not passed") ;
}
if (in_parser) {
croak (" Parser::read() called recursively") ;
}
in_parser = 1;
scparse_init (CLASS, filename, strip_autos) ;
if (!sclex_open (filename)) {
in_parser = 0;
croak (" Parser::read() file not found") ;
}
scgrammerparse();
fclose (sclexin);
/* Emit final tokens */
scparser_EmitPrefix ();
if (scParserState.errors) {
in_parser = 0;
croak (" Parser::read() detected parse errors");
}
in_parser = 0;
RETVAL = 1;
}
OUTPUT: RETVAL
####
#! /usr/local/bin/perl
use ExtUtils::testlib;
package Trialparser;
use Parser;
@ISA = qw(Parser);
package main;
my $sp = Trialparser->new();
$sp->read (filename =>'ExParse.sp');
####
Can't locate auto/Trialparser/class.al in @INC (@INC contains: /cygdrive/d/parser/blib/arch /cygdrive/d/parser/blib/lib /usr/lib/perl5/5.8/cygwin /usr/lib/perl5/5.8 /usr/lib/perl5/site_perl/5.8/cygwin /usr/lib/perl5/site_perl/5.8 /usr/lib/perl5/vendor_perl/5.8/cygwin /usr/lib/perl5/vendor_perl/5.8 .) at /cygdrive/d/parser/blib/lib/Parser.pm line 51