$yysccsid = "@(#)yaccpar 1.8 (Berkeley) 01/20/91 (Perl 2.0 12/31/92)";
#define YYBYACC 1
#line 15 "template.y"
;#
;# Literal block from definition section
;#
package Text::PORE::Parser;
use Text::PORE::Node;
use Exporter;
@Text::PORE::Parser::ISA = qw(Exporter);
@EXPORT = qw(yyparse setInput);
require ('Text/PORE/template_lexer.pl');
#line 19 "y.tab.pl"
$CLOSE_BRACKET=257;
$NAME=258;
$VAL=259;
$FREETEXT=260;
$OPEN_BRACKET=261;
$SLASH=262;
$IF_ID=263;
$ELSE_ID=264;
$CONTEXT_ID=265;
$LINK_ID=266;
$LIST_ID=267;
$RENDER_ID=268;
$REF_ID=269;
$TABLE_ID=270;
$EXPR=271;
$YYERRCODE=256;
@yylhs = ( -1,
0, 1, 1, 2, 2, 3, 3, 4, 4, 4,
6, 6, 6, 5, 5, 12, 12, 13, 13, 13,
14, 14, 14, 9, 9, 9, 10, 10, 15, 15,
7, 7, 7, 7, 16, 16, 17, 17, 18, 18,
8, 11,
);
@yylen = ( 2,
1, 0, 2, 1, 1, 1, 2, 1, 1, 1,
4, 4, 3, 3, 4, 4, 5, 4, 5, 4,
1, 1, 1, 1, 1, 1, 0, 2, 2, 1,
3, 5, 4, 6, 4, 4, 4, 5, 4, 4,
1, 1,
);
@yydefred = ( 2,
0, 0, 6, 41, 3, 4, 5, 8, 9, 10,
0, 2, 2, 7, 0, 0, 21, 22, 23, 24,
25, 26, 0, 27, 0, 0, 42, 13, 0, 0,
0, 0, 0, 0, 0, 14, 0, 0, 31, 2,
36, 0, 35, 28, 12, 11, 0, 16, 0, 15,
0, 0, 33, 0, 0, 0, 29, 17, 0, 0,
0, 0, 0, 0, 0, 32, 20, 0, 18, 0,
37, 40, 39, 34, 19, 38,
);
@yydgoto = ( 1,
2, 5, 6, 7, 8, 9, 10, 52, 23, 30,
28, 12, 36, 24, 44, 13, 39, 40,
);
@yysindex = ( 0,
0, -241, 0, 0, 0, 0, 0, 0, 0, 0,
-169, 0, 0, 0, -235, -245, 0, 0, 0, 0,
0, 0, -228, 0, -246, -243, 0, 0, -235, -210,
-235, -210, -206, -231, -192, 0, -231, -207, 0, 0,
0, -221, 0, 0, 0, 0, -235, 0, -219, 0,
-240, -209, 0, -179, -184, -215, 0, 0, -235, -188,
-176, -235, -210, -231, -177, 0, 0, -235, 0, -235,
0, 0, 0, 0, 0, 0,
);
@yyrindex = ( 0,
0, 95, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, -175, 0, 0, 0, 0,
0, 0, -175, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -191, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -175, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
);
@yygindex = ( 0,
-11, 0, 0, 0, 0, 0, 0, -2, 0, -15,
-26, 0, 68, 52, 0, 0, -25, 0,
);
$YYTABLESIZE=103;
@yytable = ( 11,
25, 26, 41, 43, 45, 46, 48, 32, 33, 34,
29, 53, 37, 3, 4, 59, 3, 4, 3, 4,
58, 27, 35, 38, 17, 18, 19, 31, 56, 4,
66, 49, 67, 69, 71, 72, 73, 57, 74, 63,
64, 75, 51, 76, 3, 4, 27, 42, 15, 47,
27, 42, 54, 65, 54, 16, 55, 17, 18, 19,
20, 21, 22, 15, 30, 30, 30, 68, 27, 51,
16, 62, 17, 18, 19, 20, 21, 22, 15, 70,
27, 27, 27, 61, 54, 16, 15, 17, 18, 19,
20, 21, 22, 16, 1, 17, 18, 19, 20, 21,
22, 50, 60,
);
@yycheck = ( 2,
12, 13, 29, 30, 31, 32, 33, 23, 24, 256,
256, 37, 256, 260, 261, 256, 260, 261, 260, 261,
47, 257, 25, 26, 265, 266, 267, 256, 40, 261,
56, 34, 59, 60, 61, 62, 63, 259, 64, 55,
256, 68, 262, 70, 260, 261, 257, 258, 256, 256,
257, 258, 262, 56, 262, 263, 264, 265, 266, 267,
268, 269, 270, 256, 256, 257, 258, 256, 257, 262,
263, 256, 265, 266, 267, 268, 269, 270, 256, 256,
257, 257, 258, 263, 262, 263, 256, 265, 266, 267,
268, 269, 270, 263, 0, 265, 266, 267, 268, 269,
270, 34, 51,
);
$YYFINAL=1;
#ifndef YYDEBUG
#define YYDEBUG 0
#endif
$YYMAXTOKEN=271;
#if YYDEBUG
@yyname = (
"end-of-file",'','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',
'','','','','','','','','','','','','','','','','','','','','','','',"CLOSE_BRACKET","NAME","VAL",
"FREETEXT","OPEN_BRACKET","SLASH","IF_ID","ELSE_ID","CONTEXT_ID","LINK_ID",
"LIST_ID","RENDER_ID","REF_ID","TABLE_ID","EXPR",
);
@yyrule = (
"\$accept : start",
"start : html_file",
"html_file :",
"html_file : html_file html_element",
"html_element : freetext",
"html_element : ind_tag",
"freetext : FREETEXT",
"freetext : freetext FREETEXT",
"ind_tag : container_tag_pair",
"ind_tag : standalone_tag",
"ind_tag : conditional",
"standalone_tag : open_bracket standalone_id pairs close_bracket",
"standalone_tag : open_bracket standalone_id error close_bracket",
"standalone_tag : open_bracket error close_bracket",
"container_tag_pair : start_container_tag html_file end_container_tag",
"container_tag_pair : start_container_tag html_file error end_container_tag",
"start_container_tag : open_bracket container_id pairs close_bracket",
"start_container_tag : open_bracket container_id pairs error close_bracket",
"end_container_tag : open_bracket SLASH container_id close_bracket",
"end_container_tag : open_bracket SLASH container_id error close_bracket",
"end_container_tag : open_bracket SLASH error close_bracket",
"container_id : CONTEXT_ID",
"container_id : LINK_ID",
"container_id : LIST_ID",
"standalone_id : RENDER_ID",
"standalone_id : REF_ID",
"standalone_id : TABLE_ID",
"pairs :",
"pairs : pairs pair",
"pair : NAME VAL",
"pair : NAME",
"conditional : if_tag html_file endif_tag",
"conditional : if_tag html_file else_tag html_file endif_tag",
"conditional : if_tag html_file error endif_tag",
"conditional : if_tag html_file else_tag html_file error endif_tag",
"if_tag : open_bracket IF_ID pairs close_bracket",
"if_tag : open_bracket IF_ID error close_bracket",
"endif_tag : open_bracket SLASH IF_ID close_bracket",
"endif_tag : open_bracket SLASH IF_ID error close_bracket",
"else_tag : open_bracket ELSE_ID pairs close_bracket",
"else_tag : open_bracket ELSE_ID error close_bracket",
"open_bracket : OPEN_BRACKET",
"close_bracket : CLOSE_BRACKET",
);
#endif
sub yyclearin { $yychar = -1; }
sub yyerrok { $yyerrflag = 0; }
$YYSTACKSIZE = $YYSTACKSIZE || $YYMAXDEPTH || 500;
$YYMAXDEPTH = $YYMAXDEPTH || $YYSTACKSIZE || 500;
$yyss[$YYSTACKSIZE] = 0;
$yyvs[$YYSTACKSIZE] = 0;
sub YYERROR { ++$yynerrs; &yy_err_recover; }
sub yy_err_recover
{
if ($yyerrflag < 3)
{
$yyerrflag = 3;
while (1)
{
if (($yyn = $yysindex[$yyss[$yyssp]]) &&
($yyn += $YYERRCODE) >= 0 &&
$yycheck[$yyn] == $YYERRCODE)
{
#if YYDEBUG
print "yydebug: state $yyss[$yyssp], error recovery shifting",
" to state $yytable[$yyn]\n" if $yydebug;
#endif
$yyss[++$yyssp] = $yystate = $yytable[$yyn];
$yyvs[++$yyvsp] = $yylval;
next yyloop;
}
else
{
#if YYDEBUG
print "yydebug: error recovery discarding state ",
$yyss[$yyssp], "\n" if $yydebug;
#endif
return(1) if $yyssp <= 0;
--$yyssp;
--$yyvsp;
}
}
}
else
{
return (1) if $yychar == 0;
#if YYDEBUG
if ($yydebug)
{
$yys = '';
if ($yychar <= $YYMAXTOKEN) { $yys = $yyname[$yychar]; }
if (!$yys) { $yys = 'illegal-symbol'; }
print "yydebug: state $yystate, error recovery discards ",
"token $yychar ($yys)\n";
}
#endif
$yychar = -1;
next yyloop;
}
0;
} # yy_err_recover
sub yyparse
{
#ifdef YYDEBUG
if ($yys = $ENV{'YYDEBUG'})
{
$yydebug = int($1) if $yys =~ /^(\d)/;
}
#endif
$yynerrs = 0;
$yyerrflag = 0;
$yychar = (-1);
$yyssp = 0;
$yyvsp = 0;
$yyss[$yyssp] = $yystate = 0;
yyloop: while(1)
{
yyreduce: {
last yyreduce if ($yyn = $yydefred[$yystate]);
if ($yychar < 0)
{
if (($yychar = &yylex) < 0) { $yychar = 0; }
#if YYDEBUG
if ($yydebug)
{
$yys = '';
if ($yychar <= $#yyname) { $yys = $yyname[$yychar]; }
if (!$yys) { $yys = 'illegal-symbol'; };
print "yydebug: state $yystate, reading $yychar ($yys)\n";
}
#endif
}
if (($yyn = $yysindex[$yystate]) && ($yyn += $yychar) >= 0 &&
$yycheck[$yyn] == $yychar)
{
#if YYDEBUG
print "yydebug: state $yystate, shifting to state ",
$yytable[$yyn], "\n" if $yydebug;
#endif
$yyss[++$yyssp] = $yystate = $yytable[$yyn];
$yyvs[++$yyvsp] = $yylval;
$yychar = (-1);
--$yyerrflag if $yyerrflag > 0;
next yyloop;
}
if (($yyn = $yyrindex[$yystate]) && ($yyn += $yychar) >= 0 &&
$yycheck[$yyn] == $yychar)
{
$yyn = $yytable[$yyn];
last yyreduce;
}
if (! $yyerrflag) {
&yyerror('syntax error');
++$yynerrs;
}
return(1) if &yy_err_recover;
} # yyreduce
#if YYDEBUG
print "yydebug: state $yystate, reducing by rule ",
"$yyn ($yyrule[$yyn])\n" if $yydebug;
#endif
$yym = $yylen[$yyn];
$yyval = $yyvs[$yyvsp+1-$yym];
switch:
{
if ($yyn == 1) {
#line 47 "template.y"
{ $yyval = $yyvs[$yyvsp-0];
return $yyval;
last switch;
} }
if ($yyn == 2) {
#line 54 "template.y"
{ $yyval = new Text::PORE::Node::Queue(getlineno());
last switch;
} }
if ($yyn == 3) {
#line 56 "template.y"
{ $yyval = $yyvs[$yyvsp-1];
$yyval->enqueue($yyvs[$yyvsp-0]);
last switch;
} }
if ($yyn == 4) {
#line 64 "template.y"
{ $yyval = $yyvs[$yyvsp-0];
last switch;
} }
if ($yyn == 5) {
#line 65 "template.y"
{ $yyval = $yyvs[$yyvsp-0];
last switch;
} }
if ($yyn == 6) {
#line 71 "template.y"
{ $yyval = new Text::PORE::Node::Freetext(getlineno(), $yyvs[$yyvsp-0]);
last switch;
} }
if ($yyn == 7) {
#line 72 "template.y"
{ $yyval = $yyvs[$yyvsp-1];
$yyval->appendText($yyvs[$yyvsp-0]);
last switch;
} }
if ($yyn == 8) {
#line 80 "template.y"
{ $yyval = $yyvs[$yyvsp-0];
last switch;
} }
if ($yyn == 9) {
#line 81 "template.y"
{ $yyval = $yyvs[$yyvsp-0];
last switch;
} }
if ($yyn == 10) {
#line 82 "template.y"
{ $yyval = $yyvs[$yyvsp-0];
last switch;
} }
if ($yyn == 11) {
#line 87 "template.y"
{ my($func_name) = lc($yyvs[$yyvsp-2]);
my($attrs) = $yyvs[$yyvsp-1];
$yyval = new Text::PORE::Node::Standalone(getlineno(), $func_name, $attrs);
last switch;
} }
if ($yyn == 12) {
#line 95 "template.y"
{ my($func_name) = lc($yyvs[$yyvsp-2]);
yyerror("Garbled open tag $func_name");
$yyval = new Text::PORE::Node::Standalone(getlineno(), $func_name, undef);
last switch;
} }
if ($yyn == 13) {
#line 103 "template.y"
{
yyerror("Unknown standalone tag");
last switch;
} }
if ($yyn == 14) {
#line 109 "template.y"
{ $yyval = $yyvs[$yyvsp-2];
$yyval->setBody($yyvs[$yyvsp-1]);
my($end) = $yyvs[$yyvsp-0];
if ($end ne $yyval->{'tag_type'}) {
yyerror("$yyval->{'tag_type'} tag starting at line $yyval->{'lineno'} not closed properly");
}
last switch;
} }
if ($yyn == 15) {
#line 120 "template.y"
{ yyerror("$1->{'tag_type'} tag starting at line $yyval->{'lineno'} not closed properly");
last switch;
} }
if ($yyn == 16) {
#line 124 "template.y"
{ my ($func_name) = lc($yyvs[$yyvsp-2]);
my ($attrs) = $yyvs[$yyvsp-1];
$yyval = new Text::PORE::Node::Container(getlineno(), $func_name, $attrs, undef);
last switch;
} }
if ($yyn == 17) {
#line 132 "template.y"
{ my ($func_name) = lc($yyvs[$yyvsp-3]);
yyerror("Garbled open tag $func_name");
$yyval = new Text::PORE::Node::Container(getlineno(), $func_name, undef, undef);
last switch;
} }
if ($yyn == 18) {
#line 140 "template.y"
{ # FIXME? - just returning id now... is that a problem?
$yyval = lc($yyvs[$yyvsp-1]);
last switch;
} }
if ($yyn == 19) {
#line 146 "template.y"
{ $yyval = lc($yyvs[$yyvsp-3]);
yyerror("Garbled open tag $func_name");
last switch;
} }
if ($yyn == 20) {
#line 152 "template.y"
{
yyerror("Unknown closing tag");
last switch;
} }
if ($yyn == 21) {
#line 158 "template.y"
{ $yyval = $yyvs[$yyvsp-0];
last switch;
} }
if ($yyn == 22) {
#line 159 "template.y"
{ $yyval = $yyvs[$yyvsp-0];
last switch;
} }
if ($yyn == 23) {
#line 160 "template.y"
{ $yyval = $yyvs[$yyvsp-0];
last switch;
} }
if ($yyn == 24) {
#line 163 "template.y"
{ $yyval = $yyvs[$yyvsp-0];
last switch;
} }
if ($yyn == 25) {
#line 164 "template.y"
{ $yyval = $yyvs[$yyvsp-0];
last switch;
} }
if ($yyn == 26) {
#line 165 "template.y"
{ $yyval = $yyvs[$yyvsp-0];
last switch;
} }
if ($yyn == 27) {
#line 169 "template.y"
{ $yyval = {};
last switch;
} }
if ($yyn == 28) {
#line 170 "template.y"
{ $yyval = $yyvs[$yyvsp-1];
$yyval->{$yyvs[$yyvsp-0]->[0]} = $yyvs[$yyvsp-0]->[1];
last switch;
} }
if ($yyn == 29) {
#line 176 "template.y"
{ my $attr = lc($yyvs[$yyvsp-1]);
$yyval = [$attr, $yyvs[$yyvsp-0]];
last switch;
} }
if ($yyn == 30) {
#line 178 "template.y"
{ my $attr = lc($yyvs[$yyvsp-0]);
$yyval = [$attr, '1'];
last switch;
} }
if ($yyn == 31) {
#line 186 "template.y"
{
my ($yyval) = $yyvs[$yyvsp-2];
my ($if_body) = $yyvs[$yyvsp-1];
$yyval->{'if_body'} = $if_body;
last switch;
} }
if ($yyn == 32) {
#line 193 "template.y"
{
my ($yyval) = $yyvs[$yyvsp-4];
my ($if_body) = $yyvs[$yyvsp-3];
my ($else_body) = $yyvs[$yyvsp-1];
$yyval->{'if_body'} = $if_body;
$yyval->{'else_body'} = $else_body;
last switch;
} }
if ($yyn == 33) {
#line 203 "template.y"
{ my ($yyval) = $yyvs[$yyvsp-3];
my ($if_body) = $yyvs[$yyvsp-2];
yyerror("If tag starting at $yyval->{'lineno'} not closed properly");
$yyval->{'if_body'} = $if_body;
last switch;
} }
if ($yyn == 34) {
#line 210 "template.y"
{ my ($yyval) = $yyvs[$yyvsp-5];
my ($if_body) = $yyvs[$yyvsp-4];
my ($else_body) = $yyvs[$yyvsp-2];
yyerror("If tag starting at $yyval->{'lineno'} not closed properly");
$yyval->{'if_body'} = $if_body;
$yyval->{'else_body'} = $else_body;
last switch;
} }
if ($yyn == 35) {
#line 222 "template.y"
{
my($pairs) = $yyvs[$yyvsp-1];
$yyval = new Text::PORE::Node::If(getlineno(), $pairs, undef, undef);
last switch;
} }
if ($yyn == 36) {
#line 228 "template.y"
{
yyerror("Garbled open if tag");
$yyval = new Text::PORE::Node::If(getlineno(), undef, undef, undef);
last switch;
} }
if ($yyn == 38) {
#line 239 "template.y"
{
yyerror("Garbled close if tag");
last switch;
} }
if ($yyn == 40) {
#line 248 "template.y"
{
yyerror("Garbled open else tag");
last switch;
} }
if ($yyn == 41) {
#line 256 "template.y"
{ $INTAG = 1;
last switch;
} }
if ($yyn == 42) {
#line 262 "template.y"
{ $INTAG = 0;
last switch;
} }
#line 575 "y.tab.pl"
} # switch
$yyssp -= $yym;
$yystate = $yyss[$yyssp];
$yyvsp -= $yym;
$yym = $yylhs[$yyn];
if ($yystate == 0 && $yym == 0)
{
#if YYDEBUG
print "yydebug: after reduction, shifting from state 0 ",
"to state $YYFINAL\n" if $yydebug;
#endif
$yystate = $YYFINAL;
$yyss[++$yyssp] = $YYFINAL;
$yyvs[++$yyvsp] = $yyval;
if ($yychar < 0)
{
if (($yychar = &yylex) < 0) { $yychar = 0; }
#if YYDEBUG
if ($yydebug)
{
$yys = '';
if ($yychar <= $#yyname) { $yys = $yyname[$yychar]; }
if (!$yys) { $yys = 'illegal-symbol'; }
print "yydebug: state $YYFINAL, reading $yychar ($yys)\n";
}
#endif
}
return(0) if $yychar == 0;
next yyloop;
}
if (($yyn = $yygindex[$yym]) && ($yyn += $yystate) >= 0 &&
$yyn <= $#yycheck && $yycheck[$yyn] == $yystate)
{
$yystate = $yytable[$yyn];
} else {
$yystate = $yydgoto[$yym];
}
#if YYDEBUG
print "yydebug: after reduction, shifting from state ",
"$yyss[$yyssp] to state $yystate\n" if $yydebug;
#endif
$yyss[++$yyssp] = $yystate;
$yyvs[++$yyvsp] = $yyval;
} # yyloop
} # yyparse
#line 269 "template.y"
# Main Line
# does nothing... main line should be in another program that calls yyparse()
#return value so perl doesn't have a cow
1;
#line 629 "y.tab.pl"