package neb; use strict; use Carp; use English; use XML::Parser; use neb::Parser; sub new { my $class = shift; my $self = bless {}, $class; $self->init(@_); return $self; } sub init { my $self = shift; my $file = shift; $self->parsefile($file) if $file; return $self; } sub parsefile { my $self = shift; my $file = shift; confess 'I need a file to parse' unless defined $file; local $INPUT_RECORD_SEPARATOR = undef; open (F, $file) or confess "Unable to open $file: $OS_ERROR"; $self->parse(); close F; return $self; } sub parse { my $self = shift; my $text = shift; $self->{PARSE} = new XML::Parser(Style => 'neb::Parser')->parse($text) if defined $text; return $self->{PARSE}; } sub begin { "use strict;\nuse Carp;\nuse warnings;\n\nmy \$OUTPUT = '';\n" } sub end { "print \"\$OUTPUT\n\";\n" } sub canonical { my $self = shift; $self->parse->canonical; } sub code { my $self = shift; $self->begin . $self->parse->code . $self->end; } sub execute { my $self = shift; eval $self->code or confess $EVAL_ERROR; } 1;