summaryrefslogtreecommitdiff
path: root/y.tab.c
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2022-03-04 12:32:20 -0500
committerJakob Kaivo <jkk@ung.org>2022-03-04 12:32:20 -0500
commit55f277e77428d7423ae906a8e1f1324d35b07a7d (patch)
tree5c1c04703dff89c46b349025d2d3ec88ea9b3819 /y.tab.c
import Miranda 2.066 from upstream
Diffstat (limited to 'y.tab.c')
-rw-r--r--y.tab.c3665
1 files changed, 3665 insertions, 0 deletions
diff --git a/y.tab.c b/y.tab.c
new file mode 100644
index 0000000..63c82e7
--- /dev/null
+++ b/y.tab.c
@@ -0,0 +1,3665 @@
+/* original parser id follows */
+/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
+/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
+
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define YYPATCH 20140715
+
+#define YYEMPTY (-1)
+#define yyclearin (yychar = YYEMPTY)
+#define yyerrok (yyerrflag = 0)
+#define YYRECOVERING() (yyerrflag != 0)
+#define YYENOMEM (-2)
+#define YYEOF 0
+#define YYPREFIX "yy"
+
+#define YYPURE 0
+
+#line 34 "rules.y"
+/* the following definition has to be kept in line with the token declarations
+ above */
+char *yysterm[]= {
+ 0,
+ "VALUE",
+ "EVAL",
+ "where",
+ "if",
+ "&>",
+ "<-",
+ "::",
+ "::=",
+ "TYPEVAR",
+ "NAME",
+ "CONSTRUCTOR-NAME",
+ "CONST",
+ "$$",
+ "OFFSIDE",
+ "OFFSIDE =",
+ "abstype",
+ "with",
+ "//",
+ "==",
+ "%free",
+ "%include",
+ "%export",
+ "type",
+ "otherwise",
+ "show",
+ "PATHNAME",
+ "%bnf",
+ "%lex",
+ "%%",
+ "error",
+ "end",
+ "empty",
+ "readvals",
+ "NAME",
+ "`char-class`",
+ "`char-class`",
+ "%%begin",
+ "->",
+ "++",
+ "--",
+ "..",
+ "\\/",
+ ">=",
+ "~=",
+ "<=",
+ "mod",
+ "div",
+ "$NAME",
+ "$CONSTRUCTOR"};
+
+#line 94 "rules.y"
+#include "data.h"
+#include "big.h"
+#include "lex.h"
+extern word nill,k_i,Void;
+extern word message,standardout;
+extern word big_one;
+#define isltmess_t(t) (islist_t(t)&&tl[t]==message)
+#define isstring_t(t) (islist_t(t)&&tl[t]==char_t)
+extern word SYNERR,errs,echoing,gvars;
+extern word listdiff_fn,indent_fn,outdent_fn;
+word lastname=0;
+word suppressids=NIL;
+word idsused=NIL;
+word tvarscope=0;
+word includees=NIL,embargoes=NIL,exportfiles=NIL,freeids=NIL,exports=NIL;
+word lexdefs=NIL,lexstates=NIL,inlex=0,inexplist=0;
+word inbnf=0,col_fn=0,fnts=NIL,eprodnts=NIL,nonterminals=NIL,sreds=0;
+word ihlist=0,ntspecmap=NIL,ntmap=NIL,lasth=0;
+word obrct=0;
+
+void evaluate(x)
+word x;
+{ word t;
+ t=type_of(x);
+ if(t==wrong_t)return;
+ lastexp=x;
+ x=codegen(x);
+ if(polyshowerror)return;
+ if(process())
+ /* setup new process for each evaluation */
+ { (void)signal(SIGINT,(sighandler)dieclean);
+ /* if interrupted will flush output etc before going */
+ compiling=0;
+ resetgcstats();
+ output(isltmess_t(t)?x:
+ cons(ap(standardout,isstring_t(t)?x
+ :ap(mkshow(0,0,t),x)),NIL));
+ (void)signal(SIGINT,SIG_IGN);/* otherwise could do outstats() twice */
+ putchar('\n');
+ outstats();
+ exit(0); }
+}
+
+void obey(x) /* like evaluate but no fork, no stats, no extra '\n' */
+word x;
+{ word t=type_of(x);
+ x=codegen(x);
+ if(polyshowerror)return;
+ compiling=0;
+ output(isltmess_t(t)?x:
+ cons(ap(standardout,isstring_t(t)?x:ap(mkshow(0,0,t),x)),NIL));
+}
+
+int isstring(x)
+word x;
+{ return(x==NILS||tag[x]==CONS&&is_char(hd[x]));
+}
+
+word compose(x) /* used in compiling 'cases' */
+word x;
+{ word y=hd[x];
+ if(hd[y]==OTHERWISE)y=tl[y]; /* OTHERWISE was just a marker - lose it */
+ else y=tag[y]==LABEL?label(hd[y],ap(tl[y],FAIL)):
+ ap(y,FAIL); /* if all guards false result is FAIL */
+ x = tl[x];
+ if(x!=NIL)
+ { while(tl[x]!=NIL)y=label(hd[hd[x]],ap(tl[hd[x]],y)), x=tl[x];
+ y=ap(hd[x],y);
+ /* first alternative has no label - label of enclosing rhs applies */
+ }
+ return(y);
+}
+
+int eprod(word);
+
+word starts(x) /* x is grammar rhs - returns list of nonterminals in start set */
+word x;
+{ L: switch(tag[x])
+ { case ID: return(cons(x,NIL));
+ case LABEL:
+ case LET:
+ case LETREC: x=tl[x]; goto L;
+ case AP: switch(hd[x])
+ { case G_SYMB:
+ case G_SUCHTHAT:
+ case G_RULE: return(NIL);
+ case G_OPT:
+ case G_FBSTAR:
+ case G_STAR: x=tl[x]; goto L;
+ default: if(hd[x]==outdent_fn)
+ { x=tl[x]; goto L; }
+ if(tag[hd[x]]==AP)
+ if(hd[hd[x]]==G_ERROR)
+ { x=tl[hd[x]]; goto L; }
+ if(hd[hd[x]]==G_SEQ)
+ { if(eprod(tl[hd[x]]))
+ return(UNION(starts(tl[hd[x]]),starts(tl[x])));
+ x=tl[hd[x]]; goto L; } else
+ if(hd[hd[x]]==G_ALT)
+ return(UNION(starts(tl[hd[x]]),starts(tl[x])));
+ else
+ if(hd[hd[x]]==indent_fn)
+ { x=tl[x]; goto L; }
+ }
+ default: return(NIL);
+ }
+}
+
+int eprod(x) /* x is grammar rhs - does x admit empty production? */
+word x;
+{ L: switch(tag[x])
+ { case ID: return(member(eprodnts,x));
+ case LABEL:
+ case LET:
+ case LETREC: x=tl[x]; goto L;
+ case AP: switch(hd[x])
+ { case G_SUCHTHAT:
+ case G_ANY:
+ case G_SYMB: return(0);
+ case G_RULE: return(1);
+ case G_OPT:
+ case G_FBSTAR:
+ case G_STAR: return(1);
+ default: if(hd[x]==outdent_fn)
+ { x=tl[x]; goto L; }
+ if(tag[hd[x]]==AP)
+ if(hd[hd[x]]==G_ERROR)
+ { x=tl[hd[x]]; goto L; }
+ if(hd[hd[x]]==G_SEQ)
+ return(eprod(tl[hd[x]])&&eprod(tl[x])); else
+ if(hd[hd[x]]==G_ALT)
+ return(eprod(tl[hd[x]])||eprod(tl[x]));
+ else
+ if(hd[hd[x]]==indent_fn)
+ { x=tl[x]; goto L; }
+ }
+ default: return(x==G_STATE||x==G_UNIT);
+ /* G_END is special case, unclear whether it counts as an e-prodn.
+ decide no for now, sort this out later */
+ }
+}
+
+word add_prod(d,ps,hr)
+word d,ps,hr;
+{ word p,n=dlhs(d);
+ for(p=ps;p!=NIL;p=tl[p])
+ if(dlhs(hd[p])==n)
+ if(dtyp(d)==undef_t&&dval(hd[p])==UNDEF)
+ { dval(hd[p])=dval(d); return(ps); } else
+ if(dtyp(d)!=undef_t&&dtyp(hd[p])==undef_t)
+ { dtyp(hd[p])=dtyp(d); return(ps); }
+ else
+ errs=hr,
+ printf(
+ "%ssyntax error: conflicting %s of nonterminal \"%s\"\n",
+ echoing?"\n":"",
+ dtyp(d)==undef_t?"definitions":"specifications",
+ get_id(n)),
+ acterror();
+ return(cons(d,ps));
+}
+/* clumsy - this algorithm is quadratic in number of prodns - fix later */
+
+word getloc(nt,prods) /* get here info for nonterminal */
+word nt,prods;
+{ while(prods!=NIL&&dlhs(hd[prods])!=nt)prods=tl[prods];
+ if(prods!=NIL)return(hd[dval(hd[prods])]);
+ return(0); /* should not happen, but just in case */
+}
+
+void findnt(nt) /* set errs to here info of undefined nonterminal */
+word nt;
+{ word p=ntmap;
+ while(p!=NIL&&hd[hd[p]]!=nt)p=tl[p];
+ if(p!=NIL)
+ { errs=tl[hd[p]]; return; }
+ p=ntspecmap;
+ while(p!=NIL&&hd[hd[p]]!=nt)p=tl[p];
+ if(p!=NIL)errs=tl[hd[p]];
+}
+
+#define isap2(fn,x) (tag[x]==AP&&tag[hd[x]]==AP&&hd[hd[x]]==(fn))
+#define firstsymb(term) tl[hd[term]]
+
+void binom(rhs,x)
+/* performs the binomial optimisation on rhs of nonterminal x
+ x: x alpha1| ... | x alphaN | rest ||need not be in this order
+ ==>
+ x: rest (alpha1|...|alphaN)*
+*/
+word rhs,x;
+{ word *p= &tl[rhs]; /* rhs is of form label(hereinf, stuff) */
+ word *lastp=0,*holdrhs,suffix,alpha=NIL;
+ if(tag[*p]==LETREC)p = &tl[*p]; /* ignore trailing `where defs' */
+ if(isap2(G_ERROR,*p))p = &tl[hd[*p]];
+ holdrhs=p;
+ while(isap2(G_ALT,*p))
+ if(firstsymb(tl[hd[*p]])==x)
+ alpha=cons(tl[tl[hd[*p]]],alpha),
+ *p=tl[*p],p = &tl[*p];
+ else lastp=p,p = &tl[tl[*p]];
+ /* note each (G_ALT a b) except the outermost is labelled */
+ if(lastp&&firstsymb(*p)==x)
+ alpha=cons(tl[*p],alpha),
+ *lastp=tl[hd[*lastp]];
+ if(alpha==NIL)return;
+ suffix=hd[alpha],alpha=tl[alpha];
+ while(alpha!=NIL)
+ suffix=ap2(G_ALT,hd[alpha],suffix),
+ alpha=tl[alpha];
+ *holdrhs=ap2(G_SEQ,*holdrhs,ap(G_FBSTAR,suffix));
+}
+/* should put some labels on the alpha's - fix later */
+
+word getcol_fn()
+{ extern char *dicp,*dicq;
+ if(!col_fn)
+ strcpy(dicp,"bnftokenindentation"),
+ dicq=dicp+20,
+ col_fn=name();
+ return(col_fn);
+}
+
+void startbnf()
+{ ntspecmap=ntmap=nonterminals=NIL;
+ if(fnts==0)col_fn=0; /* reinitialise, a precaution */
+}
+
+word ih_abstr(x) /* abstract inherited attributes from grammar rule */
+word x;
+{ word ih=ihlist;
+ while(ih!=NIL) /* relies on fact that ihlist is reversed */
+ x=lambda(hd[ih],x),ih=tl[ih];
+ return(x);
+}
+
+int can_elide(x) /* is x of the form $1 applied to ih attributes in order? */
+word x;
+{ word ih;
+ if(ihlist)
+ for(ih=ihlist;ih!=NIL&&tag[x]==AP;ih=tl[ih],x=hd[x])
+ if(hd[ih]!=tl[x])return(0);
+ return(x==mkgvar(1));
+}
+
+int e_re(x) /* does regular expression x match empty string ? */
+word x;
+{ L: if(tag[x]==AP)
+ { if(hd[x]==LEX_STAR||hd[x]==LEX_OPT)return(1);
+ if(hd[x]==LEX_STRING)return(tl[x]==NIL);
+ if(tag[hd[x]]!=AP)return(0);
+ if(hd[hd[x]]==LEX_OR)
+ { if(e_re(tl[hd[x]]))return(1);
+ x=tl[x]; goto L; } else
+ if(hd[hd[x]]==LEX_SEQ)
+ { if(!e_re(tl[hd[x]]))return(0);
+ x=tl[x]; goto L; } else
+ if(hd[hd[x]]==LEX_RCONTEXT)
+ { x=tl[hd[x]]; goto L; }
+ }
+ return(0);
+}
+
+#line 340 "y.tab.c"
+
+#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
+/* Default: YYSTYPE is the semantic value type. */
+typedef int YYSTYPE;
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+/* compatibility with bison */
+#ifdef YYPARSE_PARAM
+/* compatibility with FreeBSD */
+# ifdef YYPARSE_PARAM_TYPE
+# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
+# else
+# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
+# endif
+#else
+# define YYPARSE_DECL() yyparse(void)
+#endif
+
+/* Parameters sent to lex. */
+#ifdef YYLEX_PARAM
+# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
+# define YYLEX yylex(YYLEX_PARAM)
+#else
+# define YYLEX_DECL() yylex(void)
+# define YYLEX yylex()
+#endif
+
+/* Parameters sent to yyerror. */
+#ifndef YYERROR_DECL
+#define YYERROR_DECL() yyerror(const char *s)
+#endif
+#ifndef YYERROR_CALL
+#define YYERROR_CALL(msg) yyerror(msg)
+#endif
+
+extern int YYPARSE_DECL();
+
+#define VALUE 257
+#define EVAL 258
+#define WHERE 259
+#define IF 260
+#define TO 261
+#define LEFTARROW 262
+#define COLONCOLON 263
+#define COLON2EQ 264
+#define TYPEVAR 265
+#define NAME 266
+#define CNAME 267
+#define CONST 268
+#define DOLLAR2 269
+#define OFFSIDE 270
+#define ELSEQ 271
+#define ABSTYPE 272
+#define WITH 273
+#define DIAG 274
+#define EQEQ 275
+#define FREE 276
+#define INCLUDE 277
+#define EXPORT 278
+#define TYPE 279
+#define OTHERWISE 280
+#define SHOWSYM 281
+#define PATHNAME 282
+#define BNF 283
+#define LEX 284
+#define ENDIR 285
+#define ERRORSY 286
+#define ENDSY 287
+#define EMPTYSY 288
+#define READVALSY 289
+#define LEXDEF 290
+#define CHARCLASS 291
+#define ANTICHARCLASS 292
+#define LBEGIN 293
+#define ARROW 294
+#define PLUSPLUS 295
+#define MINUSMINUS 296
+#define DOTDOT 297
+#define VEL 298
+#define GE 299
+#define NE 300
+#define LE 301
+#define REM 302
+#define DIV 303
+#define INFIXNAME 304
+#define INFIXCNAME 305
+#define CMBASE 306
+#define YYERRCODE 256
+typedef short YYINT;
+static const YYINT yylhs[] = { -1,
+ 0, 0, 0, 0, 0, 0, 1, 1, 2, 2,
+ 4, 4, 4, 6, 6, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 8, 8, 8, 8, 8, 8, 9, 9, 10,
+ 10, 10, 10, 11, 11, 11, 15, 15, 15, 13,
+ 13, 17, 18, 19, 19, 14, 20, 20, 5, 5,
+ 5, 5, 5, 5, 5, 5, 23, 23, 23, 23,
+ 23, 23, 23, 23, 23, 23, 23, 23, 23, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 25, 26, 26, 26, 27, 27, 27, 27, 27,
+ 28, 28, 21, 21, 24, 24, 24, 30, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+ 35, 37, 31, 31, 33, 33, 39, 39, 36, 36,
+ 36, 38, 38, 34, 34, 40, 40, 40, 41, 41,
+ 42, 42, 42, 42, 43, 43, 43, 43, 43, 43,
+ 44, 44, 32, 32, 32, 32, 45, 45, 46, 46,
+ 3, 3, 47, 47, 47, 47, 47, 47, 47, 47,
+ 63, 47, 57, 60, 60, 65, 65, 66, 66, 61,
+ 61, 67, 67, 68, 68, 68, 16, 54, 49, 12,
+ 12, 69, 69, 69, 69, 70, 70, 48, 48, 71,
+ 71, 71, 71, 71, 72, 72, 73, 73, 73, 73,
+ 73, 73, 73, 73, 55, 55, 74, 74, 75, 75,
+ 76, 76, 77, 77, 77, 77, 77, 79, 79, 79,
+ 80, 80, 58, 58, 58, 58, 58, 58, 58, 58,
+ 59, 59, 50, 52, 52, 84, 82, 83, 83, 51,
+ 51, 53, 53, 53, 53, 81, 81, 78, 78, 85,
+ 85, 56, 86, 86, 87, 87, 89, 89, 89, 88,
+ 88, 90, 90, 62, 62, 64, 64, 64, 64, 91,
+ 92, 94, 92, 93, 95, 95, 95, 97, 97, 98,
+ 100, 98, 96, 101, 96, 99, 99, 103, 99, 102,
+ 102, 104, 104, 104, 104, 105, 105, 105, 105, 106,
+ 106, 106, 106, 107, 108, 106, 106,
+};
+static const YYINT yylen[] = { 2,
+ 1, 1, 2, 2, 3, 3, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
+ 3, 1, 1, 4, 3, 4, 2, 5, 4, 0,
+ 1, 0, 1, 1, 1, 0, 1, 3, 2, 3,
+ 3, 3, 3, 3, 1, 1, 2, 3, 2, 3,
+ 2, 3, 2, 3, 2, 3, 2, 1, 1, 2,
+ 2, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 1, 2, 2, 3, 2, 3, 2, 3, 2, 3,
+ 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
+ 2, 1, 3, 3, 1, 3, 2, 3, 2, 1,
+ 2, 1, 3, 3, 3, 2, 3, 0, 4, 1,
+ 1, 1, 1, 1, 1, 2, 3, 5, 7, 5,
+ 4, 7, 6, 5, 5, 3, 3, 4, 2, 5,
+ 0, 0, 11, 1, 0, 3, 1, 2, 0, 2,
+ 2, 6, 0, 3, 1, 3, 2, 1, 2, 1,
+ 2, 2, 2, 1, 3, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 3, 3, 3, 1, 3, 6,
+ 1, 2, 7, 1, 7, 8, 8, 5, 5, 4,
+ 0, 7, 1, 0, 3, 2, 1, 5, 7, 0,
+ 1, 2, 1, 3, 3, 2, 0, 0, 0, 1,
+ 2, 1, 3, 3, 7, 1, 3, 1, 3, 3,
+ 2, 3, 3, 1, 1, 2, 1, 1, 1, 2,
+ 3, 2, 3, 5, 1, 3, 3, 1, 1, 1,
+ 2, 2, 1, 1, 3, 3, 5, 0, 1, 3,
+ 1, 3, 2, 3, 2, 2, 1, 2, 1, 1,
+ 2, 1, 6, 2, 1, 0, 7, 3, 1, 4,
+ 2, 2, 2, 3, 3, 1, 1, 1, 1, 0,
+ 2, 1, 1, 3, 4, 1, 3, 2, 2, 1,
+ 2, 2, 1, 0, 2, 1, 1, 2, 2, 6,
+ 0, 0, 4, 2, 1, 1, 3, 1, 4, 1,
+ 0, 7, 1, 0, 7, 1, 2, 0, 2, 1,
+ 2, 1, 3, 2, 2, 1, 2, 2, 2, 1,
+ 1, 1, 1, 0, 0, 5, 1,
+};
+static const YYINT yydefred[] = { 0,
+ 1, 0, 0, 289, 0, 0, 239, 217, 217, 0,
+ 0, 288, 0, 0, 0, 2, 0, 0, 217, 191,
+ 219, 194, 0, 0, 0, 0, 235, 0, 130, 131,
+ 132, 135, 38, 134, 133, 17, 18, 19, 20, 21,
+ 32, 33, 39, 35, 36, 37, 16, 0, 23, 24,
+ 26, 25, 27, 28, 29, 30, 31, 0, 0, 0,
+ 0, 3, 9, 0, 13, 15, 22, 34, 0, 0,
+ 91, 0, 122, 0, 0, 0, 283, 282, 0, 0,
+ 0, 0, 231, 237, 238, 240, 226, 0, 242, 0,
+ 192, 201, 203, 0, 52, 0, 217, 218, 281, 0,
+ 0, 0, 0, 236, 0, 0, 0, 0, 0, 0,
+ 59, 0, 136, 0, 0, 0, 0, 149, 0, 0,
+ 0, 0, 0, 0, 0, 78, 79, 112, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 121, 163, 6,
+ 5, 291, 0, 0, 0, 219, 0, 0, 52, 0,
+ 207, 0, 0, 0, 0, 0, 213, 0, 241, 0,
+ 243, 304, 0, 0, 219, 0, 217, 229, 230, 232,
+ 233, 284, 285, 0, 0, 0, 137, 0, 0, 0,
+ 0, 0, 146, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 147, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 90, 0, 113,
+ 114, 0, 0, 0, 272, 0, 0, 218, 205, 206,
+ 0, 0, 216, 54, 55, 200, 53, 212, 227, 0,
+ 0, 267, 269, 270, 0, 0, 217, 280, 0, 0,
+ 183, 0, 0, 184, 188, 141, 0, 0, 0, 57,
+ 0, 0, 0, 0, 0, 0, 148, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 129, 0, 217, 52, 0, 199, 271, 0, 0, 214,
+ 215, 244, 305, 0, 268, 263, 265, 266, 0, 198,
+ 0, 0, 287, 0, 0, 0, 245, 0, 0, 250,
+ 254, 0, 0, 0, 0, 0, 0, 145, 140, 0,
+ 0, 138, 144, 0, 150, 157, 0, 0, 0, 0,
+ 0, 275, 52, 0, 0, 0, 0, 306, 307, 264,
+ 0, 0, 0, 253, 251, 0, 0, 0, 0, 0,
+ 252, 273, 0, 0, 0, 219, 0, 0, 293, 217,
+ 0, 0, 0, 0, 187, 186, 185, 143, 0, 0,
+ 58, 158, 156, 181, 182, 176, 177, 178, 179, 0,
+ 52, 0, 0, 0, 0, 180, 0, 0, 195, 274,
+ 217, 208, 0, 0, 0, 202, 308, 309, 0, 0,
+ 193, 0, 0, 0, 256, 0, 255, 0, 247, 0,
+ 0, 299, 0, 301, 0, 0, 0, 298, 0, 0,
+ 142, 139, 0, 151, 0, 0, 169, 172, 171, 173,
+ 0, 278, 276, 0, 52, 304, 0, 219, 222, 0,
+ 220, 51, 45, 0, 0, 217, 0, 0, 0, 297,
+ 197, 294, 0, 302, 196, 0, 175, 0, 164, 166,
+ 162, 0, 209, 217, 0, 221, 52, 0, 44, 46,
+ 0, 0, 257, 295, 190, 0, 0, 0, 0, 313,
+ 0, 224, 223, 0, 0, 0, 0, 0, 0, 314,
+ 315, 0, 318, 0, 0, 310, 217, 0, 0, 152,
+ 277, 52, 340, 342, 341, 347, 343, 0, 0, 330,
+ 0, 0, 0, 0, 52, 0, 0, 49, 0, 160,
+ 161, 0, 0, 0, 331, 335, 338, 337, 339, 0,
+ 0, 317, 0, 0, 48, 153, 217, 333, 345, 319,
+ 217, 225, 0, 0, 0, 0, 346, 0, 325, 322,
+};
+static const YYINT yydgoto[] = { 15,
+ 16, 351, 17, 63, 64, 65, 66, 67, 68, 352,
+ 353, 447, 454, 413, 480, 364, 19, 246, 247, 271,
+ 69, 70, 125, 126, 127, 71, 128, 72, 73, 74,
+ 232, 263, 293, 391, 468, 510, 532, 233, 337, 392,
+ 393, 394, 395, 396, 264, 265, 20, 448, 99, 449,
+ 23, 341, 450, 177, 365, 366, 94, 256, 236, 82,
+ 165, 251, 172, 347, 160, 161, 166, 167, 451, 88,
+ 25, 26, 27, 317, 318, 319, 320, 321, 358, 458,
+ 322, 342, 343, 472, 77, 368, 369, 370, 371, 428,
+ 349, 404, 489, 405, 500, 501, 502, 503, 504, 525,
+ 512, 519, 505, 520, 521, 522, 523, 554,
+};
+static const YYINT yysindex[] = { 2787,
+ 0, 2043, 2043, 0, 34, 34, 0, 0, 0, 52,
+ 4, 0, 1019, 1012, 0, 0, 2644, -48, 0, 0,
+ 0, 0, 264, 0, 171, -17, 0, -211, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 886, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 500, 886, 1579,
+ 1770, 0, 0, 21, 0, 0, 0, 0, 659, 2165,
+ 0, 132, 0, 71, 203, 34, 0, 0, 538, 249,
+ 630, 364, 0, 0, 0, 0, 0, 38, 0, 126,
+ 0, 0, 0, 119, 0, 538, 0, 0, 0, 704,
+ 243, 704, 704, 0, 34, 34, 886, 886, 18, 500,
+ 0, 426, 0, -22, 886, 500, 886, 0, 443, 485,
+ 238, 500, 659, 2246, 491, 0, 0, 0, 180, 500,
+ 500, 500, 500, 500, 886, 886, 886, 886, 886, 886,
+ 886, 886, 886, 886, 886, 716, 716, 0, 0, 0,
+ 0, 0, 34, 34, 264, 0, 538, 34, 0, 590,
+ 0, 540, 550, 340, -27, 364, 0, 704, 0, 704,
+ 0, 0, 461, 584, 0, 395, 0, 0, 0, 0,
+ 0, 0, 0, 2043, 1852, 2043, 0, 2043, 18, 0,
+ 426, 2043, 0, 500, 500, 500, 500, 500, 82, 886,
+ 886, 886, 886, 886, 886, 886, 886, 886, 886, 886,
+ 0, 716, 716, 21, 21, 21, -1, 621, 3, 18,
+ 18, 143, 143, 143, 143, 143, 426, 0, 3, 0,
+ 0, -44, 374, 423, 0, 795, 639, 0, 0, 0,
+ 437, 438, 0, 0, 0, 0, 0, 0, 0, 152,
+ 324, 0, 0, 0, 460, 517, 0, 0, 898, -158,
+ 0, 61, 80, 0, 0, 0, 611, -41, 139, 0,
+ 184, 21, 21, 21, -1, 621, 0, 3, 18, 18,
+ 143, 143, 143, 143, 143, 426, 0, 3, 0, 0,
+ 0, 473, 0, 0, 486, 0, 0, 2043, 490, 0,
+ 0, 0, 0, 522, 0, 0, 0, 0, 535, 0,
+ 2043, 825, 0, 1008, 1008, 502, 0, 531, 825, 0,
+ 0, -27, 1043, 1008, 2043, 500, 2043, 0, 0, 1892,
+ 2043, 0, 0, 2043, 0, 0, -29, 446, 766, 798,
+ 344, 0, 0, -27, 1008, 798, -197, 0, 0, 0,
+ 14, -27, 587, 0, 0, -25, 10, 808, 1008, 1008,
+ 0, 0, 1043, 583, 502, 0, 821, 736, 0, 0,
+ 825, 502, 817, 61, 0, 0, 0, 0, 778, 113,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 446,
+ 0, 759, 851, 446, 191, 0, 446, 486, 0, 0,
+ 0, 0, 502, 841, 860, 0, 0, 0, 1203, -83,
+ 0, 1203, 641, 1008, 0, 1008, 0, 502, 0, 10,
+ 876, 0, -27, 0, 1043, 619, 892, 0, -27, 2043,
+ 0, 0, 894, 0, 446, 446, 0, 0, 0, 0,
+ -27, 0, 0, -27, 0, 0, 1203, 0, 0, 0,
+ 0, 0, 0, 2043, 1203, 0, 502, 115, 889, 0,
+ 0, 0, 1008, 0, 0, 642, 0, 643, 0, 0,
+ 0, 679, 0, 0, 142, 0, 0, 274, 0, 0,
+ 2043, 1008, 0, 0, 0, 2043, 1008, 644, -27, 0,
+ 893, 0, 0, 917, 502, 669, 48, 0, 505, 0,
+ 0, 842, 0, 0, 505, 0, 0, 573, 235, 0,
+ 0, 0, 0, 0, 0, 0, 0, 359, 505, 0,
+ 840, 850, 877, 683, 0, 505, 2043, 0, 2043, 0,
+ 0, -27, 914, 856, 0, 0, 0, 0, 0, 2043,
+ 702, 0, 925, -27, 0, 0, 0, 0, 0, 0,
+ 0, 0, 2043, 903, 2043, -27, 0, -27, 0, 0,
+};
+static const YYINT yyrindex[] = { 6,
+ 0, 715, 715, 0, 689, 1415, 0, 0, 0, 289,
+ 0, 0, 0, 0, 0, 0, 15, 0, 0, 0,
+ 0, 0, 737, 332, 568, 1159, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1302, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1392, 1438, 715,
+ 715, 0, 0, 67, 0, 0, 0, 0, 1191, 1231,
+ 0, 91, 0, 0, 1002, 329, 0, 0, 0, 0,
+ 0, 141, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 715, 715, 843, 715,
+ 0, 219, 0, 0, -10, 31, 74, 0, 0, 959,
+ 965, 101, 72, 201, 0, 0, 0, 0, 1476, 715,
+ 715, 715, 715, 715, 715, 715, 715, 715, 715, 715,
+ 715, 715, 715, 715, 715, 715, 715, 0, 0, 0,
+ 0, 0, 325, 387, 738, 0, 0, -33, 0, 0,
+ 0, 0, 0, 0, 0, 159, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 715, 715, 715, 0, 715, 2401, 172,
+ 2356, 715, 0, 40, 55, 60, 122, 123, 0, 715,
+ 130, 160, 161, 166, 170, 176, 195, 245, 269, 270,
+ 0, 273, 294, 1466, 1491, 1530, 1339, 1282, 1089, 963,
+ 1036, 381, 577, 648, 717, 770, 523, 0, 1146, 0,
+ 0, 623, 431, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 520, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 503, 698, 818, 100, 305, 0, 2715, 2647, 2707,
+ 2441, 2512, 2522, 2562, 2602, 2431, 1969, 2722, 2240, 2316,
+ 0, 0, 0, 0, 0, 0, 0, 715, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 715, -3, 0, 0, 985, 288, 0, 281, 564, 0,
+ 0, 0, 763, 0, 715, 715, 715, 0, 0, 715,
+ 715, 0, 0, 715, 0, 0, 0, 0, 0, 771,
+ 0, 0, 0, 0, 0, -16, 0, 0, 0, 0,
+ 478, 0, 145, 0, 0, 0, 994, 0, 0, 0,
+ 0, 0, -14, 0, -2, 0, 168, 484, 0, 0,
+ 487, 504, 609, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 140, -24, 371, 1133, 0, 0, 0, 0, 0,
+ 0, 0, 504, 0, 0, 0, 0, 0, 0, 1934,
+ 0, 0, 0, 0, 0, 0, 0, -15, 0, -20,
+ 0, 0, 0, 0, 763, 0, 1153, 0, 0, 715,
+ 0, 0, 0, 0, 0, 417, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 530, 0, 0, 527,
+ 0, 0, 0, 715, 574, 0, 138, 0, 996, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 715, 0, 0, 0, 0, 715, 0, 407, 0, 0,
+ 0, 0, 0, 465, 954, 575, 0, 165, 448, 0,
+ 0, 612, 0, 805, 947, 0, 0, 1934, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 947, 1097, 0,
+ 1583, 1896, 0, 640, 0, 1288, 715, 0, 715, 0,
+ 0, 0, 0, 1735, 0, 0, 0, 0, 0, 715,
+ 407, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 715, 0, 715, 0, 0, 0, 0, 0,
+};
+static const YYINT yygindex[] = { 0,
+ 0, 2, 0, 978, 2259, 0, 981, 904, 0, 198,
+ 0, 631, 541, 0, 0, 1, -12, -249, 0, 720,
+ 993, 2932, 0, 0, 0, 9, 0, 997, 76, 0,
+ 0, 858, 0, -350, 0, 0, 0, 0, 0, 0,
+ -267, 0, 0, 0, 247, 0, 1038, 1201, -21, 510,
+ 999, 0, 649, 838, 2569, 0, 0, 0, 0, 0,
+ 0, 636, 0, 0, 0, 924, 0, 920, -394, 918,
+ 551, 0, 1066, 733, 0, 0, 1285, 8, 0, 684,
+ 0, -261, 703, 0, 49, 0, -297, 645, 0, 0,
+ 760, 0, 0, 0, 0, 585, 0, 570, 0, 0,
+ 0, 610, 0, -449, 598, 0, 0, 0,
+};
+#define YYTABLESIZE 3142
+static const YYINT yytable[] = { 95,
+ 18, 304, 331, 62, 75, 7, 310, 28, 79, 80,
+ 97, 98, 76, 76, 8, 292, 168, 18, 414, 93,
+ 259, 186, 14, 312, 28, 246, 258, 52, 246, 253,
+ 14, 245, 383, 14, 168, 144, 134, 253, 300, 433,
+ 253, 311, 348, 246, 138, 136, 441, 137, 143, 139,
+ 144, 332, 476, 416, 78, 253, 300, 410, 134, 138,
+ 476, 114, 119, 143, 139, 421, 10, 415, 346, 535,
+ 187, 11, 362, 13, 11, 12, 535, 246, 131, 400,
+ 69, 168, 174, 76, 469, 407, 28, 406, 28, 253,
+ 115, 399, 105, 106, 402, 71, 142, 176, 134, 168,
+ 73, 188, 411, 28, 326, 323, 245, 10, 246, 65,
+ 10, 142, 182, 183, 12, 65, 324, 12, 131, 134,
+ 253, 300, 277, 115, 152, 10, 437, 462, 115, 65,
+ 169, 115, 115, 115, 115, 115, 115, 115, 327, 131,
+ 74, 15, 234, 63, 15, 237, 238, 148, 115, 115,
+ 115, 115, 115, 258, 230, 231, 334, 63, 482, 10,
+ 76, 76, 75, 77, 28, 76, 171, 28, 470, 170,
+ 95, 61, 328, 461, 81, 144, 452, 260, 261, 465,
+ 165, 261, 490, 115, 115, 261, 267, 268, 143, 261,
+ 10, 471, 302, 270, 473, 168, 453, 327, 165, 210,
+ 97, 99, 78, 43, 148, 432, 101, 483, 250, 59,
+ 105, 250, 67, 101, 115, 59, 103, 211, 81, 61,
+ 289, 290, 60, 323, 335, 324, 250, 334, 100, 59,
+ 261, 333, 439, 438, 92, 107, 142, 382, 66, 506,
+ 291, 290, 244, 28, 66, 168, 279, 511, 84, 85,
+ 7, 184, 217, 440, 246, 330, 81, 311, 66, 81,
+ 81, 81, 81, 81, 81, 81, 253, 300, 359, 168,
+ 60, 83, 409, 128, 185, 198, 81, 81, 81, 81,
+ 81, 339, 546, 52, 300, 109, 102, 103, 217, 246,
+ 253, 250, 52, 338, 552, 195, 133, 217, 4, 344,
+ 253, 253, 300, 359, 140, 141, 559, 96, 560, 111,
+ 126, 81, 81, 117, 128, 130, 132, 244, 133, 140,
+ 141, 248, 325, 128, 248, 10, 373, 10, 376, 10,
+ 401, 379, 270, 204, 119, 381, 10, 10, 128, 248,
+ 10, 359, 81, 128, 423, 76, 286, 204, 64, 115,
+ 429, 115, 115, 115, 149, 130, 132, 128, 133, 10,
+ 115, 115, 64, 10, 115, 115, 65, 65, 290, 65,
+ 426, 157, 290, 248, 128, 219, 130, 132, 434, 133,
+ 84, 444, 245, 115, 128, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 63, 63, 173, 29, 30, 31,
+ 32, 443, 245, 516, 248, 128, 128, 303, 164, 165,
+ 210, 170, 34, 128, 43, 56, 28, 170, 84, 28,
+ 35, 84, 84, 84, 84, 84, 477, 84, 211, 170,
+ 290, 466, 474, 165, 323, 146, 147, 250, 84, 84,
+ 84, 84, 84, 128, 128, 29, 30, 31, 32, 128,
+ 478, 328, 517, 128, 28, 479, 481, 167, 144, 128,
+ 34, 250, 28, 150, 491, 151, 59, 59, 35, 59,
+ 154, 250, 250, 84, 488, 167, 154, 81, 128, 81,
+ 81, 81, 494, 212, 213, 390, 192, 496, 81, 81,
+ 154, 389, 81, 81, 170, 66, 66, 328, 66, 533,
+ 328, 530, 531, 254, 84, 255, 326, 527, 326, 22,
+ 179, 81, 543, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 89, 47, 541, 193, 22, 296, 128, 328,
+ 545, 211, 194, 196, 108, 197, 42, 492, 344, 61,
+ 167, 549, 292, 68, 107, 296, 60, 553, 493, 516,
+ 248, 555, 128, 128, 204, 204, 128, 286, 204, 308,
+ 89, 309, 219, 89, 89, 89, 89, 89, 89, 89,
+ 219, 326, 375, 377, 248, 245, 85, 128, 10, 12,
+ 89, 89, 89, 89, 89, 248, 241, 290, 41, 303,
+ 60, 290, 290, 244, 219, 52, 242, 290, 517, 64,
+ 64, 290, 64, 290, 249, 243, 52, 249, 228, 340,
+ 296, 228, 10, 244, 85, 89, 89, 85, 85, 85,
+ 85, 85, 249, 85, 513, 110, 514, 518, 228, 162,
+ 163, 12, 40, 159, 85, 85, 85, 85, 85, 84,
+ 170, 84, 84, 84, 257, 515, 89, 87, 24, 290,
+ 84, 84, 180, 181, 84, 84, 249, 259, 134, 290,
+ 228, 290, 155, 294, 170, 24, 235, 189, 155, 85,
+ 316, 12, 328, 84, 328, 84, 84, 84, 84, 84,
+ 84, 84, 84, 84, 217, 87, 167, 249, 87, 87,
+ 87, 87, 87, 328, 87, 295, 154, 154, 154, 298,
+ 85, 189, 300, 329, 301, 87, 87, 87, 87, 87,
+ 167, 384, 385, 386, 239, 154, 86, 326, 46, 43,
+ 41, 154, 154, 47, 544, 305, 252, 156, 237, 159,
+ 217, 237, 290, 217, 47, 47, 387, 388, 70, 336,
+ 87, 61, 253, 14, 175, 297, 237, 42, 11, 237,
+ 556, 340, 558, 292, 86, 61, 296, 86, 86, 86,
+ 86, 86, 217, 86, 345, 29, 30, 31, 32, 88,
+ 513, 87, 514, 219, 86, 86, 86, 86, 86, 237,
+ 34, 89, 306, 89, 89, 89, 244, 346, 35, 219,
+ 217, 515, 89, 89, 13, 359, 89, 89, 307, 41,
+ 350, 217, 4, 153, 154, 156, 60, 88, 159, 86,
+ 88, 88, 88, 88, 88, 89, 88, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 397, 88, 88, 88,
+ 88, 88, 452, 249, 360, 85, 12, 85, 85, 85,
+ 86, 398, 80, 40, 159, 412, 85, 85, 417, 422,
+ 85, 85, 528, 424, 4, 158, 154, 249, 72, 425,
+ 430, 62, 88, 320, 315, 321, 12, 249, 249, 85,
+ 431, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 80, 316, 435, 80, 156, 80, 80, 80, 155, 155,
+ 155, 538, 537, 88, 4, 158, 154, 436, 445, 446,
+ 80, 80, 80, 80, 80, 217, 87, 217, 87, 87,
+ 87, 456, 539, 155, 155, 314, 460, 87, 87, 296,
+ 108, 87, 87, 463, 464, 61, 217, 217, 320, 498,
+ 107, 499, 482, 33, 467, 80, 486, 315, 485, 12,
+ 87, 487, 87, 87, 87, 87, 87, 87, 87, 87,
+ 87, 290, 290, 507, 237, 237, 237, 42, 44, 45,
+ 508, 509, 82, 290, 536, 524, 80, 540, 498, 84,
+ 85, 7, 135, 145, 547, 86, 60, 86, 86, 86,
+ 548, 29, 30, 31, 32, 551, 86, 86, 314, 499,
+ 86, 86, 237, 237, 262, 557, 34, 262, 128, 52,
+ 82, 4, 9, 82, 35, 82, 82, 82, 10, 86,
+ 52, 86, 86, 86, 86, 86, 86, 86, 86, 86,
+ 82, 82, 82, 82, 82, 258, 200, 210, 88, 217,
+ 88, 88, 88, 279, 259, 83, 260, 344, 120, 88,
+ 88, 122, 455, 88, 88, 269, 262, 315, 529, 12,
+ 380, 14, 89, 123, 91, 82, 11, 129, 14, 4,
+ 153, 154, 88, 11, 88, 88, 88, 88, 88, 88,
+ 88, 88, 88, 83, 320, 299, 83, 155, 83, 83,
+ 83, 475, 363, 240, 12, 248, 82, 250, 124, 4,
+ 354, 104, 419, 83, 83, 83, 83, 83, 314, 459,
+ 442, 80, 13, 80, 80, 80, 408, 484, 542, 13,
+ 550, 86, 80, 80, 526, 534, 80, 80, 0, 0,
+ 0, 0, 0, 0, 0, 0, 124, 0, 83, 124,
+ 0, 0, 124, 314, 0, 80, 0, 80, 80, 80,
+ 80, 80, 80, 80, 0, 123, 124, 124, 124, 124,
+ 124, 29, 30, 31, 32, 327, 0, 327, 0, 83,
+ 0, 0, 4, 312, 0, 0, 34, 0, 0, 0,
+ 0, 0, 174, 174, 35, 0, 313, 0, 174, 174,
+ 0, 124, 0, 123, 0, 0, 123, 344, 0, 123,
+ 65, 174, 303, 303, 303, 0, 0, 0, 0, 234,
+ 21, 234, 234, 123, 123, 123, 123, 123, 0, 0,
+ 0, 303, 124, 87, 90, 0, 234, 21, 0, 234,
+ 327, 82, 0, 82, 82, 82, 0, 0, 65, 0,
+ 66, 65, 82, 82, 65, 0, 82, 82, 123, 0,
+ 0, 0, 14, 303, 12, 0, 0, 11, 65, 65,
+ 0, 234, 0, 0, 0, 82, 174, 82, 82, 82,
+ 82, 82, 82, 82, 0, 0, 0, 0, 66, 123,
+ 0, 66, 4, 312, 66, 0, 303, 84, 85, 7,
+ 0, 64, 0, 65, 84, 85, 7, 0, 66, 66,
+ 0, 0, 0, 13, 83, 0, 83, 83, 83, 0,
+ 178, 14, 0, 0, 0, 83, 83, 4, 312, 83,
+ 83, 0, 0, 0, 65, 0, 0, 0, 0, 0,
+ 0, 0, 64, 66, 0, 64, 0, 0, 83, 0,
+ 83, 83, 83, 83, 83, 83, 83, 0, 63, 64,
+ 64, 0, 14, 0, 0, 14, 329, 124, 329, 124,
+ 124, 124, 0, 0, 66, 0, 0, 0, 124, 124,
+ 14, 0, 124, 124, 0, 0, 327, 0, 249, 0,
+ 87, 0, 0, 0, 64, 0, 0, 0, 344, 63,
+ 0, 124, 63, 124, 124, 124, 124, 124, 124, 124,
+ 0, 11, 0, 0, 14, 0, 63, 63, 174, 174,
+ 174, 0, 174, 0, 123, 64, 123, 123, 123, 0,
+ 0, 329, 0, 0, 0, 123, 123, 303, 303, 123,
+ 123, 0, 303, 174, 174, 14, 174, 0, 0, 0,
+ 0, 63, 11, 0, 0, 11, 0, 12, 123, 0,
+ 123, 123, 123, 123, 123, 123, 123, 0, 0, 65,
+ 11, 65, 65, 65, 238, 0, 0, 238, 290, 0,
+ 65, 65, 63, 0, 65, 60, 0, 4, 5, 6,
+ 7, 0, 238, 0, 0, 238, 0, 0, 12, 0,
+ 0, 12, 0, 65, 11, 65, 65, 65, 65, 66,
+ 61, 66, 66, 66, 0, 0, 12, 0, 0, 0,
+ 66, 66, 0, 0, 66, 238, 60, 0, 115, 60,
+ 0, 0, 0, 115, 0, 11, 120, 115, 115, 115,
+ 115, 115, 115, 66, 60, 66, 66, 66, 66, 62,
+ 12, 61, 0, 115, 61, 115, 115, 115, 0, 0,
+ 64, 0, 64, 64, 64, 0, 0, 0, 0, 61,
+ 0, 64, 64, 0, 0, 64, 0, 329, 60, 0,
+ 14, 12, 14, 0, 14, 0, 0, 0, 0, 115,
+ 62, 14, 14, 62, 64, 14, 64, 64, 64, 64,
+ 0, 0, 0, 61, 0, 128, 0, 0, 62, 60,
+ 0, 0, 0, 0, 14, 0, 355, 63, 14, 63,
+ 63, 63, 0, 361, 0, 0, 0, 367, 63, 63,
+ 0, 55, 63, 59, 61, 0, 40, 0, 61, 0,
+ 49, 47, 62, 48, 54, 50, 0, 332, 0, 0,
+ 0, 63, 0, 63, 63, 63, 37, 0, 46, 43,
+ 41, 332, 0, 332, 0, 0, 0, 367, 0, 0,
+ 11, 0, 11, 62, 11, 427, 0, 0, 0, 0,
+ 0, 11, 11, 0, 0, 11, 0, 0, 0, 60,
+ 0, 113, 53, 332, 0, 128, 332, 290, 290, 0,
+ 238, 238, 238, 0, 11, 0, 0, 0, 11, 290,
+ 0, 0, 0, 0, 0, 0, 12, 0, 12, 0,
+ 12, 0, 0, 0, 58, 332, 332, 12, 12, 367,
+ 0, 12, 0, 0, 0, 0, 0, 0, 238, 238,
+ 0, 128, 0, 0, 60, 0, 60, 60, 60, 0,
+ 12, 0, 0, 0, 12, 60, 60, 0, 0, 60,
+ 0, 0, 0, 0, 0, 0, 0, 367, 0, 61,
+ 115, 61, 61, 61, 0, 0, 0, 0, 60, 128,
+ 61, 61, 60, 0, 61, 0, 0, 0, 0, 0,
+ 115, 115, 0, 115, 115, 115, 115, 115, 115, 334,
+ 0, 0, 0, 61, 0, 0, 0, 61, 62, 0,
+ 62, 62, 62, 334, 0, 334, 0, 0, 0, 62,
+ 62, 0, 55, 62, 117, 0, 0, 40, 0, 61,
+ 118, 49, 47, 0, 115, 54, 50, 0, 0, 0,
+ 0, 0, 62, 0, 0, 334, 62, 37, 334, 46,
+ 43, 41, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 29, 30, 31, 32, 332, 0,
+ 332, 0, 332, 33, 0, 0, 0, 334, 334, 34,
+ 60, 0, 0, 53, 0, 0, 0, 35, 0, 332,
+ 0, 0, 0, 36, 38, 0, 39, 42, 44, 45,
+ 51, 52, 56, 57, 55, 0, 59, 0, 0, 40,
+ 0, 61, 0, 49, 47, 116, 48, 54, 50, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 37,
+ 0, 46, 43, 41, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 55, 0, 59, 0, 0, 40,
+ 0, 61, 0, 49, 47, 0, 48, 54, 50, 0,
+ 336, 0, 60, 0, 266, 53, 0, 0, 0, 37,
+ 0, 46, 43, 41, 336, 0, 336, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 50, 0, 50, 0,
+ 0, 50, 0, 50, 0, 50, 50, 58, 50, 50,
+ 50, 0, 60, 0, 378, 53, 336, 0, 0, 336,
+ 0, 50, 0, 50, 50, 50, 0, 0, 0, 0,
+ 334, 90, 334, 0, 334, 0, 90, 0, 0, 110,
+ 90, 90, 90, 90, 90, 90, 0, 58, 336, 336,
+ 336, 334, 0, 0, 50, 0, 90, 50, 90, 90,
+ 90, 0, 0, 0, 0, 29, 30, 31, 32, 0,
+ 0, 0, 0, 0, 33, 0, 0, 0, 0, 0,
+ 34, 0, 0, 0, 0, 0, 0, 0, 35, 50,
+ 0, 0, 90, 0, 36, 38, 0, 39, 42, 44,
+ 45, 51, 52, 56, 57, 55, 0, 59, 0, 0,
+ 40, 0, 61, 0, 49, 47, 0, 48, 54, 50,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 37, 0, 46, 43, 41, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 29, 30, 31,
+ 32, 0, 0, 0, 0, 0, 33, 0, 0, 0,
+ 0, 0, 34, 60, 0, 0, 53, 0, 0, 0,
+ 35, 0, 0, 0, 0, 0, 36, 38, 0, 39,
+ 42, 44, 45, 51, 52, 56, 57, 29, 30, 31,
+ 32, 336, 0, 336, 0, 336, 33, 0, 58, 0,
+ 0, 0, 34, 0, 0, 0, 0, 0, 0, 0,
+ 35, 0, 336, 0, 0, 0, 36, 38, 0, 39,
+ 42, 44, 45, 51, 52, 56, 57, 144, 0, 50,
+ 50, 50, 50, 0, 0, 0, 138, 136, 50, 137,
+ 143, 139, 0, 0, 50, 0, 0, 50, 0, 0,
+ 0, 0, 50, 0, 46, 43, 41, 0, 50, 50,
+ 0, 50, 50, 50, 50, 50, 50, 50, 50, 0,
+ 0, 0, 0, 90, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 142, 0,
+ 0, 0, 0, 90, 90, 0, 90, 90, 90, 90,
+ 90, 90, 113, 0, 0, 0, 0, 113, 209, 0,
+ 116, 113, 113, 113, 113, 113, 113, 203, 201, 0,
+ 202, 208, 204, 0, 0, 0, 0, 113, 0, 113,
+ 113, 113, 0, 0, 0, 46, 43, 41, 29, 30,
+ 31, 32, 0, 0, 0, 0, 111, 33, 0, 121,
+ 0, 0, 0, 34, 0, 0, 0, 0, 0, 0,
+ 0, 35, 0, 113, 0, 0, 0, 36, 38, 207,
+ 39, 42, 44, 45, 51, 52, 56, 57, 114, 0,
+ 0, 0, 0, 114, 0, 0, 118, 114, 114, 114,
+ 114, 114, 114, 0, 0, 0, 0, 0, 111, 0,
+ 0, 0, 0, 114, 190, 114, 114, 114, 0, 0,
+ 199, 0, 0, 0, 0, 0, 0, 0, 214, 215,
+ 216, 217, 218, 81, 0, 0, 93, 81, 81, 81,
+ 81, 81, 81, 0, 0, 0, 0, 0, 0, 114,
+ 0, 0, 0, 81, 0, 81, 81, 81, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 80, 33,
+ 0, 92, 262, 80, 80, 80, 262, 0, 0, 81,
+ 0, 0, 272, 273, 274, 275, 276, 0, 80, 0,
+ 80, 80, 80, 42, 44, 45, 140, 141, 89, 0,
+ 0, 108, 89, 89, 89, 89, 89, 89, 84, 0,
+ 0, 98, 84, 84, 84, 84, 0, 84, 89, 0,
+ 89, 89, 89, 0, 0, 0, 0, 0, 84, 0,
+ 84, 84, 84, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 113, 0, 0, 0, 0, 0,
+ 33, 0, 0, 0, 89, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 113, 113, 0, 113, 113, 113,
+ 113, 113, 113, 0, 42, 44, 45, 205, 206, 85,
+ 0, 0, 100, 85, 85, 85, 85, 0, 85, 87,
+ 0, 0, 104, 87, 87, 87, 87, 0, 87, 85,
+ 0, 85, 85, 85, 0, 0, 0, 0, 0, 87,
+ 0, 87, 87, 87, 374, 262, 0, 0, 0, 0,
+ 114, 0, 0, 0, 0, 0, 0, 0, 0, 86,
+ 0, 0, 102, 86, 86, 86, 86, 0, 86, 0,
+ 114, 114, 0, 114, 114, 114, 114, 114, 114, 86,
+ 0, 86, 86, 86, 0, 0, 0, 0, 0, 0,
+ 81, 0, 0, 0, 0, 0, 0, 0, 0, 88,
+ 0, 0, 106, 88, 88, 88, 88, 0, 88, 0,
+ 81, 81, 0, 81, 81, 81, 81, 81, 81, 88,
+ 0, 88, 88, 88, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 80, 0, 0, 0, 0,
+ 0, 0, 0, 14, 82, 12, 0, 94, 11, 82,
+ 82, 82, 0, 0, 0, 80, 80, 0, 80, 80,
+ 80, 80, 0, 0, 82, 89, 82, 82, 82, 0,
+ 0, 0, 0, 0, 0, 84, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 89, 89, 0, 89, 89,
+ 89, 89, 89, 89, 13, 84, 84, 0, 84, 84,
+ 84, 84, 84, 84, 83, 0, 0, 96, 0, 83,
+ 83, 83, 124, 0, 0, 127, 0, 0, 124, 123,
+ 0, 0, 125, 0, 83, 123, 83, 83, 83, 0,
+ 0, 0, 124, 0, 124, 124, 124, 0, 0, 123,
+ 0, 123, 123, 123, 0, 0, 85, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 87, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 85, 85, 0, 85,
+ 85, 85, 85, 85, 85, 0, 87, 87, 0, 87,
+ 87, 87, 87, 87, 87, 0, 14, 316, 12, 0,
+ 0, 11, 0, 0, 0, 0, 86, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 86, 86, 0, 86,
+ 86, 86, 86, 86, 86, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 88, 13, 0, 0,
+ 0, 0, 356, 357, 0, 0, 0, 0, 0, 0,
+ 0, 0, 372, 0, 0, 0, 88, 88, 0, 88,
+ 88, 88, 88, 88, 88, 0, 0, 0, 4, 5,
+ 6, 7, 0, 403, 0, 8, 0, 0, 0, 9,
+ 10, 82, 0, 0, 0, 0, 0, 418, 0, 0,
+ 0, 420, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 82, 82, 0, 82, 82, 82, 82, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 109,
+ 0, 83, 457, 0, 457, 0, 0, 0, 0, 124,
+ 112, 0, 124, 0, 0, 0, 123, 0, 0, 0,
+ 0, 83, 83, 0, 83, 83, 83, 83, 0, 124,
+ 124, 0, 124, 124, 124, 124, 123, 123, 0, 123,
+ 123, 123, 123, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 109, 112,
+ 0, 0, 1, 2, 3, 0, 189, 0, 191, 0,
+ 495, 4, 5, 6, 7, 497, 0, 0, 8, 0,
+ 0, 0, 9, 10, 0, 0, 219, 220, 221, 222,
+ 223, 224, 225, 226, 227, 228, 229, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 278, 279, 280, 281, 282, 283, 284, 285, 286,
+ 287, 288,
+};
+static const YYINT yycheck[] = { 21,
+ 0, 251, 44, 2, 3, 0, 256, 0, 8, 9,
+ 23, 24, 5, 6, 0, 60, 41, 17, 44, 19,
+ 41, 44, 40, 40, 17, 41, 41, 61, 44, 33,
+ 41, 59, 62, 44, 59, 33, 38, 41, 41, 390,
+ 44, 58, 304, 59, 42, 43, 397, 45, 46, 47,
+ 33, 93, 447, 44, 6, 59, 59, 44, 38, 42,
+ 455, 60, 61, 46, 47, 363, 0, 93, 266, 519,
+ 93, 41, 322, 91, 44, 42, 526, 93, 58, 341,
+ 41, 44, 95, 76, 435, 347, 79, 285, 81, 93,
+ 0, 341, 304, 305, 344, 41, 94, 97, 38, 124,
+ 41, 124, 352, 96, 44, 264, 59, 41, 124, 38,
+ 44, 94, 105, 106, 41, 44, 275, 44, 58, 38,
+ 124, 124, 41, 33, 76, 59, 394, 425, 38, 58,
+ 93, 41, 42, 43, 44, 45, 46, 47, 59, 58,
+ 41, 41, 155, 44, 44, 158, 159, 72, 58, 59,
+ 60, 61, 62, 175, 146, 147, 44, 58, 44, 93,
+ 153, 154, 41, 41, 157, 158, 41, 160, 436, 44,
+ 41, 40, 93, 423, 123, 33, 260, 177, 41, 429,
+ 41, 44, 41, 93, 94, 184, 185, 186, 46, 188,
+ 124, 441, 41, 192, 444, 44, 280, 59, 59, 59,
+ 41, 41, 154, 59, 129, 93, 41, 93, 41, 38,
+ 41, 44, 41, 43, 124, 44, 41, 59, 0, 40,
+ 212, 213, 91, 59, 41, 61, 59, 44, 58, 58,
+ 93, 93, 42, 43, 283, 41, 94, 267, 38, 489,
+ 285, 275, 270, 236, 44, 270, 263, 497, 266, 267,
+ 268, 274, 267, 63, 270, 297, 38, 257, 58, 41,
+ 42, 43, 44, 45, 46, 47, 270, 270, 294, 294,
+ 91, 268, 259, 284, 297, 38, 58, 59, 60, 61,
+ 62, 294, 532, 278, 305, 41, 304, 305, 283, 305,
+ 294, 124, 278, 293, 544, 58, 298, 283, 265, 298,
+ 304, 305, 305, 294, 302, 303, 556, 44, 558, 41,
+ 41, 93, 94, 41, 284, 295, 296, 270, 298, 302,
+ 303, 41, 262, 284, 44, 259, 325, 261, 327, 263,
+ 343, 330, 331, 45, 41, 334, 270, 271, 284, 59,
+ 274, 294, 124, 284, 366, 41, 59, 59, 44, 259,
+ 372, 261, 262, 263, 284, 295, 296, 284, 298, 293,
+ 270, 271, 58, 297, 274, 275, 295, 296, 44, 298,
+ 370, 123, 44, 93, 284, 44, 295, 296, 391, 298,
+ 0, 403, 59, 293, 284, 295, 296, 297, 298, 299,
+ 300, 301, 302, 303, 295, 296, 278, 266, 267, 268,
+ 269, 401, 59, 45, 124, 284, 284, 266, 45, 270,
+ 270, 41, 281, 284, 270, 271, 409, 47, 38, 412,
+ 289, 41, 42, 43, 44, 45, 448, 47, 270, 59,
+ 44, 430, 445, 294, 270, 304, 305, 270, 58, 59,
+ 60, 61, 62, 284, 284, 266, 267, 268, 269, 284,
+ 450, 45, 94, 284, 447, 454, 456, 41, 33, 284,
+ 281, 294, 455, 261, 477, 263, 295, 296, 289, 298,
+ 40, 304, 305, 93, 474, 59, 46, 259, 284, 261,
+ 262, 263, 481, 304, 305, 40, 44, 486, 270, 271,
+ 60, 46, 274, 275, 124, 295, 296, 91, 298, 512,
+ 94, 267, 268, 43, 124, 45, 59, 507, 61, 0,
+ 268, 293, 525, 295, 296, 297, 298, 299, 300, 301,
+ 302, 303, 0, 59, 524, 41, 17, 41, 284, 123,
+ 529, 41, 295, 296, 35, 298, 59, 264, 91, 40,
+ 124, 540, 59, 41, 45, 59, 44, 547, 275, 45,
+ 270, 551, 284, 284, 266, 267, 284, 270, 270, 43,
+ 38, 45, 59, 41, 42, 43, 44, 45, 46, 47,
+ 44, 124, 326, 327, 294, 59, 0, 284, 59, 42,
+ 58, 59, 60, 61, 62, 305, 47, 263, 59, 266,
+ 91, 263, 264, 270, 263, 264, 47, 273, 94, 295,
+ 296, 273, 298, 275, 41, 266, 275, 44, 41, 266,
+ 124, 44, 93, 270, 38, 93, 94, 41, 42, 43,
+ 44, 45, 59, 47, 266, 126, 268, 123, 61, 266,
+ 267, 42, 59, 59, 58, 59, 60, 61, 62, 259,
+ 270, 261, 262, 263, 61, 287, 124, 0, 0, 263,
+ 270, 271, 102, 103, 274, 275, 93, 263, 38, 273,
+ 93, 275, 40, 290, 294, 17, 157, 59, 46, 93,
+ 59, 42, 266, 293, 268, 295, 296, 297, 298, 299,
+ 300, 301, 302, 303, 45, 38, 270, 124, 41, 42,
+ 43, 44, 45, 287, 47, 273, 266, 267, 268, 61,
+ 124, 93, 266, 93, 267, 58, 59, 60, 61, 62,
+ 294, 266, 267, 268, 125, 285, 0, 270, 60, 61,
+ 62, 291, 292, 259, 527, 266, 266, 79, 40, 81,
+ 91, 43, 44, 94, 270, 271, 291, 292, 41, 267,
+ 93, 44, 282, 40, 96, 236, 58, 270, 45, 61,
+ 553, 266, 555, 270, 38, 40, 270, 41, 42, 43,
+ 44, 45, 123, 47, 275, 266, 267, 268, 269, 0,
+ 266, 124, 268, 270, 58, 59, 60, 61, 62, 91,
+ 281, 259, 266, 261, 262, 263, 270, 266, 289, 263,
+ 264, 287, 270, 271, 91, 294, 274, 275, 282, 270,
+ 266, 275, 265, 266, 267, 157, 91, 38, 160, 93,
+ 41, 42, 43, 44, 45, 293, 47, 295, 296, 297,
+ 298, 299, 300, 301, 302, 303, 61, 58, 59, 60,
+ 61, 62, 260, 270, 304, 259, 42, 261, 262, 263,
+ 124, 44, 0, 270, 270, 259, 270, 271, 41, 267,
+ 274, 275, 280, 33, 265, 266, 267, 294, 41, 124,
+ 44, 44, 93, 59, 40, 61, 42, 304, 305, 293,
+ 93, 295, 296, 297, 298, 299, 300, 301, 302, 303,
+ 38, 270, 124, 41, 236, 43, 44, 45, 266, 267,
+ 268, 42, 43, 124, 265, 266, 267, 47, 58, 40,
+ 58, 59, 60, 61, 62, 266, 259, 268, 261, 262,
+ 263, 271, 63, 291, 292, 91, 41, 270, 271, 125,
+ 35, 274, 275, 305, 33, 40, 287, 288, 124, 286,
+ 45, 288, 44, 275, 41, 93, 294, 40, 297, 42,
+ 293, 263, 295, 296, 297, 298, 299, 300, 301, 302,
+ 303, 263, 264, 61, 266, 267, 268, 299, 300, 301,
+ 44, 293, 0, 275, 125, 124, 124, 91, 286, 266,
+ 267, 268, 69, 70, 61, 259, 91, 261, 262, 263,
+ 125, 266, 267, 268, 269, 61, 270, 271, 91, 288,
+ 274, 275, 304, 305, 41, 93, 281, 44, 284, 263,
+ 38, 0, 44, 41, 289, 43, 44, 45, 44, 293,
+ 273, 295, 296, 297, 298, 299, 300, 301, 302, 303,
+ 58, 59, 60, 61, 62, 41, 123, 124, 259, 267,
+ 261, 262, 263, 263, 41, 0, 41, 91, 61, 270,
+ 271, 61, 412, 274, 275, 188, 93, 40, 508, 42,
+ 331, 40, 41, 61, 17, 93, 45, 61, 40, 265,
+ 266, 267, 293, 45, 295, 296, 297, 298, 299, 300,
+ 301, 302, 303, 38, 270, 238, 41, 79, 43, 44,
+ 45, 446, 40, 160, 42, 166, 124, 170, 0, 265,
+ 266, 26, 360, 58, 59, 60, 61, 62, 91, 416,
+ 398, 259, 91, 261, 262, 263, 347, 463, 524, 91,
+ 541, 93, 270, 271, 505, 518, 274, 275, -1, -1,
+ -1, -1, -1, -1, -1, -1, 38, -1, 93, 41,
+ -1, -1, 44, 91, -1, 293, -1, 295, 296, 297,
+ 298, 299, 300, 301, -1, 0, 58, 59, 60, 61,
+ 62, 266, 267, 268, 269, 59, -1, 61, -1, 124,
+ -1, -1, 265, 266, -1, -1, 281, -1, -1, -1,
+ -1, -1, 40, 41, 289, -1, 279, -1, 46, 47,
+ -1, 93, -1, 38, -1, -1, 41, 91, -1, 44,
+ 0, 59, 40, 41, 42, -1, -1, -1, -1, 41,
+ 0, 43, 44, 58, 59, 60, 61, 62, -1, -1,
+ -1, 59, 124, 13, 14, -1, 58, 17, -1, 61,
+ 124, 259, -1, 261, 262, 263, -1, -1, 38, -1,
+ 0, 41, 270, 271, 44, -1, 274, 275, 93, -1,
+ -1, -1, 40, 91, 42, -1, -1, 45, 58, 59,
+ -1, 93, -1, -1, -1, 293, 124, 295, 296, 297,
+ 298, 299, 300, 301, -1, -1, -1, -1, 38, 124,
+ -1, 41, 265, 266, 44, -1, 124, 266, 267, 268,
+ -1, 0, -1, 93, 266, 267, 268, -1, 58, 59,
+ -1, -1, -1, 91, 259, -1, 261, 262, 263, -1,
+ 100, 0, -1, -1, -1, 270, 271, 265, 266, 274,
+ 275, -1, -1, -1, 124, -1, -1, -1, -1, -1,
+ -1, -1, 41, 93, -1, 44, -1, -1, 293, -1,
+ 295, 296, 297, 298, 299, 300, 301, -1, 0, 58,
+ 59, -1, 41, -1, -1, 44, 59, 259, 61, 261,
+ 262, 263, -1, -1, 124, -1, -1, -1, 270, 271,
+ 59, -1, 274, 275, -1, -1, 270, -1, 168, -1,
+ 170, -1, -1, -1, 93, -1, -1, -1, 91, 41,
+ -1, 293, 44, 295, 296, 297, 298, 299, 300, 301,
+ -1, 0, -1, -1, 93, -1, 58, 59, 266, 267,
+ 268, -1, 270, -1, 259, 124, 261, 262, 263, -1,
+ -1, 124, -1, -1, -1, 270, 271, 265, 266, 274,
+ 275, -1, 270, 291, 292, 124, 294, -1, -1, -1,
+ -1, 93, 41, -1, -1, 44, -1, 0, 293, -1,
+ 295, 296, 297, 298, 299, 300, 301, -1, -1, 259,
+ 59, 261, 262, 263, 40, -1, -1, 43, 44, -1,
+ 270, 271, 124, -1, 274, 0, -1, 265, 266, 267,
+ 268, -1, 58, -1, -1, 61, -1, -1, 41, -1,
+ -1, 44, -1, 293, 93, 295, 296, 297, 298, 259,
+ 0, 261, 262, 263, -1, -1, 59, -1, -1, -1,
+ 270, 271, -1, -1, 274, 91, 41, -1, 33, 44,
+ -1, -1, -1, 38, -1, 124, 41, 42, 43, 44,
+ 45, 46, 47, 293, 59, 295, 296, 297, 298, 0,
+ 93, 41, -1, 58, 44, 60, 61, 62, -1, -1,
+ 259, -1, 261, 262, 263, -1, -1, -1, -1, 59,
+ -1, 270, 271, -1, -1, 274, -1, 270, 93, -1,
+ 259, 124, 261, -1, 263, -1, -1, -1, -1, 94,
+ 41, 270, 271, 44, 293, 274, 295, 296, 297, 298,
+ -1, -1, -1, 93, -1, 284, -1, -1, 59, 124,
+ -1, -1, -1, -1, 293, -1, 312, 259, 297, 261,
+ 262, 263, -1, 319, -1, -1, -1, 323, 270, 271,
+ -1, 33, 274, 35, 124, -1, 38, -1, 40, -1,
+ 42, 43, 93, 45, 46, 47, -1, 45, -1, -1,
+ -1, 293, -1, 295, 296, 297, 58, -1, 60, 61,
+ 62, 59, -1, 61, -1, -1, -1, 363, -1, -1,
+ 259, -1, 261, 124, 263, 371, -1, -1, -1, -1,
+ -1, 270, 271, -1, -1, 274, -1, -1, -1, 91,
+ -1, 93, 94, 91, -1, 284, 94, 263, 264, -1,
+ 266, 267, 268, -1, 293, -1, -1, -1, 297, 275,
+ -1, -1, -1, -1, -1, -1, 259, -1, 261, -1,
+ 263, -1, -1, -1, 126, 123, 124, 270, 271, 425,
+ -1, 274, -1, -1, -1, -1, -1, -1, 304, 305,
+ -1, 284, -1, -1, 259, -1, 261, 262, 263, -1,
+ 293, -1, -1, -1, 297, 270, 271, -1, -1, 274,
+ -1, -1, -1, -1, -1, -1, -1, 463, -1, 259,
+ 275, 261, 262, 263, -1, -1, -1, -1, 293, 284,
+ 270, 271, 297, -1, 274, -1, -1, -1, -1, -1,
+ 295, 296, -1, 298, 299, 300, 301, 302, 303, 45,
+ -1, -1, -1, 293, -1, -1, -1, 297, 259, -1,
+ 261, 262, 263, 59, -1, 61, -1, -1, -1, 270,
+ 271, -1, 33, 274, 35, -1, -1, 38, -1, 40,
+ 41, 42, 43, -1, 45, 46, 47, -1, -1, -1,
+ -1, -1, 293, -1, -1, 91, 297, 58, 94, 60,
+ 61, 62, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 266, 267, 268, 269, 266, -1,
+ 268, -1, 270, 275, -1, -1, -1, 123, 124, 281,
+ 91, -1, -1, 94, -1, -1, -1, 289, -1, 287,
+ -1, -1, -1, 295, 296, -1, 298, 299, 300, 301,
+ 302, 303, 304, 305, 33, -1, 35, -1, -1, 38,
+ -1, 40, -1, 42, 43, 126, 45, 46, 47, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 58,
+ -1, 60, 61, 62, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 33, -1, 35, -1, -1, 38,
+ -1, 40, -1, 42, 43, -1, 45, 46, 47, -1,
+ 45, -1, 91, -1, 93, 94, -1, -1, -1, 58,
+ -1, 60, 61, 62, 59, -1, 61, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 33, -1, 35, -1,
+ -1, 38, -1, 40, -1, 42, 43, 126, 45, 46,
+ 47, -1, 91, -1, 93, 94, 91, -1, -1, 94,
+ -1, 58, -1, 60, 61, 62, -1, -1, -1, -1,
+ 266, 33, 268, -1, 270, -1, 38, -1, -1, 41,
+ 42, 43, 44, 45, 46, 47, -1, 126, 123, 124,
+ 125, 287, -1, -1, 91, -1, 58, 94, 60, 61,
+ 62, -1, -1, -1, -1, 266, 267, 268, 269, -1,
+ -1, -1, -1, -1, 275, -1, -1, -1, -1, -1,
+ 281, -1, -1, -1, -1, -1, -1, -1, 289, 126,
+ -1, -1, 94, -1, 295, 296, -1, 298, 299, 300,
+ 301, 302, 303, 304, 305, 33, -1, 35, -1, -1,
+ 38, -1, 40, -1, 42, 43, -1, 45, 46, 47,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 58, -1, 60, 61, 62, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 266, 267, 268,
+ 269, -1, -1, -1, -1, -1, 275, -1, -1, -1,
+ -1, -1, 281, 91, -1, -1, 94, -1, -1, -1,
+ 289, -1, -1, -1, -1, -1, 295, 296, -1, 298,
+ 299, 300, 301, 302, 303, 304, 305, 266, 267, 268,
+ 269, 266, -1, 268, -1, 270, 275, -1, 126, -1,
+ -1, -1, 281, -1, -1, -1, -1, -1, -1, -1,
+ 289, -1, 287, -1, -1, -1, 295, 296, -1, 298,
+ 299, 300, 301, 302, 303, 304, 305, 33, -1, 266,
+ 267, 268, 269, -1, -1, -1, 42, 43, 275, 45,
+ 46, 47, -1, -1, 281, -1, -1, 284, -1, -1,
+ -1, -1, 289, -1, 60, 61, 62, -1, 295, 296,
+ -1, 298, 299, 300, 301, 302, 303, 304, 305, -1,
+ -1, -1, -1, 275, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 94, -1,
+ -1, -1, -1, 295, 296, -1, 298, 299, 300, 301,
+ 302, 303, 33, -1, -1, -1, -1, 38, 33, -1,
+ 41, 42, 43, 44, 45, 46, 47, 42, 43, -1,
+ 45, 46, 47, -1, -1, -1, -1, 58, -1, 60,
+ 61, 62, -1, -1, -1, 60, 61, 62, 266, 267,
+ 268, 269, -1, -1, -1, -1, 58, 275, -1, 61,
+ -1, -1, -1, 281, -1, -1, -1, -1, -1, -1,
+ -1, 289, -1, 94, -1, -1, -1, 295, 296, 94,
+ 298, 299, 300, 301, 302, 303, 304, 305, 33, -1,
+ -1, -1, -1, 38, -1, -1, 41, 42, 43, 44,
+ 45, 46, 47, -1, -1, -1, -1, -1, 110, -1,
+ -1, -1, -1, 58, 116, 60, 61, 62, -1, -1,
+ 122, -1, -1, -1, -1, -1, -1, -1, 130, 131,
+ 132, 133, 134, 38, -1, -1, 41, 42, 43, 44,
+ 45, 46, 47, -1, -1, -1, -1, -1, -1, 94,
+ -1, -1, -1, 58, -1, 60, 61, 62, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 38, 275,
+ -1, 41, 184, 43, 44, 45, 188, -1, -1, 94,
+ -1, -1, 194, 195, 196, 197, 198, -1, 58, -1,
+ 60, 61, 62, 299, 300, 301, 302, 303, 38, -1,
+ -1, 41, 42, 43, 44, 45, 46, 47, 38, -1,
+ -1, 41, 42, 43, 44, 45, -1, 47, 58, -1,
+ 60, 61, 62, -1, -1, -1, -1, -1, 58, -1,
+ 60, 61, 62, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 275, -1, -1, -1, -1, -1,
+ 275, -1, -1, -1, 94, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 295, 296, -1, 298, 299, 300,
+ 301, 302, 303, -1, 299, 300, 301, 302, 303, 38,
+ -1, -1, 41, 42, 43, 44, 45, -1, 47, 38,
+ -1, -1, 41, 42, 43, 44, 45, -1, 47, 58,
+ -1, 60, 61, 62, -1, -1, -1, -1, -1, 58,
+ -1, 60, 61, 62, 326, 327, -1, -1, -1, -1,
+ 275, -1, -1, -1, -1, -1, -1, -1, -1, 38,
+ -1, -1, 41, 42, 43, 44, 45, -1, 47, -1,
+ 295, 296, -1, 298, 299, 300, 301, 302, 303, 58,
+ -1, 60, 61, 62, -1, -1, -1, -1, -1, -1,
+ 275, -1, -1, -1, -1, -1, -1, -1, -1, 38,
+ -1, -1, 41, 42, 43, 44, 45, -1, 47, -1,
+ 295, 296, -1, 298, 299, 300, 301, 302, 303, 58,
+ -1, 60, 61, 62, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 275, -1, -1, -1, -1,
+ -1, -1, -1, 40, 38, 42, -1, 41, 45, 43,
+ 44, 45, -1, -1, -1, 295, 296, -1, 298, 299,
+ 300, 301, -1, -1, 58, 275, 60, 61, 62, -1,
+ -1, -1, -1, -1, -1, 275, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 295, 296, -1, 298, 299,
+ 300, 301, 302, 303, 91, 295, 296, -1, 298, 299,
+ 300, 301, 302, 303, 38, -1, -1, 41, -1, 43,
+ 44, 45, 38, -1, -1, 41, -1, -1, 44, 38,
+ -1, -1, 41, -1, 58, 44, 60, 61, 62, -1,
+ -1, -1, 58, -1, 60, 61, 62, -1, -1, 58,
+ -1, 60, 61, 62, -1, -1, 275, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 275, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 295, 296, -1, 298,
+ 299, 300, 301, 302, 303, -1, 295, 296, -1, 298,
+ 299, 300, 301, 302, 303, -1, 40, 259, 42, -1,
+ -1, 45, -1, -1, -1, -1, 275, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 295, 296, -1, 298,
+ 299, 300, 301, 302, 303, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 275, 91, -1, -1,
+ -1, -1, 314, 315, -1, -1, -1, -1, -1, -1,
+ -1, -1, 324, -1, -1, -1, 295, 296, -1, 298,
+ 299, 300, 301, 302, 303, -1, -1, -1, 265, 266,
+ 267, 268, -1, 345, -1, 272, -1, -1, -1, 276,
+ 277, 275, -1, -1, -1, -1, -1, 359, -1, -1,
+ -1, 363, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 295, 296, -1, 298, 299, 300, 301, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 48,
+ -1, 275, 414, -1, 416, -1, -1, -1, -1, 275,
+ 59, -1, 61, -1, -1, -1, 275, -1, -1, -1,
+ -1, 295, 296, -1, 298, 299, 300, 301, -1, 295,
+ 296, -1, 298, 299, 300, 301, 295, 296, -1, 298,
+ 299, 300, 301, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 107, 108,
+ -1, -1, 256, 257, 258, -1, 115, -1, 117, -1,
+ 482, 265, 266, 267, 268, 487, -1, -1, 272, -1,
+ -1, -1, 276, 277, -1, -1, 135, 136, 137, 138,
+ 139, 140, 141, 142, 143, 144, 145, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 200, 201, 202, 203, 204, 205, 206, 207, 208,
+ 209, 210,
+};
+#define YYFINAL 15
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 306
+#define YYUNDFTOKEN 417
+#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
+#if YYDEBUG
+static const char *const yyname[] = {
+
+"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+"'!'",0,"'#'",0,0,"'&'",0,"'('","')'","'*'","'+'","','","'-'","'.'","'/'",0,0,0,
+0,0,0,0,0,0,0,"':'","';'","'<'","'='","'>'","'?'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,"'['",0,"']'","'^'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,"'{'","'|'","'}'","'~'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"VALUE","EVAL",
+"WHERE","IF","TO","LEFTARROW","COLONCOLON","COLON2EQ","TYPEVAR","NAME","CNAME",
+"CONST","DOLLAR2","OFFSIDE","ELSEQ","ABSTYPE","WITH","DIAG","EQEQ","FREE",
+"INCLUDE","EXPORT","TYPE","OTHERWISE","SHOWSYM","PATHNAME","BNF","LEX","ENDIR",
+"ERRORSY","ENDSY","EMPTYSY","READVALSY","LEXDEF","CHARCLASS","ANTICHARCLASS",
+"LBEGIN","ARROW","PLUSPLUS","MINUSMINUS","DOTDOT","VEL","GE","NE","LE","REM",
+"DIV","INFIXNAME","INFIXCNAME","CMBASE",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,"illegal-symbol",
+};
+static const char *const yyrule[] = {
+"$accept : entity",
+"entity : error",
+"entity : script",
+"entity : VALUE exp",
+"entity : EVAL exp",
+"entity : EVAL exp COLONCOLON",
+"entity : EVAL exp TO",
+"script :",
+"script : defs",
+"exp : op",
+"exp : e1",
+"op : '~'",
+"op : '#'",
+"op : diop",
+"diop : '-'",
+"diop : diop1",
+"diop1 : '+'",
+"diop1 : PLUSPLUS",
+"diop1 : ':'",
+"diop1 : MINUSMINUS",
+"diop1 : VEL",
+"diop1 : '&'",
+"diop1 : relop",
+"diop1 : '*'",
+"diop1 : '/'",
+"diop1 : DIV",
+"diop1 : REM",
+"diop1 : '^'",
+"diop1 : '.'",
+"diop1 : '!'",
+"diop1 : INFIXNAME",
+"diop1 : INFIXCNAME",
+"relop : '>'",
+"relop : GE",
+"relop : eqop",
+"relop : NE",
+"relop : LE",
+"relop : '<'",
+"eqop : EQEQ",
+"eqop : '='",
+"rhs : cases WHERE ldefs",
+"rhs : exp WHERE ldefs",
+"rhs : exp",
+"rhs : cases",
+"cases : exp ',' if exp",
+"cases : exp ',' OTHERWISE",
+"cases : cases reindent ELSEQ alt",
+"alt : here exp",
+"alt : here exp ',' if exp",
+"alt : here exp ',' OTHERWISE",
+"if :",
+"if : IF",
+"indent :",
+"outdent : separator",
+"separator : OFFSIDE",
+"separator : ';'",
+"reindent :",
+"liste : exp",
+"liste : liste ',' exp",
+"e1 : '~' e1",
+"e1 : e1 PLUSPLUS e1",
+"e1 : e1 ':' e1",
+"e1 : e1 MINUSMINUS e1",
+"e1 : e1 VEL e1",
+"e1 : e1 '&' e1",
+"e1 : reln",
+"e1 : e2",
+"es1 : '~' e1",
+"es1 : e1 PLUSPLUS e1",
+"es1 : e1 PLUSPLUS",
+"es1 : e1 ':' e1",
+"es1 : e1 ':'",
+"es1 : e1 MINUSMINUS e1",
+"es1 : e1 MINUSMINUS",
+"es1 : e1 VEL e1",
+"es1 : e1 VEL",
+"es1 : e1 '&' e1",
+"es1 : e1 '&'",
+"es1 : relsn",
+"es1 : es2",
+"e2 : '-' e2",
+"e2 : '#' e2",
+"e2 : e2 '+' e2",
+"e2 : e2 '-' e2",
+"e2 : e2 '*' e2",
+"e2 : e2 '/' e2",
+"e2 : e2 DIV e2",
+"e2 : e2 REM e2",
+"e2 : e2 '^' e2",
+"e2 : e2 '.' e2",
+"e2 : e2 '!' e2",
+"e2 : e3",
+"es2 : '-' e2",
+"es2 : '#' e2",
+"es2 : e2 '+' e2",
+"es2 : e2 '+'",
+"es2 : e2 '-' e2",
+"es2 : e2 '-'",
+"es2 : e2 '*' e2",
+"es2 : e2 '*'",
+"es2 : e2 '/' e2",
+"es2 : e2 '/'",
+"es2 : e2 DIV e2",
+"es2 : e2 DIV",
+"es2 : e2 REM e2",
+"es2 : e2 REM",
+"es2 : e2 '^' e2",
+"es2 : e2 '^'",
+"es2 : e2 '.' e2",
+"es2 : e2 '.'",
+"es2 : e2 '!' e2",
+"es2 : e2 '!'",
+"es2 : es3",
+"e3 : comb INFIXNAME e3",
+"e3 : comb INFIXCNAME e3",
+"e3 : comb",
+"es3 : comb INFIXNAME e3",
+"es3 : comb INFIXNAME",
+"es3 : comb INFIXCNAME e3",
+"es3 : comb INFIXCNAME",
+"es3 : comb",
+"comb : comb arg",
+"comb : arg",
+"reln : e2 relop e2",
+"reln : reln relop e2",
+"relsn : e2 relop e2",
+"relsn : e2 relop",
+"relsn : reln relop e2",
+"$$1 :",
+"arg : $$1 LEX lexrules ENDIR",
+"arg : NAME",
+"arg : CNAME",
+"arg : CONST",
+"arg : READVALSY",
+"arg : SHOWSYM",
+"arg : DOLLAR2",
+"arg : '[' ']'",
+"arg : '[' exp ']'",
+"arg : '[' exp ',' exp ']'",
+"arg : '[' exp ',' exp ',' liste ']'",
+"arg : '[' exp DOTDOT exp ']'",
+"arg : '[' exp DOTDOT ']'",
+"arg : '[' exp ',' exp DOTDOT exp ']'",
+"arg : '[' exp ',' exp DOTDOT ']'",
+"arg : '[' exp '|' qualifiers ']'",
+"arg : '[' exp DIAG qualifiers ']'",
+"arg : '(' op ')'",
+"arg : '(' es1 ')'",
+"arg : '(' diop1 e1 ')'",
+"arg : '(' ')'",
+"arg : '(' exp ',' liste ')'",
+"$$2 :",
+"$$3 :",
+"lexrules : lexrules lstart here re indent $$2 ARROW exp lpostfix $$3 outdent",
+"lexrules : lexdefs",
+"lstart :",
+"lstart : '<' cnames '>'",
+"cnames : CNAME",
+"cnames : cnames CNAME",
+"lpostfix :",
+"lpostfix : LBEGIN CNAME",
+"lpostfix : LBEGIN CONST",
+"lexdefs : lexdefs LEXDEF indent '=' re outdent",
+"lexdefs :",
+"re : re1 '|' re",
+"re : re1",
+"re1 : lterm '/' lterm",
+"re1 : lterm '/'",
+"re1 : lterm",
+"lterm : lfac lterm",
+"lterm : lfac",
+"lfac : lunit '*'",
+"lfac : lunit '+'",
+"lfac : lunit '?'",
+"lfac : lunit",
+"lunit : '(' re ')'",
+"lunit : CONST",
+"lunit : CHARCLASS",
+"lunit : ANTICHARCLASS",
+"lunit : '.'",
+"lunit : name",
+"name : NAME",
+"name : CNAME",
+"qualifiers : exp",
+"qualifiers : generator",
+"qualifiers : qualifiers ';' generator",
+"qualifiers : qualifiers ';' exp",
+"generator : e1 ',' generator",
+"generator : generator1",
+"generator1 : e1 LEFTARROW exp",
+"generator1 : e1 LEFTARROW exp ',' exp DOTDOT",
+"defs : def",
+"defs : defs def",
+"def : v act2 indent '=' here rhs outdent",
+"def : spec",
+"def : ABSTYPE here typeforms indent WITH lspecs outdent",
+"def : typeform indent act1 here EQEQ type act2 outdent",
+"def : typeform indent act1 here COLON2EQ construction act2 outdent",
+"def : indent setexp EXPORT parts outdent",
+"def : FREE here '{' specs '}'",
+"def : INCLUDE bindings modifiers outdent",
+"$$4 :",
+"def : here BNF $$4 names outdent productions ENDIR",
+"setexp : here",
+"bindings :",
+"bindings : '{' bindingseq '}'",
+"bindingseq : bindingseq binding",
+"bindingseq : binding",
+"binding : NAME indent '=' exp outdent",
+"binding : typeform indent act1 EQEQ type act2 outdent",
+"modifiers :",
+"modifiers : negmods",
+"negmods : negmods negmod",
+"negmods : negmod",
+"negmod : NAME '/' NAME",
+"negmod : CNAME '/' CNAME",
+"negmod : '-' NAME",
+"here :",
+"act1 :",
+"act2 :",
+"ldefs : ldef",
+"ldefs : ldefs ldef",
+"ldef : spec",
+"ldef : typeform here EQEQ",
+"ldef : typeform here COLON2EQ",
+"ldef : v act2 indent '=' here rhs outdent",
+"vlist : v",
+"vlist : vlist ',' v",
+"v : v1",
+"v : v1 ':' v",
+"v1 : v1 '+' CONST",
+"v1 : '-' CONST",
+"v1 : v2 INFIXNAME v1",
+"v1 : v2 INFIXCNAME v1",
+"v1 : v2",
+"v2 : v3",
+"v2 : v2 v3",
+"v3 : NAME",
+"v3 : CNAME",
+"v3 : CONST",
+"v3 : '[' ']'",
+"v3 : '[' vlist ']'",
+"v3 : '(' ')'",
+"v3 : '(' v ')'",
+"v3 : '(' v ',' vlist ')'",
+"type : type1",
+"type : type ARROW type",
+"type1 : type2 INFIXNAME type1",
+"type1 : type2",
+"type2 : tap",
+"type2 : argtype",
+"tap : NAME argtype",
+"tap : tap argtype",
+"argtype : NAME",
+"argtype : typevar",
+"argtype : '(' typelist ')'",
+"argtype : '[' type ']'",
+"argtype : '[' type ',' typel ']'",
+"typelist :",
+"typelist : type",
+"typelist : type ',' typel",
+"typel : type",
+"typel : typel ',' type",
+"parts : parts NAME",
+"parts : parts '-' NAME",
+"parts : parts PATHNAME",
+"parts : parts '+'",
+"parts : NAME",
+"parts : '-' NAME",
+"parts : PATHNAME",
+"parts : '+'",
+"specs : specs spec",
+"specs : spec",
+"spec : typeforms indent here COLONCOLON ttype outdent",
+"lspecs : lspecs lspec",
+"lspecs : lspec",
+"$$5 :",
+"lspec : namelist indent here $$5 COLONCOLON type outdent",
+"namelist : NAME ',' namelist",
+"namelist : NAME",
+"typeforms : typeforms ',' typeform act2",
+"typeforms : typeform act2",
+"typeform : CNAME typevars",
+"typeform : NAME typevars",
+"typeform : typevar INFIXNAME typevar",
+"typeform : typevar INFIXCNAME typevar",
+"ttype : type",
+"ttype : TYPE",
+"typevar : '*'",
+"typevar : TYPEVAR",
+"typevars :",
+"typevars : typevar typevars",
+"construction : constructs",
+"constructs : construct",
+"constructs : constructs '|' construct",
+"construct : field here INFIXCNAME field",
+"construct : construct1",
+"construct1 : '(' construct ')'",
+"construct1 : construct1 field1",
+"construct1 : here CNAME",
+"field : type",
+"field : argtype '!'",
+"field1 : argtype '!'",
+"field1 : argtype",
+"names :",
+"names : names NAME",
+"productions : lspec",
+"productions : production",
+"productions : productions lspec",
+"productions : productions production",
+"production : NAME params ':' indent grhs outdent",
+"params :",
+"$$6 :",
+"params : $$6 '(' names ')'",
+"grhs : here phrase",
+"phrase : error_term",
+"phrase : phrase1",
+"phrase : phrase1 '|' error_term",
+"phrase1 : term",
+"phrase1 : phrase1 '|' here term",
+"term : count_factors",
+"$$7 :",
+"term : count_factors $$7 indent '=' here rhs outdent",
+"error_term : ERRORSY",
+"$$8 :",
+"error_term : ERRORSY $$8 indent '=' here rhs outdent",
+"count_factors : EMPTYSY",
+"count_factors : EMPTYSY factors",
+"$$9 :",
+"count_factors : $$9 factors",
+"factors : factor",
+"factors : factors factor",
+"factor : unit",
+"factor : '{' unit '}'",
+"factor : '{' unit",
+"factor : unit '}'",
+"unit : symbol",
+"unit : symbol '*'",
+"unit : symbol '+'",
+"unit : symbol '?'",
+"symbol : NAME",
+"symbol : ENDSY",
+"symbol : CONST",
+"symbol : '^'",
+"$$10 :",
+"$$11 :",
+"symbol : $$10 '[' exp $$11 ']'",
+"symbol : '-'",
+
+};
+#endif
+
+int yydebug;
+int yynerrs;
+
+int yyerrflag;
+int yychar;
+YYSTYPE yyval;
+YYSTYPE yylval;
+
+/* define the initial stack-sizes */
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 10000
+#define YYMAXDEPTH 10000
+#endif
+#endif
+
+#define YYINITSTACKSIZE 200
+
+typedef struct {
+ unsigned stacksize;
+ YYINT *s_base;
+ YYINT *s_mark;
+ YYINT *s_last;
+ YYSTYPE *l_base;
+ YYSTYPE *l_mark;
+} YYSTACKDATA;
+/* variables for the parser stack */
+static YYSTACKDATA yystack;
+#line 1688 "rules.y"
+/* end of Miranda rules */
+
+#line 1757 "y.tab.c"
+
+#if YYDEBUG
+#include <stdio.h> /* needed for printf */
+#endif
+
+#include <stdlib.h> /* needed for malloc, etc */
+#include <string.h> /* needed for memset */
+
+/* allocate initial stack or double stack size, up to YYMAXDEPTH */
+static int yygrowstack(YYSTACKDATA *data)
+{
+ int i;
+ unsigned newsize;
+ YYINT *newss;
+ YYSTYPE *newvs;
+
+ if ((newsize = data->stacksize) == 0)
+ newsize = YYINITSTACKSIZE;
+ else if (newsize >= YYMAXDEPTH)
+ return YYENOMEM;
+ else if ((newsize *= 2) > YYMAXDEPTH)
+ newsize = YYMAXDEPTH;
+
+ i = (int) (data->s_mark - data->s_base);
+ newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
+ if (newss == 0)
+ return YYENOMEM;
+
+ data->s_base = newss;
+ data->s_mark = newss + i;
+
+ newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
+ if (newvs == 0)
+ return YYENOMEM;
+
+ data->l_base = newvs;
+ data->l_mark = newvs + i;
+
+ data->stacksize = newsize;
+ data->s_last = data->s_base + newsize - 1;
+ return 0;
+}
+
+#if YYPURE || defined(YY_NO_LEAKS)
+static void yyfreestack(YYSTACKDATA *data)
+{
+ free(data->s_base);
+ free(data->l_base);
+ memset(data, 0, sizeof(*data));
+}
+#else
+#define yyfreestack(data) /* nothing */
+#endif
+
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+
+int
+YYPARSE_DECL()
+{
+ int yym, yyn, yystate;
+#if YYDEBUG
+ const char *yys;
+
+ if ((yys = getenv("YYDEBUG")) != 0)
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = YYEMPTY;
+ yystate = 0;
+
+#if YYPURE
+ memset(&yystack, 0, sizeof(yystack));
+#endif
+
+ if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
+ yystack.s_mark = yystack.s_base;
+ yystack.l_mark = yystack.l_base;
+ yystate = 0;
+ *yystack.s_mark = 0;
+
+yyloop:
+ if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ yychar = YYEMPTY;
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+
+ YYERROR_CALL("syntax error");
+
+ goto yyerrlab;
+
+yyerrlab:
+ ++yynerrs;
+
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ yystate = yytable[yyn];
+ *++yystack.s_mark = yytable[yyn];
+ *++yystack.l_mark = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yystack.s_mark);
+#endif
+ if (yystack.s_mark <= yystack.s_base) goto yyabort;
+ --yystack.s_mark;
+ --yystack.l_mark;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == YYEOF) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = YYEMPTY;
+ goto yyloop;
+ }
+
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ if (yym)
+ yyval = yystack.l_mark[1-yym];
+ else
+ memset(&yyval, 0, sizeof yyval);
+ switch (yyn)
+ {
+case 2:
+#line 367 "rules.y"
+ { lastname=0; /* outstats(); */ }
+break;
+case 3:
+#line 374 "rules.y"
+ { lastexp=yystack.l_mark[0]; }
+break;
+case 4:
+#line 377 "rules.y"
+ { if(!SYNERR&&yychar==0)
+ { evaluate(yystack.l_mark[0]); }
+ }
+break;
+case 5:
+#line 385 "rules.y"
+ { word t=type_of(yystack.l_mark[-1]);
+ if(t!=wrong_t)
+ { lastexp=yystack.l_mark[-1];
+ if(tag[yystack.l_mark[-1]]==ID&&id_type(yystack.l_mark[-1])==wrong_t)t=wrong_t;
+ out_type(t);
+ putchar('\n'); }
+ }
+break;
+case 6:
+#line 394 "rules.y"
+ { FILE *fil=NULL,*efil;
+ word t=type_of(yystack.l_mark[-1]);
+ char *f=token(),*ef;
+ if(f)keep(f); ef=token(); /* wasteful of dic space, FIX LATER */
+ if(f){ fil= fopen(f,yystack.l_mark[0]?"a":"w");
+ if(fil==NULL)
+ printf("cannot open \"%s\" for writing\n",f); }
+ else printf("filename missing after \"&>\"\n");
+ if(ef)
+ { efil= fopen(ef,yystack.l_mark[0]?"a":"w");
+ if(efil==NULL)
+ printf("cannot open \"%s\" for writing\n",ef); }
+ if(t!=wrong_t)yystack.l_mark[-1]=codegen(lastexp=yystack.l_mark[-1]);
+ if(!polyshowerror&&t!=wrong_t&&fil!=NULL&&(!ef||efil))
+ { int pid;/* launch a concurrent process to perform task */
+ sighandler oldsig;
+ oldsig=signal(SIGINT,SIG_IGN); /* ignore interrupts */
+ if(pid=fork())
+ { /* "parent" */
+ if(pid==-1)perror("cannot create process");
+ else printf("process %d\n",pid);
+ fclose(fil);
+ if(ef)fclose(efil);
+ (void)signal(SIGINT,oldsig); }else
+ { /* "child" */
+ (void)signal(SIGQUIT,SIG_IGN); /* and quits */
+#ifndef SYSTEM5
+ (void)signal(SIGTSTP,SIG_IGN); /* and stops */
+#endif
+ close(1); dup(fileno(fil)); /* subvert stdout */
+ close(2); dup(fileno(ef?efil:fil)); /* subvert stderr */
+ /* FUNNY BUG - if redirect stdout stderr to same file by two
+ calls to freopen, their buffers get conflated - whence do
+ by subverting underlying file descriptors, as above
+ (fix due to Martin Guy) */
+ /* formerly used dup2, but not present in system V */
+ fclose(stdin);
+ /* setbuf(stdout,NIL);
+ /* not safe to change buffering of stream already in use */
+ /* freopen would have reset the buffering automatically */
+ lastexp = NIL; /* what else should we set to NIL? */
+ /*atcount= 1; */
+ compiling= 0;
+ resetgcstats();
+ output(isltmess_t(t)?yystack.l_mark[-1]:
+ cons(ap(standardout,isstring_t(t)?yystack.l_mark[-1]:
+ ap(mkshow(0,0,t),yystack.l_mark[-1])),NIL));
+ putchar('\n');
+ outstats();
+ exit(0); } } }
+break;
+case 11:
+#line 455 "rules.y"
+ { yyval = NOT; }
+break;
+case 12:
+#line 457 "rules.y"
+ { yyval = LENGTH; }
+break;
+case 14:
+#line 462 "rules.y"
+ { yyval = MINUS; }
+break;
+case 16:
+#line 467 "rules.y"
+ { yyval = PLUS; }
+break;
+case 17:
+#line 469 "rules.y"
+ { yyval = APPEND; }
+break;
+case 18:
+#line 471 "rules.y"
+ { yyval = P; }
+break;
+case 19:
+#line 473 "rules.y"
+ { yyval = listdiff_fn; }
+break;
+case 20:
+#line 475 "rules.y"
+ { yyval = OR; }
+break;
+case 21:
+#line 477 "rules.y"
+ { yyval = AND; }
+break;
+case 23:
+#line 480 "rules.y"
+ { yyval = TIMES; }
+break;
+case 24:
+#line 482 "rules.y"
+ { yyval = FDIV; }
+break;
+case 25:
+#line 484 "rules.y"
+ { yyval = INTDIV; }
+break;
+case 26:
+#line 486 "rules.y"
+ { yyval = MOD; }
+break;
+case 27:
+#line 488 "rules.y"
+ { yyval = POWER; }
+break;
+case 28:
+#line 490 "rules.y"
+ { yyval = B; }
+break;
+case 29:
+#line 492 "rules.y"
+ { yyval = ap(C,SUBSCRIPT); }
+break;
+case 32:
+#line 498 "rules.y"
+ { yyval = GR; }
+break;
+case 33:
+#line 500 "rules.y"
+ { yyval = GRE; }
+break;
+case 34:
+#line 502 "rules.y"
+ { yyval = EQ; }
+break;
+case 35:
+#line 504 "rules.y"
+ { yyval = NEQ; }
+break;
+case 36:
+#line 506 "rules.y"
+ { yyval = ap(C,GRE); }
+break;
+case 37:
+#line 508 "rules.y"
+ { yyval = ap(C,GR); }
+break;
+case 40:
+#line 516 "rules.y"
+ { yyval = block(yystack.l_mark[0],compose(yystack.l_mark[-2]),0); }
+break;
+case 41:
+#line 518 "rules.y"
+ { yyval = block(yystack.l_mark[0],yystack.l_mark[-2],0); }
+break;
+case 43:
+#line 521 "rules.y"
+ { yyval = compose(yystack.l_mark[0]); }
+break;
+case 44:
+#line 525 "rules.y"
+ { yyval = cons(ap2(COND,yystack.l_mark[0],yystack.l_mark[-3]),NIL); }
+break;
+case 45:
+#line 527 "rules.y"
+ { yyval = cons(ap(OTHERWISE,yystack.l_mark[-2]),NIL); }
+break;
+case 46:
+#line 529 "rules.y"
+ { yyval = cons(yystack.l_mark[0],yystack.l_mark[-3]);
+ if(hd[hd[yystack.l_mark[-3]]]==OTHERWISE)
+ syntax("\"otherwise\" must be last case\n"); }
+break;
+case 47:
+#line 535 "rules.y"
+ { errs=yystack.l_mark[-1],
+ syntax("obsolete syntax, \", otherwise\" missing\n");
+ yyval = ap(OTHERWISE,label(yystack.l_mark[-1],yystack.l_mark[0])); }
+break;
+case 48:
+#line 539 "rules.y"
+ { yyval = label(yystack.l_mark[-4],ap2(COND,yystack.l_mark[0],yystack.l_mark[-3])); }
+break;
+case 49:
+#line 541 "rules.y"
+ { yyval = ap(OTHERWISE,label(yystack.l_mark[-3],yystack.l_mark[-2])); }
+break;
+case 50:
+#line 545 "rules.y"
+ { extern word strictif;
+ if(strictif)syntax("\"if\" missing\n"); }
+break;
+case 52:
+#line 551 "rules.y"
+ { if(!SYNERR){layout(); setlmargin();}
+ }
+break;
+case 53:
+#line 559 "rules.y"
+ { unsetlmargin(); }
+break;
+case 56:
+#line 566 "rules.y"
+ { if(!SYNERR)
+ { unsetlmargin(); layout(); setlmargin(); }
+ }
+break;
+case 57:
+#line 572 "rules.y"
+ { yyval = cons(yystack.l_mark[0],NIL); }
+break;
+case 58:
+#line 574 "rules.y"
+ { yyval = cons(yystack.l_mark[0],yystack.l_mark[-2]); }
+break;
+case 59:
+#line 578 "rules.y"
+ { yyval = ap(NOT,yystack.l_mark[0]); }
+break;
+case 60:
+#line 580 "rules.y"
+ { yyval = ap2(APPEND,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 61:
+#line 582 "rules.y"
+ { yyval = cons(yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 62:
+#line 584 "rules.y"
+ { yyval = ap2(listdiff_fn,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 63:
+#line 586 "rules.y"
+ { yyval = ap2(OR,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 64:
+#line 588 "rules.y"
+ { yyval = ap2(AND,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 67:
+#line 594 "rules.y"
+ { yyval = ap(NOT,yystack.l_mark[0]); }
+break;
+case 68:
+#line 596 "rules.y"
+ { yyval = ap2(APPEND,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 69:
+#line 598 "rules.y"
+ { yyval = ap(APPEND,yystack.l_mark[-1]); }
+break;
+case 70:
+#line 600 "rules.y"
+ { yyval = cons(yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 71:
+#line 602 "rules.y"
+ { yyval = ap(P,yystack.l_mark[-1]); }
+break;
+case 72:
+#line 604 "rules.y"
+ { yyval = ap2(listdiff_fn,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 73:
+#line 606 "rules.y"
+ { yyval = ap(listdiff_fn,yystack.l_mark[-1]); }
+break;
+case 74:
+#line 608 "rules.y"
+ { yyval = ap2(OR,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 75:
+#line 610 "rules.y"
+ { yyval = ap(OR,yystack.l_mark[-1]); }
+break;
+case 76:
+#line 612 "rules.y"
+ { yyval = ap2(AND,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 77:
+#line 614 "rules.y"
+ { yyval = ap(AND,yystack.l_mark[-1]); }
+break;
+case 80:
+#line 620 "rules.y"
+ { yyval = ap(NEG,yystack.l_mark[0]); }
+break;
+case 81:
+#line 622 "rules.y"
+ { yyval = ap(LENGTH,yystack.l_mark[0]); }
+break;
+case 82:
+#line 624 "rules.y"
+ { yyval = ap2(PLUS,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 83:
+#line 626 "rules.y"
+ { yyval = ap2(MINUS,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 84:
+#line 628 "rules.y"
+ { yyval = ap2(TIMES,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 85:
+#line 630 "rules.y"
+ { yyval = ap2(FDIV,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 86:
+#line 632 "rules.y"
+ { yyval = ap2(INTDIV,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 87:
+#line 634 "rules.y"
+ { yyval = ap2(MOD,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 88:
+#line 636 "rules.y"
+ { yyval = ap2(POWER,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 89:
+#line 638 "rules.y"
+ { yyval = ap2(B,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 90:
+#line 640 "rules.y"
+ { yyval = ap2(SUBSCRIPT,yystack.l_mark[0],yystack.l_mark[-2]); }
+break;
+case 92:
+#line 645 "rules.y"
+ { yyval = ap(NEG,yystack.l_mark[0]); }
+break;
+case 93:
+#line 647 "rules.y"
+ { yyval = ap(LENGTH,yystack.l_mark[0]); }
+break;
+case 94:
+#line 649 "rules.y"
+ { yyval = ap2(PLUS,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 95:
+#line 651 "rules.y"
+ { yyval = ap(PLUS,yystack.l_mark[-1]); }
+break;
+case 96:
+#line 653 "rules.y"
+ { yyval = ap2(MINUS,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 97:
+#line 655 "rules.y"
+ { yyval = ap(MINUS,yystack.l_mark[-1]); }
+break;
+case 98:
+#line 657 "rules.y"
+ { yyval = ap2(TIMES,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 99:
+#line 659 "rules.y"
+ { yyval = ap(TIMES,yystack.l_mark[-1]); }
+break;
+case 100:
+#line 661 "rules.y"
+ { yyval = ap2(FDIV,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 101:
+#line 663 "rules.y"
+ { yyval = ap(FDIV,yystack.l_mark[-1]); }
+break;
+case 102:
+#line 665 "rules.y"
+ { yyval = ap2(INTDIV,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 103:
+#line 667 "rules.y"
+ { yyval = ap(INTDIV,yystack.l_mark[-1]); }
+break;
+case 104:
+#line 669 "rules.y"
+ { yyval = ap2(MOD,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 105:
+#line 671 "rules.y"
+ { yyval = ap(MOD,yystack.l_mark[-1]); }
+break;
+case 106:
+#line 673 "rules.y"
+ { yyval = ap2(POWER,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 107:
+#line 675 "rules.y"
+ { yyval = ap(POWER,yystack.l_mark[-1]); }
+break;
+case 108:
+#line 677 "rules.y"
+ { yyval = ap2(B,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 109:
+#line 679 "rules.y"
+ { yyval = ap(B,yystack.l_mark[-1]); }
+break;
+case 110:
+#line 681 "rules.y"
+ { yyval = ap2(SUBSCRIPT,yystack.l_mark[0],yystack.l_mark[-2]); }
+break;
+case 111:
+#line 683 "rules.y"
+ { yyval = ap2(C,SUBSCRIPT,yystack.l_mark[-1]); }
+break;
+case 113:
+#line 688 "rules.y"
+ { yyval = ap2(yystack.l_mark[-1],yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 114:
+#line 690 "rules.y"
+ { yyval = ap2(yystack.l_mark[-1],yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 116:
+#line 695 "rules.y"
+ { yyval = ap2(yystack.l_mark[-1],yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 117:
+#line 697 "rules.y"
+ { yyval = ap(yystack.l_mark[0],yystack.l_mark[-1]); }
+break;
+case 118:
+#line 699 "rules.y"
+ { yyval = ap2(yystack.l_mark[-1],yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 119:
+#line 701 "rules.y"
+ { yyval = ap(yystack.l_mark[0],yystack.l_mark[-1]); }
+break;
+case 121:
+#line 706 "rules.y"
+ { yyval = ap(yystack.l_mark[-1],yystack.l_mark[0]); }
+break;
+case 123:
+#line 711 "rules.y"
+ { yyval = ap2(yystack.l_mark[-1],yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 124:
+#line 713 "rules.y"
+ { word subject;
+ subject = hd[hd[yystack.l_mark[-2]]]==AND?tl[tl[yystack.l_mark[-2]]]:tl[yystack.l_mark[-2]];
+ yyval = ap2(AND,yystack.l_mark[-2],ap2(yystack.l_mark[-1],subject,yystack.l_mark[0]));
+ }
+break;
+case 125:
+#line 721 "rules.y"
+ { yyval = ap2(yystack.l_mark[-1],yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 126:
+#line 723 "rules.y"
+ { yyval = ap(yystack.l_mark[0],yystack.l_mark[-1]); }
+break;
+case 127:
+#line 725 "rules.y"
+ { word subject;
+ subject = hd[hd[yystack.l_mark[-2]]]==AND?tl[tl[yystack.l_mark[-2]]]:tl[yystack.l_mark[-2]];
+ yyval = ap2(AND,yystack.l_mark[-2],ap2(yystack.l_mark[-1],subject,yystack.l_mark[0]));
+ }
+break;
+case 128:
+#line 732 "rules.y"
+ { if(!SYNERR)lexstates=NIL,inlex=1; }
+break;
+case 129:
+#line 734 "rules.y"
+ { inlex=0; lexdefs=NIL;
+ if(lexstates!=NIL)
+ { word echoed=0;
+ for(;lexstates!=NIL;lexstates=tl[lexstates])
+ { if(!echoed)printf(echoing?"\n":""),echoed=1;
+ if(!(tl[hd[lexstates]]&1))
+ printf("warning: lex state %s is never entered\n",
+ get_id(hd[hd[lexstates]])); else
+ if(!(tl[hd[lexstates]]&2))
+ printf("warning: lex state %s has no associated rules\n",
+ get_id(hd[hd[lexstates]])); }
+ }
+ if(yystack.l_mark[-1]==NIL)syntax("%lex with no rules\n");
+ else tag[yystack.l_mark[-1]]=LEXER;
+ /* result is lex-list, in reverse order, of items of the form
+ cons(scstuff,cons(matcher,rhs))
+ where scstuff is of the form
+ cons(0-or-list-of-startconditions,1+newstartcondition)
+ */
+ yyval = yystack.l_mark[-1]; }
+break;
+case 133:
+#line 758 "rules.y"
+ { yyval = readvals(0,0); }
+break;
+case 134:
+#line 760 "rules.y"
+ { yyval = show(0,0); }
+break;
+case 135:
+#line 762 "rules.y"
+ { yyval = lastexp;
+ if(lastexp==UNDEF)
+ syntax("no previous expression to substitute for $$\n"); }
+break;
+case 136:
+#line 766 "rules.y"
+ { yyval = NIL; }
+break;
+case 137:
+#line 768 "rules.y"
+ { yyval = cons(yystack.l_mark[-1],NIL); }
+break;
+case 138:
+#line 770 "rules.y"
+ { yyval = cons(yystack.l_mark[-3],cons(yystack.l_mark[-1],NIL)); }
+break;
+case 139:
+#line 772 "rules.y"
+ { yyval = cons(yystack.l_mark[-5],cons(yystack.l_mark[-3],reverse(yystack.l_mark[-1]))); }
+break;
+case 140:
+#line 774 "rules.y"
+ { yyval = ap3(STEPUNTIL,big_one,yystack.l_mark[-1],yystack.l_mark[-3]); }
+break;
+case 141:
+#line 776 "rules.y"
+ { yyval = ap2(STEP,big_one,yystack.l_mark[-2]); }
+break;
+case 142:
+#line 778 "rules.y"
+ { yyval = ap3(STEPUNTIL,ap2(MINUS,yystack.l_mark[-3],yystack.l_mark[-5]),yystack.l_mark[-1],yystack.l_mark[-5]); }
+break;
+case 143:
+#line 780 "rules.y"
+ { yyval = ap2(STEP,ap2(MINUS,yystack.l_mark[-2],yystack.l_mark[-4]),yystack.l_mark[-4]); }
+break;
+case 144:
+#line 782 "rules.y"
+ { yyval = SYNERR?NIL:compzf(yystack.l_mark[-3],yystack.l_mark[-1],0); }
+break;
+case 145:
+#line 784 "rules.y"
+ { yyval = SYNERR?NIL:compzf(yystack.l_mark[-3],yystack.l_mark[-1],1); }
+break;
+case 146:
+#line 786 "rules.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 147:
+#line 788 "rules.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 148:
+#line 790 "rules.y"
+ { yyval = (tag[yystack.l_mark[-2]]==AP&&hd[yystack.l_mark[-2]]==C)?ap(tl[yystack.l_mark[-2]],yystack.l_mark[-1]): /* optimisation */
+ ap2(C,yystack.l_mark[-2],yystack.l_mark[-1]); }
+break;
+case 149:
+#line 793 "rules.y"
+ { yyval = Void; }
+break;
+case 150:
+#line 795 "rules.y"
+ { if(tl[yystack.l_mark[-1]]==NIL)yyval=pair(yystack.l_mark[-3],hd[yystack.l_mark[-1]]);
+ else { yyval=pair(hd[tl[yystack.l_mark[-1]]],hd[yystack.l_mark[-1]]);
+ yystack.l_mark[-1]=tl[tl[yystack.l_mark[-1]]];
+ while(yystack.l_mark[-1]!=NIL)yyval=tcons(hd[yystack.l_mark[-1]],yyval),yystack.l_mark[-1]=tl[yystack.l_mark[-1]];
+ yyval = tcons(yystack.l_mark[-3],yyval); }
+ /* representation of the tuple (a1,...,an) is
+ tcons(a1,tcons(a2,...pair(a(n-1),an))) */
+ }
+break;
+case 151:
+#line 805 "rules.y"
+ { if(!SYNERR)inlex=2; }
+break;
+case 152:
+#line 806 "rules.y"
+ { if(!SYNERR)inlex=1; }
+break;
+case 153:
+#line 807 "rules.y"
+ { if(yystack.l_mark[-2]<0 && e_re(yystack.l_mark[-7]))
+ errs=yystack.l_mark[-8],
+ syntax("illegal lex rule - lhs matches empty\n");
+ yyval = cons(cons(cons(yystack.l_mark[-9],1+yystack.l_mark[-2]),cons(yystack.l_mark[-7],label(yystack.l_mark[-8],yystack.l_mark[-3]))),yystack.l_mark[-10]); }
+break;
+case 154:
+#line 812 "rules.y"
+ { yyval = NIL; }
+break;
+case 155:
+#line 816 "rules.y"
+ { yyval = 0; }
+break;
+case 156:
+#line 818 "rules.y"
+ { word ns=NIL;
+ for(;yystack.l_mark[-1]!=NIL;yystack.l_mark[-1]=tl[yystack.l_mark[-1]])
+ { word *x = &lexstates,i=1;
+ while(*x!=NIL&&hd[hd[*x]]!=hd[yystack.l_mark[-1]])i++,x = &tl[*x];
+ if(*x == NIL)*x = cons(cons(hd[yystack.l_mark[-1]],2),NIL);
+ else tl[hd[*x]] |= 2;
+ ns = add1(i,ns); }
+ yyval = ns; }
+break;
+case 157:
+#line 829 "rules.y"
+ { yyval=cons(yystack.l_mark[0],NIL); }
+break;
+case 158:
+#line 831 "rules.y"
+ { if(member(yystack.l_mark[-1],yystack.l_mark[0]))
+ printf("%ssyntax error: repeated name \"%s\" in start conditions\n",
+ echoing?"\n":"",get_id(yystack.l_mark[0])),
+ acterror();
+ yyval = cons(yystack.l_mark[0],yystack.l_mark[-1]); }
+break;
+case 159:
+#line 839 "rules.y"
+ { yyval = -1; }
+break;
+case 160:
+#line 841 "rules.y"
+ { word *x = &lexstates,i=1;
+ while(*x!=NIL&&hd[hd[*x]]!=yystack.l_mark[0])i++,x = &tl[*x];
+ if(*x == NIL)*x = cons(cons(yystack.l_mark[0],1),NIL);
+ else tl[hd[*x]] |= 1;
+ yyval = i;
+ }
+break;
+case 161:
+#line 848 "rules.y"
+ { if(!isnat(yystack.l_mark[0])||get_int(yystack.l_mark[0])!=0)
+ syntax("%begin not followed by IDENTIFIER or 0\n");
+ yyval = 0; }
+break;
+case 162:
+#line 854 "rules.y"
+ { lexdefs = cons(cons(yystack.l_mark[-4],yystack.l_mark[-1]),lexdefs); }
+break;
+case 163:
+#line 856 "rules.y"
+ { lexdefs = NIL; }
+break;
+case 164:
+#line 860 "rules.y"
+ { yyval = ap2(LEX_OR,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 166:
+#line 865 "rules.y"
+ { yyval = ap2(LEX_RCONTEXT,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 167:
+#line 867 "rules.y"
+ { yyval = ap2(LEX_RCONTEXT,yystack.l_mark[-1],0); }
+break;
+case 169:
+#line 872 "rules.y"
+ { yyval = ap2(LEX_SEQ,yystack.l_mark[-1],yystack.l_mark[0]); }
+break;
+case 171:
+#line 877 "rules.y"
+ { if(e_re(yystack.l_mark[-1]))
+ syntax("illegal regular expression - arg of * matches empty\n");
+ yyval = ap(LEX_STAR,yystack.l_mark[-1]); }
+break;
+case 172:
+#line 881 "rules.y"
+ { yyval = ap2(LEX_SEQ,yystack.l_mark[-1],ap(LEX_STAR,yystack.l_mark[-1])); }
+break;
+case 173:
+#line 883 "rules.y"
+ { yyval = ap(LEX_OPT,yystack.l_mark[-1]); }
+break;
+case 175:
+#line 888 "rules.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 176:
+#line 890 "rules.y"
+ { if(!isstring(yystack.l_mark[0]))
+ printf("%ssyntax error - unexpected token \"",
+ echoing?"\n":""),
+ out(stdout,yystack.l_mark[0]),printf("\" in regular expression\n"),
+ acterror();
+ yyval = yystack.l_mark[0]==NILS?ap(LEX_STRING,NIL):
+ tl[yystack.l_mark[0]]==NIL?ap(LEX_CHAR,hd[yystack.l_mark[0]]):
+ ap(LEX_STRING,yystack.l_mark[0]);
+ }
+break;
+case 177:
+#line 900 "rules.y"
+ { if(yystack.l_mark[0]==NIL)
+ syntax("empty character class `` cannot match\n");
+ yyval = tl[yystack.l_mark[0]]==NIL?ap(LEX_CHAR,hd[yystack.l_mark[0]]):ap(LEX_CLASS,yystack.l_mark[0]); }
+break;
+case 178:
+#line 904 "rules.y"
+ { yyval = ap(LEX_CLASS,cons(ANTICHARCLASS,yystack.l_mark[0])); }
+break;
+case 179:
+#line 906 "rules.y"
+ { yyval = LEX_DOT; }
+break;
+case 180:
+#line 908 "rules.y"
+ { word x=lexdefs;
+ while(x!=NIL&&hd[hd[x]]!=yystack.l_mark[0])x=tl[x];
+ if(x==NIL)
+ printf(
+ "%ssyntax error: undefined lexeme %s in regular expression\n",
+ echoing?"\n":"",
+ get_id(yystack.l_mark[0])),
+ acterror();
+ else yyval = tl[hd[x]]; }
+break;
+case 183:
+#line 922 "rules.y"
+ { yyval = cons(cons(GUARD,yystack.l_mark[0]),NIL); }
+break;
+case 184:
+#line 924 "rules.y"
+ { yyval = cons(yystack.l_mark[0],NIL); }
+break;
+case 185:
+#line 926 "rules.y"
+ { yyval = cons(yystack.l_mark[0],yystack.l_mark[-2]); }
+break;
+case 186:
+#line 928 "rules.y"
+ { yyval = cons(cons(GUARD,yystack.l_mark[0]),yystack.l_mark[-2]); }
+break;
+case 187:
+#line 932 "rules.y"
+ { /* fix syntax to disallow patlist on lhs of iterate generator */
+ if(hd[yystack.l_mark[0]]==GENERATOR)
+ { word e=tl[tl[yystack.l_mark[0]]];
+ if(tag[e]==AP&&tag[hd[e]]==AP&&
+ (hd[hd[e]]==ITERATE||hd[hd[e]]==ITERATE1))
+ syntax("ill-formed generator\n"); }
+ yyval = cons(REPEAT,cons(genlhs(yystack.l_mark[-2]),yystack.l_mark[0])); idsused=NIL; }
+break;
+case 189:
+#line 943 "rules.y"
+ { yyval = cons(GENERATOR,cons(genlhs(yystack.l_mark[-2]),yystack.l_mark[0])); idsused=NIL; }
+break;
+case 190:
+#line 945 "rules.y"
+ { word p = genlhs(yystack.l_mark[-5]); idsused=NIL;
+ yyval = cons(GENERATOR,
+ cons(p,ap2(irrefutable(p)?ITERATE:ITERATE1,
+ lambda(p,yystack.l_mark[-1]),yystack.l_mark[-3])));
+ }
+break;
+case 193:
+#line 957 "rules.y"
+ { word l = yystack.l_mark[-6], r = yystack.l_mark[-1];
+ word f = head(l);
+ if(tag[f]==ID&&!isconstructor(f)) /* fnform defn */
+ while(tag[l]==AP)r=lambda(tl[l],r),l=hd[l];
+ r = label(yystack.l_mark[-2],r); /* to help locate type errors */
+ declare(l,r),lastname=l; }
+break;
+case 194:
+#line 965 "rules.y"
+ { word h=reverse(hd[yystack.l_mark[0]]),hr=hd[tl[yystack.l_mark[0]]],t=tl[tl[yystack.l_mark[0]]];
+ while(h!=NIL&&!SYNERR)specify(hd[h],t,hr),h=tl[h];
+ yyval = cons(nill,NIL); }
+break;
+case 195:
+#line 970 "rules.y"
+ { extern word TABSTRS;
+ extern char *dicp,*dicq;
+ word x=reverse(yystack.l_mark[-1]),ids=NIL,tids=NIL;
+ while(x!=NIL&&!SYNERR)
+ specify(hd[hd[x]],cons(tl[tl[hd[x]]],NIL),hd[tl[hd[x]]]),
+ ids=cons(hd[hd[x]],ids),x=tl[x];
+ /* each id in specs has its id_type set to const(t,NIL) as a way
+ of flagging that t is an abstract type */
+ x=reverse(yystack.l_mark[-4]);
+ while(x!=NIL&&!SYNERR)
+ { word shfn;
+ decltype(hd[x],abstract_t,undef_t,yystack.l_mark[-5]);
+ tids=cons(head(hd[x]),tids);
+ /* check for presence of showfunction */
+ (void)strcpy(dicp,"show");
+ (void)strcat(dicp,get_id(hd[tids]));
+ dicq = dicp+strlen(dicp)+1;
+ shfn=name();
+ if(member(ids,shfn))
+ t_showfn(hd[tids])=shfn;
+ x=tl[x]; }
+ TABSTRS = cons(cons(tids,ids),TABSTRS);
+ yyval = cons(nill,NIL); }
+break;
+case 196:
+#line 995 "rules.y"
+ { word x=redtvars(ap(yystack.l_mark[-7],yystack.l_mark[-2]));
+ decltype(hd[x],synonym_t,tl[x],yystack.l_mark[-4]);
+ yyval = cons(nill,NIL); }
+break;
+case 197:
+#line 1000 "rules.y"
+ { word rhs = yystack.l_mark[-2], r_ids = yystack.l_mark[-2], n=0;
+ while(r_ids!=NIL)r_ids=tl[r_ids],n++;
+ while(rhs!=NIL&&!SYNERR)
+ { word h=hd[rhs],t=yystack.l_mark[-7],stricts=NIL,i=0;
+ while(tag[h]==AP)
+ { if(tag[tl[h]]==AP&&hd[tl[h]]==strict_t)
+ stricts=cons(i,stricts),tl[h]=tl[tl[h]];
+ t=ap2(arrow_t,tl[h],t),h=hd[h],i++; }
+ if(tag[h]==ID)
+ declconstr(h,--n,t);
+ /* warning - type not yet in reduced form */
+ else { stricts=NIL;
+ if(echoing)putchar('\n');
+ printf("syntax error: illegal construct \"");
+ out_type(hd[rhs]);
+ printf("\" on right of ::=\n");
+ acterror(); } /* can this still happen? check later */
+ if(stricts!=NIL) /* ! operators were present */
+ { word k = id_val(h);
+ while(stricts!=NIL)
+ k=ap2(MKSTRICT,i-hd[stricts],k),
+ stricts=tl[stricts];
+ id_val(h)=k; /* overwrite id_val of original constructor */
+ }
+ r_ids=cons(h,r_ids);
+ rhs = tl[rhs]; }
+ if(!SYNERR)decltype(yystack.l_mark[-7],algebraic_t,r_ids,yystack.l_mark[-4]);
+ yyval = cons(nill,NIL); }
+break;
+case 198:
+#line 1030 "rules.y"
+ { inexplist=0;
+ if(exports!=NIL)
+ errs=yystack.l_mark[-3],
+ syntax("multiple %export statements are illegal\n");
+ else { if(yystack.l_mark[-1]==NIL&&exportfiles==NIL&&embargoes!=NIL)
+ exportfiles=cons(PLUS,NIL);
+ exports=cons(yystack.l_mark[-3],yystack.l_mark[-1]); } /* cons(hereinfo,identifiers) */
+ yyval = cons(nill,NIL); }
+break;
+case 199:
+#line 1040 "rules.y"
+ { if(freeids!=NIL)
+ errs=yystack.l_mark[-3],
+ syntax("multiple %free statements are illegal\n"); else
+ { word x=reverse(yystack.l_mark[-1]);
+ while(x!=NIL&&!SYNERR)
+ { specify(hd[hd[x]],tl[tl[hd[x]]],hd[tl[hd[x]]]);
+ freeids=cons(head(hd[hd[x]]),freeids);
+ if(tl[tl[hd[x]]]==type_t)
+ t_class(hd[freeids])=free_t;
+ else id_val(hd[freeids])=FREE; /* conventional value */
+ x=tl[x]; }
+ fil_share(hd[files])=0; /* parameterised scripts unshareable */
+ freeids=alfasort(freeids);
+ for(x=freeids;x!=NIL;x=tl[x])
+ hd[x]=cons(hd[x],cons(datapair(get_id(hd[x]),0),
+ id_type(hd[x])));
+ /* each element of freeids is of the form
+ cons(id,cons(original_name,type)) */
+ }
+ yyval = cons(nill,NIL); }
+break;
+case 200:
+#line 1063 "rules.y"
+ { extern char *dicp;
+ extern word CLASHES,BAD_DUMP;
+ includees=cons(cons(yystack.l_mark[-3],cons(yystack.l_mark[-1],yystack.l_mark[-2])),includees);
+ /* $1 contains file+hereinfo */
+ yyval = cons(nill,NIL); }
+break;
+case 201:
+#line 1069 "rules.y"
+ { startbnf(); inbnf=1;}
+break;
+case 202:
+#line 1071 "rules.y"
+ { word lhs=NIL,p=yystack.l_mark[-1],subjects,body,startswith=NIL,leftrecs=NIL;
+ ihlist=inbnf=0;
+ nonterminals=UNION(nonterminals,yystack.l_mark[-3]);
+ for(;p!=NIL;p=tl[p])
+ if(dval(hd[p])==UNDEF)nonterminals=add1(dlhs(hd[p]),nonterminals);
+ else lhs=add1(dlhs(hd[p]),lhs);
+ nonterminals=setdiff(nonterminals,lhs);
+ if(nonterminals!=NIL)
+ errs=yystack.l_mark[-6],
+ member(yystack.l_mark[-3],hd[nonterminals])/*||findnt(hd[nonterminals])*/,
+ printf("%sfatal error in grammar, ",echoing?"\n":""),
+ printf("undefined nonterminal%s: ",
+ tl[nonterminals]==NIL?"":"s"),
+ printlist("",nonterminals),
+ acterror(); else
+ { /* compute list of nonterminals admitting empty prodn */
+ eprodnts=NIL;
+ L:for(p=yystack.l_mark[-1];p!=NIL;p=tl[p])
+ if(!member(eprodnts,dlhs(hd[p]))&&eprod(dval(hd[p])))
+ { eprodnts=cons(dlhs(hd[p]),eprodnts); goto L; }
+ /* now compute startswith reln between nonterminals
+ (performing binomial transformation en route)
+ and use to detect unremoved left recursion */
+ for(p=yystack.l_mark[-1];p!=NIL;p=tl[p])
+ if(member(lhs=starts(dval(hd[p])),dlhs(hd[p])))
+ binom(dval(hd[p]),dlhs(hd[p])),
+ startswith=cons(cons(dlhs(hd[p]),starts(dval(hd[p]))),
+ startswith);
+ else startswith=cons(cons(dlhs(hd[p]),lhs),startswith);
+ startswith=tclos(sortrel(startswith));
+ for(;startswith!=NIL;startswith=tl[startswith])
+ if(member(tl[hd[startswith]],hd[hd[startswith]]))
+ leftrecs=add1(hd[hd[startswith]],leftrecs);
+ if(leftrecs!=NIL)
+ errs=getloc(hd[leftrecs],yystack.l_mark[-1]),
+ printf("%sfatal error in grammar, ",echoing?"\n":""),
+ printlist("irremovable left recursion: ",leftrecs),
+ acterror();
+ if(yystack.l_mark[-3]==NIL) /* implied start symbol */
+ yystack.l_mark[-3]=cons(dlhs(hd[lastlink(yystack.l_mark[-1])]),NIL);
+ fnts=1; /* fnts is flag indicating %bnf in use */
+ if(tl[yystack.l_mark[-3]]==NIL) /* only one start symbol */
+ subjects=getfname(hd[yystack.l_mark[-3]]),
+ body=ap2(G_CLOSE,str_conv(get_id(hd[yystack.l_mark[-3]])),hd[yystack.l_mark[-3]]);
+ else
+ { body=subjects=Void;
+ while(yystack.l_mark[-3]!=NIL)
+ subjects=pair(getfname(hd[yystack.l_mark[-3]]),subjects),
+ body=pair(
+ ap2(G_CLOSE,str_conv(get_id(hd[yystack.l_mark[-3]])),hd[yystack.l_mark[-3]]),
+ body),
+ yystack.l_mark[-3]=tl[yystack.l_mark[-3]];
+ }
+ declare(subjects,label(yystack.l_mark[-6],block(yystack.l_mark[-1],body, 0)));
+ }}
+break;
+case 203:
+#line 1129 "rules.y"
+ { yyval=yystack.l_mark[0];
+ inexplist=1; }
+break;
+case 204:
+#line 1134 "rules.y"
+ { yyval = NIL; }
+break;
+case 205:
+#line 1136 "rules.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 206:
+#line 1140 "rules.y"
+ { yyval = cons(yystack.l_mark[0],yystack.l_mark[-1]); }
+break;
+case 207:
+#line 1142 "rules.y"
+ { yyval = cons(yystack.l_mark[0],NIL); }
+break;
+case 208:
+#line 1146 "rules.y"
+ { yyval = cons(yystack.l_mark[-4],yystack.l_mark[-1]); }
+break;
+case 209:
+#line 1148 "rules.y"
+ { word x=redtvars(ap(yystack.l_mark[-6],yystack.l_mark[-2]));
+ word arity=0,h=hd[x];
+ while(tag[h]==AP)arity++,h=hd[h];
+ yyval = ap(h,make_typ(arity,0,synonym_t,tl[x]));
+ }
+break;
+case 210:
+#line 1156 "rules.y"
+ { yyval = NIL; }
+break;
+case 211:
+#line 1158 "rules.y"
+ { word a,b,c=0;
+ for(a=yystack.l_mark[0];a!=NIL;a=tl[a])
+ for(b=tl[a];b!=NIL;b=tl[b])
+ { if(hd[hd[a]]==hd[hd[b]])c=hd[hd[a]];
+ if(tl[hd[a]]==tl[hd[b]])c=tl[hd[a]];
+ if(c)break; }
+ if(c)printf(
+ "%ssyntax error: conflicting aliases (\"%s\")\n",
+ echoing?"\n":"",
+ get_id(c)),
+ acterror();
+ }
+break;
+case 212:
+#line 1173 "rules.y"
+ { yyval = cons(yystack.l_mark[0],yystack.l_mark[-1]); }
+break;
+case 213:
+#line 1175 "rules.y"
+ { yyval = cons(yystack.l_mark[0],NIL); }
+break;
+case 214:
+#line 1179 "rules.y"
+ { yyval = cons(yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 215:
+#line 1181 "rules.y"
+ { yyval = cons(yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 216:
+#line 1183 "rules.y"
+ { yyval = cons(make_pn(UNDEF),yystack.l_mark[0]); }
+break;
+case 217:
+#line 1188 "rules.y"
+ { extern word line_no;
+ lasth = yyval = fileinfo(get_fil(current_file),line_no);
+ /* (script,line_no) for diagnostics */
+ }
+break;
+case 218:
+#line 1195 "rules.y"
+ { tvarscope=1; }
+break;
+case 219:
+#line 1199 "rules.y"
+ { tvarscope=0; idsused= NIL; }
+break;
+case 220:
+#line 1203 "rules.y"
+ { yyval = cons(yystack.l_mark[0],NIL);
+ dval(yystack.l_mark[0]) = tries(dlhs(yystack.l_mark[0]),cons(dval(yystack.l_mark[0]),NIL));
+ if(!SYNERR&&get_ids(dlhs(yystack.l_mark[0]))==NIL)
+ errs=hd[hd[tl[dval(yystack.l_mark[0])]]],
+ syntax("illegal lhs for local definition\n");
+ }
+break;
+case 221:
+#line 1210 "rules.y"
+ { if(dlhs(yystack.l_mark[0])==dlhs(hd[yystack.l_mark[-1]]) /*&&dval(hd[$1])!=UNDEF*/)
+ { yyval = yystack.l_mark[-1];
+ if(!fallible(hd[tl[dval(hd[yystack.l_mark[-1]])]]))
+ errs=hd[dval(yystack.l_mark[0])],
+ printf("%ssyntax error: \
+unreachable case in defn of \"%s\"\n",echoing?"\n":"",get_id(dlhs(yystack.l_mark[0]))),
+ acterror();
+ tl[dval(hd[yystack.l_mark[-1]])]=cons(dval(yystack.l_mark[0]),tl[dval(hd[yystack.l_mark[-1]])]); }
+ else if(!SYNERR)
+ { word ns=get_ids(dlhs(yystack.l_mark[0])),hr=hd[dval(yystack.l_mark[0])];
+ if(ns==NIL)
+ errs=hr,
+ syntax("illegal lhs for local definition\n");
+ yyval = cons(yystack.l_mark[0],yystack.l_mark[-1]);
+ dval(yystack.l_mark[0])=tries(dlhs(yystack.l_mark[0]),cons(dval(yystack.l_mark[0]),NIL));
+ while(ns!=NIL&&!SYNERR) /* local nameclash check */
+ { nclashcheck(hd[ns],yystack.l_mark[-1],hr);
+ ns=tl[ns]; }
+ /* potentially quadratic - fix later */
+ }
+ }
+break;
+case 222:
+#line 1234 "rules.y"
+ { errs=hd[tl[yystack.l_mark[0]]];
+ syntax("`::' encountered in local defs\n");
+ yyval = cons(nill,NIL); }
+break;
+case 223:
+#line 1238 "rules.y"
+ { errs=yystack.l_mark[-1];
+ syntax("`==' encountered in local defs\n");
+ yyval = cons(nill,NIL); }
+break;
+case 224:
+#line 1242 "rules.y"
+ { errs=yystack.l_mark[-1];
+ syntax("`::=' encountered in local defs\n");
+ yyval = cons(nill,NIL); }
+break;
+case 225:
+#line 1246 "rules.y"
+ { word l = yystack.l_mark[-6], r = yystack.l_mark[-1];
+ word f = head(l);
+ if(tag[f]==ID&&!isconstructor(f)) /* fnform defn */
+ while(tag[l]==AP)r=lambda(tl[l],r),l=hd[l];
+ r = label(yystack.l_mark[-2],r); /* to help locate type errors */
+ yyval = defn(l,undef_t,r); }
+break;
+case 226:
+#line 1255 "rules.y"
+ { yyval = cons(yystack.l_mark[0],NIL); }
+break;
+case 227:
+#line 1257 "rules.y"
+ { yyval = cons(yystack.l_mark[0],yystack.l_mark[-2]); }
+break;
+case 229:
+#line 1262 "rules.y"
+ { yyval = cons(yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 230:
+#line 1266 "rules.y"
+ { if(!isnat(yystack.l_mark[0]))
+ syntax("inappropriate use of \"+\" in pattern\n");
+ yyval = ap2(PLUS,yystack.l_mark[0],yystack.l_mark[-2]); }
+break;
+case 231:
+#line 1270 "rules.y"
+ { /* if(tag[$2]==DOUBLE)
+ $$ = cons(CONST,sto_dbl(-get_dbl($2))); else */
+ if(tag[yystack.l_mark[0]]==INT)
+ yyval = cons(CONST,bignegate(yystack.l_mark[0])); else
+ syntax("inappropriate use of \"-\" in pattern\n"); }
+break;
+case 232:
+#line 1276 "rules.y"
+ { yyval = ap2(yystack.l_mark[-1],yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 233:
+#line 1278 "rules.y"
+ { yyval = ap2(yystack.l_mark[-1],yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 236:
+#line 1284 "rules.y"
+ { yyval = ap(hd[yystack.l_mark[-1]]==CONST&&tag[tl[yystack.l_mark[-1]]]==ID?tl[yystack.l_mark[-1]]:yystack.l_mark[-1],yystack.l_mark[0]); }
+break;
+case 237:
+#line 1290 "rules.y"
+ { if(sreds&&member(gvars,yystack.l_mark[0]))syntax("illegal use of $num symbol\n");
+ /* cannot use grammar variable in a binding position */
+ if(memb(idsused,yystack.l_mark[0]))yyval = cons(CONST,yystack.l_mark[0]);
+ /* picks up repeated names in a template */
+ else idsused= cons(yystack.l_mark[0],idsused); }
+break;
+case 239:
+#line 1297 "rules.y"
+ { if(tag[yystack.l_mark[0]]==DOUBLE)
+ syntax("use of floating point literal in pattern\n");
+ yyval = cons(CONST,yystack.l_mark[0]); }
+break;
+case 240:
+#line 1301 "rules.y"
+ { yyval = nill; }
+break;
+case 241:
+#line 1303 "rules.y"
+ { word x=yystack.l_mark[-1],y=nill;
+ while(x!=NIL)y = cons(hd[x],y), x = tl[x];
+ yyval = y; }
+break;
+case 242:
+#line 1307 "rules.y"
+ { yyval = Void; }
+break;
+case 243:
+#line 1309 "rules.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 244:
+#line 1311 "rules.y"
+ { if(tl[yystack.l_mark[-1]]==NIL)yyval=pair(yystack.l_mark[-3],hd[yystack.l_mark[-1]]);
+ else { yyval=pair(hd[tl[yystack.l_mark[-1]]],hd[yystack.l_mark[-1]]);
+ yystack.l_mark[-1]=tl[tl[yystack.l_mark[-1]]];
+ while(yystack.l_mark[-1]!=NIL)yyval=tcons(hd[yystack.l_mark[-1]],yyval),yystack.l_mark[-1]=tl[yystack.l_mark[-1]];
+ yyval = tcons(yystack.l_mark[-3],yyval); }
+ /* representation of the tuple (a1,...,an) is
+ tcons(a1,tcons(a2,...pair(a(n-1),an))) */
+ }
+break;
+case 246:
+#line 1323 "rules.y"
+ { yyval = ap2(arrow_t,yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 247:
+#line 1327 "rules.y"
+ { yyval = ap2(yystack.l_mark[-1],yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 251:
+#line 1338 "rules.y"
+ { yyval = ap(yystack.l_mark[-1],yystack.l_mark[0]); }
+break;
+case 252:
+#line 1340 "rules.y"
+ { yyval = ap(yystack.l_mark[-1],yystack.l_mark[0]); }
+break;
+case 253:
+#line 1344 "rules.y"
+ { yyval = transtypeid(yystack.l_mark[0]); }
+break;
+case 254:
+#line 1347 "rules.y"
+ { if(tvarscope&&!memb(idsused,yystack.l_mark[0]))
+ printf("%ssyntax error: unbound type variable ",echoing?"\n":""),
+ out_type(yystack.l_mark[0]),putchar('\n'),acterror();
+ yyval = yystack.l_mark[0]; }
+break;
+case 255:
+#line 1352 "rules.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 256:
+#line 1354 "rules.y"
+ { yyval = ap(list_t,yystack.l_mark[-1]); }
+break;
+case 257:
+#line 1356 "rules.y"
+ { syntax(
+ "tuple-type with missing parentheses (obsolete syntax)\n"); }
+break;
+case 258:
+#line 1361 "rules.y"
+ { yyval = void_t; }
+break;
+case 260:
+#line 1364 "rules.y"
+ { word x=yystack.l_mark[0],y=void_t;
+ while(x!=NIL)y = ap2(comma_t,hd[x],y), x = tl[x];
+ yyval = ap2(comma_t,yystack.l_mark[-2],y); }
+break;
+case 261:
+#line 1370 "rules.y"
+ { yyval = cons(yystack.l_mark[0],NIL); }
+break;
+case 262:
+#line 1372 "rules.y"
+ { yyval = cons(yystack.l_mark[0],yystack.l_mark[-2]); }
+break;
+case 263:
+#line 1376 "rules.y"
+ { yyval = add1(yystack.l_mark[0],yystack.l_mark[-1]); }
+break;
+case 264:
+#line 1378 "rules.y"
+ { yyval = yystack.l_mark[-2]; embargoes=add1(yystack.l_mark[0],embargoes); }
+break;
+case 265:
+#line 1380 "rules.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 266:
+#line 1382 "rules.y"
+ { yyval = yystack.l_mark[-1];
+ exportfiles=cons(PLUS,exportfiles); }
+break;
+case 267:
+#line 1385 "rules.y"
+ { yyval = add1(yystack.l_mark[0],NIL); }
+break;
+case 268:
+#line 1387 "rules.y"
+ { yyval = NIL; embargoes=add1(yystack.l_mark[0],embargoes); }
+break;
+case 269:
+#line 1389 "rules.y"
+ { yyval = NIL; }
+break;
+case 270:
+#line 1391 "rules.y"
+ { yyval = NIL;
+ exportfiles=cons(PLUS,exportfiles); }
+break;
+case 271:
+#line 1397 "rules.y"
+ { word x=yystack.l_mark[-1],h=hd[yystack.l_mark[0]],t=tl[yystack.l_mark[0]];
+ while(h!=NIL)x=cons(cons(hd[h],t),x),h=tl[h];
+ yyval = x; }
+break;
+case 272:
+#line 1401 "rules.y"
+ { word x=NIL,h=hd[yystack.l_mark[0]],t=tl[yystack.l_mark[0]];
+ while(h!=NIL)x=cons(cons(hd[h],t),x),h=tl[h];
+ yyval = x; }
+break;
+case 273:
+#line 1407 "rules.y"
+ { yyval = cons(yystack.l_mark[-5],cons(yystack.l_mark[-3],yystack.l_mark[-1])); }
+break;
+case 274:
+#line 1413 "rules.y"
+ { word x=yystack.l_mark[-1],h=hd[yystack.l_mark[0]],t=tl[yystack.l_mark[0]];
+ while(h!=NIL)x=cons(cons(hd[h],t),x),h=tl[h];
+ yyval = x; }
+break;
+case 275:
+#line 1417 "rules.y"
+ { word x=NIL,h=hd[yystack.l_mark[0]],t=tl[yystack.l_mark[0]];
+ while(h!=NIL)x=cons(cons(hd[h],t),x),h=tl[h];
+ yyval = x; }
+break;
+case 276:
+#line 1422 "rules.y"
+ {inbnf=0;}
+break;
+case 277:
+#line 1423 "rules.y"
+ { yyval = cons(yystack.l_mark[-6],cons(yystack.l_mark[-4],yystack.l_mark[-1])); }
+break;
+case 278:
+#line 1427 "rules.y"
+ { yyval = cons(yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 279:
+#line 1429 "rules.y"
+ { yyval = cons(yystack.l_mark[0],NIL); }
+break;
+case 280:
+#line 1433 "rules.y"
+ { yyval = cons(yystack.l_mark[-1],yystack.l_mark[-3]); }
+break;
+case 281:
+#line 1435 "rules.y"
+ { yyval = cons(yystack.l_mark[-1],NIL); }
+break;
+case 282:
+#line 1439 "rules.y"
+ { syntax("upper case identifier out of context\n"); }
+break;
+case 283:
+#line 1441 "rules.y"
+ { yyval = yystack.l_mark[-1];
+ idsused=yystack.l_mark[0];
+ while(yystack.l_mark[0]!=NIL)
+ yyval = ap(yyval,hd[yystack.l_mark[0]]),yystack.l_mark[0] = tl[yystack.l_mark[0]];
+ }
+break;
+case 284:
+#line 1447 "rules.y"
+ { if(eqtvar(yystack.l_mark[-2],yystack.l_mark[0]))
+ syntax("repeated type variable in typeform\n");
+ idsused=cons(yystack.l_mark[-2],cons(yystack.l_mark[0],NIL));
+ yyval = ap2(yystack.l_mark[-1],yystack.l_mark[-2],yystack.l_mark[0]); }
+break;
+case 285:
+#line 1452 "rules.y"
+ { syntax("upper case identifier cannot be used as typename\n"); }
+break;
+case 287:
+#line 1457 "rules.y"
+ { yyval = type_t; }
+break;
+case 288:
+#line 1461 "rules.y"
+ { yyval = mktvar(1); }
+break;
+case 290:
+#line 1466 "rules.y"
+ { yyval = NIL; }
+break;
+case 291:
+#line 1468 "rules.y"
+ { if(memb(yystack.l_mark[0],yystack.l_mark[-1]))
+ syntax("repeated type variable on lhs of type def\n");
+ yyval = cons(yystack.l_mark[-1],yystack.l_mark[0]); }
+break;
+case 292:
+#line 1474 "rules.y"
+ { extern word SGC; /* keeps track of sui-generis constructors */
+ if( tl[yystack.l_mark[0]]==NIL && tag[hd[yystack.l_mark[0]]]!=ID )
+ /* 2nd conjunct excludes singularity types */
+ SGC=cons(head(hd[yystack.l_mark[0]]),SGC);
+ }
+break;
+case 293:
+#line 1482 "rules.y"
+ { yyval = cons(yystack.l_mark[0],NIL); }
+break;
+case 294:
+#line 1484 "rules.y"
+ { yyval = cons(yystack.l_mark[0],yystack.l_mark[-2]); }
+break;
+case 295:
+#line 1488 "rules.y"
+ { yyval = ap2(yystack.l_mark[-1],yystack.l_mark[-3],yystack.l_mark[0]);
+ id_who(yystack.l_mark[-1])=yystack.l_mark[-2]; }
+break;
+case 297:
+#line 1494 "rules.y"
+ { yyval = yystack.l_mark[-1]; }
+break;
+case 298:
+#line 1496 "rules.y"
+ { yyval = ap(yystack.l_mark[-1],yystack.l_mark[0]); }
+break;
+case 299:
+#line 1498 "rules.y"
+ { yyval = yystack.l_mark[0];
+ id_who(yystack.l_mark[0])=yystack.l_mark[-1]; }
+break;
+case 301:
+#line 1504 "rules.y"
+ { yyval = ap(strict_t,yystack.l_mark[-1]); }
+break;
+case 302:
+#line 1508 "rules.y"
+ { yyval = ap(strict_t,yystack.l_mark[-1]); }
+break;
+case 304:
+#line 1513 "rules.y"
+ { yyval = NIL; }
+break;
+case 305:
+#line 1515 "rules.y"
+ { if(member(yystack.l_mark[-1],yystack.l_mark[0]))
+ printf("%ssyntax error: repeated identifier \"%s\" in %s list\n",
+ echoing?"\n":"",get_id(yystack.l_mark[0]),inbnf?"bnf":"attribute"),
+ acterror();
+ yyval = inbnf?add1(yystack.l_mark[0],yystack.l_mark[-1]):cons(yystack.l_mark[0],yystack.l_mark[-1]);
+ }
+break;
+case 306:
+#line 1524 "rules.y"
+ { word h=reverse(hd[yystack.l_mark[0]]),hr=hd[tl[yystack.l_mark[0]]],t=tl[tl[yystack.l_mark[0]]];
+ inbnf=1;
+ yyval=NIL;
+ while(h!=NIL&&!SYNERR)
+ ntspecmap=cons(cons(hd[h],hr),ntspecmap),
+ yyval=add_prod(defn(hd[h],t,UNDEF),yyval,hr),
+ h=tl[h];
+ }
+break;
+case 307:
+#line 1533 "rules.y"
+ { yyval = cons(yystack.l_mark[0],NIL); }
+break;
+case 308:
+#line 1535 "rules.y"
+ { word h=reverse(hd[yystack.l_mark[0]]),hr=hd[tl[yystack.l_mark[0]]],t=tl[tl[yystack.l_mark[0]]];
+ inbnf=1;
+ yyval=yystack.l_mark[-1];
+ while(h!=NIL&&!SYNERR)
+ ntspecmap=cons(cons(hd[h],hr),ntspecmap),
+ yyval=add_prod(defn(hd[h],t,UNDEF),yyval,hr),
+ h=tl[h];
+ }
+break;
+case 309:
+#line 1544 "rules.y"
+ { yyval = add_prod(yystack.l_mark[0],yystack.l_mark[-1],hd[dval(yystack.l_mark[0])]); }
+break;
+case 310:
+#line 1549 "rules.y"
+ { yyval = defn(yystack.l_mark[-5],undef_t,yystack.l_mark[-1]); }
+break;
+case 311:
+#line 1553 "rules.y"
+ { ihlist=0; }
+break;
+case 312:
+#line 1554 "rules.y"
+ { inbnf=0; }
+break;
+case 313:
+#line 1555 "rules.y"
+ { inbnf=1;
+ if(yystack.l_mark[-1]==NIL)syntax("unexpected token ')'\n");
+ ihlist=yystack.l_mark[-1]; }
+break;
+case 314:
+#line 1561 "rules.y"
+ { yyval = label(yystack.l_mark[-1],yystack.l_mark[0]); }
+break;
+case 315:
+#line 1565 "rules.y"
+ { yyval = ap2(G_ERROR,G_ZERO,yystack.l_mark[0]); }
+break;
+case 316:
+#line 1567 "rules.y"
+ { yyval=hd[yystack.l_mark[0]], yystack.l_mark[0]=tl[yystack.l_mark[0]];
+ while(yystack.l_mark[0]!=NIL)
+ yyval=label(hd[yystack.l_mark[0]],yyval),yystack.l_mark[0]=tl[yystack.l_mark[0]],
+ yyval=ap2(G_ALT,hd[yystack.l_mark[0]],yyval),yystack.l_mark[0]=tl[yystack.l_mark[0]];
+ }
+break;
+case 317:
+#line 1573 "rules.y"
+ { yyval=hd[yystack.l_mark[-2]], yystack.l_mark[-2]=tl[yystack.l_mark[-2]];
+ while(yystack.l_mark[-2]!=NIL)
+ yyval=label(hd[yystack.l_mark[-2]],yyval),yystack.l_mark[-2]=tl[yystack.l_mark[-2]],
+ yyval=ap2(G_ALT,hd[yystack.l_mark[-2]],yyval),yystack.l_mark[-2]=tl[yystack.l_mark[-2]];
+ yyval = ap2(G_ERROR,yyval,yystack.l_mark[0]); }
+break;
+case 318:
+#line 1582 "rules.y"
+ { yyval=cons(yystack.l_mark[0],NIL); }
+break;
+case 319:
+#line 1584 "rules.y"
+ { yyval = cons(yystack.l_mark[0],cons(yystack.l_mark[-1],yystack.l_mark[-3])); }
+break;
+case 320:
+#line 1588 "rules.y"
+ { word n=0,f=yystack.l_mark[0],rule=Void;
+ /* default value of a production is () */
+ /* rule=mkgvar(sreds); /* formerly last symbol */
+ if(f!=NIL&&hd[f]==G_END)sreds++;
+ if(ihlist)rule=ih_abstr(rule);
+ while(n<sreds)rule=lambda(mkgvar(++n),rule);
+ sreds=0;
+ rule=ap(G_RULE,rule);
+ while(f!=NIL)rule=ap2(G_SEQ,hd[f],rule),f=tl[f];
+ yyval = rule; }
+break;
+case 321:
+#line 1598 "rules.y"
+ {inbnf=2;}
+break;
+case 322:
+#line 1599 "rules.y"
+ { if(yystack.l_mark[-6]!=NIL&&hd[yystack.l_mark[-6]]==G_END)sreds++;
+ if(sreds==1&&can_elide(yystack.l_mark[-1]))
+ inbnf=1,sreds=0,yyval=hd[yystack.l_mark[-6]]; /* optimisation */
+ else
+ { word f=yystack.l_mark[-6],rule=label(yystack.l_mark[-2],yystack.l_mark[-1]),n=0;
+ inbnf=1;
+ if(ihlist)rule=ih_abstr(rule);
+ while(n<sreds)rule=lambda(mkgvar(++n),rule);
+ sreds=0;
+ rule=ap(G_RULE,rule);
+ while(f!=NIL)rule=ap2(G_SEQ,hd[f],rule),f=tl[f];
+ yyval = rule; }
+ }
+break;
+case 323:
+#line 1615 "rules.y"
+ { word rule = ap(K,Void); /* default value of a production is () */
+ if(ihlist)rule=ih_abstr(rule);
+ yyval = rule; }
+break;
+case 324:
+#line 1618 "rules.y"
+ { inbnf=2,sreds=2; }
+break;
+case 325:
+#line 1619 "rules.y"
+ { word rule = label(yystack.l_mark[-2],yystack.l_mark[-1]);
+ if(ihlist)rule=ih_abstr(rule);
+ yyval = lambda(pair(mkgvar(1),mkgvar(2)),rule);
+ inbnf=1,sreds=0; }
+break;
+case 326:
+#line 1626 "rules.y"
+ { sreds=0; yyval=NIL; }
+break;
+case 327:
+#line 1628 "rules.y"
+ { syntax("unexpected token after empty\n");
+ sreds=0; yyval=NIL; }
+break;
+case 328:
+#line 1630 "rules.y"
+ { obrct=0; }
+break;
+case 329:
+#line 1631 "rules.y"
+ { word f=yystack.l_mark[0];
+ if(obrct)
+ syntax(obrct>0?"unmatched { in grammar rule\n":
+ "unmatched } in grammar rule\n");
+ for(sreds=0;f!=NIL;f=tl[f])sreds++;
+ if(hd[yystack.l_mark[0]]==G_END)sreds--;
+ yyval = yystack.l_mark[0]; }
+break;
+case 330:
+#line 1641 "rules.y"
+ { yyval = cons(yystack.l_mark[0],NIL); }
+break;
+case 331:
+#line 1643 "rules.y"
+ { if(hd[yystack.l_mark[-1]]==G_END)
+ syntax("unexpected token after end\n");
+ yyval = cons(yystack.l_mark[0],yystack.l_mark[-1]); }
+break;
+case 333:
+#line 1650 "rules.y"
+ { yyval = ap(outdent_fn,ap2(indent_fn,getcol_fn(),yystack.l_mark[-1])); }
+break;
+case 334:
+#line 1652 "rules.y"
+ { obrct++;
+ yyval = ap2(indent_fn,getcol_fn(),yystack.l_mark[0]); }
+break;
+case 335:
+#line 1655 "rules.y"
+ { if(--obrct<0)syntax("unmatched `}' in grammar rule\n");
+ yyval = ap(outdent_fn,yystack.l_mark[-1]); }
+break;
+case 337:
+#line 1661 "rules.y"
+ { yyval = ap(G_STAR,yystack.l_mark[-1]); }
+break;
+case 338:
+#line 1663 "rules.y"
+ { yyval = ap2(G_SEQ,yystack.l_mark[-1],ap2(G_SEQ,ap(G_STAR,yystack.l_mark[-1]),ap(G_RULE,ap(C,P)))); }
+break;
+case 339:
+#line 1665 "rules.y"
+ { yyval = ap(G_OPT,yystack.l_mark[-1]); }
+break;
+case 340:
+#line 1669 "rules.y"
+ { extern word NEW;
+ nonterminals=newadd1(yystack.l_mark[0],nonterminals);
+ if(NEW)ntmap=cons(cons(yystack.l_mark[0],lasth),ntmap); }
+break;
+case 341:
+#line 1673 "rules.y"
+ { yyval = G_END; }
+break;
+case 342:
+#line 1675 "rules.y"
+ { if(!isstring(yystack.l_mark[0]))
+ printf("%ssyntax error: illegal terminal ",echoing?"\n":""),
+ out(stdout,yystack.l_mark[0]),printf(" (should be string-const)\n"),
+ acterror();
+ yyval = ap(G_SYMB,yystack.l_mark[0]); }
+break;
+case 343:
+#line 1681 "rules.y"
+ { yyval=G_STATE; }
+break;
+case 344:
+#line 1682 "rules.y"
+ {inbnf=0;}
+break;
+case 345:
+#line 1682 "rules.y"
+ {inbnf=1;}
+break;
+case 346:
+#line 1683 "rules.y"
+ { yyval = ap(G_SUCHTHAT,yystack.l_mark[-2]); }
+break;
+case 347:
+#line 1685 "rules.y"
+ { yyval = G_ANY; }
+break;
+#line 3607 "y.tab.c"
+ }
+ yystack.s_mark -= yym;
+ yystate = *yystack.s_mark;
+ yystack.l_mark -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yystack.s_mark = YYFINAL;
+ *++yystack.l_mark = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = YYLEX) < 0) yychar = YYEOF;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = yyname[YYTRANSLATE(yychar)];
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == YYEOF) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
+#endif
+ if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
+ {
+ goto yyoverflow;
+ }
+ *++yystack.s_mark = (YYINT) yystate;
+ *++yystack.l_mark = yyval;
+ goto yyloop;
+
+yyoverflow:
+ YYERROR_CALL("yacc stack overflow");
+
+yyabort:
+ yyfreestack(&yystack);
+ return (1);
+
+yyaccept:
+ yyfreestack(&yystack);
+ return (0);
+}