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