1# 2# Module Parse::Yapp::Output 3# 4# (c) Copyright 1998-2001 Francois Desarmenien, all rights reserved. 5# (see the pod text in Parse::Yapp module for use and distribution rights) 6# 7package Parse::Yapp::Output; 8@ISA=qw ( Parse::Yapp::Lalr ); 9 10require 5.004; 11 12use Parse::Yapp::Lalr; 13use Parse::Yapp::Driver; 14 15use strict; 16 17use Carp; 18 19sub _CopyDriver { 20 my($text)='#Included Parse/Yapp/Driver.pm file'.('-' x 40)."\n"; 21 open(DRV,$Parse::Yapp::Driver::FILENAME) 22 or die "BUG: could not open $Parse::Yapp::Driver::FILENAME"; 23 $text.="{\n".join('',<DRV>)."}\n"; 24 close(DRV); 25 $text.='#End of include'.('-' x 50)."\n"; 26} 27 28sub Output { 29 my($self)=shift; 30 31 $self->Options(@_); 32 33 my($package)=$self->Option('classname'); 34 my($head,$states,$rules,$tail,$driver); 35 my($version)=$Parse::Yapp::Driver::VERSION; 36 my($datapos); 37 my($text)=$self->Option('template') ||<<'EOT'; 38#################################################################### 39# 40# This file was generated using Parse::Yapp version <<$version>>. 41# 42# Don't edit this file, use source file instead. 43# 44# ANY CHANGE MADE HERE WILL BE LOST ! 45# 46#################################################################### 47package <<$package>>; 48use vars qw ( @ISA ); 49use strict; 50 51@ISA= qw ( Parse::Yapp::Driver ); 52<<$driver>> 53 54<<$head>> 55 56sub new { 57 my($class)=shift; 58 ref($class) 59 and $class=ref($class); 60 61 my($self)=$class->SUPER::new( yyversion => '<<$version>>', 62 yystates => 63<<$states>>, 64 yyrules => 65<<$rules>>, 66 @_); 67 bless($self,$class); 68} 69 70<<$tail>> 711; 72EOT 73 74 $driver='use Parse::Yapp::Driver;'; 75 76 defined($package) 77 or $package='Parse::Yapp::Default'; 78 79 $head= $self->Head(); 80 $rules=$self->RulesTable(); 81 $states=$self->DfaTable(); 82 $tail= $self->Tail(); 83 84 $self->Option('standalone') 85 and $driver=_CopyDriver(); 86 87 $text=~s/<<(\$.+)>>/$1/gee; 88 89 $text; 90} 91 921; 93