/* Mine: */
#define SCPARSE_C
#include "scparse.h"
/* Perl */
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
#/* self->read (filename) */
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
package Parser;
use strict;
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;
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});
}
####
#! /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');