diff -r 8b87ea768cb8 -r 60053dab7e2a dummy_foundation/lib/Parse/Yapp/Parse.pm --- 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;