dummy_foundation/lib/Parse/Yapp/Parse.pm
changeset 4 60053dab7e2a
parent 3 8b87ea768cb8
child 5 842a773e65f2
child 6 c34a018f3291
--- a/dummy_foundation/lib/Parse/Yapp/Parse.pm	Wed Jun 03 18:33:51 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1093 +0,0 @@
-####################################################################
-#
-#    This file was generated using Parse::Yapp version 1.05.
-#
-#        Don't edit this file, use source file instead.
-#
-#             ANY CHANGE MADE HERE WILL BE LOST !
-#
-####################################################################
-package Parse::Yapp::Parse;
-use vars qw ( @ISA );
-use strict;
-
-@ISA= qw ( Parse::Yapp::Driver );
-use Parse::Yapp::Driver;
-
-#line 1 "YappParse.yp"
-# (c) Copyright Francois Desarmenien 1998-2001, all rights reserved.
-# (see COPYRIGHT in Parse::Yapp.pm pod section for use and distribution rights)
-#
-# Parse/Yapp/Parser.yp: Parse::Yapp::Parser.pm source file
-#
-# Use: yapp -m 'Parse::Yapp::Parse' -o Parse/Yapp/Parse.pm YappParse.yp
-#
-# to generate the Parser module.
-# 
-#line 12 "YappParse.yp"
-
-require 5.004;
-
-use Carp;
-
-my($input,$lexlevel,@lineno,$nberr,$prec,$labelno);
-my($syms,$head,$tail,$token,$term,$nterm,$rules,$precterm,$start,$nullable);
-my($expect);
-
-
-
-sub new {
-        my($class)=shift;
-        ref($class)
-    and $class=ref($class);
-
-    my($self)=$class->SUPER::new( yyversion => '1.05',
-                                  yystates =>
-[
-	{#State 0
-		ACTIONS => {
-			"%%" => -6,
-			'HEADCODE' => 3,
-			'UNION' => 2,
-			'TOKEN' => 5,
-			'ASSOC' => 7,
-			'START' => 6,
-			'error' => 9,
-			'TYPE' => 10,
-			"\n" => 11,
-			'EXPECT' => 13
-		},
-		GOTOS => {
-			'head' => 1,
-			'decls' => 12,
-			'yapp' => 4,
-			'decl' => 14,
-			'headsec' => 8
-		}
-	},
-	{#State 1
-		ACTIONS => {
-			'error' => 19,
-			"%%" => 16,
-			'IDENT' => 18
-		},
-		GOTOS => {
-			'rules' => 15,
-			'rulesec' => 20,
-			'body' => 17
-		}
-	},
-	{#State 2
-		ACTIONS => {
-			'CODE' => 21
-		}
-	},
-	{#State 3
-		ACTIONS => {
-			"\n" => 22
-		}
-	},
-	{#State 4
-		ACTIONS => {
-			'' => 23
-		}
-	},
-	{#State 5
-		ACTIONS => {
-			"<" => 25
-		},
-		DEFAULT => -19,
-		GOTOS => {
-			'typedecl' => 24
-		}
-	},
-	{#State 6
-		ACTIONS => {
-			'IDENT' => 26
-		},
-		GOTOS => {
-			'ident' => 27
-		}
-	},
-	{#State 7
-		ACTIONS => {
-			"<" => 25
-		},
-		DEFAULT => -19,
-		GOTOS => {
-			'typedecl' => 28
-		}
-	},
-	{#State 8
-		ACTIONS => {
-			"%%" => 29
-		}
-	},
-	{#State 9
-		ACTIONS => {
-			"\n" => 30
-		}
-	},
-	{#State 10
-		ACTIONS => {
-			"<" => 25
-		},
-		DEFAULT => -19,
-		GOTOS => {
-			'typedecl' => 31
-		}
-	},
-	{#State 11
-		DEFAULT => -10
-	},
-	{#State 12
-		ACTIONS => {
-			"%%" => -7,
-			'HEADCODE' => 3,
-			'UNION' => 2,
-			'TOKEN' => 5,
-			'ASSOC' => 7,
-			'START' => 6,
-			'error' => 9,
-			'TYPE' => 10,
-			"\n" => 11,
-			'EXPECT' => 13
-		},
-		GOTOS => {
-			'decl' => 32
-		}
-	},
-	{#State 13
-		ACTIONS => {
-			'NUMBER' => 33
-		}
-	},
-	{#State 14
-		DEFAULT => -9
-	},
-	{#State 15
-		DEFAULT => -28
-	},
-	{#State 16
-		DEFAULT => -26
-	},
-	{#State 17
-		ACTIONS => {
-			'TAILCODE' => 34
-		},
-		DEFAULT => -45,
-		GOTOS => {
-			'tail' => 35
-		}
-	},
-	{#State 18
-		ACTIONS => {
-			":" => 36
-		}
-	},
-	{#State 19
-		ACTIONS => {
-			";" => 37
-		}
-	},
-	{#State 20
-		ACTIONS => {
-			'error' => 19,
-			"%%" => 39,
-			'IDENT' => 18
-		},
-		GOTOS => {
-			'rules' => 38
-		}
-	},
-	{#State 21
-		ACTIONS => {
-			"\n" => 40
-		}
-	},
-	{#State 22
-		DEFAULT => -14
-	},
-	{#State 23
-		DEFAULT => -0
-	},
-	{#State 24
-		ACTIONS => {
-			'LITERAL' => 41,
-			'IDENT' => 26
-		},
-		GOTOS => {
-			'symlist' => 43,
-			'ident' => 44,
-			'symbol' => 42
-		}
-	},
-	{#State 25
-		ACTIONS => {
-			'IDENT' => 45
-		}
-	},
-	{#State 26
-		DEFAULT => -4
-	},
-	{#State 27
-		ACTIONS => {
-			"\n" => 46
-		}
-	},
-	{#State 28
-		ACTIONS => {
-			'LITERAL' => 41,
-			'IDENT' => 26
-		},
-		GOTOS => {
-			'symlist' => 47,
-			'ident' => 44,
-			'symbol' => 42
-		}
-	},
-	{#State 29
-		DEFAULT => -5
-	},
-	{#State 30
-		DEFAULT => -18
-	},
-	{#State 31
-		ACTIONS => {
-			'IDENT' => 26
-		},
-		GOTOS => {
-			'ident' => 48,
-			'identlist' => 49
-		}
-	},
-	{#State 32
-		DEFAULT => -8
-	},
-	{#State 33
-		ACTIONS => {
-			"\n" => 50
-		}
-	},
-	{#State 34
-		DEFAULT => -46
-	},
-	{#State 35
-		DEFAULT => -1
-	},
-	{#State 36
-		ACTIONS => {
-			'CODE' => 57,
-			'LITERAL' => 41,
-			'IDENT' => 26
-		},
-		DEFAULT => -35,
-		GOTOS => {
-			'rhselts' => 56,
-			'rule' => 51,
-			'code' => 52,
-			'rhs' => 53,
-			'ident' => 44,
-			'rhselt' => 58,
-			'rhss' => 55,
-			'symbol' => 54
-		}
-	},
-	{#State 37
-		DEFAULT => -30
-	},
-	{#State 38
-		DEFAULT => -27
-	},
-	{#State 39
-		DEFAULT => -25
-	},
-	{#State 40
-		DEFAULT => -15
-	},
-	{#State 41
-		DEFAULT => -2
-	},
-	{#State 42
-		DEFAULT => -22
-	},
-	{#State 43
-		ACTIONS => {
-			"\n" => 60,
-			'LITERAL' => 41,
-			'IDENT' => 26
-		},
-		GOTOS => {
-			'ident' => 44,
-			'symbol' => 59
-		}
-	},
-	{#State 44
-		DEFAULT => -3
-	},
-	{#State 45
-		ACTIONS => {
-			">" => 61
-		}
-	},
-	{#State 46
-		DEFAULT => -13
-	},
-	{#State 47
-		ACTIONS => {
-			"\n" => 62,
-			'LITERAL' => 41,
-			'IDENT' => 26
-		},
-		GOTOS => {
-			'ident' => 44,
-			'symbol' => 59
-		}
-	},
-	{#State 48
-		DEFAULT => -24
-	},
-	{#State 49
-		ACTIONS => {
-			"\n" => 63,
-			'IDENT' => 26
-		},
-		GOTOS => {
-			'ident' => 64
-		}
-	},
-	{#State 50
-		DEFAULT => -17
-	},
-	{#State 51
-		DEFAULT => -32
-	},
-	{#State 52
-		DEFAULT => -40
-	},
-	{#State 53
-		ACTIONS => {
-			'PREC' => 66
-		},
-		DEFAULT => -34,
-		GOTOS => {
-			'prec' => 65
-		}
-	},
-	{#State 54
-		DEFAULT => -39
-	},
-	{#State 55
-		ACTIONS => {
-			"|" => 68,
-			";" => 67
-		}
-	},
-	{#State 56
-		ACTIONS => {
-			'CODE' => 57,
-			'LITERAL' => 41,
-			'IDENT' => 26
-		},
-		DEFAULT => -36,
-		GOTOS => {
-			'code' => 52,
-			'ident' => 44,
-			'rhselt' => 69,
-			'symbol' => 54
-		}
-	},
-	{#State 57
-		DEFAULT => -44
-	},
-	{#State 58
-		DEFAULT => -38
-	},
-	{#State 59
-		DEFAULT => -21
-	},
-	{#State 60
-		DEFAULT => -11
-	},
-	{#State 61
-		DEFAULT => -20
-	},
-	{#State 62
-		DEFAULT => -12
-	},
-	{#State 63
-		DEFAULT => -16
-	},
-	{#State 64
-		DEFAULT => -23
-	},
-	{#State 65
-		ACTIONS => {
-			'CODE' => 57
-		},
-		DEFAULT => -42,
-		GOTOS => {
-			'code' => 70,
-			'epscode' => 71
-		}
-	},
-	{#State 66
-		ACTIONS => {
-			'LITERAL' => 41,
-			'IDENT' => 26
-		},
-		GOTOS => {
-			'ident' => 44,
-			'symbol' => 72
-		}
-	},
-	{#State 67
-		DEFAULT => -29
-	},
-	{#State 68
-		ACTIONS => {
-			'CODE' => 57,
-			'LITERAL' => 41,
-			'IDENT' => 26
-		},
-		DEFAULT => -35,
-		GOTOS => {
-			'rhselts' => 56,
-			'rule' => 73,
-			'code' => 52,
-			'rhs' => 53,
-			'ident' => 44,
-			'rhselt' => 58,
-			'symbol' => 54
-		}
-	},
-	{#State 69
-		DEFAULT => -37
-	},
-	{#State 70
-		DEFAULT => -43
-	},
-	{#State 71
-		DEFAULT => -33
-	},
-	{#State 72
-		DEFAULT => -41
-	},
-	{#State 73
-		DEFAULT => -31
-	}
-],
-                                  yyrules  =>
-[
-	[#Rule 0
-		 '$start', 2, undef
-	],
-	[#Rule 1
-		 'yapp', 3, undef
-	],
-	[#Rule 2
-		 'symbol', 1,
-sub
-#line 30 "YappParse.yp"
-{
-                        exists($$syms{$_[1][0]})
-                    or  do {
-                        $$syms{$_[1][0]} = $_[1][1];
-                        $$term{$_[1][0]} = undef;
-                    };
-                    $_[1]
-                }
-	],
-	[#Rule 3
-		 'symbol', 1, undef
-	],
-	[#Rule 4
-		 'ident', 1,
-sub
-#line 41 "YappParse.yp"
-{
-                        exists($$syms{$_[1][0]})
-                    or  do {
-                        $$syms{$_[1][0]} = $_[1][1];
-                        $$term{$_[1][0]} = undef;
-                    };
-                    $_[1]
-                }
-	],
-	[#Rule 5
-		 'head', 2, undef
-	],
-	[#Rule 6
-		 'headsec', 0, undef
-	],
-	[#Rule 7
-		 'headsec', 1, undef
-	],
-	[#Rule 8
-		 'decls', 2, undef
-	],
-	[#Rule 9
-		 'decls', 1, undef
-	],
-	[#Rule 10
-		 'decl', 1, undef
-	],
-	[#Rule 11
-		 'decl', 4,
-sub
-#line 66 "YappParse.yp"
-{
-                for (@{$_[3]}) {
-                    my($symbol,$lineno)=@$_;
-
-                        exists($$token{$symbol})
-                    and do {
-                        _SyntaxError(0,
-                                "Token $symbol redefined: ".
-                                "Previously defined line $$syms{$symbol}",
-                                $lineno);
-                        next;
-                    };
-                    $$token{$symbol}=$lineno;
-                    $$term{$symbol} = [ ];
-                }
-                undef
-            }
-	],
-	[#Rule 12
-		 'decl', 4,
-sub
-#line 84 "YappParse.yp"
-{
-                for (@{$_[3]}) {
-                    my($symbol,$lineno)=@$_;
-
-                        defined($$term{$symbol}[0])
-                    and do {
-                        _SyntaxError(1,
-                            "Precedence for symbol $symbol redefined: ".
-                            "Previously defined line $$syms{$symbol}",
-                            $lineno);
-                        next;
-                    };
-                    $$token{$symbol}=$lineno;
-                    $$term{$symbol} = [ $_[1][0], $prec ];
-                }
-                ++$prec;
-                undef
-            }
-	],
-	[#Rule 13
-		 'decl', 3,
-sub
-#line 102 "YappParse.yp"
-{ $start=$_[2][0]; undef }
-	],
-	[#Rule 14
-		 'decl', 2,
-sub
-#line 103 "YappParse.yp"
-{ push(@$head,$_[1]); undef }
-	],
-	[#Rule 15
-		 'decl', 3,
-sub
-#line 104 "YappParse.yp"
-{ undef }
-	],
-	[#Rule 16
-		 'decl', 4,
-sub
-#line 106 "YappParse.yp"
-{
-                for ( @{$_[3]} ) {
-                    my($symbol,$lineno)=@$_;
-
-                        exists($$nterm{$symbol})
-                    and do {
-                        _SyntaxError(0,
-                                "Non-terminal $symbol redefined: ".
-                                "Previously defined line $$syms{$symbol}",
-                                $lineno);
-                        next;
-                    };
-                    delete($$term{$symbol});   #not a terminal
-                    $$nterm{$symbol}=undef;    #is a non-terminal
-                }
-            }
-	],
-	[#Rule 17
-		 'decl', 3,
-sub
-#line 122 "YappParse.yp"
-{ $expect=$_[2][0]; undef }
-	],
-	[#Rule 18
-		 'decl', 2,
-sub
-#line 123 "YappParse.yp"
-{ $_[0]->YYErrok }
-	],
-	[#Rule 19
-		 'typedecl', 0, undef
-	],
-	[#Rule 20
-		 'typedecl', 3, undef
-	],
-	[#Rule 21
-		 'symlist', 2,
-sub
-#line 130 "YappParse.yp"
-{ push(@{$_[1]},$_[2]); $_[1] }
-	],
-	[#Rule 22
-		 'symlist', 1,
-sub
-#line 131 "YappParse.yp"
-{ [ $_[1] ] }
-	],
-	[#Rule 23
-		 'identlist', 2,
-sub
-#line 134 "YappParse.yp"
-{ push(@{$_[1]},$_[2]); $_[1] }
-	],
-	[#Rule 24
-		 'identlist', 1,
-sub
-#line 135 "YappParse.yp"
-{ [ $_[1] ] }
-	],
-	[#Rule 25
-		 'body', 2,
-sub
-#line 140 "YappParse.yp"
-{
-                    $start
-                or  $start=$$rules[1][0];
-
-                    ref($$nterm{$start})
-                or  _SyntaxError(2,"Start symbol $start not found ".
-                                   "in rules section",$_[2][1]);
-
-                $$rules[0]=[ '$start', [ $start, chr(0) ], undef, undef ];
-            }
-	],
-	[#Rule 26
-		 'body', 1,
-sub
-#line 150 "YappParse.yp"
-{ _SyntaxError(2,"No rules in input grammar",$_[1][1]); }
-	],
-	[#Rule 27
-		 'rulesec', 2, undef
-	],
-	[#Rule 28
-		 'rulesec', 1, undef
-	],
-	[#Rule 29
-		 'rules', 4,
-sub
-#line 157 "YappParse.yp"
-{ _AddRules($_[1],$_[3]); undef }
-	],
-	[#Rule 30
-		 'rules', 2,
-sub
-#line 158 "YappParse.yp"
-{ $_[0]->YYErrok }
-	],
-	[#Rule 31
-		 'rhss', 3,
-sub
-#line 161 "YappParse.yp"
-{ push(@{$_[1]},$_[3]); $_[1] }
-	],
-	[#Rule 32
-		 'rhss', 1,
-sub
-#line 162 "YappParse.yp"
-{ [ $_[1] ] }
-	],
-	[#Rule 33
-		 'rule', 3,
-sub
-#line 165 "YappParse.yp"
-{ push(@{$_[1]}, $_[2], $_[3]); $_[1] }
-	],
-	[#Rule 34
-		 'rule', 1,
-sub
-#line 166 "YappParse.yp"
-{
-                                my($code)=undef;
-
-                                    defined($_[1])
-                                and $_[1][-1][0] eq 'CODE'
-                                and $code = ${pop(@{$_[1]})}[1];
-
-                                push(@{$_[1]}, undef, $code);
-
-                                $_[1]
-                            }
-	],
-	[#Rule 35
-		 'rhs', 0, undef
-	],
-	[#Rule 36
-		 'rhs', 1, undef
-	],
-	[#Rule 37
-		 'rhselts', 2,
-sub
-#line 183 "YappParse.yp"
-{ push(@{$_[1]},$_[2]); $_[1] }
-	],
-	[#Rule 38
-		 'rhselts', 1,
-sub
-#line 184 "YappParse.yp"
-{ [ $_[1] ] }
-	],
-	[#Rule 39
-		 'rhselt', 1,
-sub
-#line 187 "YappParse.yp"
-{ [ 'SYMB', $_[1] ] }
-	],
-	[#Rule 40
-		 'rhselt', 1,
-sub
-#line 188 "YappParse.yp"
-{ [ 'CODE', $_[1] ] }
-	],
-	[#Rule 41
-		 'prec', 2,
-sub
-#line 192 "YappParse.yp"
-{
-                       	defined($$term{$_[2][0]})
-                    or  do {
-                        _SyntaxError(1,"No precedence for symbol $_[2][0]",
-                                         $_[2][1]);
-                        return undef;
-                    };
-
-                    ++$$precterm{$_[2][0]};
-                    $$term{$_[2][0]}[1];
-				}
-	],
-	[#Rule 42
-		 'epscode', 0,
-sub
-#line 205 "YappParse.yp"
-{ undef }
-	],
-	[#Rule 43
-		 'epscode', 1,
-sub
-#line 206 "YappParse.yp"
-{ $_[1] }
-	],
-	[#Rule 44
-		 'code', 1,
-sub
-#line 209 "YappParse.yp"
-{ $_[1] }
-	],
-	[#Rule 45
-		 'tail', 0, undef
-	],
-	[#Rule 46
-		 'tail', 1,
-sub
-#line 215 "YappParse.yp"
-{ $tail=$_[1] }
-	]
-],
-                                  @_);
-    bless($self,$class);
-}
-
-#line 218 "YappParse.yp"
-
-sub _Error {
-    my($value)=$_[0]->YYCurval;
-
-    my($what)= $token ? "input: '$$value[0]'" : "end of input";
-
-    _SyntaxError(1,"Unexpected $what",$$value[1]);
-}
-
-sub _Lexer {
- 
-    #At EOF
-        pos($$input) >= length($$input)
-    and return('',[ undef, -1 ]);
-
-    #In TAIL section
-        $lexlevel > 1
-    and do {
-        my($pos)=pos($$input);
-
-        $lineno[0]=$lineno[1];
-        $lineno[1]=-1;
-        pos($$input)=length($$input);
-        return('TAILCODE',[ substr($$input,$pos), $lineno[0] ]);
-    };
-
-    #Skip blanks
-            $lexlevel == 0
-        ?   $$input=~m{\G((?:
-                                [\t\ ]+    # Any white space char but \n
-                            |   \#[^\n]*  # Perl like comments
-                            |   /\*.*?\*/ # C like comments
-                            )+)}xsgc
-        :   $$input=~m{\G((?:
-                                \s+       # any white space char
-                            |   \#[^\n]*  # Perl like comments
-                            |   /\*.*?\*/ # C like comments
-                            )+)}xsgc
-    and do {
-        my($blanks)=$1;
-
-        #Maybe At EOF
-            pos($$input) >= length($$input)
-        and return('',[ undef, -1 ]);
-
-        $lineno[1]+= $blanks=~tr/\n//;
-    };
-
-    $lineno[0]=$lineno[1];
-
-        $$input=~/\G([A-Za-z_][A-Za-z0-9_]*)/gc
-    and return('IDENT',[ $1, $lineno[0] ]);
-
-        $$input=~/\G('(?:[^'\\]|\\\\|\\'|\\)+?')/gc
-    and do {
-            $1 eq "'error'"
-        and do {
-            _SyntaxError(0,"Literal 'error' ".
-                           "will be treated as error token",$lineno[0]);
-            return('IDENT',[ 'error', $lineno[0] ]);
-        };
-        return('LITERAL',[ $1, $lineno[0] ]);
-    };
-
-        $$input=~/\G(%%)/gc
-    and do {
-        ++$lexlevel;
-        return($1, [ $1, $lineno[0] ]);
-    };
-
-        $$input=~/\G{/gc
-    and do {
-        my($level,$from,$code);
-
-        $from=pos($$input);
-
-        $level=1;
-        while($$input=~/([{}])/gc) {
-                substr($$input,pos($$input)-1,1) eq '\\' #Quoted
-            and next;
-                $level += ($1 eq '{' ? 1 : -1)
-            or last;
-        }
-            $level
-        and  _SyntaxError(2,"Unmatched { opened line $lineno[0]",-1);
-        $code = substr($$input,$from,pos($$input)-$from-1);
-        $lineno[1]+= $code=~tr/\n//;
-        return('CODE',[ $code, $lineno[0] ]);
-    };
-
-    if($lexlevel == 0) {# In head section
-            $$input=~/\G%(left|right|nonassoc)/gc
-        and return('ASSOC',[ uc($1), $lineno[0] ]);
-            $$input=~/\G%(start)/gc
-        and return('START',[ undef, $lineno[0] ]);
-            $$input=~/\G%(expect)/gc
-        and return('EXPECT',[ undef, $lineno[0] ]);
-            $$input=~/\G%{/gc
-        and do {
-            my($code);
-
-                $$input=~/\G(.*?)%}/sgc
-            or  _SyntaxError(2,"Unmatched %{ opened line $lineno[0]",-1);
-
-            $code=$1;
-            $lineno[1]+= $code=~tr/\n//;
-            return('HEADCODE',[ $code, $lineno[0] ]);
-        };
-            $$input=~/\G%(token)/gc
-        and return('TOKEN',[ undef, $lineno[0] ]);
-            $$input=~/\G%(type)/gc
-        and return('TYPE',[ undef, $lineno[0] ]);
-            $$input=~/\G%(union)/gc
-        and return('UNION',[ undef, $lineno[0] ]);
-            $$input=~/\G([0-9]+)/gc
-        and return('NUMBER',[ $1, $lineno[0] ]);
-
-    }
-    else {# In rule section
-            $$input=~/\G%(prec)/gc
-        and return('PREC',[ undef, $lineno[0] ]);
-    }
-
-    #Always return something
-        $$input=~/\G(.)/sg
-    or  die "Parse::Yapp::Grammar::Parse: Match (.) failed: report as a BUG";
-
-        $1 eq "\n"
-    and ++$lineno[1];
-
-    ( $1 ,[ $1, $lineno[0] ]);
-
-}
-
-sub _SyntaxError {
-    my($level,$message,$lineno)=@_;
-
-    $message= "*".
-              [ 'Warning', 'Error', 'Fatal' ]->[$level].
-              "* $message, at ".
-              ($lineno < 0 ? "eof" : "line $lineno").
-              ".\n";
-
-        $level > 1
-    and die $message;
-
-    warn $message;
-
-        $level > 0
-    and ++$nberr;
-
-        $nberr == 20 
-    and die "*Fatal* Too many errors detected.\n"
-}
-
-sub _AddRules {
-    my($lhs,$lineno)=@{$_[0]};
-    my($rhss)=$_[1];
-
-        ref($$nterm{$lhs})
-    and do {
-        _SyntaxError(1,"Non-terminal $lhs redefined: ".
-                       "Previously declared line $$syms{$lhs}",$lineno);
-        return;
-    };
-
-        ref($$term{$lhs})
-    and do {
-        my($where) = exists($$token{$lhs}) ? $$token{$lhs} : $$syms{$lhs};
-        _SyntaxError(1,"Non-terminal $lhs previously ".
-                       "declared as token line $where",$lineno);
-        return;
-    };
-
-        ref($$nterm{$lhs})      #declared through %type
-    or  do {
-            $$syms{$lhs}=$lineno;   #Say it's declared here
-            delete($$term{$lhs});   #No more a terminal
-    };
-    $$nterm{$lhs}=[];       #It's a non-terminal now
-
-    my($epsrules)=0;        #To issue a warning if more than one epsilon rule
-
-    for my $rhs (@$rhss) {
-        my($tmprule)=[ $lhs, [ ], splice(@$rhs,-2) ]; #Init rule
-
-            @$rhs
-        or  do {
-            ++$$nullable{$lhs};
-            ++$epsrules;
-        };
-
-        for (0..$#$rhs) {
-            my($what,$value)=@{$$rhs[$_]};
-
-                $what eq 'CODE'
-            and do {
-                my($name)='@'.++$labelno."-$_";
-                push(@$rules,[ $name, [], undef, $value ]);
-                push(@{$$tmprule[1]},$name);
-                next;
-            };
-            push(@{$$tmprule[1]},$$value[0]);
-        }
-        push(@$rules,$tmprule);
-        push(@{$$nterm{$lhs}},$#$rules);
-    }
-
-        $epsrules > 1
-    and _SyntaxError(0,"More than one empty rule for symbol $lhs",$lineno);
-}
-
-sub Parse {
-    my($self)=shift;
-
-        @_ > 0
-    or  croak("No input grammar\n");
-
-    my($parsed)={};
-
-    $input=\$_[0];
-
-    $lexlevel=0;
-    @lineno=(1,1);
-    $nberr=0;
-    $prec=0;
-    $labelno=0;
-
-    $head=();
-    $tail="";
-
-    $syms={};
-    $token={};
-    $term={};
-    $nterm={};
-    $rules=[ undef ];   #reserve slot 0 for start rule
-    $precterm={};
-
-    $start="";
-    $nullable={};
-    $expect=0;
-
-    pos($$input)=0;
-
-
-    $self->YYParse(yylex => \&_Lexer, yyerror => \&_Error);
-
-        $nberr
-    and _SyntaxError(2,"Errors detected: No output",-1);
-
-    @$parsed{ 'HEAD', 'TAIL', 'RULES', 'NTERM', 'TERM',
-              'NULL', 'PREC', 'SYMS',  'START', 'EXPECT' }
-    =       (  $head,  $tail,  $rules,  $nterm,  $term,
-               $nullable, $precterm, $syms, $start, $expect);
-
-    undef($input);
-    undef($lexlevel);
-    undef(@lineno);
-    undef($nberr);
-    undef($prec);
-    undef($labelno);
-
-    undef($head);
-    undef($tail);
-
-    undef($syms);
-    undef($token);
-    undef($term);
-    undef($nterm);
-    undef($rules);
-    undef($precterm);
-
-    undef($start);
-    undef($nullable);
-    undef($expect);
-
-    $parsed
-}
-
-
-1;