Artifact 8a27e50efae1954a8f868439bd6bbc45ec5fac1a7f9e8f0d9b704460afd3f787:
- Executable file
r37/lisp/csl/cslbase/r2l.c
— part of check-in
[f2fda60abd]
at
2011-09-02 18:13:33
on branch master
— Some historical releases purely for archival purposes
git-svn-id: https://svn.code.sf.net/p/reduce-algebra/code/trunk/historical@1375 2bfe0521-f11c-4a00-b80e-6202646ff360 (user: arthurcnorman@users.sourceforge.net, size: 105752) [annotate] [blame] [check-ins using] [more...]
#if defined(__STDC__) || defined(__cplusplus) #define YYCONST const #define YYPARAMS(x) x #define YYDEFUN(name, arglist, args) name(args) #define YYAND , #define YYPTR void * #else #define YYCONST #define YYPARAMS(x) () #define YYDEFUN(name, arglist, args) name arglist args; #define YYAND ; #define YYPTR char * #endif #ifndef lint YYCONST static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley +Cygnus.28) 01/20/91"; #endif #define YYBYACC 1 #ifndef YYDONT_INCLUDE_STDIO #include <stdio.h> #endif #ifdef __cplusplus #include <stdlib.h> /* for malloc/realloc/free */ #endif #line 36 "r2l.y" /* * This is a "yacc" specification of the syntax of RLISP. It is used * to provide a (symbolic-mode) RLISP to Lisp translator that can be * made freely available without reference to anybody apart from * myself! The Lisp dialect generated is Standard Lisp and in all reality * I intend it to be for use with CSL (my own Lisp). I am putting in * a switch that causes generation of something a bit more like Common * Lisp but please do not expect this to be fully sorted out and * suitable for use with full Common Lisp: again it is tuned to my own * private purposes... * * I will think about making this work with Bison as wall as Yacc but * maybe I prefer the licence terms associated with Yacc. But it is quite * certain that if you receive this code and can make it work with Bison * you can use it internally: the only issues are to do with distribution, * and if you are careful to use a sufficiently modern release of Bison * its skeleton code may be distributed without bad license consequences. * * Usage: * r2l -common -rights -Dname=val source1.red ... sourcen.red dest.lsp */ /* * This code may be used and modified, and redistributed in binary * or source form, subject to the "CCL Public License", which should * accompany it. This license is a variant on the BSD license, and thus * permits use of code derived from this in either open and commercial * projects: but it does require that updates to this code be made * available back to the originators of the package. * Before merging other code in with this or linking this code * with other packages or libraries please check that the license terms * of the other material are compatible with those of this. */ /* Signature: 7db71bcc 21-Apr-2002 */ #include <stdio.h> #include <string.h> #include <ctype.h> #include <stdlib.h> int *heap; int heapfringe = 0; int yyparse(); FILE *inputfile, *outputfile; FILE *filestack[30]; int filestackp = 0; char *defined_names[20]; int n_defined_names; int common; static char *rights_message[] = { "", " This code may be used and modified, and redistributed in binary", " or source form, subject to the \"CCL Public License\", which should", " accompany it. This license is a variant on the BSD license, and thus", " permits use of code derived from this in either open and commercial", " projects: but it does require that updates to this code be made", " available back to the originators of the package.", " Before merging other code in with this or linking this code", " with other packages or libraries please check that the license terms", " of the other material are compatible with those of this.", "", NULL }; int main(int argc, char *argv[]) { int rights = 0; inputfile = NULL; outputfile = NULL; common = 0; /* * If the very first arg is "-common" pick that off. */ if (argc > 1 && strcmp(argv[1], "-common") == 0) { common = 1; printf("Common Lisp mode activated\n"); argv++; argc--; } /* * If the next arg is "-rights" then pick that off. */ if (argc > 1 && strcmp(argv[1], "-rights") == 0) { rights = 1; printf("Will insert re-distribution rights notice\n"); argv++; argc--; } /* * Pick off initial command-line things of the form "-D..." and store the * "..." bit. */ n_defined_names = 0; while (argc > 1 && argv[1][0] == '-' && argv[1][1] == 'D') { if (n_defined_names < 20) defined_names[n_defined_names++] = &argv[1][2]; argv++; argc--; } /* * If > 1 arg then final arg is destination. If only one arg then arg is * a source! */ if (argc > 2) { if (strcmp(argv[--argc], "-") == 0) outputfile = stdout; else outputfile = fopen(argv[argc], "w"); } if (outputfile == NULL) outputfile = stdout; if (common) fprintf(outputfile, "\n;; RLISP to LISP converter. A C Norman 2002\n"); else fprintf(outputfile, "\n%% RLISP to LISP converter. A C Norman 2002\n"); fprintf(outputfile, "\n\n"); if (rights) { char **p = rights_message; char *m; while ((m = *p++) != NULL) { fprintf(outputfile, "%s%s\n", (common ? ";;" : "%"), m); } fprintf(outputfile, "\n\n"); } heap = (int *)malloc(2000000); /* Rather arbitrary size! */ if (argc == 1) filestack[filestackp++] = stdin; else while (--argc != 0) { if ((inputfile = fopen(argv[argc], "r")) == NULL) printf("File %s not readable\n", argv[argc]); else filestack[filestackp++] = inputfile; } inputfile = filestack[--filestackp]; yyparse(); fclose(outputfile); printf("Finished...\n"); return 0; } char *lookup_name(char *s) { int i, n = strlen(s); for (i=0; i<n_defined_names; i++) { char *w = defined_names[i]; /* name or name=value */ if (strncmp(s, w, n) == 0 && w[n] == 0 || w[n] == '=') return (w[n]==0 ? "" : &w[n+1]); } return NULL; } char linebuffer[128]; int linep = 0; int ch = '\n'; int linecount = 1; int nextch() { if (ch == -1) return ch; /* end of file sticks */ for (;;) { ch = getc(inputfile); if (ch == -1 && filestackp != 0) { inputfile = filestack[--filestackp]; continue; } else break; } if (ch == '\n') linecount++; linebuffer[127 & linep++] = ch; return ch; } void yyerror(char *m) { int q = 0; fprintf(stderr, "\nSyntax error (%s) around line %d\n", m, linecount); if (linep >= 128) q = linep-128; while (q != linep) fprintf(stderr, "%c", linebuffer[127 & q++]); fprintf(stderr, "$$$"); while ((q = nextch()) != -1 && q != '\n') fprintf(stderr, "%c", q); fprintf(stderr, "\n"); fflush(stderr); exit(0); } typedef struct keyword_code { char *name; int code; } keyword_code; static keyword_code operators[]; int find_symbol(char *s) { char *r = (char *)&heap[heapfringe]; int len = strlen(s); strcpy(r, s); heapfringe += (len+4)/4; return (int)(r+1); } static int gennum = 1000; int genlabel() { char name[32]; sprintf(name, "lab%d", gennum++); return find_symbol(name); } int genvar() { char name[32]; sprintf(name, "var%d", gennum++); return find_symbol(name); } static int yylex(); #define C_nil ((int)0) #define qcar(x) (((int *)(x))[0]) #define qcdr(x) (((int *)(x))[1]) int cons(int a, int b) { int *r = &heap[heapfringe]; heapfringe += 2; qcar(r) = a; qcdr(r) = b; return (int)r; } int ncons(int a) { int *r = &heap[heapfringe]; heapfringe += 2; qcar(r) = a; qcdr(r) = C_nil; return (int)r; } int list1(int a) { return cons(a, C_nil); } int list2(int a, int b) { return cons(a, cons(b, C_nil)); } int list3(int a, int b, int c) { return cons(a, cons(b, cons(c, C_nil))); } int list4(int a, int b, int c, int d) { return cons(a, cons(b, cons(c, cons(d, C_nil)))); } int list5(int a, int b, int c, int d, int e) { return cons(a, cons(b, cons(c, cons(d, cons(e, C_nil))))); } int list6(int a, int b, int c, int d, int e, int f) { return cons(a, cons(b, cons(c, cons(d, cons(e, cons(f, C_nil)))))); } int list7(int a, int b, int c, int d, int e, int f, int g) { return cons(a, cons(b, cons(c, cons(d, cons(e, cons(f, cons(g, C_nil))))))); } int list8(int a, int b, int c, int d, int e, int f, int g, int h) { return cons(a, cons(b, cons(c, cons(d, cons(e, cons(f, cons(g, cons(h, C_nil)))))))); } int list9(int a, int b, int c, int d, int e, int f, int g, int h, int i) { return cons(a, cons(b, cons(c, cons(d, cons(e, cons(f, cons(g, cons(h, cons(i, C_nil))))))))); } int append(int a, int b) { if (a == C_nil || ((a & 1) != 0)) return b; else return cons(qcar(a), append(qcdr(a), b)); } #define atom(x) ((int)(x)==0 || (((int)(x)) & 1) != 0) int otlpos = 0; int checkspace(int n) { if (otlpos + n < 78) { otlpos += n; return 1; } fprintf(outputfile, "\n"); otlpos = n; return 0; } static char common_name[256]; char *tocommon(char *s) { int easy = 1, c; int p = 0, q = 0; if (s[0] == '"') return s; /* a string */ if (isdigit(s[0])) return s; /* a number */ while ((c = s[p++]) != 0) { if (c == '!') c = s[p++]; common_name[q++] = c; if (c == ':') common_name[q++] = c; /* double up ':' */ else if (!isalpha(c) && !isdigit(c) && c != '-' && c != '_' && c != '*' && c != '&' && c != '$') easy = 0; } common_name[q] = 0; if (!easy) { common_name[q+1] = '|'; common_name[q+2] = 0; while (q != 0) { common_name[q] = common_name[q-1]; q--; } common_name[0] = '|'; } return common_name; } void print(int a) { if (a == C_nil) { checkspace(3); fprintf(outputfile, "nil"); return; } else if (atom(a)) { char *s = ((char *)a) - 1; if (common) s = tocommon(s); checkspace(strlen(s)); fprintf(outputfile, "%s", s); return; } checkspace(1); fprintf(outputfile, "("); print(qcar(a)); a = qcdr(a); while (!atom(a)) { if (checkspace(1)) fprintf(outputfile, " "); print(qcar(a)); a = qcdr(a); } if ((int)a != 0) { checkspace(2); fprintf(outputfile, " ."); if (checkspace(1)) fprintf(outputfile, " "); print(a); } checkspace(1); fprintf(outputfile, ")"); } static void evalorprint(int a) { if (a != C_nil && !atom(a)) { int fn = qcar(a); if (fn != C_nil && atom(fn) && strcmp((char *)fn-1, "in")==0) { a = qcar(qcdr(a)); if (a != C_nil && !atom(a)) { fn = qcar(a); if (fn != C_nil && atom(fn) && strcmp((char *)fn-1, "list")==0) { a = qcar(qcdr(a)); if (a != C_nil && atom(a)) { FILE *f; char filename[200]; char *s = (char *)a-1; if (*s == '"') { s++; s[strlen(s)-1] = 0; } if (*s != '$') strcpy(filename, s); else { char parmname[200]; int k=0; char *val; s++; parmname[k++] = '@'; while (*s != '/') parmname[k++] = *s++; parmname[k] = 0; val = lookup_name(parmname); if (val == NULL) val = "."; strcpy(filename, val); strcat(filename, s); } f = fopen(filename, "r"); if (f == NULL) { printf("File \"%s\" not found\n", filename); exit(1); } filestack[filestackp++] = inputfile; inputfile = f; printf("READING FILE <%s>\n", filename); return; } } } } } print(a); } #define sym_0 find_symbol("0") #define sym_car find_symbol("car") #define sym_cdr find_symbol("cdr") /* I have reversip available even in Common Lisp mode for nreverse */ #define sym_reversip find_symbol("reversip") #define sym_plus find_symbol("plus") #define sym_minus find_symbol("minus") #define sym_minusp find_symbol("minusp") #define sym_getv find_symbol("getv") #define sym_difference find_symbol("difference") #define sym_times find_symbol("times") #define sym_quotient find_symbol("quotient") #define sym_expt find_symbol("expt") #define sym_cons find_symbol("cons") #define sym_list find_symbol("list") #define sym_progn find_symbol("progn") #define sym_prog find_symbol("prog") #define sym_de find_symbol("de") #define sym_dm find_symbol("dm") #define sym_ds find_symbol("ds") #define sym_greaterp find_symbol("greaterp") #define sym_lessp find_symbol("lessp") #define sym_equal find_symbol("equal") #define sym_setq find_symbol("setq") #define sym_and find_symbol("and") #define sym_or find_symbol("or") #define sym_not find_symbol("not") #define sym_member find_symbol("member") #define sym_memq find_symbol("memq") #define sym_neq find_symbol("neq") #define sym_eq find_symbol("eq") #define sym_geq find_symbol("geq") #define sym_leq find_symbol("leq") #define sym_freeof find_symbol("freeof") #define sym_symbolic find_symbol("symbolic") #define sym_algebraic find_symbol("algebraic") #define sym_expr find_symbol("expr") #define sym_macro find_symbol("macro") #define sym_smacro find_symbol("smacro") #define sym_procedure find_symbol("procedure") #define sym_for find_symbol("for") #define sym_step find_symbol("step") #define sym_until find_symbol("until") #define sym_each find_symbol("each") #define sym_foreach find_symbol("foreach") #define sym_in find_symbol("in") #define sym_on find_symbol("on") #define sym_do find_symbol("do") #define sym_collect find_symbol("collect") #define sym_sum find_symbol("sum") #define sym_if find_symbol("if") #define sym_then find_symbol("then") #define sym_else find_symbol("else") #define sym_repeat find_symbol("repeat") #define sym_while find_symbol("while") #define sym_begin find_symbol("begin") #define sym_end find_symbol("end") #define sym_lsect find_symbol("<<") #define sym_rsect find_symbol(">>") #define sym_go find_symbol("go") #define sym_to find_symbol("to") #define sym_goto find_symbol("goto") #define sym_scalar find_symbol("scalar") #define sym_integer find_symbol("integer") #define sym_lambda find_symbol("lambda") #define sym_symbol find_symbol("symbol") #define sym_number find_symbol("number") #define sym_string find_symbol("string") #define sym_quoted find_symbol("quoted") #define sym_return find_symbol("return") #define sym_where find_symbol("where") #define sym_rlistat find_symbol("rlistat") #define sym_endstat find_symbol("endstat") #define sym_null find_symbol("null") int make_where(int body, int var, int val) { return list2( list3(sym_lambda, list1(var), body), val); } int make_in_do(int var, int input, int body) { int lab1 = genlabel(); int var1 = genvar(); return list8(sym_prog, list1(var1), list3(sym_setq, var1, input), lab1, list3(sym_if, list2(sym_null, var1), list2(sym_return, C_nil)), list4(sym_prog, list1(var), list3(sym_setq, var, list2(sym_car, var1)), body), list3(sym_setq, var1, list2(sym_cdr, var1)), list2(sym_go, lab1)); } int make_on_do(int var, int input, int body) { int lab1 = genlabel(); return list8(sym_prog, list1(var), list3(sym_setq, var, input), lab1, list3(sym_if, list2(sym_null, var), list2(sym_return, C_nil)), body, list3(sym_setq, var, list2(sym_cdr, var)), list2(sym_go, lab1)); } int make_in_collect(int var, int input, int body) { int lab1 = genlabel(); int var1 = genvar(); int var2 = genvar(); return list8(sym_prog, list2(var1, var2), list3(sym_setq, var1, input), lab1, list3(sym_if, list2(sym_null, var1), list2(sym_return, list2(sym_reversip, var2))), list4(sym_prog, list1(var), list3(sym_setq, var, list2(sym_car, var1)), list3(sym_setq, var2, list3(sym_cons, body, var2))), list3(sym_setq, var1, list2(sym_cdr, var1)), list2(sym_go, lab1)); } int make_on_collect(int var, int input, int body) { int lab1 = genlabel(); int var2 = genvar(); return list8(sym_prog, list1(var), list3(sym_setq, var, input), lab1, list3(sym_if, list2(sym_null, var), list2(sym_return, list2(sym_reversip, var2))), list3(sym_setq, var2, list3(sym_cons, body, var2)), list3(sym_setq, var, list2(sym_cdr, var)), list2(sym_go, lab1)); } int make_in_sum(int var, int input, int body) { int lab1 = genlabel(); int var1 = genvar(); int var2 = genvar(); return list9(sym_prog, list2(var1, var2), list3(sym_setq, var1, input), list3(sym_setq, var2, sym_0), lab1, list3(sym_if, list2(sym_null, var1), list2(sym_return, var2)), list4(sym_prog, list1(var), list3(sym_setq, var, list2(sym_car, var1)), list3(sym_setq, var2, list3(sym_plus, body, var2))), list3(sym_setq, var1, list2(sym_cdr, var1)), list2(sym_go, lab1)); } int make_foreach(int var, int type, int input, int action, int body) { int inon = 0, docollect = 0; if (strcmp((char *)type-1, "on") == 0) inon = 1; if (strcmp((char *)action-1, "collect") == 0) docollect = 1; else if (strcmp((char *)action-1, "sum") == 0) docollect = 2; switch (inon+2*docollect) { case 0: /* in/do */ return make_in_do(var, input, body); case 1: /* on/do */ return make_on_do(var, input, body); case 2: /* in/collect */ return make_in_collect(var, input, body); case 3: /* on/collect */ return make_on_collect(var, input, body); case 4: /* in/sum */ return make_in_sum(var, input, body); case 5: /* on/sum WHICH CAN NOT MAKE SENSE */ default: return C_nil; } } int for_do(int var, int init, int step, int end, int body) { int lab1 = genlabel(); return list8(sym_prog, list1(var), list3(sym_setq, var, init), lab1, list3(sym_if, list2(sym_minusp, list3(sym_times, step, list3(sym_difference, end, var))), list2(sym_return, C_nil)), body, list3(sym_setq, var, list3(sym_plus, var, step)), list2(sym_go, lab1)); } int for_collect(int var, int init, int step, int end, int body) { int lab1 = genlabel(); int var1 = genvar(); return list8(sym_prog, list2(var, var1), list3(sym_setq, var, init), lab1, list3(sym_if, list2(sym_minusp, list3(sym_times, step, list3(sym_difference, end, var))), list2(sym_return, list2(sym_reversip, var1))), list3(sym_setq, var1, list3(sym_cons, body, var1)), list3(sym_setq, var, list3(sym_plus, var, step)), list2(sym_go, lab1)); } int for_sum(int var, int init, int step, int end, int body) { int lab1 = genlabel(); int var1 = genvar(); return list9(sym_prog, list2(var, var1), list3(sym_setq, var, init), list3(sym_setq, var1, sym_0), lab1, list3(sym_if, list2(sym_minusp, list3(sym_times, step, list3(sym_difference, end, var))), list2(sym_return, var1)), list3(sym_setq, var1, list3(sym_plus, body, var1)), list3(sym_setq, var, list3(sym_plus, var, step)), list2(sym_go, lab1)); } int make_for(int var, int init, int step, int end, int action, int body) { int docollect = 0; if (strcmp((char *)action-1, "collect") == 0) docollect = 1; else if (strcmp((char *)action-1, "sum") == 0) docollect = 2; switch (docollect) { case 0: /* do */ return for_do(var, init, step, end, body); case 1: /* collect */ return for_collect(var, init, step, end, body); case 2: /* sum */ return for_sum(var, init, step, end, body); default: return C_nil; } } int lex_eof = 0; #line 716 "r2l.c" #define SETQ 257 #define AND 258 #define OR 259 #define NOT 260 #define MEMBER 261 #define MEMQ 262 #define NEQ 263 #define EQ 264 #define GEQ 265 #define LEQ 266 #define FREEOF 267 #define SYMBOLIC 268 #define ALGEBRAIC 269 #define EXPR 270 #define MACRO 271 #define SMACRO 272 #define PROCEDURE 273 #define FOR 274 #define STEP 275 #define UNTIL 276 #define EACH 277 #define FOREACH 278 #define IN 279 #define ON 280 #define DO 281 #define COLLECT 282 #define SUM 283 #define IF 284 #define THEN 285 #define ELSE 286 #define REPEAT 287 #define WHILE 288 #define BEGIN 289 #define END 290 #define ENDFILE 291 #define LSECT 292 #define RSECT 293 #define GO 294 #define TO 295 #define GOTO 296 #define SCALAR 297 #define INTEGER 298 #define LAMBDA 299 #define SYMBOL 300 #define NUMBER 301 #define STRING 302 #define LIST 303 #define RETURN 304 #define WHERE 305 #define RLISTAT 306 #define ENDSTAT 307 #define HASHIF 308 #define HASHELSE 309 #define HASHELIF 310 #define HASHENDIF 311 #define YYERRCODE 256 static YYCONST short yylhs[] = { -1, 0, 0, 1, 1, 1, 1, 3, 3, 4, 4, 5, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 12, 12, 2, 2, 14, 14, 15, 15, 16, 16, 16, 17, 17, 18, 18, 18, 19, 20, 21, 21, 22, 22, 22, 23, 23, 23, 24, 25, 25, 25, 26, 26, 27, 27, 28, 28, 28, 28, 28, 29, 29, 30, 30, 31, 31, 31, 13, 13, 32, 32, 33, 33, 34, 34, 35, 35, 38, 38, 37, 37, 41, 41, 36, 36, 42, 42, 39, 39, 45, 45, 40, 40, 43, 43, 44, 44, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 49, 49, 51, 51, 52, 52, 50, 50, 57, 57, 48, 48, 53, 53, 56, 56, 54, 54, 55, 55, 58, 58, 59, 59, 59, 60, 60, 61, 61, 61, 64, 64, 62, 62, 69, 69, 63, 63, 65, 65, 65, 65, 68, 68, 66, 66, 66, 66, 67, 67, 72, 72, 72, 72, 73, 73, 70, 70, 70, 70, 71, 71, 76, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 78, 78, 78, 78, 74, 74, 79, 79, 80, 81, 82, 82, 82, 82, 82, 82, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 83, 83, 83, 83, 83, 83, }; static YYCONST short yylen[] = { 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 2, 3, 4, 5, 5, 6, 1, 1, 1, 1, 3, 1, 2, 6, 4, 2, 4, 1, 1, 1, 1, 1, 7, 7, 6, 4, 4, 1, 2, 2, 2, 3, 1, 2, 3, 3, 1, 3, 3, 3, 3, 1, 2, 1, 2, 3, 3, 2, 3, 2, 1, 3, 4, 5, 6, 1, 1, 5, 1, 5, 1, 3, 1, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 1, 2, 1, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 2, 1, 2, 1, 1, 3, 3, 1, 1, 3, 3, 1, 2, 1, 3, 1, 2, 1, 3, 1, 2, 1, 2, 2, 1, 2, 1, 2, 2, 1, 1, 3, 3, 1, 1, 3, 3, 1, 2, 2, 2, 1, 3, 1, 2, 2, 2, 1, 3, 1, 2, 2, 2, 1, 3, 1, 2, 2, 2, 1, 3, 1, 2, 2, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 3, 1, 1, 3, 3, 5, 4, 3, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, }; static YYCONST short yydefred[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 11, 12, 13, 0, 0, 0, 49, 50, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 253, 254, 255, 256, 0, 48, 224, 0, 0, 0, 0, 0, 0, 0, 0, 223, 0, 53, 216, 217, 218, 219, 220, 221, 257, 258, 222, 97, 0, 100, 102, 0, 104, 110, 0, 118, 0, 124, 126, 0, 137, 0, 156, 164, 168, 173, 178, 0, 182, 192, 198, 0, 210, 0, 242, 241, 0, 0, 243, 245, 244, 0, 123, 125, 246, 247, 248, 249, 250, 251, 252, 35, 0, 36, 37, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 7, 8, 0, 0, 83, 0, 91, 6, 0, 0, 72, 71, 0, 0, 70, 0, 171, 170, 176, 175, 172, 177, 0, 2, 3, 0, 4, 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, 238, 239, 0, 16, 18, 17, 19, 20, 22, 23, 24, 26, 28, 39, 21, 25, 27, 29, 30, 31, 32, 33, 34, 0, 0, 42, 0, 0, 0, 62, 63, 0, 0, 0, 0, 0, 0, 0, 86, 0, 89, 84, 90, 74, 0, 77, 73, 0, 92, 0, 0, 0, 169, 174, 233, 0, 0, 0, 0, 0, 103, 105, 109, 107, 0, 113, 117, 115, 0, 121, 0, 152, 127, 150, 138, 128, 139, 130, 141, 131, 142, 132, 143, 134, 145, 136, 147, 129, 140, 133, 144, 135, 146, 0, 155, 153, 0, 0, 162, 159, 163, 167, 0, 0, 0, 181, 179, 0, 0, 190, 185, 0, 0, 0, 191, 208, 197, 202, 209, 203, 0, 0, 0, 228, 214, 215, 229, 236, 0, 0, 0, 0, 40, 43, 44, 0, 0, 0, 0, 68, 67, 0, 78, 81, 82, 87, 88, 75, 0, 0, 94, 14, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 149, 151, 161, 165, 0, 187, 193, 188, 194, 189, 195, 0, 205, 199, 206, 200, 207, 201, 211, 225, 212, 226, 213, 227, 235, 0, 41, 0, 0, 0, 0, 59, 61, 60, 0, 0, 0, 0, 76, 93, 0, 0, 95, 45, 0, 46, 99, 101, 108, 112, 116, 120, 154, 158, 180, 184, 231, 0, 234, 0, 0, 57, 0, 66, 55, 80, 79, 15, 96, 47, 0, 65, 0, 64, 232, 58, }; static YYCONST short yydgoto[] = { 42, 43, 121, 122, 93, 46, 326, 197, 107, 108, 47, 48, 148, 49, 50, 365, 369, 204, 51, 52, 53, 54, 55, 218, 56, 316, 123, 124, 125, 57, 222, 58, 59, 60, 61, 62, 63, 64, 235, 65, 66, 238, 239, 67, 68, 242, 69, 70, 71, 245, 72, 247, 267, 268, 269, 73, 74, 272, 135, 75, 137, 76, 77, 78, 278, 279, 280, 79, 80, 283, 287, 81, 289, 82, 83, 84, 298, 85, 299, 393, 86, 90, 87, 88, }; static YYCONST short yysindex[] = { 1038, 14, 14, 14, 1303, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, -13, -235, -227, 0, 0, 1303, 1199, 1303, -28, 12, 0, 1199, -234, -219, -35, 0, 0, 0, 0, 1303, 0, 0, 1358, 1358, 1303, 0, 1038, 12, 20, -174, 0, 1303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -191, 0, 0, -124, 0, 0, -131, 0, -120, 0, 0, 50, 0, 111, 0, 0, 0, 0, 0, 28, 0, 0, 0, 48, 0, 107, 0, 0, 38, 1303, 0, 0, 0, -149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1925, 0, 0, -133, 12, -115, -99, -173, -126, -101, -88, 0, -103, -91, 141, 0, 0, -23, 151, 0, -28, 0, 0, -16, -87, 0, 0, 3, -19, 0, 1358, 0, 0, 0, 0, 0, 0, 175, 0, 0, -13, 0, -56, -13, 0, 205, -81, 1303, 1303, 1303, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1553, 1358, 1608, 1659, 1659, 1736, 1449, 1303, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, -72, 0, 1199, -173, 1303, 0, 0, 1303, 1199, 1303, 1199, 13, 13, 151, 0, 151, 0, 0, 0, 0, 1148, 0, 0, -15, 0, 1199, 33, 12, 0, 0, 0, 12, -13, 12, 1303, 223, 0, 0, 0, 0, 21, 0, 0, 0, 31, 0, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1553, 0, 0, 243, 249, 0, 0, 0, 0, 1608, 1608, 1608, 0, 0, 255, 251, 0, 0, 1659, 1659, 1659, 0, 0, 0, 0, 0, 0, 1736, 1736, 1736, 0, 0, 0, 0, 0, 39, 208, 1303, 33, 0, 0, 0, 1303, -51, -179, 16, 0, 0, -240, 0, 0, 0, 0, 0, 0, -16, 3, 0, 0, 18, 12, 1199, 1199, 12, 1199, 0, 1303, 1303, 1303, 0, 0, 0, 0, 1553, 0, 0, 0, 0, 0, 0, 1608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, -179, 1303, 1303, -179, 0, 0, 0, 1199, 1199, 13, 13, 0, 0, 33, 1199, 0, 0, 1199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1303, 0, 1199, 43, 0, 1199, 0, 0, 0, 0, 0, 0, 0, 56, 0, 1303, 0, 0, 0, }; static YYCONST short yyrindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1792, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1847, 0, 0, 930, 0, 0, 970, 0, 904, 0, 0, 710, 0, 789, 0, 0, 0, 0, 0, 553, 0, 0, 0, 457, 0, 420, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1933, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 983, 0, 0, 0, 943, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 849, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 598, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static YYCONST short yygindex[] = { 277, 0, 1, -26, 41, -34, -277, 0, 0, -109, 0, 0, 95, -20, 0, 0, -298, 132, 0, 0, 0, 0, 0, 26, 0, -199, 210, 0, -9, 0, 27, 0, 0, 0, -142, -125, 0, 0, 4, -119, -118, 9, 19, -1, 2, 35, 0, 0, -69, 424, 329, 445, -4, 82, 84, -150, -127, 22, 15, 6, 23, 11, 0, 0, 5, -158, -145, -141, -98, 8, -116, -59, 184, 90, -129, -73, -168, 0, -40, -50, 285, 619, 290, 0, }; #define YYTABLESIZE 2298 static YYCONST short yytable[] = { 126, 44, 112, 94, 114, 132, 95, 364, 120, 233, 317, 146, 41, 120, 270, 39, 133, 40, 143, 145, 120, 141, 224, 305, 113, 281, 234, 361, 149, 127, 105, 119, 106, 236, 237, 228, 119, 271, 230, 120, 296, 45, 109, 119, 44, 136, 136, 220, 120, 120, 138, 138, 291, 38, 89, 139, 120, 314, 371, 146, 372, 128, 119, 140, 394, 110, 129, 397, 282, 175, 166, 119, 119, 111, 324, 167, 38, 325, 170, 119, 227, 130, 199, 303, 45, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 212, 297, 391, 402, 147, 392, 217, 366, 367, 368, 221, 202, 203, 288, 288, 163, 161, 162, 213, 150, 215, 270, 340, 342, 344, 329, 14, 15, 16, 144, 353, 355, 357, 152, 171, 341, 343, 345, 151, 281, 281, 281, 253, 153, 271, 136, 253, 168, 253, 253, 138, 253, 253, 253, 225, 301, 302, 240, 169, 164, 241, 165, 226, 201, 205, 253, 253, 253, 253, 296, 296, 296, 198, 347, 349, 351, 136, 400, 401, 244, 206, 138, 282, 282, 282, 273, 309, 315, 315, 310, 200, 312, 120, 274, 270, 381, 41, 253, 207, 39, 253, 40, 208, 327, 210, 307, 318, 328, 319, 330, 281, 311, 382, 313, 209, 119, 149, 271, 219, 236, 237, 227, 229, 321, 232, 297, 297, 297, 323, 363, 288, 288, 288, 306, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 103, 282, 231, 19, 20, 21, 354, 356, 358, 22, 290, 290, 23, 24, 25, 115, 303, 28, 131, 29, 211, 30, 116, 117, 31, 118, 33, 34, 35, 36, 216, 37, 38, 333, 223, 304, 360, 332, 322, 339, 104, 362, 334, 14, 15, 16, 144, 165, 217, 221, 346, 167, 240, 376, 359, 370, 379, 240, 240, 240, 240, 240, 240, 240, 154, 155, 156, 157, 158, 159, 160, 375, 407, 142, 240, 240, 240, 240, 240, 331, 25, 377, 378, 28, 380, 308, 240, 214, 387, 241, 383, 32, 33, 34, 35, 384, 395, 396, 315, 315, 373, 337, 374, 338, 389, 292, 385, 390, 409, 240, 240, 253, 253, 253, 388, 253, 253, 253, 253, 253, 253, 253, 386, 398, 399, 405, 172, 290, 290, 290, 403, 174, 0, 404, 0, 0, 0, 0, 0, 0, 410, 0, 0, 253, 253, 0, 253, 0, 406, 0, 0, 408, 0, 0, 253, 253, 253, 253, 0, 253, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 0, 0, 0, 19, 20, 21, 0, 0, 0, 22, 0, 0, 23, 24, 25, 115, 0, 28, 0, 29, 0, 30, 0, 0, 31, 118, 33, 34, 35, 36, 230, 37, 38, 0, 0, 230, 230, 230, 230, 230, 0, 230, 348, 350, 352, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 204, 0, 0, 0, 0, 204, 204, 204, 204, 204, 0, 204, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 204, 204, 204, 204, 204, 240, 240, 240, 0, 240, 240, 240, 240, 240, 240, 240, 0, 0, 0, 0, 0, 0, 0, 240, 240, 0, 0, 0, 0, 240, 240, 240, 0, 240, 240, 204, 0, 196, 240, 0, 0, 240, 196, 196, 196, 196, 196, 0, 0, 0, 0, 0, 0, 240, 0, 0, 0, 246, 0, 196, 196, 196, 196, 196, 248, 250, 252, 254, 256, 258, 260, 262, 264, 0, 186, 0, 0, 0, 0, 186, 0, 186, 186, 186, 0, 249, 251, 253, 255, 257, 259, 261, 263, 265, 196, 0, 186, 186, 186, 186, 186, 0, 0, 0, 0, 0, 91, 92, 0, 96, 97, 98, 99, 100, 101, 102, 0, 0, 0, 183, 0, 0, 0, 0, 183, 0, 183, 183, 183, 0, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 183, 183, 183, 183, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 0, 230, 230, 230, 230, 230, 230, 230, 336, 0, 0, 183, 0, 0, 0, 230, 230, 0, 0, 0, 0, 230, 230, 230, 166, 230, 230, 173, 0, 166, 230, 166, 166, 230, 204, 204, 204, 0, 204, 204, 204, 204, 204, 204, 204, 230, 166, 166, 166, 166, 166, 0, 204, 204, 0, 0, 0, 0, 204, 204, 204, 0, 204, 204, 0, 0, 148, 204, 0, 0, 204, 148, 0, 0, 148, 0, 0, 0, 0, 0, 0, 166, 204, 0, 0, 0, 0, 0, 148, 148, 0, 0, 0, 196, 196, 196, 0, 196, 196, 196, 196, 196, 196, 196, 0, 0, 0, 0, 0, 0, 0, 196, 196, 0, 0, 0, 0, 196, 196, 196, 0, 196, 196, 148, 0, 0, 196, 0, 0, 196, 186, 186, 186, 0, 186, 186, 186, 186, 186, 186, 186, 196, 0, 0, 0, 160, 0, 0, 186, 186, 160, 0, 0, 160, 186, 186, 186, 0, 186, 186, 0, 0, 0, 186, 0, 0, 186, 160, 160, 160, 160, 160, 0, 0, 0, 183, 183, 183, 186, 183, 183, 183, 183, 183, 183, 183, 0, 0, 0, 0, 0, 0, 0, 183, 183, 0, 0, 0, 0, 183, 183, 183, 160, 183, 183, 157, 0, 0, 183, 0, 157, 183, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 183, 0, 0, 0, 157, 157, 157, 157, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 166, 166, 0, 166, 166, 166, 166, 166, 166, 166, 0, 0, 0, 0, 122, 0, 157, 166, 166, 122, 0, 0, 122, 166, 166, 166, 0, 166, 166, 0, 0, 0, 166, 0, 0, 166, 122, 122, 0, 0, 106, 148, 148, 148, 0, 106, 0, 166, 106, 0, 0, 0, 0, 119, 0, 0, 0, 0, 119, 148, 148, 119, 106, 106, 0, 148, 148, 148, 0, 148, 148, 122, 0, 0, 148, 119, 119, 148, 0, 0, 114, 0, 0, 0, 0, 114, 0, 0, 114, 148, 0, 0, 0, 111, 0, 0, 0, 106, 111, 0, 0, 111, 114, 114, 0, 0, 0, 0, 0, 0, 119, 0, 0, 0, 0, 111, 111, 0, 0, 0, 160, 160, 160, 0, 160, 160, 160, 160, 160, 160, 160, 0, 0, 0, 0, 0, 0, 114, 160, 160, 0, 0, 0, 0, 160, 160, 160, 0, 160, 160, 111, 0, 41, 160, 0, 39, 160, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 157, 157, 0, 157, 157, 157, 157, 157, 157, 157, 0, 0, 0, 0, 0, 0, 0, 157, 157, 0, 0, 0, 0, 157, 157, 157, 5, 157, 157, 5, 0, 5, 157, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 122, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 122, 0, 0, 0, 0, 122, 122, 122, 41, 122, 122, 39, 0, 40, 122, 0, 0, 122, 0, 0, 119, 0, 119, 0, 0, 106, 106, 0, 0, 122, 0, 106, 106, 106, 0, 106, 106, 0, 119, 119, 106, 0, 0, 106, 119, 119, 119, 114, 119, 119, 0, 0, 0, 119, 0, 106, 119, 0, 0, 41, 111, 0, 39, 0, 40, 114, 114, 0, 119, 0, 0, 114, 114, 114, 0, 114, 114, 0, 111, 111, 114, 0, 0, 114, 111, 111, 111, 0, 111, 111, 0, 0, 0, 111, 0, 114, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 0, 0, 0, 19, 20, 21, 0, 0, 0, 22, 0, 0, 23, 24, 25, 26, 27, 28, 0, 29, 0, 30, 0, 0, 31, 32, 33, 34, 35, 36, 41, 37, 38, 39, 0, 40, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 0, 0, 0, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 0, 0, 5, 5, 5, 5, 5, 5, 41, 5, 5, 39, 0, 40, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 0, 0, 0, 19, 20, 21, 0, 0, 0, 22, 0, 0, 23, 24, 25, 0, 0, 28, 320, 29, 0, 30, 0, 0, 31, 32, 33, 34, 35, 36, 0, 37, 38, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 0, 0, 0, 19, 20, 21, 0, 0, 0, 22, 0, 0, 23, 24, 25, 41, 300, 28, 39, 29, 40, 30, 0, 0, 31, 32, 33, 34, 35, 36, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 39, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 22, 0, 0, 23, 24, 25, 41, 0, 28, 39, 29, 40, 30, 0, 0, 31, 32, 33, 34, 35, 36, 0, 0, 38, 0, 0, 0, 0, 1, 2, 3, 134, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 22, 0, 0, 23, 24, 25, 41, 0, 28, 276, 29, 277, 30, 0, 0, 31, 32, 33, 34, 35, 36, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 285, 0, 286, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 0, 0, 0, 19, 0, 0, 0, 0, 0, 22, 0, 0, 23, 24, 25, 0, 0, 28, 0, 29, 0, 30, 0, 0, 31, 32, 33, 34, 35, 36, 0, 0, 38, 1, 2, 3, 243, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 0, 41, 0, 19, 294, 0, 295, 0, 0, 22, 0, 0, 23, 24, 25, 0, 0, 28, 0, 29, 0, 30, 0, 0, 31, 32, 33, 34, 35, 36, 0, 0, 38, 0, 0, 1, 2, 3, 266, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 69, 0, 0, 19, 0, 69, 0, 0, 69, 22, 0, 0, 23, 24, 25, 0, 0, 28, 0, 29, 0, 30, 69, 69, 31, 32, 33, 34, 35, 36, 0, 0, 38, 0, 0, 0, 0, 1, 2, 3, 275, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 98, 0, 69, 19, 0, 98, 0, 0, 98, 22, 0, 0, 23, 24, 25, 0, 0, 28, 0, 29, 0, 30, 98, 98, 31, 32, 33, 34, 35, 36, 0, 0, 38, 1, 2, 3, 284, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 0, 0, 0, 19, 0, 0, 98, 0, 0, 22, 0, 0, 23, 24, 25, 0, 0, 28, 0, 29, 0, 30, 0, 0, 31, 32, 33, 34, 35, 36, 0, 196, 38, 192, 190, 51, 191, 195, 193, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 187, 188, 0, 0, 0, 51, 51, 1, 2, 3, 293, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 0, 0, 0, 19, 0, 0, 0, 0, 194, 22, 0, 0, 23, 24, 25, 51, 0, 28, 0, 29, 0, 30, 0, 0, 31, 32, 33, 34, 35, 36, 56, 0, 38, 0, 0, 56, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 0, 0, 69, 69, 0, 0, 0, 0, 69, 69, 69, 0, 69, 69, 0, 0, 0, 69, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 98, 0, 0, 0, 0, 98, 98, 98, 0, 98, 98, 0, 0, 0, 98, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 177, 178, 0, 179, 180, 181, 182, 183, 184, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 51, 0, 0, 0, 0, 51, 51, 51, 0, 51, 51, 0, 0, 0, 51, 0, 186, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, 0, 0, 0, 0, 56, 56, 56, 0, 56, 0, 0, 0, 0, 56, 0, 0, 56, }; static YYCONST short yycheck[] = { 26, 0, 22, 4, 24, 40, 4, 58, 36, 151, 209, 45, 40, 36, 164, 43, 36, 45, 44, 45, 36, 41, 41, 41, 23, 166, 151, 304, 48, 28, 43, 59, 45, 152, 152, 144, 59, 164, 147, 36, 169, 0, 277, 59, 43, 39, 40, 44, 36, 36, 39, 40, 168, 36, 40, 40, 36, 44, 298, 93, 300, 295, 59, 40, 362, 300, 300, 365, 166, 89, 42, 59, 59, 300, 41, 47, 59, 44, 40, 59, 41, 300, 108, 44, 43, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 121, 169, 41, 375, 273, 44, 127, 281, 282, 283, 131, 279, 280, 167, 168, 60, 61, 62, 122, 305, 124, 266, 275, 276, 277, 229, 270, 271, 272, 273, 293, 294, 295, 259, 91, 275, 276, 277, 257, 275, 276, 277, 36, 258, 266, 134, 40, 94, 42, 43, 134, 45, 46, 47, 134, 170, 171, 153, 46, 43, 153, 45, 134, 257, 285, 59, 60, 61, 62, 293, 294, 295, 300, 284, 285, 286, 165, 371, 372, 243, 276, 165, 275, 276, 277, 165, 201, 208, 209, 204, 300, 206, 36, 165, 339, 332, 40, 91, 281, 43, 94, 45, 300, 224, 58, 199, 210, 228, 212, 230, 346, 205, 332, 207, 300, 59, 231, 339, 300, 333, 333, 41, 273, 217, 300, 293, 294, 295, 222, 275, 284, 285, 286, 300, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 260, 346, 44, 278, 279, 280, 293, 294, 295, 284, 167, 168, 287, 288, 289, 290, 44, 292, 300, 294, 290, 296, 297, 298, 299, 300, 301, 302, 303, 304, 293, 306, 307, 259, 300, 300, 303, 61, 300, 43, 300, 308, 258, 270, 271, 272, 273, 45, 321, 322, 42, 47, 36, 326, 93, 286, 329, 41, 42, 43, 44, 45, 46, 47, 261, 262, 263, 264, 265, 266, 267, 300, 276, 43, 58, 59, 60, 61, 62, 231, 289, 327, 328, 292, 330, 200, 334, 124, 339, 334, 333, 300, 301, 302, 303, 333, 363, 364, 371, 372, 321, 266, 322, 266, 346, 168, 334, 346, 405, 93, 94, 257, 258, 259, 339, 261, 262, 263, 264, 265, 266, 267, 334, 369, 370, 392, 88, 284, 285, 286, 376, 88, -1, 379, -1, -1, -1, -1, -1, -1, 407, -1, -1, 289, 290, -1, 292, -1, 394, -1, -1, 397, -1, -1, 300, 301, 302, 303, -1, 305, -1, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, -1, -1, -1, 278, 279, 280, -1, -1, -1, 284, -1, -1, 287, 288, 289, 290, -1, 292, -1, 294, -1, 296, -1, -1, 299, 300, 301, 302, 303, 304, 36, 306, 307, -1, -1, 41, 42, 43, 44, 45, -1, 47, 284, 285, 286, -1, -1, -1, -1, -1, -1, -1, 58, 59, 60, 61, 62, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 36, -1, -1, -1, -1, 41, 42, 43, 44, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, 93, 94, 58, 59, 60, 61, 62, 257, 258, 259, -1, 261, 262, 263, 264, 265, 266, 267, -1, -1, -1, -1, -1, -1, -1, 275, 276, -1, -1, -1, -1, 281, 282, 283, -1, 285, 286, 93, -1, 36, 290, -1, -1, 293, 41, 42, 43, 44, 45, -1, -1, -1, -1, -1, -1, 305, -1, -1, -1, 243, -1, 58, 59, 60, 61, 62, 155, 156, 157, 158, 159, 160, 161, 162, 163, -1, 36, -1, -1, -1, -1, 41, -1, 43, 44, 45, -1, 155, 156, 157, 158, 159, 160, 161, 162, 163, 93, -1, 58, 59, 60, 61, 62, -1, -1, -1, -1, -1, 2, 3, -1, 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, 36, -1, -1, -1, -1, 41, -1, 43, 44, 45, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, 60, 61, 62, -1, -1, -1, -1, -1, -1, 243, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, -1, 261, 262, 263, 264, 265, 266, 267, 243, -1, -1, 93, -1, -1, -1, 275, 276, -1, -1, -1, -1, 281, 282, 283, 36, 285, 286, 88, -1, 41, 290, 43, 44, 293, 257, 258, 259, -1, 261, 262, 263, 264, 265, 266, 267, 305, 58, 59, 60, 61, 62, -1, 275, 276, -1, -1, -1, -1, 281, 282, 283, -1, 285, 286, -1, -1, 36, 290, -1, -1, 293, 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, 93, 305, -1, -1, -1, -1, -1, 58, 59, -1, -1, -1, 257, 258, 259, -1, 261, 262, 263, 264, 265, 266, 267, -1, -1, -1, -1, -1, -1, -1, 275, 276, -1, -1, -1, -1, 281, 282, 283, -1, 285, 286, 93, -1, -1, 290, -1, -1, 293, 257, 258, 259, -1, 261, 262, 263, 264, 265, 266, 267, 305, -1, -1, -1, 36, -1, -1, 275, 276, 41, -1, -1, 44, 281, 282, 283, -1, 285, 286, -1, -1, -1, 290, -1, -1, 293, 58, 59, 60, 61, 62, -1, -1, -1, 257, 258, 259, 305, 261, 262, 263, 264, 265, 266, 267, -1, -1, -1, -1, -1, -1, -1, 275, 276, -1, -1, -1, -1, 281, 282, 283, 93, 285, 286, 36, -1, -1, 290, -1, 41, 293, -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, 305, -1, -1, -1, 58, 59, 60, 61, 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, -1, 261, 262, 263, 264, 265, 266, 267, -1, -1, -1, -1, 36, -1, 93, 275, 276, 41, -1, -1, 44, 281, 282, 283, -1, 285, 286, -1, -1, -1, 290, -1, -1, 293, 58, 59, -1, -1, 36, 257, 258, 259, -1, 41, -1, 305, 44, -1, -1, -1, -1, 36, -1, -1, -1, -1, 41, 275, 276, 44, 58, 59, -1, 281, 282, 283, -1, 285, 286, 93, -1, -1, 290, 58, 59, 293, -1, -1, 36, -1, -1, -1, -1, 41, -1, -1, 44, 305, -1, -1, -1, 36, -1, -1, -1, 93, 41, -1, -1, 44, 58, 59, -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, 58, 59, -1, -1, -1, 257, 258, 259, -1, 261, 262, 263, 264, 265, 266, 267, -1, -1, -1, -1, -1, -1, 93, 275, 276, -1, -1, -1, -1, 281, 282, 283, -1, 285, 286, 93, -1, 40, 290, -1, 43, 293, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 305, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, -1, 261, 262, 263, 264, 265, 266, 267, -1, -1, -1, -1, -1, -1, -1, 275, 276, -1, -1, -1, -1, 281, 282, 283, 40, 285, 286, 43, -1, 45, 290, -1, -1, 293, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 305, -1, -1, -1, -1, -1, -1, 257, -1, 259, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 275, 276, -1, -1, -1, -1, 281, 282, 283, 40, 285, 286, 43, -1, 45, 290, -1, -1, 293, -1, -1, 257, -1, 259, -1, -1, 275, 276, -1, -1, 305, -1, 281, 282, 283, -1, 285, 286, -1, 275, 276, 290, -1, -1, 293, 281, 282, 283, 257, 285, 286, -1, -1, -1, 290, -1, 305, 293, -1, -1, 40, 257, -1, 43, -1, 45, 275, 276, -1, 305, -1, -1, 281, 282, 283, -1, 285, 286, -1, 275, 276, 290, -1, -1, 293, 281, 282, 283, -1, 285, 286, -1, -1, -1, 290, -1, 305, 293, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 305, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, -1, -1, -1, 278, 279, 280, -1, -1, -1, 284, -1, -1, 287, 288, 289, 290, 291, 292, -1, 294, -1, 296, -1, -1, 299, 300, 301, 302, 303, 304, 40, 306, 307, 43, -1, 45, -1, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, -1, -1, -1, 278, 279, 280, -1, -1, -1, 284, -1, -1, 287, 288, 289, 290, 291, 292, -1, 294, -1, 296, -1, -1, 299, 300, 301, 302, 303, 304, 40, 306, 307, 43, -1, 45, -1, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, -1, -1, -1, 278, 279, 280, -1, -1, -1, 284, -1, -1, 287, 288, 289, -1, -1, 292, 293, 294, -1, 296, -1, -1, 299, 300, 301, 302, 303, 304, -1, 306, 307, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, -1, -1, -1, 278, 279, 280, -1, -1, -1, 284, -1, -1, 287, 288, 289, 40, 41, 292, 43, 294, 45, 296, -1, -1, 299, 300, 301, 302, 303, 304, -1, 306, 307, -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, 40, -1, -1, 43, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, -1, -1, -1, 278, -1, -1, -1, -1, -1, 284, -1, -1, 287, 288, 289, 40, -1, 292, 43, 294, 45, 296, -1, -1, 299, 300, 301, 302, 303, 304, -1, -1, 307, -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, -1, -1, -1, 278, -1, -1, -1, -1, -1, 284, -1, -1, 287, 288, 289, 40, -1, 292, 43, 294, 45, 296, -1, -1, 299, 300, 301, 302, 303, 304, -1, -1, 307, -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, 40, -1, -1, 43, -1, 45, -1, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, -1, -1, -1, 278, -1, -1, -1, -1, -1, 284, -1, -1, 287, 288, 289, -1, -1, 292, -1, 294, -1, 296, -1, -1, 299, 300, 301, 302, 303, 304, -1, -1, 307, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, -1, 40, -1, 278, 43, -1, 45, -1, -1, 284, -1, -1, 287, 288, 289, -1, -1, 292, -1, 294, -1, 296, -1, -1, 299, 300, 301, 302, 303, 304, -1, -1, 307, -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 36, -1, -1, 278, -1, 41, -1, -1, 44, 284, -1, -1, 287, 288, 289, -1, -1, 292, -1, 294, -1, 296, 58, 59, 299, 300, 301, 302, 303, 304, -1, -1, 307, -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 36, -1, 93, 278, -1, 41, -1, -1, 44, 284, -1, -1, 287, 288, 289, -1, -1, 292, -1, 294, -1, 296, 58, 59, 299, 300, 301, 302, 303, 304, -1, -1, 307, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, -1, -1, -1, 278, -1, -1, 93, -1, -1, 284, -1, -1, 287, 288, 289, -1, -1, 292, -1, 294, -1, 296, -1, -1, 299, 300, 301, 302, 303, 304, -1, 40, 307, 42, 43, 36, 45, 46, 47, -1, 41, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, 61, 62, -1, -1, -1, 58, 59, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, -1, -1, -1, 278, -1, -1, -1, -1, 94, 284, -1, -1, 287, 288, 289, 93, -1, 292, -1, 294, -1, 296, -1, -1, 299, 300, 301, 302, 303, 304, 36, -1, 307, -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, 59, -1, -1, 275, 276, -1, -1, -1, -1, 281, 282, 283, -1, 285, 286, -1, -1, -1, 290, -1, -1, 293, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 275, 276, -1, -1, -1, -1, 281, 282, 283, -1, 285, 286, -1, -1, -1, 290, -1, -1, 293, -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, 257, 258, 259, -1, 261, 262, 263, 264, 265, 266, 267, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 275, 276, -1, -1, -1, -1, 281, 282, 283, -1, 285, 286, -1, -1, -1, 290, -1, 300, 293, -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, 275, 276, -1, -1, -1, -1, 281, 282, 283, -1, 285, -1, -1, -1, -1, 290, -1, -1, 293, }; #define YYFINAL 42 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 311 #if YYDEBUG static YYCONST char *YYCONST 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,0,0,0,0,0,0,0,"SETQ","AND","OR","NOT","MEMBER","MEMQ","NEQ", "EQ","GEQ","LEQ","FREEOF","SYMBOLIC","ALGEBRAIC","EXPR","MACRO","SMACRO", "PROCEDURE","FOR","STEP","UNTIL","EACH","FOREACH","IN","ON","DO","COLLECT", "SUM","IF","THEN","ELSE","REPEAT","WHILE","BEGIN","END","ENDFILE","LSECT", "RSECT","GO","TO","GOTO","SCALAR","INTEGER","LAMBDA","SYMBOL","NUMBER","STRING", "LIST","RETURN","WHERE","RLISTAT","ENDSTAT","HASHIF","HASHELSE","HASHELIF", "HASHENDIF", }; static YYCONST char *YYCONST yyrule[] = { "$accept : wholefile", "wholefile : ENDFILE", "wholefile : command wholefile", "command : cmnd sep", "command : proc_type sep", "command : END", "command : END sep", "sep : ';'", "sep : '$'", "proc_type : SYMBOLIC", "proc_type : ALGEBRAIC", "proc_qual : EXPR", "proc_qual : MACRO", "proc_qual : SMACRO", "sym_list : ')'", "sym_list : ',' SYMBOL sym_list", "infix : SETQ", "infix : OR", "infix : AND", "infix : MEMBER", "infix : MEMQ", "infix : '='", "infix : NEQ", "infix : EQ", "infix : GEQ", "infix : '>'", "infix : LEQ", "infix : '<'", "infix : FREEOF", "infix : '+'", "infix : '-'", "infix : '*'", "infix : '/'", "infix : '^'", "infix : '.'", "prefix : NOT", "prefix : '+'", "prefix : '-'", "proc_head : SYMBOL", "proc_head : SYMBOL SYMBOL", "proc_head : SYMBOL '(' ')'", "proc_head : SYMBOL '(' SYMBOL sym_list", "proc_head : prefix SYMBOL", "proc_head : SYMBOL infix SYMBOL", "proc_def : PROCEDURE proc_head sep cmnd", "proc_def : proc_type PROCEDURE proc_head sep cmnd", "proc_def : proc_qual PROCEDURE proc_head sep cmnd", "proc_def : proc_type proc_qual PROCEDURE proc_head sep cmnd", "rlistat : RLISTAT", "rlistat : IN", "rlistat : ON", "rltail : expr", "rltail : expr ',' rltail", "cmnd : expr", "cmnd : rlistat rltail", "if_stmt : IF expr THEN cmnd ELSE cmnd", "if_stmt : IF expr THEN cmnd", "for_update : ':' expr", "for_update : STEP expr UNTIL expr", "for_action : DO", "for_action : SUM", "for_action : COLLECT", "for_inon : IN", "for_inon : ON", "for_stmt : FOR SYMBOL SETQ expr for_update for_action cmnd", "for_stmt : FOR EACH SYMBOL for_inon expr for_action cmnd", "for_stmt : FOREACH SYMBOL for_inon expr for_action cmnd", "while_stmt : WHILE expr DO cmnd", "repeat_stmt : REPEAT cmnd UNTIL expr", "return_stmt : RETURN", "return_stmt : RETURN expr", "goto_stmt : GOTO SYMBOL", "goto_stmt : GO SYMBOL", "goto_stmt : GO TO SYMBOL", "group_tail : RSECT", "group_tail : sep RSECT", "group_tail : sep cmnd group_tail", "group_expr : LSECT cmnd group_tail", "scalar_tail : sep", "scalar_tail : ',' SYMBOL scalar_tail", "scalar_tail : ',' INTEGER scalar_tail", "scalar_def : SCALAR SYMBOL scalar_tail", "scalar_def : INTEGER SYMBOL scalar_tail", "scalar_defs : scalar_def", "scalar_defs : scalar_defs scalar_def", "block_tail : END", "block_tail : cmnd END", "block_tail : SYMBOL ':' block_tail", "block_tail : cmnd sep block_tail", "block_tail : sep block_tail", "block_expr : BEGIN scalar_defs block_tail", "block_expr : BEGIN block_tail", "lambda_vars : sep", "lambda_vars : ',' SYMBOL lambda_vars", "lambda_expr : LAMBDA SYMBOL lambda_vars cmnd", "lambda_expr : LAMBDA '(' ')' sep cmnd", "lambda_expr : LAMBDA '(' SYMBOL sym_list sep cmnd", "expr : rx0", "expr : lx0", "rx0 : lx0 WHERE SYMBOL '=' rx1", "rx0 : rx1", "lx0 : lx0 WHERE SYMBOL '=' lx1", "lx0 : lx1", "rx1 : lx2 SETQ rx1", "rx1 : rx2", "lx1 : lx2 SETQ lx1", "lx1 : lx2", "rx2tail : rx3", "rx2tail : lx3 OR rx2tail", "rx2 : lx3 OR rx2tail", "rx2 : rx3", "lx2tail : lx3", "lx2tail : lx3 OR lx2tail", "lx2 : lx3 OR lx2tail", "lx2 : lx3", "rx3tail : rx4", "rx3tail : lx4 AND rx3tail", "rx3 : lx4 AND rx3tail", "rx3 : rx4", "lx3tail : lx4", "lx3tail : lx4 AND lx3tail", "lx3 : lx4 AND lx3tail", "lx3 : lx4", "rx4 : NOT rx4", "rx4 : rx5", "lx4 : NOT lx4", "lx4 : lx5", "rx5 : lx6 MEMBER ry6", "rx5 : lx6 MEMQ ry6", "rx5 : lx6 '=' ry6", "rx5 : lx6 NEQ ry6", "rx5 : lx6 EQ ry6", "rx5 : lx6 GEQ ry6", "rx5 : lx6 '>' ry6", "rx5 : lx6 LEQ ry6", "rx5 : lx6 '<' ry6", "rx5 : lx6 FREEOF ry6", "rx5 : rx6", "lx5 : lx6 MEMBER ly6", "lx5 : lx6 MEMQ ly6", "lx5 : lx6 '=' ly6", "lx5 : lx6 NEQ ly6", "lx5 : lx6 EQ ly6", "lx5 : lx6 GEQ ly6", "lx5 : lx6 '>' ly6", "lx5 : lx6 LEQ ly6", "lx5 : lx6 '<' ly6", "lx5 : lx6 FREEOF ly6", "lx5 : lx6", "ry6 : NOT ry6", "ry6 : rx6", "ly6 : NOT ly6", "ly6 : lx6", "rx6tail : ry6a", "rx6tail : ly6a '+' rx6tail", "rx6 : lx6a '+' rx6tail", "rx6 : rx6a", "lx6tail : ly6a", "lx6tail : ly6a '+' lx6tail", "lx6 : lx6a '+' lx6tail", "lx6 : lx6a", "ry6a : NOT ry6a", "ry6a : rx6a", "rx6a : lx6a '-' ry7", "rx6a : rx7", "ly6a : NOT ly6a", "ly6a : lx6a", "lx6a : lx6a '-' ly7", "lx6a : lx7", "ry7 : NOT ry7", "ry7 : rx7", "rx7 : '+' ry7", "rx7 : '-' ry7", "rx7 : rx8", "ly7 : NOT ly7", "ly7 : lx7", "lx7 : '+' ly7", "lx7 : '-' ly7", "lx7 : lx8", "rx8tail : ry9", "rx8tail : ly9 '*' rx8tail", "rx8 : lx9 '*' rx8tail", "rx8 : rx9", "lx8tail : ly9", "lx8tail : ly9 '*' lx8tail", "lx8 : lx9 '*' lx8tail", "lx8 : lx9", "ry9 : NOT ry9", "ry9 : '+' ry9", "ry9 : '-' ry9", "ry9 : rx9", "rx9 : lx9 '/' ry10", "rx9 : rx10", "ly9 : NOT ly9", "ly9 : '+' ly9", "ly9 : '-' ly9", "ly9 : lx9", "lx9 : lx9 '/' ly10", "lx9 : lx10", "ly10 : NOT ly10", "ly10 : '+' ly10", "ly10 : '-' ly10", "ly10 : lx10", "lx10 : lx11 '^' ly10", "lx10 : lx11", "ry10 : NOT ry10", "ry10 : '+' ry10", "ry10 : '-' ry10", "ry10 : rx10", "rx10 : lx11 '^' ry10", "rx10 : rx11", "ry11 : NOT ry11", "ry11 : '+' ry11", "ry11 : '-' ry11", "ry11 : rx11", "rx11 : x12 '.' ry11", "rx11 : if_stmt", "rx11 : for_stmt", "rx11 : while_stmt", "rx11 : repeat_stmt", "rx11 : return_stmt", "rx11 : goto_stmt", "rx11 : lambda_expr", "rx11 : proc_def", "rx11 : ENDSTAT", "ly11 : NOT ly11", "ly11 : '+' ly11", "ly11 : '-' ly11", "ly11 : lx11", "lx11 : x12 '.' ly11", "lx11 : x12", "arg_list : ')'", "arg_list : ',' expr arg_list", "parened : '(' expr ')'", "commaparened : '(' expr ',' expr arg_list", "x12notparened : x13b '[' expr ']'", "x12notparened : x13b '(' ')'", "x12notparened : x13b parened", "x12notparened : x13b commaparened", "x12notparened : x13b x12notparened", "x12notparened : x13b", "x12 : x12notparened", "x12 : parened", "x12 : SETQ commaparened", "x12 : OR commaparened", "x12 : AND commaparened", "x12 : MEMBER commaparened", "x12 : MEMQ commaparened", "x12 : NEQ commaparened", "x12 : EQ commaparened", "x12 : GEQ commaparened", "x12 : LEQ commaparened", "x12 : FREEOF commaparened", "x13b : SYMBOL", "x13b : NUMBER", "x13b : STRING", "x13b : LIST", "x13b : group_expr", "x13b : block_expr", }; #endif #ifndef YYSTYPE typedef int YYSTYPE; #endif #define YYLEX yylex() #define YYEMPTY -1 #define yyclearin (yychar=(YYEMPTY)) #define yyerrok (yyerrflag=0) #ifndef YYINITDEPTH #define YYINITDEPTH 200 #endif #ifdef YYSTACKSIZE #ifndef YYMAXDEPTH #define YYMAXDEPTH YYSTACKSIZE #endif #else #ifdef YYMAXDEPTH #define YYSTACKSIZE YYMAXDEPTH #else #define YYSTACKSIZE 500 #define YYMAXDEPTH 500 #endif #endif #ifndef YYMAXSTACKSIZE #define YYMAXSTACKSIZE 10000 #endif int yydebug; int yynerrs; int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; static short *yyss; static YYSTYPE *yyvs; static int yystacksize; #define yyfree(x) free(x) extern int yylex(); static YYPTR YYDEFUN (yymalloc, (bytes), unsigned bytes) { YYPTR ptr = (YYPTR) malloc (bytes); if (ptr != 0) return (ptr); yyerror ("yyparse: memory exhausted"); return (0); } static YYPTR YYDEFUN (yyrealloc, (old, bytes), YYPTR old YYAND unsigned bytes) { YYPTR ptr = (YYPTR) realloc (old, bytes); if (ptr != 0) return (ptr); yyerror ("yyparse: memory exhausted"); return (0); } static int #ifdef __GNUC__ __inline__ #endif yygrow () { int old_stacksize = yystacksize; short *new_yyss; YYSTYPE *new_yyvs; if (yystacksize == YYMAXSTACKSIZE) return (1); yystacksize += (yystacksize + 1 ) / 2; if (yystacksize > YYMAXSTACKSIZE) yystacksize = YYMAXSTACKSIZE; #if YYDEBUG if (yydebug) printf("yydebug: growing stack size from %d to %d\n", old_stacksize, yystacksize); #endif new_yyss = (short *) yyrealloc ((char *)yyss, yystacksize * sizeof (short)); if (new_yyss == 0) return (1); new_yyvs = (YYSTYPE *) yyrealloc ((char *)yyvs, yystacksize * sizeof (YYSTYPE)); if (new_yyvs == 0) { yyfree (new_yyss); return (1); } yyss = new_yyss; yyvs = new_yyvs; return (0); } #line 1287 "r2l.y" static keyword_code operators[] = { {"plus", -1}, {"minus", -1}, {"getv", -1}, {"difference", -1}, {"times", -1}, {"quotient", -1}, {"expt", -1}, {"cons", -1}, {"list", -1}, {"progn", -1}, {"prog", -1}, {"de", -1}, {"dm", -1}, {"ds", -1}, {"greaterp", -1}, {"lessp", -1}, {"equal", -1}, {"setq", SETQ}, {"and", AND}, {"or", OR}, {"not", NOT}, {"member", MEMBER}, {"memq", MEMQ}, {"neq", NEQ}, {"eq", EQ}, {"geq", GEQ}, {"leq", LEQ}, {"freeof", FREEOF}, {"symbolic", SYMBOLIC}, {"algebraic", ALGEBRAIC}, {"expr", EXPR}, {"macro", MACRO}, {"smacro", SMACRO}, {"procedure", PROCEDURE}, {"for", FOR}, {"step", STEP}, {"until", UNTIL}, {"each", EACH}, {"foreach", FOREACH}, {"in", IN}, {"on", ON}, {"do", DO}, {"collect", COLLECT}, {"sum", SUM}, {"if", IF}, {"then", THEN}, {"else", ELSE}, {"repeat", REPEAT}, {"while", WHILE}, {"begin", BEGIN}, {"end", END}, {":lsect", LSECT}, {":rsect", RSECT}, {"go", GO}, {"to", TO}, {"goto", GOTO}, {"scalar", SCALAR}, {"integer", INTEGER}, {"lambda", LAMBDA}, {":symbol", SYMBOL}, {":number", NUMBER}, {":string", STRING}, {":list", LIST}, {"return", RETURN}, {"where", WHERE}, {"rlistat", RLISTAT}, {"endstat", ENDSTAT}, {"!#if", HASHIF}, {"!#else", HASHELSE}, {"!#elif", HASHELIF}, {"!#endif", HASHENDIF}, {NULL, 0} }; int skipcomment() { if (ch == '%') { while (ch != '\n' && ch != -1) nextch(); return 1; } else return 0; } static int onechar(int c) { char b[4]; b[0] = c; b[1] = 0; return find_symbol(b); } int lisp_token() { char buffer[1000]; int bp = 0, num = 0, r; while (isspace(ch) || skipcomment()) nextch(); num = isdigit(ch); while (isalpha(ch) || isdigit(ch) || ch=='_' || ch == '!' || (num && ch == '.')) { buffer[bp++] = ch; if (ch == '!') { buffer[bp++] = nextch(); } nextch(); } buffer[bp] = 0; if (bp != 0) { yylval = find_symbol((char *)buffer); return num ? '0': 'a'; } if (ch == '"') { for (;;) { buffer[bp++] = ch; while (nextch() != '"' && ch != '\n' && ch != EOF) buffer[bp++] = ch; buffer[bp++] = ch; if (nextch() != '"') break; } buffer[bp] = 0; yylval = find_symbol((char *)buffer); return '"'; } if (ch == '\'' || ch == '(' || ch == ')' || ch == '.') { r = ch; nextch(); return r; } r = ch; nextch(); return onechar(r); } static int read_tail(); /* * L -> atom * L -> ' L * L -> ( T * L -> . error * L -> ) error * * T -> ) * T -> . L ) * T -> L T * */ static int read_list(int r) { switch (r) { case '(': return read_tail(); case '.': case ')': return C_nil; /* errors! */ case '\'': return list2(find_symbol("quote"), read_list(lisp_token())); default: return yylval; } } int read_tail() { int r; switch (r = lisp_token()) { case ')': return C_nil; case '.': r = read_list(lisp_token()); if (lisp_token() != ')') fprintf(stderr, "\nBad syntax after '.'\n"); return r; case '\'': r = list2(find_symbol("quote"), read_list(lisp_token())); return cons(r, read_tail()); case '(': r = read_list(r); return cons(r, read_tail()); default: r = yylval; return cons(r, read_tail()); } } static int skipping = 0; static int genuine_yylex(); static int evaluates_to_true(int r) { int fn, arg; char *s, *v; if (r == C_nil) return 0; else if (atom(r)) { s = (char *)r; v = lookup_name(s-1); if (v == NULL) return 0; else return 1; } fn = qcar(r); r = qcdr(r); if (fn == C_nil || !atom(fn)) return 0; s = (char *)fn; if (strcmp(s-1, "and") == 0) { while (r != C_nil && !atom(r)) { arg = qcar(r); r = qcdr(r); if (!evaluates_to_true(arg)) return 0; } return 1; } else if (strcmp(s-1, "or") == 0) { while (r != C_nil && !atom(r)) { arg = qcar(r); r = qcdr(r); if (evaluates_to_true(arg)) return 1; } return 0; } else if (strcmp(s-1, "not") == 0) return !evaluates_to_true(qcar(r)); else return 0; /* junk treated as false! */ } static void skip_tokens() { int r; skipping = 1; for (;;) { r = genuine_yylex(); switch (r) { case HASHIF: skipping++; continue; case HASHELSE: if (skipping == 1) { skipping = 0; return; } else continue; case HASHELIF: if (skipping == 1) { skipping = 0; r = read_list(lisp_token()); if (evaluates_to_true(r)) return; skipping = 1; continue; } else continue; case HASHENDIF: skipping--; if (skipping == 0) return; else continue; default:continue; } } } static int genuine_yylex() { char buffer[1000]; int bp, num, r; restart_lex: bp = 0; num = 0; while (isspace(ch) || skipcomment()) nextch(); if (ch == -1) { if (skipping) { printf("\n+++ EOF while within !#if\n"); exit(1); } return ENDFILE; } num = isdigit(ch); while (isalpha(ch) || isdigit(ch) || ch=='_' || ch == '!' || (num && ch == '.')) { buffer[bp++] = ch; if (ch == '!') { buffer[bp++] = nextch(); } nextch(); } buffer[bp] = 0; if (bp != 0) { int k; for (k=0;;k++) { char *n = operators[k].name; int v = operators[k].code; if (n == NULL) break; if (v < 0) continue; if (strcmp(n, buffer) == 0) { switch (v) { case HASHIF: if (skipping != 0) return v; r = read_list(lisp_token()); if (!evaluates_to_true(r)) skip_tokens(); goto restart_lex; case HASHELSE: case HASHELIF: if (skipping != 0) return v; skip_tokens(); goto restart_lex; case HASHENDIF: if (skipping != 0) return v; else goto restart_lex; /* Ignore it! */ default:break; } return v; } } yylval = find_symbol((char *)buffer); return num ? NUMBER : SYMBOL; } if (ch == '"') { for (;;) { buffer[bp++] = ch; while (nextch() != '"' && ch != EOF && ch != '\n') buffer[bp++] = ch; buffer[bp++] = ch; if (nextch() != '"') break; } buffer[bp] = 0; yylval = find_symbol((char *)buffer); return STRING; } if (ch == '\'') { nextch(); r = read_list(lisp_token()); yylval = list2(find_symbol("quote"), r); return LIST; } r = ch; nextch(); if (r == ':' && ch == '=') { nextch(); r = SETQ; } else if (r == '<' && ch == '=') { nextch(); r = LEQ; } else if (r == '>' && ch == '=') { nextch(); r = GEQ; } else if (r == '<' && ch == '<') { nextch(); r = LSECT; } else if (r == '>' && ch == '>') { nextch(); r = RSECT; } return r; } static int yylex() { return genuine_yylex(); } /* end of file */ #line 2175 "r2l.c" #define YYABORT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYDEBUG #ifdef __cplusplus extern "C" char *getenv(); #else extern char *getenv(); #endif #endif int yyparse() { register int yym, yyn, yystate; register YYSTYPE *yyvsp; register short *yyssp; short *yysse; #if YYDEBUG register YYCONST char *yys; if (yys = getenv("YYDEBUG")) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } #endif yynerrs = 0; yyerrflag = 0; yychar = (-1); if (yyss == 0) { yyss = (short *) yymalloc (YYSTACKSIZE * sizeof (short)); if (yyss == 0) goto yyabort; yyvs = (YYSTYPE *) yymalloc (YYSTACKSIZE * sizeof (YYSTYPE)); if (yyvs == 0) { yyfree (yyss); goto yyabort; } yystacksize = YYSTACKSIZE; } yysse = yyss + yystacksize - 1; yyssp = yyss; yyvsp = yyvs; *yyssp = yystate = 0; goto yyloop; yypush_lex: yyval = yylval; yystate = yytable[yyn]; yypush: if (yyssp >= yysse) { int depth = yyssp - yyss; if (yygrow() != 0) goto yyoverflow; yysse = yyss + yystacksize -1; yyssp = depth + yyss; yyvsp = depth + yyvs; } *++yyssp = yystate; *++yyvsp = yyval; yyloop: if (yyn = yydefred[yystate]) goto yyreduce; yyn = yysindex[yystate]; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("yydebug: state %d, reading %d (%s)\n", yystate, yychar, yys); } #endif } if (yyn != 0 && ((yyn += yychar), ((unsigned)yyn <= (unsigned)YYTABLESIZE)) && yycheck[yyn] == yychar) { #if YYDEBUG if (yydebug) printf("yydebug: state %d, shifting to state %d\n", yystate, yytable[yyn]); #endif if (yyerrflag > 0) --yyerrflag; yychar = (-1); goto yypush_lex; } yyn = yyrindex[yystate]; if (yyn != 0 && ((yyn += yychar), ((unsigned)yyn <= (unsigned)YYTABLESIZE)) && yycheck[yyn] == yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag) goto yyinrecovery; #ifdef lint goto yynewerror; #endif yynewerror: yyerror("syntax error"); #ifdef lint goto yyerrlab; #endif yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { yyn = yysindex[*yyssp]; if (yyn != 0 && ((yyn += YYERRCODE), ((unsigned)yyn <= (unsigned)YYTABLESIZE)) && yycheck[yyn] == YYERRCODE) { #if YYDEBUG if (yydebug) printf("yydebug: state %d, error recovery shifting\ to state %d\n", *yyssp, yytable[yyn]); #endif goto yypush_lex; } else { #if YYDEBUG if (yydebug) printf("yydebug: error recovery discarding state %d\n", *yyssp); #endif if (yyssp <= yyss) goto yyabort; --yyssp; --yyvsp; } } } else { if (yychar == 0) goto yyabort; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("yydebug: state %d, error recovery discards token %d (%s)\n", yystate, yychar, yys); } #endif yychar = (-1); goto yyloop; } yyreduce: #if YYDEBUG if (yydebug) printf("yydebug: state %d, reducing by rule %d (%s)\n", yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; yyval = yyvsp[1-yym]; switch (yyn) { case 1: #line 809 "r2l.y" { if (common) fprintf(outputfile, "\n;; end of file\n"); else fprintf(outputfile, "\n%% end of file\n"); exit(0); } break; case 3: #line 816 "r2l.y" { evalorprint(yyvsp[-1]); fprintf(outputfile, "\n\n"); otlpos = 0; heapfringe = 0; } break; case 9: #line 830 "r2l.y" { yyval = sym_symbolic; } break; case 10: #line 831 "r2l.y" { yyval = sym_algebraic; } break; case 11: #line 834 "r2l.y" { yyval = sym_de; } break; case 12: #line 835 "r2l.y" { yyval = sym_dm; } break; case 13: #line 836 "r2l.y" { yyval = sym_ds; } break; case 14: #line 839 "r2l.y" { yyval = C_nil; } break; case 15: #line 840 "r2l.y" { yyval = cons(yyvsp[-1], yyvsp[0]); } break; case 16: #line 848 "r2l.y" { yyval = sym_setq; } break; case 17: #line 849 "r2l.y" { yyval = sym_or; } break; case 18: #line 850 "r2l.y" { yyval = sym_and; } break; case 19: #line 851 "r2l.y" { yyval = sym_member; } break; case 20: #line 852 "r2l.y" { yyval = sym_memq; } break; case 21: #line 853 "r2l.y" { yyval = sym_equal; } break; case 22: #line 854 "r2l.y" { yyval = sym_neq; } break; case 23: #line 855 "r2l.y" { yyval = sym_eq; } break; case 24: #line 856 "r2l.y" { yyval = sym_geq; } break; case 25: #line 857 "r2l.y" { yyval = sym_greaterp; } break; case 26: #line 858 "r2l.y" { yyval = sym_leq; } break; case 27: #line 859 "r2l.y" { yyval = sym_lessp; } break; case 28: #line 860 "r2l.y" { yyval = sym_freeof; } break; case 29: #line 861 "r2l.y" { yyval = sym_plus; } break; case 30: #line 862 "r2l.y" { yyval = sym_difference; } break; case 31: #line 863 "r2l.y" { yyval = sym_times; } break; case 32: #line 864 "r2l.y" { yyval = sym_quotient; } break; case 33: #line 865 "r2l.y" { yyval = sym_expt; } break; case 34: #line 866 "r2l.y" { yyval = sym_cons; } break; case 35: #line 869 "r2l.y" { yyval = sym_not; } break; case 36: #line 870 "r2l.y" { yyval = sym_plus; } break; case 37: #line 871 "r2l.y" { yyval = sym_minus; } break; case 38: #line 874 "r2l.y" { yyval = cons(yyvsp[0], C_nil); } break; case 39: #line 875 "r2l.y" { yyval = list2(yyvsp[-1], yyvsp[0]); } break; case 40: #line 876 "r2l.y" { yyval = cons(yyvsp[-2], C_nil); } break; case 41: #line 878 "r2l.y" { yyval = cons(yyvsp[-3], cons(yyvsp[-1], yyvsp[0])); } break; case 42: #line 879 "r2l.y" { yyval = list2(yyvsp[-1], yyvsp[0]); } break; case 43: #line 880 "r2l.y" { yyval = list3(yyvsp[-1], yyvsp[-2], yyvsp[0]); } break; case 44: #line 884 "r2l.y" { yyval = list4(sym_de, qcar(yyvsp[-2]), qcdr(yyvsp[-2]), yyvsp[0]); } break; case 45: #line 886 "r2l.y" { yyval = list4(sym_de, qcar(yyvsp[-2]), qcdr(yyvsp[-2]), yyvsp[0]); } break; case 46: #line 888 "r2l.y" { yyval = list4(yyvsp[-4], qcar(yyvsp[-2]), qcdr(yyvsp[-2]), yyvsp[0]); } break; case 47: #line 890 "r2l.y" { yyval = list4(yyvsp[-4], qcar(yyvsp[-2]), qcdr(yyvsp[-2]), yyvsp[0]); } break; case 49: #line 894 "r2l.y" { yyval = sym_in; } break; case 50: #line 895 "r2l.y" { yyval = sym_on; } break; case 51: #line 898 "r2l.y" { yyval = cons(yyvsp[0], C_nil); } break; case 52: #line 899 "r2l.y" { yyval = cons(yyvsp[-2], yyvsp[0]); } break; case 54: #line 908 "r2l.y" { yyval = list2(yyvsp[-1], cons(sym_list, yyvsp[0])); } break; case 55: #line 918 "r2l.y" { yyval = list4(sym_if, yyvsp[-4], yyvsp[-2], yyvsp[0]); } break; case 56: #line 919 "r2l.y" { yyval = list3(sym_if, yyvsp[-2], yyvsp[0]); } break; case 57: #line 922 "r2l.y" { yyval = cons(find_symbol("1"), yyvsp[0]); } break; case 58: #line 923 "r2l.y" { yyval = cons(yyvsp[-2], yyvsp[0]); } break; case 59: #line 926 "r2l.y" { yyval = sym_do; } break; case 60: #line 927 "r2l.y" { yyval = sym_sum; } break; case 61: #line 928 "r2l.y" { yyval = sym_collect; } break; case 62: #line 931 "r2l.y" { yyval = sym_in; } break; case 63: #line 932 "r2l.y" { yyval = sym_on; } break; case 64: #line 936 "r2l.y" { yyval = make_for(yyvsp[-5], yyvsp[-3], qcar(yyvsp[-2]), qcdr(yyvsp[-2]), yyvsp[-1], yyvsp[0]); } break; case 65: #line 938 "r2l.y" { yyval = make_foreach(yyvsp[-4], yyvsp[-3], yyvsp[-2], yyvsp[-1], yyvsp[0]); } break; case 66: #line 940 "r2l.y" { yyval = make_foreach(yyvsp[-4], yyvsp[-3], yyvsp[-2], yyvsp[-1], yyvsp[0]); } break; case 67: #line 943 "r2l.y" { int lab1 = genlabel(); yyval = list6(sym_prog, C_nil, lab1, list3(sym_if, list2(sym_null, yyvsp[-2]), list2(sym_return, C_nil)), yyvsp[0], list2(sym_go, lab1)); } break; case 68: #line 951 "r2l.y" { int lab1 = genlabel(); yyval = list5(sym_prog, C_nil, lab1, yyvsp[-2], list3(sym_if, list2(sym_null, yyvsp[0]), list2(sym_go, lab1))); } break; case 69: #line 958 "r2l.y" { yyval = list2(sym_return, C_nil); } break; case 70: #line 959 "r2l.y" { yyval = list2(sym_return, yyvsp[0]); } break; case 71: #line 962 "r2l.y" { yyval = list2(sym_go, yyvsp[0]); } break; case 72: #line 963 "r2l.y" { yyval = list2(sym_go, yyvsp[0]); } break; case 73: #line 964 "r2l.y" { yyval = list2(sym_go, yyvsp[0]); } break; case 74: #line 967 "r2l.y" { yyval = C_nil; } break; case 75: #line 968 "r2l.y" { yyval = C_nil; } break; case 76: #line 969 "r2l.y" { yyval = cons(yyvsp[-1], yyvsp[0]); } break; case 77: #line 972 "r2l.y" { yyval = cons(sym_progn, cons(yyvsp[-1], yyvsp[0])); } break; case 78: #line 975 "r2l.y" { yyval = C_nil; } break; case 79: #line 977 "r2l.y" { yyval = cons(yyvsp[-1], yyvsp[0]); } break; case 80: #line 979 "r2l.y" { yyval = cons(yyvsp[-1], yyvsp[0]); } break; case 81: #line 983 "r2l.y" { yyval = cons(yyvsp[-1], yyvsp[0]); } break; case 82: #line 985 "r2l.y" { yyval = cons(yyvsp[-1], yyvsp[0]); } break; case 84: #line 990 "r2l.y" { yyval = append(yyvsp[-1], yyvsp[0]); } break; case 85: #line 993 "r2l.y" { yyval = C_nil; } break; case 86: #line 994 "r2l.y" { yyval = cons(yyvsp[-1], C_nil); } break; case 87: #line 995 "r2l.y" { yyval = cons(yyvsp[-2], yyvsp[0]); } break; case 88: #line 996 "r2l.y" { yyval = cons(yyvsp[-2], yyvsp[0]); } break; case 89: #line 997 "r2l.y" { yyval = yyvsp[0]; } break; case 90: #line 1001 "r2l.y" { yyval = cons(sym_prog, cons(yyvsp[-1], yyvsp[0])); } break; case 91: #line 1002 "r2l.y" { yyval = cons(sym_prog, cons(C_nil, yyvsp[0])); } break; case 92: #line 1005 "r2l.y" { yyval = C_nil; } break; case 93: #line 1007 "r2l.y" { yyval = cons(yyvsp[-1], yyvsp[0]); } break; case 94: #line 1011 "r2l.y" { yyval = list3(sym_lambda, ncons(yyvsp[-2]), yyvsp[-1]); } break; case 95: #line 1013 "r2l.y" { yyval = list3(sym_lambda, C_nil, yyvsp[0]); } break; case 96: #line 1015 "r2l.y" { yyval = list3(sym_lambda, cons(yyvsp[-3], yyvsp[-2]), yyvsp[0]); } break; case 99: #line 1028 "r2l.y" { yyval = make_where(yyvsp[-4], yyvsp[-2], yyvsp[0]); } break; case 101: #line 1033 "r2l.y" { yyval = make_where(yyvsp[-4], yyvsp[-2], yyvsp[0]); } break; case 103: #line 1037 "r2l.y" { yyval = list3(sym_setq, yyvsp[-2], yyvsp[0]); } break; case 105: #line 1041 "r2l.y" { yyval = list3(sym_setq, yyvsp[-2], yyvsp[0]); } break; case 107: #line 1045 "r2l.y" { yyval = ncons(yyvsp[0]); } break; case 108: #line 1046 "r2l.y" { yyval = cons(yyvsp[-2], yyvsp[0]); } break; case 109: #line 1048 "r2l.y" { yyval = cons(sym_or, cons(yyvsp[-2], yyvsp[0])); } break; case 111: #line 1052 "r2l.y" { yyval = ncons(yyvsp[0]); } break; case 112: #line 1053 "r2l.y" { yyval = cons(yyvsp[-2], yyvsp[0]); } break; case 113: #line 1055 "r2l.y" { yyval = cons(sym_or, cons(yyvsp[-2], yyvsp[0])); } break; case 115: #line 1059 "r2l.y" { yyval = ncons(yyvsp[0]); } break; case 116: #line 1060 "r2l.y" { yyval = cons(yyvsp[-2], yyvsp[0]); } break; case 117: #line 1062 "r2l.y" { yyval = cons(sym_and, cons(yyvsp[-2], yyvsp[0])); } break; case 119: #line 1066 "r2l.y" { yyval = ncons(yyvsp[0]); } break; case 120: #line 1067 "r2l.y" { yyval = cons(yyvsp[-2], yyvsp[0]); } break; case 121: #line 1069 "r2l.y" { yyval = cons(sym_and, cons(yyvsp[-2], yyvsp[0])); } break; case 123: #line 1073 "r2l.y" { yyval = list2(sym_not, yyvsp[0]); } break; case 125: #line 1077 "r2l.y" { yyval = list2(sym_not, yyvsp[0]); } break; case 127: #line 1081 "r2l.y" { yyval = list3(sym_member, yyvsp[-2], yyvsp[0]); } break; case 128: #line 1082 "r2l.y" { yyval = list3(sym_memq, yyvsp[-2], yyvsp[0]); } break; case 129: #line 1083 "r2l.y" { yyval = list3(sym_equal, yyvsp[-2], yyvsp[0]); } break; case 130: #line 1084 "r2l.y" { yyval = list3(sym_neq, yyvsp[-2], yyvsp[0]); } break; case 131: #line 1085 "r2l.y" { yyval = list3(sym_eq, yyvsp[-2], yyvsp[0]); } break; case 132: #line 1086 "r2l.y" { yyval = list3(sym_geq, yyvsp[-2], yyvsp[0]); } break; case 133: #line 1087 "r2l.y" { yyval = list3(sym_greaterp, yyvsp[-2], yyvsp[0]); } break; case 134: #line 1088 "r2l.y" { yyval = list3(sym_leq, yyvsp[-2], yyvsp[0]); } break; case 135: #line 1089 "r2l.y" { yyval = list3(sym_lessp, yyvsp[-2], yyvsp[0]); } break; case 136: #line 1090 "r2l.y" { yyval = list3(sym_freeof, yyvsp[-2], yyvsp[0]); } break; case 138: #line 1094 "r2l.y" { yyval = list3(sym_member, yyvsp[-2], yyvsp[0]); } break; case 139: #line 1095 "r2l.y" { yyval = list3(sym_memq, yyvsp[-2], yyvsp[0]); } break; case 140: #line 1096 "r2l.y" { yyval = list3(sym_equal, yyvsp[-2], yyvsp[0]); } break; case 141: #line 1097 "r2l.y" { yyval = list3(sym_neq, yyvsp[-2], yyvsp[0]); } break; case 142: #line 1098 "r2l.y" { yyval = list3(sym_eq, yyvsp[-2], yyvsp[0]); } break; case 143: #line 1099 "r2l.y" { yyval = list3(sym_geq, yyvsp[-2], yyvsp[0]); } break; case 144: #line 1100 "r2l.y" { yyval = list3(sym_greaterp, yyvsp[-2], yyvsp[0]); } break; case 145: #line 1101 "r2l.y" { yyval = list3(sym_leq, yyvsp[-2], yyvsp[0]); } break; case 146: #line 1102 "r2l.y" { yyval = list3(sym_lessp, yyvsp[-2], yyvsp[0]); } break; case 147: #line 1103 "r2l.y" { yyval = list3(sym_freeof, yyvsp[-2], yyvsp[0]); } break; case 149: #line 1107 "r2l.y" { yyval = list2(sym_not, yyvsp[0]); } break; case 151: #line 1111 "r2l.y" { yyval = list2(sym_not, yyvsp[0]); } break; case 153: #line 1115 "r2l.y" { yyval = ncons(yyvsp[0]); } break; case 154: #line 1116 "r2l.y" { yyval = cons(yyvsp[-2], yyvsp[0]); } break; case 155: #line 1118 "r2l.y" { yyval = cons(sym_plus, cons(yyvsp[-2], yyvsp[0])); } break; case 157: #line 1122 "r2l.y" { yyval = ncons(yyvsp[0]); } break; case 158: #line 1123 "r2l.y" { yyval = cons(yyvsp[-2], yyvsp[0]); } break; case 159: #line 1125 "r2l.y" { yyval = cons(sym_plus, cons(yyvsp[-2], yyvsp[0])); } break; case 161: #line 1129 "r2l.y" { yyval = list2(sym_not, yyvsp[0]); } break; case 163: #line 1133 "r2l.y" { yyval = list3(sym_difference, yyvsp[-2], yyvsp[0]); } break; case 165: #line 1137 "r2l.y" { yyval = list2(sym_not, yyvsp[0]); } break; case 167: #line 1141 "r2l.y" { yyval = list3(sym_difference, yyvsp[-2], yyvsp[0]); } break; case 169: #line 1145 "r2l.y" { yyval = list2(sym_not, yyvsp[0]); } break; case 171: #line 1149 "r2l.y" { yyval = yyvsp[0]; } break; case 172: #line 1150 "r2l.y" { yyval = list2(sym_minus, yyvsp[0]); } break; case 174: #line 1154 "r2l.y" { yyval = list2(sym_not, yyvsp[0]); } break; case 176: #line 1158 "r2l.y" { yyval = yyvsp[0]; } break; case 177: #line 1159 "r2l.y" { yyval = list2(sym_minus, yyvsp[0]); } break; case 179: #line 1163 "r2l.y" { yyval = ncons(yyvsp[0]); } break; case 180: #line 1164 "r2l.y" { yyval = cons(yyvsp[-2], yyvsp[0]); } break; case 181: #line 1166 "r2l.y" { yyval = cons(sym_times, cons(yyvsp[-2], yyvsp[0])); } break; case 183: #line 1170 "r2l.y" { yyval = ncons(yyvsp[0]); } break; case 184: #line 1171 "r2l.y" { yyval = cons(yyvsp[-2], yyvsp[0]); } break; case 185: #line 1173 "r2l.y" { yyval = cons(sym_times, cons(yyvsp[-2], yyvsp[0])); } break; case 187: #line 1177 "r2l.y" { yyval = list2(sym_not, yyvsp[0]); } break; case 188: #line 1178 "r2l.y" { yyval = yyvsp[0]; } break; case 189: #line 1179 "r2l.y" { yyval = list2(sym_minus, yyvsp[0]); } break; case 191: #line 1183 "r2l.y" { yyval = list3(sym_quotient, yyvsp[-2], yyvsp[0]); } break; case 193: #line 1187 "r2l.y" { yyval = list2(sym_not, yyvsp[0]); } break; case 194: #line 1188 "r2l.y" { yyval = yyvsp[0]; } break; case 195: #line 1189 "r2l.y" { yyval = list2(sym_minus, yyvsp[0]); } break; case 197: #line 1193 "r2l.y" { yyval = list3(sym_quotient, yyvsp[-2], yyvsp[0]); } break; case 199: #line 1197 "r2l.y" { yyval = list2(sym_not, yyvsp[0]); } break; case 200: #line 1198 "r2l.y" { yyval = yyvsp[0]; } break; case 201: #line 1199 "r2l.y" { yyval = list2(sym_minus, yyvsp[0]); } break; case 203: #line 1203 "r2l.y" { yyval = list3(sym_expt, yyvsp[-2], yyvsp[0]); } break; case 205: #line 1207 "r2l.y" { yyval = list2(sym_not, yyvsp[0]); } break; case 206: #line 1208 "r2l.y" { yyval = yyvsp[0]; } break; case 207: #line 1209 "r2l.y" { yyval = list2(sym_minus, yyvsp[0]); } break; case 209: #line 1213 "r2l.y" { yyval = list3(sym_expt, yyvsp[-2], yyvsp[0]); } break; case 211: #line 1217 "r2l.y" { yyval = list2(sym_not, yyvsp[0]); } break; case 212: #line 1218 "r2l.y" { yyval = yyvsp[0]; } break; case 213: #line 1219 "r2l.y" { yyval = list2(sym_minus, yyvsp[0]); } break; case 215: #line 1223 "r2l.y" { yyval = list3(sym_cons, yyvsp[-2], yyvsp[0]); } break; case 224: #line 1232 "r2l.y" { yyval = ncons(yyvsp[0]); } break; case 225: #line 1235 "r2l.y" { yyval = list2(sym_not, yyvsp[0]); } break; case 226: #line 1236 "r2l.y" { yyval = yyvsp[0]; } break; case 227: #line 1237 "r2l.y" { yyval = list2(sym_minus, yyvsp[0]); } break; case 229: #line 1241 "r2l.y" { yyval = list3(sym_cons, yyvsp[-2], yyvsp[0]); } break; case 231: #line 1245 "r2l.y" { yyval = C_nil; } break; case 232: #line 1246 "r2l.y" { yyval = cons(yyvsp[-1], yyvsp[0]); } break; case 233: #line 1249 "r2l.y" { yyval = yyvsp[-1]; } break; case 234: #line 1252 "r2l.y" { yyval = cons(yyvsp[-3], cons(yyvsp[-1],yyvsp[0])); } break; case 235: #line 1255 "r2l.y" { yyval = list3(sym_getv, yyvsp[-3], yyvsp[-1]); } break; case 236: #line 1256 "r2l.y" { yyval = cons(yyvsp[-2], C_nil); } break; case 237: #line 1257 "r2l.y" { yyval = cons(yyvsp[-1], cons(yyvsp[0], C_nil)); } break; case 238: #line 1258 "r2l.y" { yyval = cons(yyvsp[-1], yyvsp[0]); } break; case 239: #line 1259 "r2l.y" { yyval = list2(yyvsp[-1], yyvsp[0]); } break; case 241: #line 1263 "r2l.y" { yyval = yyvsp[0]; } break; case 242: #line 1264 "r2l.y" { yyval = yyvsp[0]; } break; case 243: #line 1265 "r2l.y" { yyval = cons(sym_setq, yyvsp[0]); } break; case 244: #line 1266 "r2l.y" { yyval = cons(sym_or, yyvsp[0]); } break; case 245: #line 1267 "r2l.y" { yyval = cons(sym_and, yyvsp[0]); } break; case 246: #line 1268 "r2l.y" { yyval = cons(sym_member, yyvsp[0]); } break; case 247: #line 1269 "r2l.y" { yyval = cons(sym_memq, yyvsp[0]); } break; case 248: #line 1270 "r2l.y" { yyval = cons(sym_neq, yyvsp[0]); } break; case 249: #line 1271 "r2l.y" { yyval = cons(sym_eq, yyvsp[0]); } break; case 250: #line 1272 "r2l.y" { yyval = cons(sym_geq, yyvsp[0]); } break; case 251: #line 1273 "r2l.y" { yyval = cons(sym_leq, yyvsp[0]); } break; case 252: #line 1274 "r2l.y" { yyval = cons(sym_freeof, yyvsp[0]); } break; #line 3148 "r2l.c" } yyssp -= yym; yyvsp -= yym; yym = yylhs[yyn]; yystate = *yyssp; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) printf("yydebug: after reduction, shifting from state 0 to\ state %d\n", YYFINAL); #endif yystate = YYFINAL; *++yyssp = YYFINAL; *++yyvsp = yyval; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("yydebug: state %d, reading %d (%s)\n", YYFINAL, yychar, yys); } #endif } if (yychar == 0) goto yyaccept; goto yyloop; } yyn = yygindex[yym]; if (yyn != 0 && ((yyn += yystate), ((unsigned)yyn <= (unsigned)YYTABLESIZE)) && yycheck[yyn] == yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) printf("yydebug: after reduction, shifting from state %d \ to state %d\n", *yyssp, yystate); #endif goto yypush; yyoverflow: yyerror("yacc stack overflow"); yyabort: return (1); yyaccept: return (0); }