byacc-20221106/0000755000000000000000000000000014332026515011531 5ustar rootrootbyacc-20221106/reader.c0000644000000000000000000020700414166621712013147 0ustar rootroot/* $Id: reader.c,v 1.91 2022/01/09 18:04:58 tom Exp $ */ #include "defs.h" /* The line size must be a positive integer. One hundred was chosen */ /* because few lines in Yacc input grammars exceed 100 characters. */ /* Note that if a line exceeds LINESIZE characters, the line buffer */ /* will be expanded to accommodate it. */ #define LINESIZE 100 #define L_CURL '{' #define R_CURL '}' #define L_PAREN '(' #define R_PAREN ')' #define L_BRAC '[' #define R_BRAC ']' /* the maximum number of arguments (inherited attributes) to a non-terminal */ /* this is a hard limit, but seems more than adequate */ #define MAXARGS 20 #define begin_case(f,n) fprintf(f, "case %d:\n", (int)(n)) #define end_case(f) \ fprintf(f, "\n"); \ fprintf_lineno(f, 1, ""); \ fprintf(f, "break;\n") static void start_rule(bucket *bp, int s_lineno); #if defined(YYBTYACC) static void copy_initial_action(void); static void copy_destructor(void); static char *process_destructor_XX(char *code, char *tag); #endif #define CACHE_SIZE 256 static char *cache; static int cinc, cache_size; int ntags; static int tagmax, havetags; static char **tag_table; static char saw_eof; char unionized; char *cptr, *line; static int linesize; static bucket *goal; static Value_t prec; static int gensym; static char last_was_action; #if defined(YYBTYACC) static int trialaction; #endif static int maxitems; static bucket **pitem; static int maxrules; static bucket **plhs; static size_t name_pool_size; static char *name_pool; char line_format[] = "#line %d \"%s\"\n"; param *lex_param; param *parse_param; static const char *code_keys[] = { "", "requires", "provides", "top", "imports", }; struct code_lines code_lines[CODE_MAX]; #if defined(YYBTYACC) int destructor = 0; /* =1 if at least one %destructor */ static bucket *default_destructor[3] = {0, 0, 0}; #define UNTYPED_DEFAULT 0 #define TYPED_DEFAULT 1 #define TYPE_SPECIFIED 2 static bucket * lookup_type_destructor(char *tag) { const char fmt[] = "%.*s destructor"; char name[1024] = "\0"; bucket *bp, **bpp = &default_destructor[TYPE_SPECIFIED]; while ((bp = *bpp) != NULL) { if (bp->tag == tag) return (bp); bpp = &bp->link; } sprintf(name, fmt, (int)(sizeof(name) - sizeof(fmt)), tag); *bpp = bp = make_bucket(name); bp->tag = tag; return (bp); } #endif /* defined(YYBTYACC) */ static void cachec(int c) { assert(cinc >= 0); if (cinc >= cache_size) { cache_size += CACHE_SIZE; cache = TREALLOC(char, cache, cache_size); NO_SPACE(cache); } cache[cinc] = (char)c; ++cinc; } typedef enum { ldSPC1, ldSPC2, ldNAME, ldSPC3, ldNUM, ldSPC4, ldFILE, ldOK, ldERR } LINE_DIR; /* * Expect this pattern: * /^[[:space:]]*#[[:space:]]* * line[[:space:]]+ * [[:digit:]]+ * ([[:space:]]*|[[:space:]]+"[^"]+")/ */ static int line_directive(void) { #define UNLESS(what) if (what) { ld = ldERR; break; } int n; int line_1st = -1; int name_1st = -1; int name_end = -1; LINE_DIR ld = ldSPC1; for (n = 0; (ld <= ldOK) && (line[n] != '\0'); ++n) { int ch = UCH(line[n]); switch (ld) { case ldSPC1: if (isspace(UCH(ch))) { break; } else UNLESS(ch != '#'); ld = ldSPC2; break; case ldSPC2: if (isspace(UCH(ch))) { break; } /* FALLTHRU */ case ldNAME: UNLESS(strncmp(line + n, "line", 4)); n += 4; if (line[n] == '\0') { ld = ldOK; break; } else UNLESS(!isspace(UCH(line[n]))); ld = ldSPC3; break; case ldSPC3: if (isspace(UCH(ch))) { break; } else UNLESS(!isdigit(UCH(ch))); line_1st = n; ld = ldNUM; /* this is needed, but cppcheck says no... */ /* FALLTHRU */ case ldNUM: if (isdigit(UCH(ch))) { break; } else UNLESS(!isspace(UCH(ch))); ld = ldSPC4; break; case ldSPC4: if (isspace(UCH(ch))) { break; } else UNLESS(ch != '"'); UNLESS(line[n + 1] == '"'); ld = ldFILE; name_1st = n; break; case ldFILE: if (ch != '"') { break; } ld = ldOK; name_end = n; /* FALLTHRU */ case ldERR: case ldOK: break; } } if (ld == ldOK) { size_t need = (size_t)(name_end - name_1st); if ((long)need > (long)input_file_name_len) { input_file_name_len = ((need + 1) * 3) / 2; input_file_name = TREALLOC(char, input_file_name, input_file_name_len); NO_SPACE(input_file_name); } if ((long)need > 0) { memcpy(input_file_name, line + name_1st + 1, need - 1); input_file_name[need - 1] = '\0'; } else { input_file_name[0] = '\0'; } } if (ld >= ldNUM && ld < ldERR) { if (line_1st >= 0) { lineno = (int)strtol(line + line_1st, NULL, 10) - 1; } else { lineno = 0; } } return (ld == ldOK); #undef UNLESS } static void get_line(void) { FILE *f = input_file; do { int c; int i; if (saw_eof || (c = getc(f)) == EOF) { if (line) { FREE(line); line = 0; } cptr = 0; saw_eof = 1; return; } if (line == NULL || linesize != (LINESIZE + 1)) { if (line) FREE(line); linesize = LINESIZE + 1; line = TMALLOC(char, linesize); NO_SPACE(line); } i = 0; ++lineno; for (;;) { line[i++] = (char)c; if (c == '\n') break; if ((i + 3) >= linesize) { linesize += LINESIZE; line = TREALLOC(char, line, linesize); NO_SPACE(line); } c = getc(f); if (c == EOF) { line[i++] = '\n'; saw_eof = 1; break; } } line[i] = '\0'; } while (line_directive()); cptr = line; return; } static char * dup_line(void) { char *p, *s, *t; if (line == NULL) return (NULL); s = line; while (*s != '\n') ++s; p = TMALLOC(char, s - line + 1); NO_SPACE(p); s = line; t = p; while ((*t++ = *s++) != '\n') continue; return (p); } static void skip_comment(void) { char *s; struct ainfo a; a.a_lineno = lineno; a.a_line = dup_line(); a.a_cptr = a.a_line + (cptr - line); s = cptr + 2; for (;;) { if (*s == '*' && s[1] == '/') { cptr = s + 2; FREE(a.a_line); return; } if (*s == '\n') { get_line(); if (line == NULL) unterminated_comment(&a); s = cptr; } else ++s; } } static int next_inline(void) { char *s; if (line == NULL) { get_line(); if (line == NULL) return (EOF); } s = cptr; for (;;) { switch (*s) { case '/': if (s[1] == '*') { cptr = s; skip_comment(); s = cptr; break; } else if (s[1] == '/') { get_line(); if (line == NULL) return (EOF); s = cptr; break; } /* FALLTHRU */ default: cptr = s; return (*s); } } } static int nextc(void) { int ch; int finish = 0; do { switch (ch = next_inline()) { case '\n': get_line(); break; case ' ': case '\t': case '\f': case '\r': case '\v': case ',': case ';': ++cptr; break; case '\\': ch = '%'; /* FALLTHRU */ default: finish = 1; break; } } while (!finish); return ch; } /* *INDENT-OFF* */ static struct keyword { char name[16]; int token; } keywords[] = { { "binary", NONASSOC }, { "code", XCODE }, { "debug", NONPOSIX_DEBUG }, #if defined(YYBTYACC) { "destructor", DESTRUCTOR }, #endif { "error-verbose",ERROR_VERBOSE }, { "expect", EXPECT }, { "expect-rr", EXPECT_RR }, { "ident", IDENT }, #if defined(YYBTYACC) { "initial-action", INITIAL_ACTION }, #endif { "left", LEFT }, { "lex-param", LEX_PARAM }, #if defined(YYBTYACC) { "locations", LOCATIONS }, #endif { "nonassoc", NONASSOC }, { "parse-param", PARSE_PARAM }, { "pure-parser", PURE_PARSER }, { "right", RIGHT }, { "start", START }, { "term", TOKEN }, { "token", TOKEN }, { "token-table", TOKEN_TABLE }, { "type", TYPE }, { "union", UNION }, { "yacc", POSIX_YACC }, }; /* *INDENT-ON* */ static int compare_keys(const void *a, const void *b) { const struct keyword *p = (const struct keyword *)a; const struct keyword *q = (const struct keyword *)b; return strcmp(p->name, q->name); } static int keyword(void) { int c; char *t_cptr = cptr; c = *++cptr; if (isalpha(UCH(c))) { struct keyword *key; cinc = 0; for (;;) { if (isalpha(UCH(c))) { if (isupper(UCH(c))) c = tolower(c); cachec(c); } else if (isdigit(UCH(c)) || c == '-' || c == '.' || c == '$') { cachec(c); } else if (c == '_') { /* treat keywords spelled with '_' as if it were '-' */ cachec('-'); } else { break; } c = *++cptr; } cachec(NUL); if ((key = bsearch(cache, keywords, sizeof(keywords) / sizeof(*key), sizeof(*key), compare_keys))) return key->token; } else { ++cptr; if (c == L_CURL) return (TEXT); if (c == '%' || c == '\\') return (MARK); if (c == '<') return (LEFT); if (c == '>') return (RIGHT); if (c == '0') return (TOKEN); if (c == '2') return (NONASSOC); } syntax_error(lineno, line, t_cptr); /*NOTREACHED */ } static void copy_ident(void) { int c; FILE *f = output_file; c = nextc(); if (c == EOF) unexpected_EOF(); if (c != '"') syntax_error(lineno, line, cptr); ++outline; fprintf(f, "#ident \""); for (;;) { c = *++cptr; if (c == '\n') { fprintf(f, "\"\n"); return; } putc(c, f); if (c == '"') { putc('\n', f); ++cptr; return; } } } static char * copy_string(int quote) { struct mstring *temp = msnew(); struct ainfo a; a.a_lineno = lineno; a.a_line = dup_line(); a.a_cptr = a.a_line + (cptr - line - 1); for (;;) { int c = *cptr++; mputc(temp, c); if (c == quote) { FREE(a.a_line); return msdone(temp); } if (c == '\n') unterminated_string(&a); if (c == '\\') { c = *cptr++; mputc(temp, c); if (c == '\n') { get_line(); if (line == NULL) unterminated_string(&a); } } } } static char * copy_comment(void) { struct mstring *temp = msnew(); int c; c = *cptr; if (c == '/') { mputc(temp, '*'); while ((c = *++cptr) != '\n') { mputc(temp, c); if (c == '*' && cptr[1] == '/') mputc(temp, ' '); } mputc(temp, '*'); mputc(temp, '/'); } else if (c == '*') { struct ainfo a; a.a_lineno = lineno; a.a_line = dup_line(); a.a_cptr = a.a_line + (cptr - line - 1); mputc(temp, c); ++cptr; for (;;) { c = *cptr++; mputc(temp, c); if (c == '*' && *cptr == '/') { mputc(temp, '/'); ++cptr; FREE(a.a_line); return msdone(temp); } if (c == '\n') { get_line(); if (line == NULL) unterminated_comment(&a); } } } return msdone(temp); } static int check_key(int pos) { const char *key = code_keys[pos]; while (*cptr && *key) if (*key++ != *cptr++) return 0; if (*key || (!isspace(UCH(*cptr)) && *cptr != L_CURL)) return 0; cptr--; return 1; } static void copy_code(void) { int c; int curl; int cline; int on_line = 0; int pos = CODE_HEADER; struct mstring *code_mstr; /* read %code { */ for (;;) { c = *++cptr; if (c == EOF) unexpected_EOF(); if (isspace(UCH(c))) continue; if (c == L_CURL) break; if (pos == CODE_HEADER) { switch (UCH(c)) { case 'r': pos = CODE_REQUIRES; break; case 'p': pos = CODE_PROVIDES; break; case 't': pos = CODE_TOP; break; case 'i': pos = CODE_IMPORTS; break; default: break; } if (pos == -1 || !check_key(pos)) { syntax_error(lineno, line, cptr); /*NOTREACHED */ } } } cptr++; /* skip initial curl */ while (*cptr && isspace(UCH(*cptr))) /* skip space */ cptr++; curl = 1; /* nesting count */ /* gather text */ code_lines[pos].name = code_keys[pos]; if ((cline = (int)code_lines[pos].num) != 0) { code_mstr = msrenew(code_lines[pos].lines); } else { code_mstr = msnew(); } cline++; if (!lflag) msprintf(code_mstr, line_format, lineno, input_file_name); for (;;) { c = *cptr++; switch (c) { case '\0': get_line(); if (line == NULL) { unexpected_EOF(); /*NOTREACHED */ } continue; case '\n': cline++; on_line = 0; break; case L_CURL: curl++; break; case R_CURL: if (--curl == 0) { if (on_line > 1) { mputc(code_mstr, '\n'); cline++; } code_lines[pos].lines = msdone(code_mstr); code_lines[pos].num = (size_t)cline; return; } break; default: break; } mputc(code_mstr, c); on_line++; } } static void copy_text(void) { int c; FILE *f = text_file; int need_newline = 0; struct ainfo a; a.a_lineno = lineno; a.a_line = dup_line(); a.a_cptr = a.a_line + (cptr - line - 2); if (*cptr == '\n') { get_line(); if (line == NULL) unterminated_text(&a); } fprintf_lineno(f, lineno, input_file_name); loop: c = *cptr++; switch (c) { case '\n': putc('\n', f); need_newline = 0; get_line(); if (line) goto loop; unterminated_text(&a); case '\'': case '"': putc(c, f); { char *s = copy_string(c); fputs(s, f); free(s); } need_newline = 1; goto loop; case '/': putc(c, f); { char *s = copy_comment(); fputs(s, f); free(s); } need_newline = 1; goto loop; case '%': case '\\': if (*cptr == R_CURL) { if (need_newline) putc('\n', f); ++cptr; FREE(a.a_line); return; } /* FALLTHRU */ default: putc(c, f); need_newline = 1; goto loop; } } static void puts_both(const char *s) { fputs(s, text_file); if (dflag) fputs(s, union_file); } static void putc_both(int c) { putc(c, text_file); if (dflag) putc(c, union_file); } static void copy_union(void) { int c; int depth; struct ainfo a; a.a_lineno = lineno; a.a_line = dup_line(); a.a_cptr = a.a_line + (cptr - line - 6); if (unionized) over_unionized(cptr - 6); unionized = 1; puts_both("#ifdef YYSTYPE\n"); puts_both("#undef YYSTYPE_IS_DECLARED\n"); puts_both("#define YYSTYPE_IS_DECLARED 1\n"); puts_both("#endif\n"); puts_both("#ifndef YYSTYPE_IS_DECLARED\n"); puts_both("#define YYSTYPE_IS_DECLARED 1\n"); fprintf_lineno(text_file, lineno, input_file_name); puts_both("typedef union YYSTYPE"); depth = 0; loop: c = *cptr++; putc_both(c); switch (c) { case '\n': get_line(); if (line == NULL) unterminated_union(&a); goto loop; case L_CURL: ++depth; goto loop; case R_CURL: if (--depth == 0) { puts_both(" YYSTYPE;\n"); puts_both("#endif /* !YYSTYPE_IS_DECLARED */\n"); FREE(a.a_line); return; } goto loop; case '\'': case '"': { char *s = copy_string(c); puts_both(s); free(s); } goto loop; case '/': { char *s = copy_comment(); puts_both(s); free(s); } goto loop; default: goto loop; } } static char * after_blanks(char *s) { while (*s != '\0' && isspace(UCH(*s))) ++s; return s; } /* * Trim leading/trailing blanks, and collapse multiple embedded blanks to a * single space. Return index to last character in the buffer. */ static int trim_blanks(char *buffer) { if (*buffer != '\0') { char *d = buffer; char *s = after_blanks(d); while ((*d++ = *s++) != '\0') { ; } --d; while ((--d != buffer) && isspace(UCH(*d))) *d = '\0'; for (s = d = buffer; (*d++ = *s++) != '\0';) { if (isspace(UCH(*s))) { *s = ' '; while (isspace(UCH(*s))) { *s++ = ' '; } --s; } } } return (int)strlen(buffer) - 1; } /* * Scan forward in the current line-buffer looking for a right-curly bracket. * * Parameters begin with a left-curly bracket, and continue until there are no * more interesting characters after the last right-curly bracket on the * current line. Bison documents parameters as separated like this: * {type param1} {type2 param2} * but also accepts commas (although some versions of bison mishandle this) * {type param1, type2 param2} */ static int more_curly(void) { char *save = cptr; int result = 0; int finish = 0; do { switch (next_inline()) { case 0: case '\n': finish = 1; break; case R_CURL: finish = 1; result = 1; break; } ++cptr; } while (!finish); cptr = save; return result; } static void save_param(int k, char *buffer, int name, int type2) { param *head, *p; p = TMALLOC(param, 1); NO_SPACE(p); p->type2 = strdup(buffer + type2); NO_SPACE(p->type2); buffer[type2] = '\0'; (void)trim_blanks(p->type2); p->name = strdup(buffer + name); NO_SPACE(p->name); buffer[name] = '\0'; (void)trim_blanks(p->name); p->type = strdup(buffer); NO_SPACE(p->type); (void)trim_blanks(p->type); if (k == LEX_PARAM) head = lex_param; else head = parse_param; if (head != NULL) { while (head->next) head = head->next; head->next = p; } else { if (k == LEX_PARAM) lex_param = p; else parse_param = p; } p->next = NULL; } /* * Keep a linked list of parameters. This may be multi-line, if the trailing * right-curly bracket is absent. */ static void copy_param(int k) { int c; int name, type2; int curly = 0; char *buf = 0; int i = -1; size_t buf_size = 0; int st_lineno = lineno; char *comma; do { int state = curly; c = next_inline(); switch (c) { case EOF: unexpected_EOF(); break; case L_CURL: if (curly == 1) { goto oops; } curly = 1; st_lineno = lineno; break; case R_CURL: if (curly != 1) { goto oops; } curly = 2; break; case '\n': if (curly == 0) { goto oops; } break; case '%': if ((curly == 1) && (cptr == line)) { lineno = st_lineno; missing_brace(); } /* FALLTHRU */ case '"': case '\'': goto oops; default: if (curly == 0 && !isspace(UCH(c))) { goto oops; } break; } if (buf == 0) { buf_size = (size_t)linesize; buf = TMALLOC(char, buf_size); NO_SPACE(buf); } else if (c == '\n') { char *tmp; get_line(); if (line == NULL) unexpected_EOF(); --cptr; buf_size += (size_t)linesize; tmp = TREALLOC(char, buf, buf_size); NO_SPACE(tmp); buf = tmp; } if (curly) { if ((state == 2) && (c == L_CURL)) { buf[++i] = ','; } else if ((state == 2) && isspace(UCH(c))) { ; } else if ((c != L_CURL) && (c != R_CURL)) { buf[++i] = (char)c; } } cptr++; } while (curly < 2 || more_curly()); if (i == 0) { if (curly == 1) { lineno = st_lineno; missing_brace(); } goto oops; } buf[++i] = '\0'; (void)trim_blanks(buf); comma = buf - 1; do { char *parms = (comma + 1); comma = strchr(parms, ','); if (comma != 0) *comma = '\0'; (void)trim_blanks(parms); i = (int)strlen(parms) - 1; if (i < 0) { goto oops; } if (parms[i] == ']') { int level = 1; while (i >= 0) { char ch = parms[i--]; if (ch == ']') { ++level; } else if (ch == '[') { if (--level <= 1) { ++i; break; } } } if (i <= 0) unexpected_EOF(); type2 = i--; } else { type2 = i + 1; } while (i > 0 && (isalnum(UCH(parms[i])) || UCH(parms[i]) == '_')) i--; if (!isspace(UCH(parms[i])) && parms[i] != '*') goto oops; name = i + 1; save_param(k, parms, name, type2); } while (comma != 0); FREE(buf); return; oops: FREE(buf); syntax_error(lineno, line, cptr); } static int hexval(int c) { if (c >= '0' && c <= '9') return (c - '0'); if (c >= 'A' && c <= 'F') return (c - 'A' + 10); if (c >= 'a' && c <= 'f') return (c - 'a' + 10); return (-1); } static bucket * get_literal(void) { int c, quote; int i; int n; char *s; bucket *bp; struct ainfo a; a.a_lineno = lineno; a.a_line = dup_line(); a.a_cptr = a.a_line + (cptr - line); quote = *cptr++; cinc = 0; for (;;) { c = *cptr++; if (c == quote) break; if (c == '\n') unterminated_string(&a); if (c == '\\') { char *c_cptr = cptr - 1; c = *cptr++; switch (c) { case '\n': get_line(); if (line == NULL) unterminated_string(&a); continue; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': n = c - '0'; c = *cptr; if (IS_OCTAL(c)) { n = (n << 3) + (c - '0'); c = *++cptr; if (IS_OCTAL(c)) { n = (n << 3) + (c - '0'); ++cptr; } } if (n > MAXCHAR) illegal_character(c_cptr); c = n; break; case 'x': c = *cptr++; n = hexval(c); if (n < 0 || n >= 16) illegal_character(c_cptr); for (;;) { c = *cptr; i = hexval(c); if (i < 0 || i >= 16) break; ++cptr; n = (n << 4) + i; if (n > MAXCHAR) illegal_character(c_cptr); } c = n; break; case 'a': c = 7; break; case 'b': c = '\b'; break; case 'f': c = '\f'; break; case 'n': c = '\n'; break; case 'r': c = '\r'; break; case 't': c = '\t'; break; case 'v': c = '\v'; break; } } cachec(c); } FREE(a.a_line); n = cinc; s = TMALLOC(char, n); NO_SPACE(s); for (i = 0; i < n; ++i) s[i] = cache[i]; cinc = 0; if (n == 1) cachec('\''); else cachec('"'); for (i = 0; i < n; ++i) { c = UCH(s[i]); if (c == '\\' || c == cache[0]) { cachec('\\'); cachec(c); } else if (isprint(UCH(c))) cachec(c); else { cachec('\\'); switch (c) { case 7: cachec('a'); break; case '\b': cachec('b'); break; case '\f': cachec('f'); break; case '\n': cachec('n'); break; case '\r': cachec('r'); break; case '\t': cachec('t'); break; case '\v': cachec('v'); break; default: cachec(((c >> 6) & 7) + '0'); cachec(((c >> 3) & 7) + '0'); cachec((c & 7) + '0'); break; } } } if (n == 1) cachec('\''); else cachec('"'); cachec(NUL); bp = lookup(cache); bp->class = TERM; if (n == 1 && bp->value == UNDEFINED) bp->value = UCH(*s); FREE(s); return (bp); } static int is_reserved(char *name) { if (strcmp(name, ".") == 0 || strcmp(name, "$accept") == 0 || strcmp(name, "$end") == 0) return (1); if (name[0] == '$' && name[1] == '$' && isdigit(UCH(name[2]))) { char *s = name + 3; while (isdigit(UCH(*s))) ++s; if (*s == NUL) return (1); } return (0); } static bucket * get_name(void) { int c; cinc = 0; for (c = *cptr; IS_IDENT(c); c = *++cptr) cachec(c); cachec(NUL); if (is_reserved(cache)) used_reserved(cache); return (lookup(cache)); } static Value_t get_number(void) { int c; long n; char *base = cptr; n = 0; for (c = *cptr; isdigit(UCH(c)); c = *++cptr) { n = (10 * n + (c - '0')); if (n > MAXYYINT) { syntax_error(lineno, line, base); /*NOTREACHED */ } } return (Value_t)(n); } static char * cache_tag(char *tag, size_t len) { int i; char *s; for (i = 0; i < ntags; ++i) { if (strncmp(tag, tag_table[i], len) == 0 && tag_table[i][len] == NUL) return (tag_table[i]); } if (ntags >= tagmax) { tagmax += 16; tag_table = (tag_table ? TREALLOC(char *, tag_table, tagmax) : TMALLOC(char *, tagmax)); NO_SPACE(tag_table); } s = TMALLOC(char, len + 1); NO_SPACE(s); strncpy(s, tag, len); s[len] = 0; tag_table[ntags++] = s; return s; } static char * get_tag(void) { int c; int t_lineno = lineno; char *t_line = dup_line(); char *t_cptr = t_line + (cptr - line); ++cptr; c = nextc(); if (c == EOF) unexpected_EOF(); if (!IS_NAME1(c)) illegal_tag(t_lineno, t_line, t_cptr); cinc = 0; do { cachec(c); c = *++cptr; } while (IS_IDENT(c)); cachec(NUL); c = nextc(); if (c == EOF) unexpected_EOF(); if (c != '>') illegal_tag(t_lineno, t_line, t_cptr); ++cptr; FREE(t_line); havetags = 1; return cache_tag(cache, (size_t)cinc); } #if defined(YYBTYACC) static char * scan_id(void) { char *b = cptr; while (IS_NAME2(UCH(*cptr))) cptr++; return cache_tag(b, (size_t)(cptr - b)); } #endif static void declare_tokens(int assoc) { int c; bucket *bp; Value_t value; char *tag = 0; if (assoc != TOKEN) ++prec; c = nextc(); if (c == EOF) unexpected_EOF(); if (c == '<') { tag = get_tag(); c = nextc(); if (c == EOF) unexpected_EOF(); } for (;;) { if (isalpha(UCH(c)) || c == '_' || c == '.' || c == '$') bp = get_name(); else if (c == '\'' || c == '"') bp = get_literal(); else return; if (bp == goal) tokenized_start(bp->name); bp->class = TERM; if (tag) { if (bp->tag && tag != bp->tag) retyped_warning(bp->name); bp->tag = tag; } if (assoc != TOKEN) { if (bp->prec && prec != bp->prec) reprec_warning(bp->name); bp->assoc = (Assoc_t)assoc; bp->prec = prec; } c = nextc(); if (c == EOF) unexpected_EOF(); if (isdigit(UCH(c))) { value = get_number(); if (bp->value != UNDEFINED && value != bp->value) revalued_warning(bp->name); bp->value = value; c = nextc(); if (c == EOF) unexpected_EOF(); } } } /* * %expect requires special handling * as it really isn't part of the yacc * grammar only a flag for yacc proper. */ static void declare_expect(int assoc) { int c; if (assoc != EXPECT && assoc != EXPECT_RR) ++prec; /* * Stay away from nextc - doesn't * detect EOL and will read to EOF. */ c = *++cptr; if (c == EOF) unexpected_EOF(); for (;;) { if (isdigit(UCH(c))) { if (assoc == EXPECT) SRexpect = get_number(); else RRexpect = get_number(); break; } /* * Looking for number before EOL. * Spaces, tabs, and numbers are ok, * words, punc., etc. are syntax errors. */ else if (c == '\n' || isalpha(UCH(c)) || !isspace(UCH(c))) { syntax_error(lineno, line, cptr); } else { c = *++cptr; if (c == EOF) unexpected_EOF(); } } } #if defined(YYBTYACC) static void declare_argtypes(bucket *bp) { char *tags[MAXARGS]; int args = 0; if (bp->args >= 0) retyped_warning(bp->name); cptr++; /* skip open paren */ for (;;) { int c = nextc(); if (c == EOF) unexpected_EOF(); if (c != '<') syntax_error(lineno, line, cptr); tags[args++] = get_tag(); c = nextc(); if (c == R_PAREN) break; if (c == EOF) unexpected_EOF(); } cptr++; /* skip close paren */ bp->args = args; bp->argnames = TMALLOC(char *, args); NO_SPACE(bp->argnames); bp->argtags = CALLOC(sizeof(char *), args + 1); NO_SPACE(bp->argtags); while (--args >= 0) { bp->argtags[args] = tags[args]; bp->argnames[args] = NULL; } } #endif static void declare_types(void) { int c; bucket *bp = NULL; char *tag = NULL; c = nextc(); if (c == EOF) unexpected_EOF(); if (c == '<') tag = get_tag(); for (;;) { c = nextc(); if (c == EOF) unexpected_EOF(); if (isalpha(UCH(c)) || c == '_' || c == '.' || c == '$') { bp = get_name(); #if defined(YYBTYACC) if (nextc() == L_PAREN) declare_argtypes(bp); else bp->args = 0; #endif } else if (c == '\'' || c == '"') { bp = get_literal(); #if defined(YYBTYACC) bp->args = 0; #endif } else return; if (tag) { if (bp->tag && tag != bp->tag) retyped_warning(bp->name); bp->tag = tag; } } } static void declare_start(void) { int c; bucket *bp; c = nextc(); if (c == EOF) unexpected_EOF(); if (!isalpha(UCH(c)) && c != '_' && c != '.' && c != '$') syntax_error(lineno, line, cptr); bp = get_name(); if (bp->class == TERM) terminal_start(bp->name); if (goal && goal != bp) restarted_warning(); goal = bp; } static void read_declarations(void) { cache_size = CACHE_SIZE; cache = TMALLOC(char, cache_size); NO_SPACE(cache); for (;;) { int k; int c = nextc(); if (c == EOF) unexpected_EOF(); if (c != '%') syntax_error(lineno, line, cptr); switch (k = keyword()) { case MARK: return; case IDENT: copy_ident(); break; case XCODE: copy_code(); break; case TEXT: copy_text(); break; case UNION: copy_union(); break; case TOKEN: case LEFT: case RIGHT: case NONASSOC: declare_tokens(k); break; case EXPECT: case EXPECT_RR: declare_expect(k); break; case TYPE: declare_types(); break; case START: declare_start(); break; case PURE_PARSER: pure_parser = 1; break; case PARSE_PARAM: case LEX_PARAM: copy_param(k); break; case TOKEN_TABLE: token_table = 1; break; case ERROR_VERBOSE: error_verbose = 1; break; #if defined(YYBTYACC) case LOCATIONS: locations = 1; break; case DESTRUCTOR: destructor = 1; copy_destructor(); break; case INITIAL_ACTION: copy_initial_action(); break; #endif case NONPOSIX_DEBUG: tflag = 1; break; case POSIX_YACC: /* noop for bison compatibility. byacc is already designed to be posix * yacc compatible. */ break; } } } static void initialize_grammar(void) { nitems = 4; maxitems = 300; pitem = TMALLOC(bucket *, maxitems); NO_SPACE(pitem); pitem[0] = 0; pitem[1] = 0; pitem[2] = 0; pitem[3] = 0; nrules = 3; maxrules = 100; plhs = TMALLOC(bucket *, maxrules); NO_SPACE(plhs); plhs[0] = 0; plhs[1] = 0; plhs[2] = 0; rprec = TMALLOC(Value_t, maxrules); NO_SPACE(rprec); rprec[0] = 0; rprec[1] = 0; rprec[2] = 0; rassoc = TMALLOC(Assoc_t, maxrules); NO_SPACE(rassoc); rassoc[0] = TOKEN; rassoc[1] = TOKEN; rassoc[2] = TOKEN; } static void expand_items(void) { maxitems += 300; pitem = TREALLOC(bucket *, pitem, maxitems); NO_SPACE(pitem); } static void expand_rules(void) { maxrules += 100; plhs = TREALLOC(bucket *, plhs, maxrules); NO_SPACE(plhs); rprec = TREALLOC(Value_t, rprec, maxrules); NO_SPACE(rprec); rassoc = TREALLOC(Assoc_t, rassoc, maxrules); NO_SPACE(rassoc); } /* set immediately prior to where copy_args() could be called, and incremented by the various routines that will rescan the argument list as appropriate */ static int rescan_lineno; #if defined(YYBTYACC) static char * copy_args(int *alen) { struct mstring *s = msnew(); int depth = 0, len = 1; char c, quote = 0; struct ainfo a; a.a_lineno = lineno; a.a_line = dup_line(); a.a_cptr = a.a_line + (cptr - line - 1); while ((c = *cptr++) != R_PAREN || depth || quote) { if (c == ',' && !quote && !depth) { len++; mputc(s, 0); continue; } mputc(s, c); if (c == '\n') { get_line(); if (!line) { if (quote) unterminated_string(&a); else unterminated_arglist(&a); } } else if (quote) { if (c == quote) quote = 0; else if (c == '\\') { if (*cptr != '\n') mputc(s, *cptr++); } } else { if (c == L_PAREN) depth++; else if (c == R_PAREN) depth--; else if (c == '\"' || c == '\'') quote = c; } } if (alen) *alen = len; FREE(a.a_line); return msdone(s); } static char * parse_id(char *p, char **save) { char *b; while (isspace(UCH(*p))) if (*p++ == '\n') rescan_lineno++; if (!isalpha(UCH(*p)) && *p != '_') return NULL; b = p; while (IS_NAME2(UCH(*p))) p++; if (save) { *save = cache_tag(b, (size_t)(p - b)); } return p; } static char * parse_int(char *p, int *save) { int neg = 0, val = 0; while (isspace(UCH(*p))) if (*p++ == '\n') rescan_lineno++; if (*p == '-') { neg = 1; p++; } if (!isdigit(UCH(*p))) return NULL; while (isdigit(UCH(*p))) val = val * 10 + *p++ - '0'; if (neg) val = -val; if (save) *save = val; return p; } static void parse_arginfo(bucket *a, char *args, int argslen) { char *p = args, *tmp; int i, redec = 0; if (a->args >= 0) { if (a->args != argslen) arg_number_disagree_warning(rescan_lineno, a->name); redec = 1; } else { if ((a->args = argslen) == 0) return; a->argnames = TMALLOC(char *, argslen); NO_SPACE(a->argnames); a->argtags = TMALLOC(char *, argslen); NO_SPACE(a->argtags); } if (!args) return; for (i = 0; i < argslen; i++) { while (isspace(UCH(*p))) if (*p++ == '\n') rescan_lineno++; if (*p++ != '$') bad_formals(); while (isspace(UCH(*p))) if (*p++ == '\n') rescan_lineno++; if (*p == '<') { havetags = 1; if (!(p = parse_id(p + 1, &tmp))) bad_formals(); while (isspace(UCH(*p))) if (*p++ == '\n') rescan_lineno++; if (*p++ != '>') bad_formals(); if (redec) { if (a->argtags[i] != tmp) arg_type_disagree_warning(rescan_lineno, i + 1, a->name); } else a->argtags[i] = tmp; } else if (!redec) a->argtags[i] = NULL; if (!(p = parse_id(p, &a->argnames[i]))) bad_formals(); while (isspace(UCH(*p))) if (*p++ == '\n') rescan_lineno++; if (*p++) bad_formals(); } free(args); } static char * compile_arg(char **theptr, char *yyvaltag) { char *p = *theptr; struct mstring *c = msnew(); int i, n; Value_t *offsets = NULL, maxoffset; bucket **rhs; maxoffset = 0; n = 0; for (i = nitems - 1; pitem[i]; --i) { n++; if (pitem[i]->class != ARGUMENT) maxoffset++; } if (maxoffset > 0) { int j; offsets = TCMALLOC(Value_t, maxoffset + 1); NO_SPACE(offsets); for (j = 0, i++; i < nitems; i++) if (pitem[i]->class != ARGUMENT) offsets[++j] = (Value_t)(i - nitems + 1); } rhs = pitem + nitems - 1; if (yyvaltag) msprintf(c, "yyval.%s = ", yyvaltag); else msprintf(c, "yyval = "); while (*p) { if (*p == '$') { char *tag = NULL; if (*++p == '<') if (!(p = parse_id(++p, &tag)) || *p++ != '>') illegal_tag(rescan_lineno, NULL, NULL); if (isdigit(UCH(*p)) || *p == '-') { int val; if (!(p = parse_int(p, &val))) dollar_error(rescan_lineno, NULL, NULL); if (val <= 0) i = val - n; else if (val > maxoffset) { dollar_warning(rescan_lineno, val); i = val - maxoffset; } else if (maxoffset > 0) { i = offsets[val]; if (!tag && !(tag = rhs[i]->tag) && havetags) untyped_rhs(val, rhs[i]->name); } msprintf(c, "yystack.l_mark[%d]", i); if (tag) msprintf(c, ".%s", tag); else if (havetags) unknown_rhs(val); } else if (isalpha(UCH(*p)) || *p == '_') { char *arg; if (!(p = parse_id(p, &arg))) dollar_error(rescan_lineno, NULL, NULL); for (i = plhs[nrules]->args - 1; i >= 0; i--) if (arg == plhs[nrules]->argnames[i]) break; if (i < 0) unknown_arg_warning(rescan_lineno, "$", arg, NULL, NULL); else if (!tag) tag = plhs[nrules]->argtags[i]; msprintf(c, "yystack.l_mark[%d]", i - plhs[nrules]->args + 1 - n); if (tag) msprintf(c, ".%s", tag); else if (havetags) untyped_arg_warning(rescan_lineno, "$", arg); } else dollar_error(rescan_lineno, NULL, NULL); } else if (*p == '@') { at_error(rescan_lineno, NULL, NULL); } else { if (*p == '\n') rescan_lineno++; mputc(c, *p++); } } *theptr = p; if (maxoffset > 0) FREE(offsets); return msdone(c); } static int can_elide_arg(char **theptr, char *yyvaltag) { char *p = *theptr; int rv = 0; int i, n = 0; Value_t *offsets = NULL, maxoffset = 0; bucket **rhs; char *tag = 0; if (*p++ != '$') return 0; if (*p == '<') { if (!(p = parse_id(++p, &tag)) || *p++ != '>') return 0; } for (i = nitems - 1; pitem[i]; --i) { n++; if (pitem[i]->class != ARGUMENT) maxoffset++; } if (maxoffset > 0) { int j; offsets = TCMALLOC(Value_t, maxoffset + 1); NO_SPACE(offsets); for (j = 0, i++; i < nitems; i++) if (pitem[i]->class != ARGUMENT) offsets[++j] = (Value_t)(i - nitems + 1); } rhs = pitem + nitems - 1; if (isdigit(UCH(*p)) || *p == '-') { int val; if (!(p = parse_int(p, &val))) rv = 0; else { if (val <= 0) rv = 1 - val + n; else if (val > maxoffset) rv = 0; else { i = offsets[val]; rv = 1 - i; if (!tag) tag = rhs[i]->tag; } } } else if (isalpha(UCH(*p)) || *p == '_') { char *arg; if (!(p = parse_id(p, &arg))) { FREE(offsets); return 0; } for (i = plhs[nrules]->args - 1; i >= 0; i--) if (arg == plhs[nrules]->argnames[i]) break; if (i >= 0) { if (!tag) tag = plhs[nrules]->argtags[i]; rv = plhs[nrules]->args + n - i; } } if (tag && yyvaltag) { if (strcmp(tag, yyvaltag)) rv = 0; } else if (tag || yyvaltag) rv = 0; if (maxoffset > 0) FREE(offsets); if (p == 0 || *p || rv <= 0) return 0; *theptr = p + 1; return rv; } #define ARG_CACHE_SIZE 1024 static struct arg_cache { struct arg_cache *next; char *code; int rule; } *arg_cache[ARG_CACHE_SIZE]; static int lookup_arg_cache(char *code) { struct arg_cache *entry; entry = arg_cache[strnshash(code) % ARG_CACHE_SIZE]; while (entry) { if (!strnscmp(entry->code, code)) return entry->rule; entry = entry->next; } return -1; } static void insert_arg_cache(char *code, int rule) { struct arg_cache *entry = NEW(struct arg_cache); int i; NO_SPACE(entry); i = strnshash(code) % ARG_CACHE_SIZE; entry->code = code; entry->rule = rule; entry->next = arg_cache[i]; arg_cache[i] = entry; } static void clean_arg_cache(void) { struct arg_cache *e, *t; int i; for (i = 0; i < ARG_CACHE_SIZE; i++) { for (e = arg_cache[i]; (t = e); e = e->next, FREE(t)) free(e->code); arg_cache[i] = NULL; } } #endif /* defined(YYBTYACC) */ static void advance_to_start(void) { int c; bucket *bp; int s_lineno; #if defined(YYBTYACC) char *args = NULL; int argslen = 0; #endif for (;;) { char *s_cptr; c = nextc(); if (c != '%') break; s_cptr = cptr; switch (keyword()) { case XCODE: copy_code(); break; case MARK: no_grammar(); case TEXT: copy_text(); break; case START: declare_start(); break; default: syntax_error(lineno, line, s_cptr); } } c = nextc(); if (!isalpha(UCH(c)) && c != '_' && c != '.' && c != '_') syntax_error(lineno, line, cptr); bp = get_name(); if (goal == 0) { if (bp->class == TERM) terminal_start(bp->name); goal = bp; } s_lineno = lineno; c = nextc(); if (c == EOF) unexpected_EOF(); rescan_lineno = lineno; /* line# for possible inherited args rescan */ #if defined(YYBTYACC) if (c == L_PAREN) { ++cptr; args = copy_args(&argslen); NO_SPACE(args); c = nextc(); } #endif if (c != ':') syntax_error(lineno, line, cptr); start_rule(bp, s_lineno); #if defined(YYBTYACC) parse_arginfo(bp, args, argslen); #endif ++cptr; } static void start_rule(bucket *bp, int s_lineno) { if (bp->class == TERM) terminal_lhs(s_lineno); bp->class = NONTERM; if (!bp->index) bp->index = nrules; if (nrules >= maxrules) expand_rules(); plhs[nrules] = bp; rprec[nrules] = UNDEFINED; rassoc[nrules] = TOKEN; } static void end_rule(void) { if (!last_was_action && plhs[nrules]->tag) { if (pitem[nitems - 1]) { int i; for (i = nitems - 1; (i > 0) && pitem[i]; --i) continue; if (pitem[i + 1] == 0 || pitem[i + 1]->tag != plhs[nrules]->tag) default_action_warning(plhs[nrules]->name); } else default_action_warning(plhs[nrules]->name); } last_was_action = 0; if (nitems >= maxitems) expand_items(); pitem[nitems] = 0; ++nitems; ++nrules; } static void insert_empty_rule(void) { bucket *bp, **bpp; assert(cache); assert(cache_size >= CACHE_SIZE); sprintf(cache, "$$%d", ++gensym); bp = make_bucket(cache); last_symbol->next = bp; last_symbol = bp; bp->tag = plhs[nrules]->tag; bp->class = ACTION; #if defined(YYBTYACC) bp->args = 0; #endif nitems = (Value_t)(nitems + 2); if (nitems > maxitems) expand_items(); bpp = pitem + nitems - 1; *bpp-- = bp; while ((bpp[0] = bpp[-1]) != 0) --bpp; if (++nrules >= maxrules) expand_rules(); plhs[nrules] = plhs[nrules - 1]; plhs[nrules - 1] = bp; rprec[nrules] = rprec[nrules - 1]; rprec[nrules - 1] = 0; rassoc[nrules] = rassoc[nrules - 1]; rassoc[nrules - 1] = TOKEN; } #if defined(YYBTYACC) static char * insert_arg_rule(char *arg, char *tag) { int line_number = rescan_lineno; char *code = compile_arg(&arg, tag); int rule = lookup_arg_cache(code); FILE *f = action_file; if (rule < 0) { rule = nrules; insert_arg_cache(code, rule); trialaction = 1; /* arg rules always run in trial mode */ begin_case(f, rule - 2); fprintf_lineno(f, line_number, input_file_name); fprintf(f, "%s;", code); end_case(f); insert_empty_rule(); plhs[rule]->tag = cache_tag(tag, strlen(tag)); plhs[rule]->class = ARGUMENT; } else { if (++nitems > maxitems) expand_items(); pitem[nitems - 1] = plhs[rule]; free(code); } return arg + 1; } #endif static void add_symbol(void) { int c; bucket *bp; int s_lineno = lineno; #if defined(YYBTYACC) char *args = NULL; int argslen = 0; #endif c = *cptr; if (c == '\'' || c == '"') bp = get_literal(); else bp = get_name(); c = nextc(); rescan_lineno = lineno; /* line# for possible inherited args rescan */ #if defined(YYBTYACC) if (c == L_PAREN) { ++cptr; args = copy_args(&argslen); NO_SPACE(args); c = nextc(); } #endif if (c == ':') { end_rule(); start_rule(bp, s_lineno); #if defined(YYBTYACC) parse_arginfo(bp, args, argslen); #endif ++cptr; return; } if (last_was_action) insert_empty_rule(); last_was_action = 0; #if defined(YYBTYACC) if (bp->args < 0) bp->args = argslen; if (argslen == 0 && bp->args > 0 && pitem[nitems - 1] == NULL) { int i; if (plhs[nrules]->args != bp->args) wrong_number_args_warning("default ", bp->name); for (i = bp->args - 1; i >= 0; i--) if (plhs[nrules]->argtags[i] != bp->argtags[i]) wrong_type_for_arg_warning(i + 1, bp->name); } else if (bp->args != argslen) wrong_number_args_warning("", bp->name); if (args != 0) { char *ap = args; int i = 0; int elide_cnt = can_elide_arg(&ap, bp->argtags[0]); if (elide_cnt > argslen) elide_cnt = 0; if (elide_cnt) { for (i = 1; i < elide_cnt; i++) if (can_elide_arg(&ap, bp->argtags[i]) != elide_cnt - i) { elide_cnt = 0; break; } } if (elide_cnt) { assert(i == elide_cnt); } else { ap = args; i = 0; } for (; i < argslen; i++) ap = insert_arg_rule(ap, bp->argtags[i]); free(args); } #endif /* defined(YYBTYACC) */ if (++nitems > maxitems) expand_items(); pitem[nitems - 1] = bp; } static void copy_action(void) { int c; int i, j, n; int depth; #if defined(YYBTYACC) int haveyyval = 0; #endif char *tag; FILE *f = action_file; struct ainfo a; Value_t *offsets = NULL, maxoffset; bucket **rhs; a.a_lineno = lineno; a.a_line = dup_line(); a.a_cptr = a.a_line + (cptr - line); if (last_was_action) insert_empty_rule(); last_was_action = 1; #if defined(YYBTYACC) trialaction = (*cptr == L_BRAC); #endif begin_case(f, nrules - 2); #if defined(YYBTYACC) if (backtrack) { if (!trialaction) fprintf(f, " if (!yytrial)\n"); } #endif fprintf_lineno(f, lineno, input_file_name); if (*cptr == '=') ++cptr; /* avoid putting curly-braces in first column, to ease editing */ if (*after_blanks(cptr) == L_CURL) { putc('\t', f); cptr = after_blanks(cptr); } maxoffset = 0; n = 0; for (i = nitems - 1; pitem[i]; --i) { ++n; if (pitem[i]->class != ARGUMENT) maxoffset++; } if (maxoffset > 0) { offsets = TMALLOC(Value_t, maxoffset + 1); NO_SPACE(offsets); for (j = 0, i++; i < nitems; i++) { if (pitem[i]->class != ARGUMENT) { offsets[++j] = (Value_t)(i - nitems + 1); } } } rhs = pitem + nitems - 1; depth = 0; loop: c = *cptr; if (c == '$') { if (cptr[1] == '<') { int d_lineno = lineno; char *d_line = dup_line(); char *d_cptr = d_line + (cptr - line); ++cptr; tag = get_tag(); c = *cptr; if (c == '$') { fprintf(f, "yyval.%s", tag); ++cptr; FREE(d_line); goto loop; } else if (isdigit(UCH(c))) { i = get_number(); if (i == 0) fprintf(f, "yystack.l_mark[%d].%s", -n, tag); else if (i > maxoffset) { dollar_warning(d_lineno, i); fprintf(f, "yystack.l_mark[%ld].%s", (long)(i - maxoffset), tag); } else if (offsets) fprintf(f, "yystack.l_mark[%ld].%s", (long)offsets[i], tag); FREE(d_line); goto loop; } else if (c == '-' && isdigit(UCH(cptr[1]))) { ++cptr; i = -get_number() - n; fprintf(f, "yystack.l_mark[%d].%s", i, tag); FREE(d_line); goto loop; } #if defined(YYBTYACC) else if (isalpha(UCH(c)) || c == '_') { char *arg = scan_id(); for (i = plhs[nrules]->args - 1; i >= 0; i--) if (arg == plhs[nrules]->argnames[i]) break; if (i < 0) unknown_arg_warning(d_lineno, "$", arg, d_line, d_cptr); fprintf(f, "yystack.l_mark[%d].%s", i - plhs[nrules]->args + 1 - n, tag); FREE(d_line); goto loop; } #endif else dollar_error(d_lineno, d_line, d_cptr); } else if (cptr[1] == '$') { if (havetags) { tag = plhs[nrules]->tag; if (tag == 0) untyped_lhs(); fprintf(f, "yyval.%s", tag); } else fprintf(f, "yyval"); cptr += 2; #if defined(YYBTYACC) haveyyval = 1; #endif goto loop; } else if (isdigit(UCH(cptr[1]))) { ++cptr; i = get_number(); if (havetags && offsets) { if (i <= 0 || i > maxoffset) unknown_rhs(i); tag = rhs[offsets[i]]->tag; if (tag == 0) untyped_rhs(i, rhs[offsets[i]]->name); fprintf(f, "yystack.l_mark[%ld].%s", (long)offsets[i], tag); } else { if (i == 0) fprintf(f, "yystack.l_mark[%d]", -n); else if (i > maxoffset) { dollar_warning(lineno, i); fprintf(f, "yystack.l_mark[%ld]", (long)(i - maxoffset)); } else if (offsets) fprintf(f, "yystack.l_mark[%ld]", (long)offsets[i]); } goto loop; } else if (cptr[1] == '-') { cptr += 2; i = get_number(); if (havetags) unknown_rhs(-i); fprintf(f, "yystack.l_mark[%d]", -i - n); goto loop; } #if defined(YYBTYACC) else if (isalpha(UCH(cptr[1])) || cptr[1] == '_') { char *arg; ++cptr; arg = scan_id(); for (i = plhs[nrules]->args - 1; i >= 0; i--) if (arg == plhs[nrules]->argnames[i]) break; if (i < 0) unknown_arg_warning(lineno, "$", arg, line, cptr); tag = (i < 0 ? NULL : plhs[nrules]->argtags[i]); fprintf(f, "yystack.l_mark[%d]", i - plhs[nrules]->args + 1 - n); if (tag) fprintf(f, ".%s", tag); else if (havetags) untyped_arg_warning(lineno, "$", arg); goto loop; } #endif } #if defined(YYBTYACC) if (c == '@') { if (!locations) { int l_lineno = lineno; char *l_line = dup_line(); char *l_cptr = l_line + (cptr - line); syntax_error(l_lineno, l_line, l_cptr); } if (cptr[1] == '$') { fprintf(f, "yyloc"); cptr += 2; goto loop; } else if (isdigit(UCH(cptr[1]))) { ++cptr; i = get_number(); if (i == 0) fprintf(f, "yystack.p_mark[%d]", -n); else if (i > maxoffset) { at_warning(lineno, i); fprintf(f, "yystack.p_mark[%d]", i - maxoffset); } else if (offsets) fprintf(f, "yystack.p_mark[%d]", offsets[i]); goto loop; } else if (cptr[1] == '-') { cptr += 2; i = get_number(); fprintf(f, "yystack.p_mark[%d]", -i - n); goto loop; } } #endif if (IS_NAME1(c)) { do { putc(c, f); c = *++cptr; } while (IS_NAME2(c)); goto loop; } ++cptr; #if defined(YYBTYACC) if (backtrack) { if (trialaction && c == L_BRAC && depth == 0) { ++depth; putc(L_CURL, f); goto loop; } if (trialaction && c == R_BRAC && depth == 1) { --depth; putc(R_CURL, f); c = nextc(); if (c == L_BRAC && !haveyyval) { goto loop; } if (c == L_CURL && !haveyyval) { fprintf(f, " if (!yytrial)\n"); fprintf_lineno(f, lineno, input_file_name); trialaction = 0; goto loop; } end_case(f); FREE(a.a_line); if (maxoffset > 0) FREE(offsets); return; } } #endif putc(c, f); switch (c) { case '\n': get_line(); if (line) goto loop; unterminated_action(&a); case ';': if (depth > 0) goto loop; end_case(f); free(a.a_line); if (maxoffset > 0) FREE(offsets); return; #if defined(YYBTYACC) case L_BRAC: if (backtrack) ++depth; goto loop; case R_BRAC: if (backtrack) --depth; goto loop; #endif case L_CURL: ++depth; goto loop; case R_CURL: if (--depth > 0) goto loop; #if defined(YYBTYACC) if (backtrack) { c = nextc(); if (c == L_BRAC && !haveyyval) { trialaction = 1; goto loop; } if (c == L_CURL && !haveyyval) { fprintf(f, " if (!yytrial)\n"); fprintf_lineno(f, lineno, input_file_name); goto loop; } } #endif end_case(f); free(a.a_line); if (maxoffset > 0) FREE(offsets); return; case '\'': case '"': { char *s = copy_string(c); fputs(s, f); free(s); } goto loop; case '/': { char *s = copy_comment(); fputs(s, f); free(s); } goto loop; default: goto loop; } } #if defined(YYBTYACC) static char * get_code(struct ainfo *a, const char *loc) { int c; int depth; char *tag; struct mstring *code_mstr = msnew(); if (!lflag) msprintf(code_mstr, line_format, lineno, input_file_name); cptr = after_blanks(cptr); if (*cptr == L_CURL) /* avoid putting curly-braces in first column, to ease editing */ mputc(code_mstr, '\t'); else syntax_error(lineno, line, cptr); a->a_lineno = lineno; a->a_line = dup_line(); a->a_cptr = a->a_line + (cptr - line); depth = 0; loop: c = *cptr; if (c == '$') { if (cptr[1] == '<') { int d_lineno = lineno; char *d_line = dup_line(); char *d_cptr = d_line + (cptr - line); ++cptr; tag = get_tag(); c = *cptr; if (c == '$') { msprintf(code_mstr, "(*val).%s", tag); ++cptr; FREE(d_line); goto loop; } else dollar_error(d_lineno, d_line, d_cptr); } else if (cptr[1] == '$') { /* process '$$' later; replacement is context dependent */ msprintf(code_mstr, "$$"); cptr += 2; goto loop; } } if (c == '@' && cptr[1] == '$') { if (!locations) { int l_lineno = lineno; char *l_line = dup_line(); char *l_cptr = l_line + (cptr - line); syntax_error(l_lineno, l_line, l_cptr); } msprintf(code_mstr, "%s", loc); cptr += 2; goto loop; } if (IS_NAME1(c)) { do { mputc(code_mstr, c); c = *++cptr; } while (IS_NAME2(c)); goto loop; } ++cptr; mputc(code_mstr, c); switch (c) { case '\n': get_line(); if (line) goto loop; unterminated_action(a); case L_CURL: ++depth; goto loop; case R_CURL: if (--depth > 0) goto loop; goto out; case '\'': case '"': { char *s = copy_string(c); msprintf(code_mstr, "%s", s); free(s); } goto loop; case '/': { char *s = copy_comment(); msprintf(code_mstr, "%s", s); free(s); } goto loop; default: goto loop; } out: return msdone(code_mstr); } static void copy_initial_action(void) { struct ainfo a; initial_action = get_code(&a, "yyloc"); free(a.a_line); } static void copy_destructor(void) { char *code_text; struct ainfo a; bucket *bp; code_text = get_code(&a, "(*loc)"); for (;;) { int c = nextc(); if (c == EOF) unexpected_EOF(); if (c == '<') { if (cptr[1] == '>') { /* "no semantic type" default destructor */ cptr += 2; if ((bp = default_destructor[UNTYPED_DEFAULT]) == NULL) { static char untyped_default[] = "<>"; bp = make_bucket("untyped default"); bp->tag = untyped_default; default_destructor[UNTYPED_DEFAULT] = bp; } if (bp->destructor != NULL) destructor_redeclared_warning(&a); else /* replace "$$" with "(*val)" in destructor code */ bp->destructor = process_destructor_XX(code_text, NULL); } else if (cptr[1] == '*' && cptr[2] == '>') { /* "no per-symbol or per-type" default destructor */ cptr += 3; if ((bp = default_destructor[TYPED_DEFAULT]) == NULL) { static char typed_default[] = "<*>"; bp = make_bucket("typed default"); bp->tag = typed_default; default_destructor[TYPED_DEFAULT] = bp; } if (bp->destructor != NULL) destructor_redeclared_warning(&a); else { /* postpone re-processing destructor $$s until end of grammar spec */ bp->destructor = TMALLOC(char, strlen(code_text) + 1); NO_SPACE(bp->destructor); strcpy(bp->destructor, code_text); } } else { /* "semantic type" default destructor */ char *tag = get_tag(); bp = lookup_type_destructor(tag); if (bp->destructor != NULL) destructor_redeclared_warning(&a); else /* replace "$$" with "(*val).tag" in destructor code */ bp->destructor = process_destructor_XX(code_text, tag); } } else if (isalpha(UCH(c)) || c == '_' || c == '.' || c == '$') { /* "symbol" destructor */ bp = get_name(); if (bp->destructor != NULL) destructor_redeclared_warning(&a); else { /* postpone re-processing destructor $$s until end of grammar spec */ bp->destructor = TMALLOC(char, strlen(code_text) + 1); NO_SPACE(bp->destructor); strcpy(bp->destructor, code_text); } } else break; } free(a.a_line); free(code_text); } static char * process_destructor_XX(char *code, char *tag) { int c; int quote; int depth; struct mstring *new_code = msnew(); char *codeptr = code; depth = 0; loop: /* step thru code */ c = *codeptr; if (c == '$' && codeptr[1] == '$') { codeptr += 2; if (tag == NULL) msprintf(new_code, "(*val)"); else msprintf(new_code, "(*val).%s", tag); goto loop; } if (IS_NAME1(c)) { do { mputc(new_code, c); c = *++codeptr; } while (IS_NAME2(c)); goto loop; } ++codeptr; mputc(new_code, c); switch (c) { case L_CURL: ++depth; goto loop; case R_CURL: if (--depth > 0) goto loop; return msdone(new_code); case '\'': case '"': quote = c; for (;;) { c = *codeptr++; mputc(new_code, c); if (c == quote) goto loop; if (c == '\\') { c = *codeptr++; mputc(new_code, c); } } case '/': c = *codeptr; if (c == '*') { mputc(new_code, c); ++codeptr; for (;;) { c = *codeptr++; mputc(new_code, c); if (c == '*' && *codeptr == '/') { mputc(new_code, '/'); ++codeptr; goto loop; } } } goto loop; default: goto loop; } } #endif /* defined(YYBTYACC) */ static int mark_symbol(void) { int c; bucket *bp = NULL; c = cptr[1]; if (c == '%' || c == '\\') { cptr += 2; return (1); } if (c == '=') cptr += 2; else if ((c == 'p' || c == 'P') && ((c = cptr[2]) == 'r' || c == 'R') && ((c = cptr[3]) == 'e' || c == 'E') && ((c = cptr[4]) == 'c' || c == 'C') && ((c = cptr[5], !IS_IDENT(c)))) cptr += 5; else if ((c == 'e' || c == 'E') && ((c = cptr[2]) == 'm' || c == 'M') && ((c = cptr[3]) == 'p' || c == 'P') && ((c = cptr[4]) == 't' || c == 'T') && ((c = cptr[5]) == 'y' || c == 'Y') && ((c = cptr[6], !IS_IDENT(c)))) { cptr += 6; return (1); } else syntax_error(lineno, line, cptr); c = nextc(); if (isalpha(UCH(c)) || c == '_' || c == '.' || c == '$') bp = get_name(); else if (c == '\'' || c == '"') bp = get_literal(); else { syntax_error(lineno, line, cptr); /*NOTREACHED */ } if (rprec[nrules] != UNDEFINED && bp->prec != rprec[nrules]) prec_redeclared(); rprec[nrules] = bp->prec; rassoc[nrules] = bp->assoc; return (0); } static void read_grammar(void) { initialize_grammar(); advance_to_start(); for (;;) { int c = nextc(); if (c == EOF) break; if (isalpha(UCH(c)) || c == '_' || c == '.' || c == '$' || c == '\'' || c == '"') { add_symbol(); } else if (c == L_CURL || c == '=' #if defined(YYBTYACC) || (backtrack && c == L_BRAC) #endif ) { copy_action(); } else if (c == '|') { end_rule(); start_rule(plhs[nrules - 1], 0); ++cptr; } else if (c == '%') { if (mark_symbol()) break; } else syntax_error(lineno, line, cptr); } end_rule(); #if defined(YYBTYACC) if (goal->args > 0) start_requires_args(goal->name); #endif } static void free_tags(void) { int i; if (tag_table == 0) return; for (i = 0; i < ntags; ++i) { assert(tag_table[i]); FREE(tag_table[i]); } FREE(tag_table); } static void pack_names(void) { bucket *bp; char *p; char *t; name_pool_size = 13; /* 13 == sizeof("$end") + sizeof("$accept") */ for (bp = first_symbol; bp; bp = bp->next) name_pool_size += strlen(bp->name) + 1; name_pool = TMALLOC(char, name_pool_size); NO_SPACE(name_pool); strcpy(name_pool, "$accept"); strcpy(name_pool + 8, "$end"); t = name_pool + 13; for (bp = first_symbol; bp; bp = bp->next) { char *s = bp->name; p = t; while ((*t++ = *s++) != 0) continue; FREE(bp->name); bp->name = p; } } static void check_symbols(void) { bucket *bp; if (goal->class == UNKNOWN) undefined_goal(goal->name); for (bp = first_symbol; bp; bp = bp->next) { if (bp->class == UNKNOWN) { undefined_symbol_warning(bp->name); bp->class = TERM; } } } static void protect_string(char *src, char **des) { *des = src; if (src) { char *s; char *d; unsigned len = 1; s = src; while (*s) { if ('\\' == *s || '"' == *s) len++; s++; len++; } *des = d = TMALLOC(char, len); NO_SPACE(d); s = src; while (*s) { if ('\\' == *s || '"' == *s) *d++ = '\\'; *d++ = *s++; } *d = '\0'; } } static void pack_symbols(void) { bucket *bp; bucket **v; Value_t i, j, k, n; #if defined(YYBTYACC) Value_t max_tok_pval; #endif nsyms = 2; ntokens = 1; for (bp = first_symbol; bp; bp = bp->next) { ++nsyms; if (bp->class == TERM) ++ntokens; } start_symbol = (Value_t)ntokens; nvars = (Value_t)(nsyms - ntokens); symbol_name = TMALLOC(char *, nsyms); NO_SPACE(symbol_name); symbol_value = TMALLOC(Value_t, nsyms); NO_SPACE(symbol_value); symbol_prec = TMALLOC(Value_t, nsyms); NO_SPACE(symbol_prec); symbol_assoc = TMALLOC(char, nsyms); NO_SPACE(symbol_assoc); #if defined(YYBTYACC) symbol_pval = TMALLOC(Value_t, nsyms); NO_SPACE(symbol_pval); if (destructor) { symbol_destructor = CALLOC(sizeof(char *), nsyms); NO_SPACE(symbol_destructor); symbol_type_tag = CALLOC(sizeof(char *), nsyms); NO_SPACE(symbol_type_tag); } #endif v = TMALLOC(bucket *, nsyms); NO_SPACE(v); v[0] = 0; v[start_symbol] = 0; i = 1; j = (Value_t)(start_symbol + 1); for (bp = first_symbol; bp; bp = bp->next) { if (bp->class == TERM) v[i++] = bp; else v[j++] = bp; } assert(i == ntokens && j == nsyms); for (i = 1; i < ntokens; ++i) v[i]->index = i; goal->index = (Index_t)(start_symbol + 1); k = (Value_t)(start_symbol + 2); while (++i < nsyms) if (v[i] != goal) { v[i]->index = k; ++k; } goal->value = 0; k = 1; for (i = (Value_t)(start_symbol + 1); i < nsyms; ++i) { if (v[i] != goal) { v[i]->value = k; ++k; } } k = 0; for (i = 1; i < ntokens; ++i) { n = v[i]->value; if (n > 256) { for (j = k++; j > 0 && symbol_value[j - 1] > n; --j) symbol_value[j] = symbol_value[j - 1]; symbol_value[j] = n; } } assert(v[1] != 0); if (v[1]->value == UNDEFINED) v[1]->value = 256; j = 0; n = 257; for (i = 2; i < ntokens; ++i) { if (v[i]->value == UNDEFINED) { while (j < k && n == symbol_value[j]) { while (++j < k && n == symbol_value[j]) continue; ++n; } v[i]->value = n; ++n; } } symbol_name[0] = name_pool + 8; symbol_value[0] = 0; symbol_prec[0] = 0; symbol_assoc[0] = TOKEN; #if defined(YYBTYACC) symbol_pval[0] = 0; max_tok_pval = 0; #endif for (i = 1; i < ntokens; ++i) { symbol_name[i] = v[i]->name; symbol_value[i] = v[i]->value; symbol_prec[i] = v[i]->prec; symbol_assoc[i] = v[i]->assoc; #if defined(YYBTYACC) symbol_pval[i] = v[i]->value; if (symbol_pval[i] > max_tok_pval) max_tok_pval = symbol_pval[i]; if (destructor) { symbol_destructor[i] = v[i]->destructor; symbol_type_tag[i] = v[i]->tag; } #endif } symbol_name[start_symbol] = name_pool; symbol_value[start_symbol] = -1; symbol_prec[start_symbol] = 0; symbol_assoc[start_symbol] = TOKEN; #if defined(YYBTYACC) symbol_pval[start_symbol] = (Value_t)(max_tok_pval + 1); #endif for (++i; i < nsyms; ++i) { k = v[i]->index; symbol_name[k] = v[i]->name; symbol_value[k] = v[i]->value; symbol_prec[k] = v[i]->prec; symbol_assoc[k] = v[i]->assoc; #if defined(YYBTYACC) symbol_pval[k] = (Value_t)((max_tok_pval + 1) + v[i]->value + 1); if (destructor) { symbol_destructor[k] = v[i]->destructor; symbol_type_tag[k] = v[i]->tag; } #endif } if (gflag) { symbol_pname = TMALLOC(char *, nsyms); NO_SPACE(symbol_pname); for (i = 0; i < nsyms; ++i) protect_string(symbol_name[i], &(symbol_pname[i])); } FREE(v); } static void pack_grammar(void) { int i; Value_t j; ritem = TMALLOC(Value_t, nitems); NO_SPACE(ritem); rlhs = TMALLOC(Value_t, nrules); NO_SPACE(rlhs); rrhs = TMALLOC(Value_t, nrules + 1); NO_SPACE(rrhs); rprec = TREALLOC(Value_t, rprec, nrules); NO_SPACE(rprec); rassoc = TREALLOC(Assoc_t, rassoc, nrules); NO_SPACE(rassoc); ritem[0] = -1; ritem[1] = goal->index; ritem[2] = 0; ritem[3] = -2; rlhs[0] = 0; rlhs[1] = 0; rlhs[2] = start_symbol; rrhs[0] = 0; rrhs[1] = 0; rrhs[2] = 1; j = 4; for (i = 3; i < nrules; ++i) { Assoc_t assoc; Value_t prec2; #if defined(YYBTYACC) if (plhs[i]->args > 0) { if (plhs[i]->argnames) { FREE(plhs[i]->argnames); plhs[i]->argnames = NULL; } if (plhs[i]->argtags) { FREE(plhs[i]->argtags); plhs[i]->argtags = NULL; } } #endif /* defined(YYBTYACC) */ rlhs[i] = plhs[i]->index; rrhs[i] = j; assoc = TOKEN; prec2 = 0; while (pitem[j]) { ritem[j] = pitem[j]->index; if (pitem[j]->class == TERM) { prec2 = pitem[j]->prec; assoc = pitem[j]->assoc; } ++j; } ritem[j] = (Value_t)-i; ++j; if (rprec[i] == UNDEFINED) { rprec[i] = prec2; rassoc[i] = assoc; } } rrhs[i] = j; FREE(plhs); FREE(pitem); #if defined(YYBTYACC) clean_arg_cache(); #endif } static void print_grammar(void) { int i, k; size_t j, spacing = 0; FILE *f = verbose_file; if (!vflag) return; k = 1; for (i = 2; i < nrules; ++i) { if (rlhs[i] != rlhs[i - 1]) { if (i != 2) fprintf(f, "\n"); fprintf(f, "%4d %s :", i - 2, symbol_name[rlhs[i]]); spacing = strlen(symbol_name[rlhs[i]]) + 1; } else { fprintf(f, "%4d ", i - 2); j = spacing; while (j-- != 0) putc(' ', f); putc('|', f); } while (ritem[k] >= 0) { fprintf(f, " %s", symbol_name[ritem[k]]); ++k; } ++k; putc('\n', f); } } #if defined(YYBTYACC) static void finalize_destructors(void) { int i; bucket *bp; for (i = 2; i < nsyms; ++i) { char *tag = symbol_type_tag[i]; if (symbol_destructor[i] == NULL) { if (tag == NULL) { /* use <> destructor, if there is one */ if ((bp = default_destructor[UNTYPED_DEFAULT]) != NULL) { symbol_destructor[i] = TMALLOC(char, strlen(bp->destructor) + 1); NO_SPACE(symbol_destructor[i]); strcpy(symbol_destructor[i], bp->destructor); } } else { /* use type destructor for this tag, if there is one */ bp = lookup_type_destructor(tag); if (bp->destructor != NULL) { symbol_destructor[i] = TMALLOC(char, strlen(bp->destructor) + 1); NO_SPACE(symbol_destructor[i]); strcpy(symbol_destructor[i], bp->destructor); } else { /* use <*> destructor, if there is one */ if ((bp = default_destructor[TYPED_DEFAULT]) != NULL) /* replace "$$" with "(*val).tag" in destructor code */ symbol_destructor[i] = process_destructor_XX(bp->destructor, tag); } } } else { /* replace "$$" with "(*val)[.tag]" in destructor code */ char *destructor_source = symbol_destructor[i]; symbol_destructor[i] = process_destructor_XX(destructor_source, tag); FREE(destructor_source); } } /* 'symbol_type_tag[]' elements are freed by 'free_tags()' */ DO_FREE(symbol_type_tag); /* no longer needed */ if ((bp = default_destructor[UNTYPED_DEFAULT]) != NULL) { FREE(bp->name); /* 'bp->tag' is a static value, don't free */ FREE(bp->destructor); FREE(bp); } if ((bp = default_destructor[TYPED_DEFAULT]) != NULL) { FREE(bp->name); /* 'bp->tag' is a static value, don't free */ FREE(bp->destructor); FREE(bp); } if ((bp = default_destructor[TYPE_SPECIFIED]) != NULL) { bucket *p; for (; bp; bp = p) { p = bp->link; FREE(bp->name); /* 'bp->tag' freed by 'free_tags()' */ FREE(bp->destructor); FREE(bp); } } } #endif /* defined(YYBTYACC) */ void reader(void) { write_section(code_file, banner); create_symbol_table(); read_declarations(); read_grammar(); free_symbol_table(); pack_names(); check_symbols(); pack_symbols(); pack_grammar(); free_symbols(); print_grammar(); #if defined(YYBTYACC) if (destructor) finalize_destructors(); #endif free_tags(); } #ifdef NO_LEAKS static param * free_declarations(param *list) { while (list != 0) { param *next = list->next; free(list->type); free(list->name); free(list->type2); free(list); list = next; } return list; } void reader_leaks(void) { lex_param = free_declarations(lex_param); parse_param = free_declarations(parse_param); DO_FREE(line); DO_FREE(rrhs); DO_FREE(rlhs); DO_FREE(rprec); DO_FREE(ritem); DO_FREE(rassoc); DO_FREE(cache); DO_FREE(name_pool); DO_FREE(symbol_name); DO_FREE(symbol_prec); DO_FREE(symbol_assoc); DO_FREE(symbol_value); #if defined(YYBTYACC) DO_FREE(symbol_pval); DO_FREE(symbol_destructor); DO_FREE(symbol_type_tag); #endif } #endif byacc-20221106/lr0.c0000644000000000000000000002346714051573543012414 0ustar rootroot/* $Id: lr0.c,v 1.21 2021/05/20 23:57:23 tom Exp $ */ #include "defs.h" static core *new_state(int symbol); static Value_t get_state(int symbol); static void allocate_itemsets(void); static void allocate_storage(void); static void append_states(void); static void free_storage(void); static void generate_states(void); static void initialize_states(void); static void new_itemsets(void); static void save_reductions(void); static void save_shifts(void); static void set_derives(void); static void set_nullable(void); Value_t nstates; core *first_state; shifts *first_shift; reductions *first_reduction; static core **state_set; static core *this_state; static core *last_state; static shifts *last_shift; static reductions *last_reduction; static int nshifts; static Value_t *shift_symbol; static Value_t *rules; static Value_t *redset; static Value_t *shiftset; static Value_t **kernel_base; static Value_t **kernel_end; static Value_t *kernel_items; static void allocate_itemsets(void) { Value_t *itemp; Value_t *item_end; int i; int count; int max; Value_t *symbol_count; count = 0; symbol_count = NEW2(nsyms, Value_t); item_end = ritem + nitems; for (itemp = ritem; itemp < item_end; itemp++) { int symbol = *itemp; if (symbol >= 0) { count++; symbol_count[symbol]++; } } kernel_base = NEW2(nsyms, Value_t *); kernel_items = NEW2(count, Value_t); count = 0; max = 0; for (i = 0; i < nsyms; i++) { kernel_base[i] = kernel_items + count; count += symbol_count[i]; if (max < symbol_count[i]) max = symbol_count[i]; } shift_symbol = symbol_count; kernel_end = NEW2(nsyms, Value_t *); } static void allocate_storage(void) { allocate_itemsets(); shiftset = NEW2(nsyms, Value_t); redset = NEW2(nrules + 1, Value_t); state_set = NEW2(nitems, core *); } static void append_states(void) { int i; Value_t symbol; #ifdef TRACE fprintf(stderr, "Entering append_states()\n"); #endif for (i = 1; i < nshifts; i++) { int j = i; symbol = shift_symbol[i]; while (j > 0 && shift_symbol[j - 1] > symbol) { shift_symbol[j] = shift_symbol[j - 1]; j--; } shift_symbol[j] = symbol; } for (i = 0; i < nshifts; i++) { symbol = shift_symbol[i]; shiftset[i] = get_state(symbol); } } static void free_storage(void) { FREE(shift_symbol); FREE(redset); FREE(shiftset); FREE(kernel_base); FREE(kernel_end); FREE(kernel_items); FREE(state_set); } static void generate_states(void) { allocate_storage(); itemset = NEW2(nitems, Value_t); ruleset = NEW2(WORDSIZE(nrules), unsigned); set_first_derives(); initialize_states(); while (this_state) { closure(this_state->items, this_state->nitems); save_reductions(); new_itemsets(); append_states(); if (nshifts > 0) save_shifts(); this_state = this_state->next; } free_storage(); } static Value_t get_state(int symbol) { int key; Value_t *isp1; Value_t *iend; core *sp; int n; #ifdef TRACE fprintf(stderr, "Entering get_state(%d)\n", symbol); #endif isp1 = kernel_base[symbol]; iend = kernel_end[symbol]; n = (int)(iend - isp1); key = *isp1; assert(0 <= key && key < nitems); sp = state_set[key]; if (sp) { int found = 0; while (!found) { if (sp->nitems == n) { Value_t *isp2; found = 1; isp1 = kernel_base[symbol]; isp2 = sp->items; while (found && isp1 < iend) { if (*isp1++ != *isp2++) found = 0; } } if (!found) { if (sp->link) { sp = sp->link; } else { sp = sp->link = new_state(symbol); found = 1; } } } } else { state_set[key] = sp = new_state(symbol); } return (sp->number); } static void initialize_states(void) { unsigned i; Value_t *start_derives; core *p; start_derives = derives[start_symbol]; for (i = 0; start_derives[i] >= 0; ++i) continue; p = (core *)MALLOC(sizeof(core) + i * sizeof(Value_t)); NO_SPACE(p); p->next = 0; p->link = 0; p->number = 0; p->accessing_symbol = 0; p->nitems = (Value_t)i; for (i = 0; start_derives[i] >= 0; ++i) p->items[i] = rrhs[start_derives[i]]; first_state = last_state = this_state = p; nstates = 1; } static void new_itemsets(void) { Value_t i; int shiftcount; Value_t *isp; Value_t *ksp; for (i = 0; i < nsyms; i++) kernel_end[i] = 0; shiftcount = 0; isp = itemset; while (isp < itemsetend) { int j = *isp++; Value_t symbol = ritem[j]; if (symbol > 0) { ksp = kernel_end[symbol]; if (!ksp) { shift_symbol[shiftcount++] = symbol; ksp = kernel_base[symbol]; } *ksp++ = (Value_t)(j + 1); kernel_end[symbol] = ksp; } } nshifts = shiftcount; } static core * new_state(int symbol) { unsigned n; core *p; Value_t *isp1; Value_t *isp2; Value_t *iend; #ifdef TRACE fprintf(stderr, "Entering new_state(%d)\n", symbol); #endif if (nstates >= MAXYYINT) fatal("too many states"); isp1 = kernel_base[symbol]; iend = kernel_end[symbol]; n = (unsigned)(iend - isp1); p = (core *)allocate((sizeof(core) + (n - 1) * sizeof(Value_t))); p->accessing_symbol = (Value_t)symbol; p->number = (Value_t)nstates; p->nitems = (Value_t)n; isp2 = p->items; while (isp1 < iend) *isp2++ = *isp1++; last_state->next = p; last_state = p; nstates++; return (p); } /* show_cores is used for debugging */ #ifdef DEBUG void show_cores(void) { core *p; int i, j, k, n; int itemno; k = 0; for (p = first_state; p; ++k, p = p->next) { if (k) printf("\n"); printf("state %d, number = %d, accessing symbol = %s\n", k, p->number, symbol_name[p->accessing_symbol]); n = p->nitems; for (i = 0; i < n; ++i) { itemno = p->items[i]; printf("%4d ", itemno); j = itemno; while (ritem[j] >= 0) ++j; printf("%s :", symbol_name[rlhs[-ritem[j]]]); j = rrhs[-ritem[j]]; while (j < itemno) printf(" %s", symbol_name[ritem[j++]]); printf(" ."); while (ritem[j] >= 0) printf(" %s", symbol_name[ritem[j++]]); printf("\n"); fflush(stdout); } } } /* show_ritems is used for debugging */ void show_ritems(void) { int i; for (i = 0; i < nitems; ++i) printf("ritem[%d] = %d\n", i, ritem[i]); } /* show_rrhs is used for debugging */ void show_rrhs(void) { int i; for (i = 0; i < nrules; ++i) printf("rrhs[%d] = %d\n", i, rrhs[i]); } /* show_shifts is used for debugging */ void show_shifts(void) { shifts *p; int i, j, k; k = 0; for (p = first_shift; p; ++k, p = p->next) { if (k) printf("\n"); printf("shift %d, number = %d, nshifts = %d\n", k, p->number, p->nshifts); j = p->nshifts; for (i = 0; i < j; ++i) printf("\t%d\n", p->shift[i]); } } #endif static void save_shifts(void) { shifts *p; Value_t *sp1; Value_t *sp2; Value_t *send; p = (shifts *)allocate((sizeof(shifts) + (unsigned)(nshifts - 1) * sizeof(Value_t))); p->number = this_state->number; p->nshifts = (Value_t)nshifts; sp1 = shiftset; sp2 = p->shift; send = shiftset + nshifts; while (sp1 < send) *sp2++ = *sp1++; if (last_shift) { last_shift->next = p; last_shift = p; } else { first_shift = p; last_shift = p; } } static void save_reductions(void) { Value_t *isp; Value_t *rp1; Value_t count; reductions *p; count = 0; for (isp = itemset; isp < itemsetend; isp++) { int item = ritem[*isp]; if (item < 0) { redset[count++] = (Value_t)-item; } } if (count) { Value_t *rp2; Value_t *rend; p = (reductions *)allocate((sizeof(reductions) + (unsigned)(count - 1) * sizeof(Value_t))); p->number = this_state->number; p->nreds = count; rp1 = redset; rp2 = p->rules; rend = rp1 + count; while (rp1 < rend) *rp2++ = *rp1++; if (last_reduction) { last_reduction->next = p; last_reduction = p; } else { first_reduction = p; last_reduction = p; } } } static void set_derives(void) { Value_t i, k; int lhs; derives = NEW2(nsyms, Value_t *); rules = NEW2(nvars + nrules, Value_t); k = 0; for (lhs = start_symbol; lhs < nsyms; lhs++) { derives[lhs] = rules + k; for (i = 0; i < nrules; i++) { if (rlhs[i] == lhs) { rules[k] = i; k++; } } rules[k] = -1; k++; } #ifdef DEBUG print_derives(); #endif } #ifdef DEBUG void print_derives(void) { int i; Value_t *sp; printf("\nDERIVES\n\n"); for (i = start_symbol; i < nsyms; i++) { printf("%s derives ", symbol_name[i]); for (sp = derives[i]; *sp >= 0; sp++) { printf(" %d", *sp); } putchar('\n'); } putchar('\n'); } #endif static void set_nullable(void) { int i, j; int empty; int done_flag; nullable = TMALLOC(char, nsyms); NO_SPACE(nullable); for (i = 0; i < nsyms; ++i) nullable[i] = 0; done_flag = 0; while (!done_flag) { done_flag = 1; for (i = 1; i < nitems; i++) { empty = 1; while ((j = ritem[i]) >= 0) { if (!nullable[j]) empty = 0; ++i; } if (empty) { j = rlhs[-j]; if (!nullable[j]) { nullable[j] = 1; done_flag = 0; } } } } #ifdef DEBUG for (i = 0; i < nsyms; i++) { if (nullable[i]) printf("%s is nullable\n", symbol_name[i]); else printf("%s is not nullable\n", symbol_name[i]); } #endif } void lr0(void) { set_derives(); set_nullable(); generate_states(); } #ifdef NO_LEAKS void lr0_leaks(void) { if (derives) { if (derives[start_symbol] != rules) { DO_FREE(derives[start_symbol]); } DO_FREE(derives); DO_FREE(rules); } DO_FREE(nullable); } #endif byacc-20221106/NOTES0000644000000000000000000000077005342067213012351 0ustar rootrootBerkeley Yacc reflects its origins. The reason so many routines use exactly six register variables is that Berkeley Yacc was developed on a VAX using PCC. PCC placed at most six variables in registers. I went to considerable effort to find which six variables most belonged in registers. Changes in machines and compilers make that effort worthless, perhaps even harmful. The code contains many instances where address calculations are performed in particular ways to optimize the code for the VAX. byacc-20221106/mstring.c0000644000000000000000000000657113565100315013367 0ustar rootroot/* $Id: mstring.c,v 1.9 2019/11/19 23:54:53 tom Exp $ */ #include #include #include #include #include #include "defs.h" /* parameters about string length. HEAD is the starting size and ** HEAD+TAIL should be a power of two */ #define HEAD 24 #define TAIL 8 static char *buf_ptr; static size_t buf_len; void msprintf(struct mstring *s, const char *fmt, ...) { va_list args; size_t len; #ifdef HAVE_VSNPRINTF int changed; #endif if (!s || !s->base) return; if (buf_len == 0) { buf_ptr = malloc(buf_len = 4096); } if (buf_ptr == 0) { return; } #ifdef HAVE_VSNPRINTF do { va_start(args, fmt); len = (size_t) vsnprintf(buf_ptr, buf_len, fmt, args); va_end(args); if ((changed = (len > buf_len)) != 0) { char *new_ptr = realloc(buf_ptr, (buf_len * 3) / 2); if (new_ptr == 0) { free(buf_ptr); buf_ptr = 0; return; } buf_ptr = new_ptr; } } while (changed); #else va_start(args, fmt); len = (size_t) vsprintf(buf_ptr, fmt, args); va_end(args); if (len >= buf_len) return; #endif if (len > (size_t) (s->end - s->ptr)) { char *new_base; size_t cp = (size_t) (s->ptr - s->base); size_t cl = (size_t) (s->end - s->base); size_t nl = cl; while (len > (nl - cp)) nl = nl + nl + TAIL; if ((new_base = realloc(s->base, nl))) { s->base = new_base; s->ptr = s->base + cp; s->end = s->base + nl; } else { free(s->base); s->base = 0; s->ptr = 0; s->end = 0; return; } } memcpy(s->ptr, buf_ptr, len); s->ptr += len; } int mputchar(struct mstring *s, int ch) { if (!s || !s->base) return ch; if (s->ptr == s->end) { size_t len = (size_t) (s->end - s->base); if ((s->base = realloc(s->base, len + len + TAIL))) { s->ptr = s->base + len; s->end = s->base + len + len + TAIL; } else { s->ptr = s->end = 0; return ch; } } *s->ptr++ = (char)ch; return ch; } struct mstring * msnew(void) { struct mstring *n = TMALLOC(struct mstring, 1); if (n) { if ((n->base = n->ptr = MALLOC(HEAD)) != 0) { n->end = n->base + HEAD; } else { free(n); n = 0; } } return n; } struct mstring * msrenew(char *value) { struct mstring *r = 0; if (value != 0) { r = msnew(); r->base = value; r->end = value + strlen(value); r->ptr = r->end; } return r; } char * msdone(struct mstring *s) { char *r = 0; if (s) { mputc(s, 0); r = s->base; free(s); } return r; } #if defined(YYBTYACC) /* compare two strings, ignoring whitespace, except between two letters or ** digits (and treat all of these as equal) */ int strnscmp(const char *a, const char *b) { while (1) { while (isspace(UCH(*a))) a++; while (isspace(UCH(*b))) b++; while (*a && *a == *b) a++, b++; if (isspace(UCH(*a))) { if (isalnum(UCH(a[-1])) && isalnum(UCH(*b))) break; } else if (isspace(UCH(*b))) { if (isalnum(UCH(b[-1])) && isalnum(UCH(*a))) break; } else break; } return *a - *b; } unsigned int strnshash(const char *s) { unsigned int h = 0; while (*s) { if (!isspace(UCH(*s))) h = (h << 5) - h + (unsigned char)*s; s++; } return h; } #endif #ifdef NO_LEAKS void mstring_leaks(void) { free(buf_ptr); buf_ptr = 0; buf_len = 0; } #endif byacc-20221106/configure.in0000644000000000000000000000312014174772222014045 0ustar rootrootdnl Process this file with 'autoconf' to produce a 'configure' script dnl $Id: configure.in,v 1.26 2022/01/28 13:50:10 tom Exp $ AC_PREREQ(2.52.20200802) AC_REVISION($Revision: 1.26 $) AC_INIT(main.c) AC_CONFIG_HEADER(config.h:config_h.in) CF_CHECK_CACHE([AC_CANONICAL_SYSTEM]) AC_ARG_PROGRAM CF_PROG_CC AC_PROG_MAKE_SET AC_PROG_INSTALL CF_MAKE_TAGS CF_PROG_AWK CF_PROG_LINT CF_WITHOUT_X CF_XOPEN_SOURCE AC_CHECK_HEADERS(fcntl.h) CF_MKSTEMP CF_GETOPT_HEADER AC_HAVE_FUNCS(getopt vsnprintf) AC_MSG_CHECKING(for maximum table size) AC_ARG_WITH([max-table-size], [AC_HELP_STRING([--with-max-table-size=N], [set the maximum table size = N (no default)])]) if test -n "$with_max_table_size" then AC_MSG_RESULT($with_max_table_size) check=`expr "$with_max_table_size" + 0` if test "x$check" != "x$with_max_table_size" then AC_MSG_ERROR([invalid value for --with-max-table-size: $with_max_table_size]) fi AC_DEFINE_UNQUOTED(MAXTABLE,$with_max_table_size,[Define to maximum table size (default: 32500)]) else AC_MSG_RESULT(default) fi AC_MSG_CHECKING(if backtracking extension is wanted) AC_ARG_ENABLE([btyacc], [AC_HELP_STRING([--enable-btyacc], [disable support for the btyacc backtracking extension (default: enabled)])]) AC_MSG_RESULT($enable_btyacc) if test "$enable_btyacc" = "no"; then SKELETON=yaccpar else AC_DEFINE(YYBTYACC,1,[Define to 1 to enable backtracking extension]) SKELETON=btyaccpar fi AC_SUBST(SKELETON) CF_ENABLE_WARNINGS(Wwrite-strings,yes) CF_DISABLE_ECHO CF_DISABLE_LEAKS CF_WITH_MAN2HTML AC_TYPE_MODE_T ### output makefile AC_OUTPUT(makefile) CF_MAKE_DOCS(yacc,1) byacc-20221106/config.guess0000755000000000000000000014115114271704511014055 0ustar rootroot#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-08-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:SerenityOS:*:*) GUESS=$UNAME_MACHINE-pc-serenity ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; loongarch32:Linux:*:* | loongarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build CPU=$UNAME_MACHINE LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then ABI=64 sed 's/^ //' << EOF > "$dummy.c" #ifdef __i386__ ABI=x86 #else #ifdef __ILP32__ ABI=x32 #endif #endif EOF cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` eval "$cc_set_abi" case $ABI in x86) CPU=i686 ;; x32) LIBCABI=${LIBC}x32 ;; esac fi GUESS=$CPU-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; ppc:Haiku:*:*) # Haiku running on Apple PowerPC GUESS=powerpc-apple-haiku ;; *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat) GUESS=$UNAME_MACHINE-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; i*86:Fiwix:*:*) GUESS=$UNAME_MACHINE-pc-fiwix ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: byacc-20221106/skel2c0000644000000000000000000000550012725412241012636 0ustar rootroot# vile: awkmode function noident(given) { gsub(/\$/,"@", given); return given; } BEGIN { havesection = 0; version = "$Id: skel2c,v 1.4 2016/06/07 00:26:09 tom Exp $"; nsec = 0; ifdef = ""; printf "/* This file generated automatically using\n * %s\n */\n\n", noident(version); } /[$]Id[:][^$]*[$]/ { printf "%s\n", noident($0); next; } /^%% *insert *VERSION *here/ { printf " CONCAT1(\"#define YYMAJOR \", YYMAJOR),\n"; printf " CONCAT1(\"#define YYMINOR \", YYMINOR),\n"; printf "#ifdef YYPATCH\n"; printf " CONCAT1(\"#define YYPATCH \", YYPATCH),\n"; printf "#endif\n"; next; } /^%%ifdef/ { if (NF >= 2) { printf "#if defined(%s)\n", $2; printf " \"#if %s\",\n", $2; } else { _abort_exit = 1; printf "skel2c: ill-formed %%ifdef in skeleton file on line %d\n", FNR > "/dev/stderr"; exit 2; } if (ifdef != "") { printf "skel2c: nested %%ifdef in skeleton file on line %d\n", FNR > "/dev/stderr"; exit 2; } ifdef = $2; next; } /^%%endif/ { if (ifdef != "") { if (NF >= 2) { printf " \"#endif /* %s */\",\n", $2; printf "#endif\t\t\t/* defined(%s) */\n", $2; } else { printf " \"#endif /* %s */\",\n", ifdef; printf "#endif\t\t\t/* defined(%s) */\n", ifdef; } ifdef = ""; } else { printf " \"#endif\",\n"; printf "#endif\n"; printf "skel2c: unmatched %endif in skeleton file on line %d\n", FNR > "/dev/stderr"; exit 2; } next; } /^%%/ { if (havesection) { printf " 0\n};\n\n"; } if (NF >= 2) { havesection = 1; section = $2; seclist[nsec] = section; nsec = nsec + 1; printf "const char *const %s[] =\n{\n", $2; } else { havesection = 0; } next; } { if (havesection) { # Could use 'gsub(/\\/, "\\\\")' instead of the following # two lines, but there's a bug in mawk and the original # awk (not in gawk) which is triggered by that. gsub(/\\/, "\\\1"); gsub(/\1/, "\\"); # gsub(/\t/, "\\t"); # change '\t' to "\\t" gsub(/\"/, "\\\""); printf " \"%s\",\n", $0; } else { print $0; } } END { if (_abort_exit) exit 2; if (havesection) { print " 0\n};\n"; } if (nsec > 0) { print "void"; print "write_section(FILE * fp, const char *const section[])"; print "{"; print " int i;"; print " const char *s;\n"; print " for (i = 0; (s = section[i]) != 0; ++i)"; print " {"; print "\tif (fp == code_file)"; print "\t ++outline;"; print "\tfprintf(fp, \"%s\\n\", s);"; print " }"; print "}"; } else { print "skel2c: no sections defined in skeleton file" > "/dev/stderr"; exit 2; } if (ifdef != "") { printf "skel2c: unmatched %%ifdef %s at end of skeleton file\n", $ifdef > "/dev/stderr"; exit 2; } } byacc-20221106/closure.c0000644000000000000000000001007314166605742013364 0ustar rootroot/* $Id: closure.c,v 1.14 2022/01/09 16:22:58 tom Exp $ */ #include "defs.h" Value_t *itemset; Value_t *itemsetend; unsigned *ruleset; static unsigned *first_derives; static unsigned *EFF; #ifdef DEBUG static void print_closure(int); static void print_EFF(void); static void print_first_derives(void); #endif static void set_EFF(void) { unsigned *row; int symbol; int rowsize; int i; int rule; rowsize = WORDSIZE(nvars); EFF = NEW2(nvars * rowsize, unsigned); row = EFF; for (i = start_symbol; i < nsyms; i++) { Value_t *sp = derives[i]; for (rule = *sp; rule > 0; rule = *++sp) { symbol = ritem[rrhs[rule]]; if (ISVAR(symbol)) { symbol -= start_symbol; SETBIT(row, symbol); } } row += rowsize; } reflexive_transitive_closure(EFF, nvars); #ifdef DEBUG print_EFF(); #endif } void set_first_derives(void) { unsigned *rrow; int j; unsigned cword = 0; Value_t *rp; int rule; int i; int rulesetsize; int varsetsize; rulesetsize = WORDSIZE(nrules); varsetsize = WORDSIZE(nvars); first_derives = NEW2(nvars * rulesetsize, unsigned); set_EFF(); rrow = first_derives; for (i = start_symbol; i < nsyms; i++) { unsigned *vrow = EFF + ((i - ntokens) * varsetsize); unsigned k = BITS_PER_WORD; for (j = start_symbol; j < nsyms; k++, j++) { if (k >= BITS_PER_WORD) { cword = *vrow++; k = 0; } if (cword & (1U << k)) { rp = derives[j]; while ((rule = *rp++) >= 0) { SETBIT(rrow, rule); } } } rrow += rulesetsize; } #ifdef DEBUG print_first_derives(); #endif FREE(EFF); } void closure(Value_t *nucleus, int n) { unsigned ruleno; unsigned i; Value_t *csp; unsigned *dsp; unsigned *rsp; int rulesetsize; Value_t *csend; unsigned *rsend; Value_t itemno; rulesetsize = WORDSIZE(nrules); rsend = ruleset + rulesetsize; for (rsp = ruleset; rsp < rsend; rsp++) *rsp = 0; csend = nucleus + n; for (csp = nucleus; csp < csend; ++csp) { int symbol = ritem[*csp]; if (ISVAR(symbol)) { dsp = first_derives + (symbol - ntokens) * rulesetsize; rsp = ruleset; while (rsp < rsend) *rsp++ |= *dsp++; } } ruleno = 0; itemsetend = itemset; csp = nucleus; for (rsp = ruleset; rsp < rsend; ++rsp) { unsigned word = *rsp; if (word) { for (i = 0; i < BITS_PER_WORD; ++i) { if (word & (1U << i)) { itemno = rrhs[ruleno + i]; while (csp < csend && *csp < itemno) *itemsetend++ = *csp++; *itemsetend++ = itemno; while (csp < csend && *csp == itemno) ++csp; } } } ruleno += BITS_PER_WORD; } while (csp < csend) *itemsetend++ = *csp++; #ifdef DEBUG print_closure(n); #endif } void finalize_closure(void) { FREE(itemset); FREE(ruleset); FREE(first_derives); } #ifdef DEBUG static void print_closure(int n) { Value_t *isp; printf("\n\nn = %d\n\n", n); for (isp = itemset; isp < itemsetend; isp++) printf(" %d\n", *isp); } static void print_EFF(void) { int i, j; unsigned *rowp; unsigned word; unsigned k; printf("\n\nEpsilon Free Firsts\n"); for (i = start_symbol; i < nsyms; i++) { printf("\n%s", symbol_name[i]); rowp = EFF + ((i - start_symbol) * WORDSIZE(nvars)); word = *rowp++; k = BITS_PER_WORD; for (j = 0; j < nvars; k++, j++) { if (k >= BITS_PER_WORD) { word = *rowp++; k = 0; } if (word & (1 << k)) printf(" %s", symbol_name[start_symbol + j]); } } } static void print_first_derives(void) { int i; int j; unsigned *rp; unsigned cword = 0; unsigned k; printf("\n\n\nFirst Derives\n"); for (i = start_symbol; i < nsyms; i++) { printf("\n%s derives\n", symbol_name[i]); rp = first_derives + (i - ntokens) * WORDSIZE(nrules); k = BITS_PER_WORD; for (j = 0; j <= nrules; k++, j++) { if (k >= BITS_PER_WORD) { cword = *rp++; k = 0; } if (cword & (1 << k)) printf(" %d\n", j); } } fflush(stdout); } #endif byacc-20221106/ACKNOWLEDGEMENTS0000644000000000000000000000140304632321031013775 0ustar rootroot Berkeley Yacc owes much to the unflagging efforts of Keith Bostic. His badgering kept me working on it long after I was ready to quit. Berkeley Yacc is based on the excellent algorithm for computing LALR(1) lookaheads developed by Tom Pennello and Frank DeRemer. The algorithm is described in their almost impenetrable article in TOPLAS 4,4. Finally, much of the credit for the latest version must go to those who pointed out deficiencies of my earlier releases. Among the most prolific contributors were Benson I. Margulies Dave Gentzel Antoine Verheijen Peter S. Housel Dale Smith Ozan Yigit John Campbell Bill Sommerfeld Paul Hilfinger Gary Bridgewater Dave Bakken Dan Lanciani Richard Sargent Parag Patel byacc-20221106/btyaccpar.skel0000644000000000000000000011116014104033354014355 0ustar rootroot/* $Id: btyaccpar.skel,v 1.13 2021/08/08 19:56:28 tom Exp $ */ #include "defs.h" /* If the skeleton is changed, the banner should be changed so that */ /* the altered version can be easily distinguished from the original. */ /* */ /* The #defines included with the banner are there because they are */ /* useful in subsequent code. The macros #defined in the header or */ /* the body either are not useful outside of semantic actions or */ /* are conditional. */ %% banner /* original parser id follows */ /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ #define YYBYACC 1 %% insert VERSION here #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 %% xdecls extern int YYPARSE_DECL(); %% tables extern const YYINT yylhs[]; extern const YYINT yylen[]; extern const YYINT yydefred[]; extern const YYINT yystos[]; extern const YYINT yydgoto[]; extern const YYINT yysindex[]; extern const YYINT yyrindex[]; %%ifdef YYBTYACC extern const YYINT yycindex[]; %%endif extern const YYINT yygindex[]; extern const YYINT yytable[]; extern const YYINT yycheck[]; %%ifdef YYBTYACC extern const YYINT yyctable[]; %%endif #if YYDEBUG || defined(yytname) extern const char *const yyname[]; #endif #if YYDEBUG extern const char *const yyrule[]; #endif %% global_vars #if YYDEBUG int yydebug; #endif %% impure_vars int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif %% hdr_defs #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ %%ifdef YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif %%endif /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; %%ifdef YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; %%endif YYBTYACC %% hdr_vars /* variables for the parser stack */ static YYSTACKDATA yystack; %%ifdef YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; %%endif YYBTYACC %% body_vars int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif /* variables for the parser stack */ YYSTACKDATA yystack; %%ifdef YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; %%endif YYBTYACC %% body_1 /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) %%ifdef YYBTYACC #define yytrial (yyps->save) %%endif #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ %%ifdef YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } %%endif YYBTYACC #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab %%ifdef YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) %%endif int YYPARSE_DECL() { %% body_2 int yym, yyn, yystate, yyresult; %%ifdef YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; %%endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif %% init_vars yyerrflag = 0; yychar = 0; memset(&yyval, 0, sizeof(yyval)); memset(&yylval, 0, sizeof(yylval)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(&yyloc, 0, sizeof(yyloc)); memset(&yylloc, 0, sizeof(yylloc)); #endif %% body_3 %%ifdef YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; %%endif yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { %%ifdef YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ %%endif YYBTYACC yychar = YYLEX; %%ifdef YYBTYACC } while (0); %%endif if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING %%ifdef YYBTYACC if (!yytrial) %%endif fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } %%ifdef YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ %%endif YYBTYACC if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; %%ifdef YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; %%endif YYBTYACC YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) %%ifdef YYBTYACC if (!yytrial) %%endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) %%ifdef YYBTYACC if (!yytrial) %%endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING %%ifdef YYBTYACC if (!yytrial) %%endif if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); %%ifdef YYBTYACC if (!yytrial) %%endif { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { %% trailer default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING %%ifdef YYBTYACC if (!yytrial) %%endif fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { %%ifdef YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ %%endif YYBTYACC yychar = YYLEX; %%ifdef YYBTYACC } while (0); %%endif if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING %%ifdef YYBTYACC if (!yytrial) %%endif fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; %%ifdef YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; %%endif YYBTYACC yyoverflow: YYERROR_CALL("yacc stack overflow"); %%ifdef YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: %%endif yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: %%ifdef YYBTYACC if (yyps->save) goto yyvalid; %%endif yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ %%ifdef YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } %%endif YYBTYACC yyfreestack(&yystack); return (yyresult); } byacc-20221106/graph.c0000644000000000000000000000362713726460353013016 0ustar rootroot/* $Id: graph.c,v 1.9 2020/09/10 17:22:51 tom Exp $ */ #include "defs.h" static void graph_state(int stateno); static void graph_LA(int ruleno); static unsigned int larno; void graph(void) { int i; int j; shifts *sp; int sn; int as; if (!gflag) return; for (i = 0; i < nstates; ++i) { closure(state_table[i]->items, state_table[i]->nitems); graph_state(i); } fprintf(graph_file, "\n\n"); for (i = 0; i < nstates; ++i) { sp = shift_table[i]; if (sp) for (j = 0; j < sp->nshifts; ++j) { sn = sp->shift[j]; as = accessing_symbol[sn]; fprintf(graph_file, "\tq%d -> q%d [label=\"%s\"];\n", i, sn, symbol_pname[as]); } } fprintf(graph_file, "}\n"); for (i = 0; i < nsyms; ++i) FREE(symbol_pname[i]); FREE(symbol_pname); } static void graph_state(int stateno) { Value_t *isp; Value_t *sp; larno = (unsigned)lookaheads[stateno]; fprintf(graph_file, "\n\tq%d [label=\"%d:\\l", stateno, stateno); for (isp = itemset; isp < itemsetend; isp++) { Value_t *sp1; int rule; sp1 = sp = ritem + *isp; while (*sp >= 0) ++sp; rule = -(*sp); fprintf(graph_file, " %s -> ", symbol_pname[rlhs[rule]]); for (sp = ritem + rrhs[rule]; sp < sp1; sp++) fprintf(graph_file, "%s ", symbol_pname[*sp]); putc('.', graph_file); while (*sp >= 0) { fprintf(graph_file, " %s", symbol_pname[*sp]); sp++; } if (*sp1 < 0) graph_LA(-*sp1); fprintf(graph_file, "\\l"); } fprintf(graph_file, "\"];"); } static void graph_LA(int ruleno) { unsigned tokensetsize; tokensetsize = (unsigned)WORDSIZE(ntokens); if (ruleno == LAruleno[larno]) { int i; unsigned *rowp = LA + larno * tokensetsize; fprintf(graph_file, " { "); for (i = ntokens - 1; i >= 0; i--) { if (BIT(rowp, i)) fprintf(graph_file, "%s ", symbol_pname[i]); } fprintf(graph_file, "}"); ++larno; } } byacc-20221106/package/0000755000000000000000000000000014331754017013130 5ustar rootrootbyacc-20221106/package/mingw-byacc.spec0000644000000000000000000000317214331754017016207 0ustar rootrootSummary: public domain Berkeley LALR Yacc parser generator %global AppVersion 2.0 %global AppPatched 20221106 %global UseProgram yacc # $Id: mingw-byacc.spec,v 1.45 2022/11/06 15:51:43 tom Exp $ Name: byacc Version: %{AppVersion}.%{AppPatched} Release: 1 License: Public Domain, MIT URL: https://invisible-island.net/%{name}/ Source0: https://invisible-mirror.net/archives/%{name}/%{name}-%{AppPatched}.tgz %description This package provides a parser generator utility that reads a grammar specification from a file and generates an LR(1) parser for it. The parsers consist of a set of LALR(1) parsing tables and a driver routine written in the C programming language. It has a public domain license which includes the generated C. %prep %global debug_package %{nil} %setup -q -n %{name}-%{AppPatched} %build %configure --verbose \ --program-prefix=b \ --target %{_target_platform} \ --prefix=%{_prefix} \ --bindir=%{_bindir} \ --libdir=%{_libdir} \ --mandir=%{_mandir} make %install [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT make install DESTDIR=$RPM_BUILD_ROOT ( cd $RPM_BUILD_ROOT%{_bindir} && ln -s %{name} %{UseProgram} ) strip $RPM_BUILD_ROOT%{_bindir}/%{name} %clean [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT %files %doc ACKNOWLEDGEMENTS CHANGES NEW_FEATURES NOTES NO_WARRANTY README %license LICENSE %{_bindir}/%{name} %{_bindir}/%{UseProgram} %{_mandir}/man1/%{name}.* %changelog # each patch should add its ChangeLog entries here * Sun Jan 09 2022 Thomas Dickey - rpmlint * Sun Jul 09 2017 Thomas Dickey - use predefined "configure" * Wed Sep 25 2013 Thomas Dickey - cloned from byacc.spec byacc-20221106/package/debian/0000755000000000000000000000000014331754017014352 5ustar rootrootbyacc-20221106/package/debian/byacc2.prerm0002644000000000000000000000022614164347653016576 0ustar rootroot#! /bin/sh # prerm script for byacc2 set -e if [ $1 != "upgrade" ]; then update-alternatives --remove yacc /usr/bin/byacc2 fi #DEBHELPER# exit 0 byacc-20221106/package/debian/copyright0000644000000000000000000001514614175021160016304 0ustar rootrootFormat: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: byacc Upstream-Contact: (Thomas E. Dickey) Source: https://invisible-island.net/byacc/ Files: * Copyright: 2001-2021,2022 by Thomas E. Dickey License: public-domain Berkeley Yacc is in the public domain; changes made to it by the current maintainer are likewise unrestricted. That applies to most of the files. A few files (currently those related to autoconf scripting) have other licenses as noted here. . Current byacc upstream maintainer: Thomas Dickey . Public domain notice and no warranty: ------------------------------------------------------------------------------- Berkeley Yacc is an LALR(1) parser generator. Berkeley Yacc has been made as compatible as possible with AT&T Yacc. Berkeley Yacc can accept any input specification that conforms to the AT&T Yacc documentation. Specifications that take advantage of undocumented features of AT&T Yacc will probably be rejected. . Berkeley Yacc is distributed with no warranty whatever. The code is certain to contain errors. Neither the author nor any contributor takes responsibility for any consequences of its use. . Berkeley Yacc is in the public domain. The data structures and algorithms used in Berkeley Yacc are all either taken from documents available to the general public or are inventions of the author. Anyone may freely distribute source or binary forms of Berkeley Yacc whether unchanged or modified. Distributers may charge whatever fees they can obtain for Berkeley Yacc. Programs generated by Berkeley Yacc may be distributed freely. . Please report bugs to . robert.corbett@eng.Sun.COM . Include a small example if possible. Please include the banner string from skeleton.c with the bug report. Do not expect rapid responses. ------------------------------------------------------------------------------- Files: aclocal.m4 Copyright: 2004-2021,2022 by Thomas E. Dickey License: other-BSD Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, distribute with modifications, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. . Except as contained in this notice, the name(s) of the above copyright holders shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization. Files: install-sh Copyright: 1994 X Consortium License: other-BSD Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. . Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other deal- ings in this Software without prior written authorization from the X Consor- tium. . FSF changes to this file are in the public domain. . Calling this script install-sh is preferred over install.sh, to prevent `make' implicit rules from creating a file called install from it when there is no Makefile. . This script is compatible with the BSD install script, but was written from scratch. It can only install one file at a time, a restriction shared with many OS's install programs. Files: package/debian/* Copyright: 2012-2021,2022 Thomas E. Dickey License: other-BSD Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of the above listed copyright holder(s) not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. . THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Files: config.guess config.sub Copyright: 1992-2021 Free Software Foundation, Inc. License: GPL-3 On Debian systems, the complete text of the GNU General Public License can be found in '/usr/share/common-licenses/GPL-3' byacc-20221106/package/debian/byacc2.docs0000644000000000000000000000007114161460575016371 0ustar rootrootREADME README.BTYACC ACKNOWLEDGEMENTS NEW_FEATURES NOTES byacc-20221106/package/debian/byacc2.postinst0000644000000000000000000000040714164347644017333 0ustar rootroot#! /bin/sh # postinst script for byacc2 set -e if [ $1 != "upgrade" ] ; then update-alternatives \ --install /usr/bin/yacc yacc /usr/bin/byacc2 80 \ --slave /usr/share/man/man1/yacc.1.gz yaccman \ /usr/share/man/man1/byacc2.1.gz fi #DEBHELPER# exit 0 byacc-20221106/package/debian/rules0000755000000000000000000000140414175020504015422 0ustar rootroot#!/usr/bin/make -f # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 export DEB_BUILD_MAINT_OPTIONS := hardening=+all qa=+bug reproducible=+all %: dh $@ # dh_autoreconf interferes with portability -- skip it override_dh_autoreconf: echo "skip: dh_autoreconf autoreconf-dickey -- -f -i" override_dh_auto_configure: dh_auto_configure -- \ --enable-warnings \ --verbose \ --enable-stdnoreturn \ --enable-btyacc \ --with-max-table-size=123456 \ --program-transform-name='s,^yacc,byacc2,' # workaround for whatis sed -i '/- an LALR/s,^..N,byacc2,' yacc.1 # omit tests which rely upon getopt error-messages sed -i.bak '/MYFILE=nosuchfile/,/# Test special cases/d' test/run_test.sh diff -u test/run_test.sh.bak test/run_test.sh || echo OK byacc-20221106/package/debian/control0000644000000000000000000000207014175020432015745 0ustar rootrootSource: byacc Maintainer: Thomas E. Dickey Uploaders: Thomas E. Dickey Section: devel Priority: optional Standards-Version: 4.6.0.1 Build-Depends: debhelper-compat (= 12), Rules-Requires-Root: no Homepage: https://invisible-island.net/byacc/ Vcs-Browser: https://salsa.debian.org/debian/byacc Vcs-Git: https://salsa.debian.org/debian/byacc.git Package: byacc2 Provides: yacc Architecture: any Multi-Arch: foreign Depends: ${shlibs:Depends}, ${misc:Depends} Description: public domain Berkeley LALR Yacc parser generator This package provides a parser generator utility that reads a grammar specification from a file and generates an LR(1) parser for it. The parsers consist of a set of LALR(1) parsing tables and a driver routine written in the C programming language. It has a public domain license which includes the generated C. . This package has the backtracking extension, adapted from btyacc. The package is renamed to allow installing at the same time as "byacc". . Related packages: bison, btyacc, byacc, antlr byacc-20221106/package/debian/source/0000755000000000000000000000000012414617172015652 5ustar rootrootbyacc-20221106/package/debian/source/format0000644000000000000000000000001512414617172017061 0ustar rootroot3.0 (native) byacc-20221106/package/debian/watch0000644000000000000000000000126214171653375015413 0ustar rootrootversion=4 # upstream provides tarballs such as "byacc-20220101.tgz" (originally to # keep the filenames compatible with systems where multiple "." are illegal). # # The version number (2.0) is current since late 2020; before that it was # "1.9" for a long time. Use # byacc -V # to see the version number: # byacc - 2.0 20220101 # # The introduction of the back-tracking configuration motivated the change of # major/minor numbers; for compatibility the parser skeleton still says "1.9". # # Patch-dates are always # in yyyymmdd format. opts=pgpmode=auto,\ dversionmangle=s/^2\.0\.//,\ oversionmangle=s/^(.*)/2.0.$1/ \ https://invisible-mirror.net/archives/byacc/byacc-(\d+)\.tgz byacc-20221106/package/debian/changelog0000644000000000000000000003353714331754017016237 0ustar rootrootbyacc (1:2.0.20221106) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Sun, 06 Nov 2022 10:51:43 -0500 byacc (1:2.0.20220128) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Fri, 28 Jan 2022 08:38:52 -0500 byacc (1:2.0.20220114) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Fri, 14 Jan 2022 16:33:35 -0500 byacc (1:2.0.20220109) unstable; urgency=low * maintenance updates, modify packaging to more closely match distributors. In particular, correct versioning using an epoch. -- Thomas E. Dickey Sun, 09 Jan 2022 10:49:20 -0500 byacc (20220102) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Sun, 02 Jan 2022 11:12:56 -0500 byacc (20220101) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Sat, 01 Jan 2022 07:06:35 -0500 byacc (20211224) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Fri, 24 Dec 2021 19:13:22 -0500 byacc (20210808) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Sun, 08 Aug 2021 15:26:10 -0400 byacc (20210802) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Mon, 02 Aug 2021 16:50:01 -0400 byacc (20210801) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Sun, 01 Aug 2021 15:30:22 -0400 byacc (20210619) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Sat, 19 Jun 2021 14:06:48 -0400 byacc (20210520) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Thu, 20 May 2021 15:25:00 -0400 byacc (20210328) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Sun, 28 Mar 2021 11:14:10 -0400 byacc (20210109) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Sat, 09 Jan 2021 09:32:51 -0500 byacc (20200910) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Thu, 10 Sep 2020 10:45:10 -0400 byacc (20200330) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Mon, 30 Mar 2020 19:31:42 -0400 byacc (20191125) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Mon, 25 Nov 2019 18:13:14 -0500 byacc (20191119) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Tue, 19 Nov 2019 20:40:56 -0500 byacc (20191103) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Sun, 03 Nov 2019 16:42:41 -0500 byacc (20190617) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Sun, 16 Jun 2019 15:51:03 -0400 byacc (20190616) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Sun, 16 Jun 2019 08:55:03 -0400 byacc (20180609) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Sat, 09 Jun 2018 20:42:16 -0400 byacc (20180525) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Mon, 21 May 2018 18:50:44 -0400 byacc (20180510) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Thu, 10 May 2018 04:59:09 -0400 byacc (20180509) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Wed, 09 May 2018 21:13:51 -0400 byacc (20180508) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Tue, 08 May 2018 16:24:39 -0400 byacc (20170709) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Sun, 09 Jul 2017 13:49:13 -0400 byacc (20170430) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Sun, 30 Apr 2017 16:55:15 -0400 byacc (20170201) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Wed, 01 Feb 2017 04:55:04 -0500 byacc (20161202) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Fri, 02 Dec 2016 07:58:46 -0500 byacc (20160606) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Mon, 06 Jun 2016 20:44:26 -0400 byacc (20160601) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Mon, 06 Jun 2016 05:21:18 -0400 byacc (20160324) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Thu, 24 Mar 2016 19:55:52 -0400 byacc (20150711) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Fri, 10 Jul 2015 20:53:15 -0400 byacc (20150705) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Sun, 05 Jul 2015 18:24:51 -0400 byacc (20141128) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Fri, 28 Nov 2014 10:42:17 -0500 byacc (20141006) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Mon, 06 Oct 2014 18:52:03 -0400 byacc (20141005) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Sun, 27 Jul 2014 10:45:06 -0400 byacc (20140715) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Tue, 15 Jul 2014 15:36:54 -0400 byacc (20140527) unstable; urgency=low * remove obsolete option from usage message -- Thomas E. Dickey Tue, 27 May 2014 22:01:55 -0400 byacc (20140422) unstable; urgency=low * maintenance updates -- Thomas E. Dickey Tue, 22 Apr 2014 04:13:20 -0400 byacc (20140409) unstable; urgency=low * integrate Tom Shield's btyacc-related changes * add test-cases to fill in gaps reported by lcov -- Thomas E. Dickey Wed, 09 Apr 2014 15:53:59 -0400 byacc (20140101) unstable; urgency=low * yytname[] changes -- Thomas E. Dickey Wed, 01 Jan 2014 10:02:12 -0500 byacc (20130925) unstable; urgency=low * increase default stack-size -- Thomas E. Dickey Wed, 25 Sep 2013 18:41:54 -0400 byacc (20130304) unstable; urgency=low * changes prompted by Richard Mitton bug-report -- Thomas E. Dickey Mon, 04 Mar 2013 20:17:32 -0500 byacc (20121003) unstable; urgency=low * changes from or prompted by Adrian Bunk. -- Thomas E. Dickey Sat, 29 Sep 2012 09:14:31 -0400 byacc (20120526) unstable; urgency=low * minor code-cleanup. -- Thomas E. Dickey Sat, 26 May 2012 12:14:17 -0400 byacc (20120115) unstable; urgency=low * add testcases, improve documentation for "-s" option. -- Thomas E. Dickey Fri, 13 Jan 2012 20:44:34 -0500 byacc (20111219) unstable; urgency=low * add "-s" option. -- Thomas E. Dickey Mon, 19 Dec 2011 20:54:09 -0500 byacc (20110908) unstable; urgency=low * add "-i" option. * add error-check in reader.c -- Thomas E. Dickey Mon, 05 Sep 2011 20:05:51 -0400 byacc (20101229) unstable; urgency=low * fixes from Christos Zoulos -- Thomas E. Dickey Wed, 29 Dec 2010 13:03:50 -0500 byacc (20101226) unstable; urgency=low * portability fix for MinGW -- Thomas E. Dickey Sat, 25 Dec 2010 19:37:54 -0500 byacc (20101127) unstable; urgency=low * corrected yyerror use of %parse-param data -- Thomas E. Dickey Sat, 27 Nov 2010 12:32:00 -0500 byacc (20101126) unstable; urgency=low * additional fix to generated code to avoid symbol conflict -- Thomas E. Dickey Fri, 26 Nov 2010 04:23:08 -0500 byacc (20101124) unstable; urgency=low * amend fix for Red Hat #112617 to restore warning message. -- Thomas E. Dickey Mon, 22 Nov 2010 08:21:23 -0500 byacc (20101122) unstable; urgency=low * fix for generated header to avoid symbol conflict -- Thomas E. Dickey Mon, 22 Nov 2010 08:21:23 -0500 byacc (20100610) unstable; urgency=low * Add package scripts to upstream source, for test-builds. -- Thomas E. Dickey Thu, 10 Jun 2010 08:59:11 -0400 byacc (20100216-1) unstable; urgency=low * New upstream release * debian/source/format: Added using format "3.0 (quilt)" -- Dave Beckett Tue, 20 Apr 2010 12:56:11 -0700 byacc (20091027-1) unstable; urgency=low * New upstream release * debian/control: - Updated to policy 3.8.4 - Add ${misc:Depends} -- Dave Beckett Tue, 02 Feb 2010 21:36:34 -0800 byacc (20090221-1) unstable; urgency=low * New upstream release -- Dave Beckett Thu, 26 Feb 2009 21:06:20 -0800 byacc (20080826-1) unstable; urgency=high * New upstream release * debian/patches/02-skeleton.patch: Removed - merged upstream * debian/control: Updated to policy 3.8.0 * debian/preinst, debian/postrm: removed - empty (lintian) * debian/watch: version 3 and make FTP passive * Acknowledge NMU - thanks. -- Dave Beckett Wed, 11 Sep 2008 23:58:00 -0700 byacc (20070509-1.1) unstable; urgency=high * Non-maintainer upload. * Fix stack overflow in skeleton.c with upstream patch. Closes: #491182 aka CVE-2008-3196 -- Thomas Viehmann Sun, 24 Aug 2008 23:13:07 +0200 byacc (20070509-1) unstable; urgency=low * New upstream release * debian/watch: Fix to use passive FTP * debian/compat: added instead of use of DH_COMPAT in debian/rules -- Dave Beckett Tue, 26 Jun 2007 22:39:45 -0700 byacc (20050813-1) unstable; urgency=low * New upstream release: - Do not close union_file for -d option (Closes: #322858) -- Dave Beckett Sun, 14 Aug 2005 10:14:12 +0100 byacc (20050505-1) unstable; urgency=low * New maintainer (Closes: #321377) * Switch to new upstream and new source (Closes: #240662) * debian/copyright: Update to new upstream and add source information (Closes: #166300) * Acknowledge fix in NMUs (Closes: #283174) * New manual page does not have the formatting problem (Closes: #100947) * Added debian/watch file. -- Dave Beckett Fri, 5 Aug 2005 22:50:20 +0100 byacc (1.9.1-1.1) unstable; urgency=low * Remove alternative in prerm. Closes: #283174 -- LaMont Jones Fri, 26 Nov 2004 18:49:09 -0700 byacc (1.9.1-1) unstable; urgency=low * Maintainer upload. * Fixed alternatives entry, closes: Bug#146195; * Changed priority to "extra" at behest of Daniel Bungert, closes: Bug#142271. * Fixed awful packaging error which meant the test/ directory was excluded from the orig.tar.gz. -- Jason Henry Parker Fri, 27 Sep 2002 16:25:27 -0400 byacc (1.9-13.1) unstable; urgency=low * Non-maintainer upload * Removed erraneous escapes in manpage - some data wasn't visable, closes: Bug#100947 * Alternatives entry added, closes: Bug#113168 * Standards-version: 3.5.6 * Maintainer script cleaning -- Daniel Bungert Fri, 29 Mar 2002 16:58:30 -0500 byacc (1.9-13) unstable; urgency=low * Applied patch from "Randolph Chung" to fix build problems on ia64, closes: Bug#91966 -- Jason Henry Parker Thu, 29 Mar 2001 21:41:19 +1000 byacc (1.9-12) unstable; urgency=low * Updated to latest version of debhelper, and Standards-Version: 3.2.1.0, closes: Bug#81444 * Added Build-Depends: debhelper, closes: Bug#70207 * Removed mktemp() calls in main.c -- Jason Henry Parker Mon, 18 Dec 2000 08:02:54 +1000 byacc (1.9-11.7) unstable; urgency=low * New maintainer. * Updated to dh_make and standards version 2.4.0.0, no lintian errors or warnings. * Added several more files from the upstream distribution to /usr/doc/byacc. -- Jason Henry Parker Sat, 2 Jan 1999 03:04:17 +1000 byacc (1.9-11.6) unstable; urgency=low * Patch by to remove some superfluous files that can interfere with the build process on other architectures. (Bug #21607). -- Vincent Renardias Fri, 24 Apr 1998 19:56:58 +0200 byacc (1.9-11.5) unstable; urgency=low * Added 'binary-arch' target in debian/rules (Bug #12742). -- Vincent Renardias Sun, 9 Nov 1997 23:37:31 +0100 byacc (1.9-11.4) unstable; urgency=low * Cosmetic change (Fix bug #9623). -- Vincent Renardias Fri, 9 May 1997 16:30:24 +0200 byacc (1.9-11.3) unstable; urgency=low * Rebuilt with libc6. -- Debian QA Group Thu, 1 May 1997 22:02:04 +0200 byacc (1.9-11.2) unstable; urgency=low * Orphaned the package at his maintainer's request (dgregor@coil.com). -- Debian QA Group Sun, 20 Apr 1997 20:03:03 +0200 byacc (1.9-11.1) unstable; urgency=low * Converted to new source format (Fixes #8085). * Compressed manpage. * Fixed to allow compilation on non-i386 (Fixes #3361). * Added extended description (Fixes #3567). * Added diversion to avoid conflict with bison (Fixes #8086). -- Vincent Renardias Sun, 20 Apr 1997 15:59:28 +0200 byacc-20221106/package/byacc.spec0000644000000000000000000000564414331754017015076 0ustar rootrootSummary: public domain Berkeley LALR Yacc parser generator %global AppVersion 2.0 %global AppPatched 20221106 %global AltProgram byacc2 %global UseProgram yacc # $Id: byacc.spec,v 1.68 2022/11/06 15:51:43 tom Exp $ Name: byacc Version: %{AppVersion}.%{AppPatched} Release: 1 License: Public Domain, MIT URL: https://invisible-island.net/%{name}/ Source0: https://invisible-mirror.net/archives/%{name}/%{name}-%{AppPatched}.tgz %description This package provides a parser generator utility that reads a grammar specification from a file and generates an LR(1) parser for it. The parsers consist of a set of LALR(1) parsing tables and a driver routine written in the C programming language. It has a public domain license which includes the generated C. %package -n byacc2 Summary: public domain Berkeley LALR Yacc parser generator with backtracking %description -n byacc2 This package provides a parser generator utility that reads a grammar specification from a file and generates an LR(1) parser for it. The parsers consist of a set of LALR(1) parsing tables and a driver routine written in the C programming language. It has a public domain license which includes the generated C. This package has the backtracking extension. %prep %global debug_package %{nil} %setup -q -n %{name}-%{AppPatched} %build %define my_srcdir .. %define CFG_OPTS \\\ --verbose \\\ --disable-echo \\\ --enable-stdnoreturn \\\ --target %{_target_platform} \\\ --prefix=%{_prefix} \\\ --srcdir=%{my_srcdir} \\\ --bindir=%{_bindir} \\\ --libdir=%{_libdir} \\\ --mandir=%{_mandir} %global _configure ../configure mkdir BUILD-byacc pushd BUILD-byacc CONFIGURE_TOP=%{my_srcdir} \ %configure %{CFG_OPTS} \ --program-prefix=b \ make popd mkdir BUILD-byacc2 pushd BUILD-byacc2 CONFIGURE_TOP=%{my_srcdir} \ %configure %{CFG_OPTS} \ --enable-btyacc \ --program-transform-name='s,\ /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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() { %% body_2 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 %% init_vars memset(&yyval, 0, sizeof(yyval)); memset(&yylval, 0, sizeof(yylval)); %% body_3 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { %% trailer } 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/output.c0000644000000000000000000012161714166621614013253 0ustar rootroot/* $Id: output.c,v 1.100 2022/01/09 18:03:56 tom Exp $ */ #include "defs.h" #define StaticOrR (rflag ? "" : "static ") #define CountLine(fp) (!rflag || ((fp) == code_file)) #if defined(YYBTYACC) #define PER_STATE 3 #else #define PER_STATE 2 #endif static int nvectors; static int nentries; static Value_t **froms; static Value_t **tos; #if defined(YYBTYACC) static Value_t *conflicts = NULL; static Value_t nconflicts = 0; #endif static Value_t *tally; static Value_t *width; static Value_t *state_count; static Value_t *order; static Value_t *base; static Value_t *pos; static int maxtable; static Value_t *table; static Value_t *check; static int lowzero; static long high; static void putc_code(FILE * fp, int c) { if ((c == '\n') && (fp == code_file)) ++outline; putc(c, fp); } static void putl_code(FILE * fp, const char *s) { if (fp == code_file) ++outline; fputs(s, fp); } static void puts_code(FILE * fp, const char *s) { fputs(s, fp); } static void puts_param_types(FILE * fp, param *list, int more) { param *p; if (list != 0) { for (p = list; p; p = p->next) { size_t len_type = strlen(p->type); fprintf(fp, "%s%s%s%s%s", p->type, (((len_type != 0) && (p->type[len_type - 1] == '*')) ? "" : " "), p->name, p->type2, ((more || p->next) ? ", " : "")); } } else { if (!more) fprintf(fp, "void"); } } static void puts_param_names(FILE * fp, param *list, int more) { param *p; for (p = list; p; p = p->next) { fprintf(fp, "%s%s", p->name, ((more || p->next) ? ", " : "")); } } static void write_code_lineno(FILE * fp) { if (!lflag && (fp == code_file)) { ++outline; fprintf_lineno(fp, outline + 1, code_file_name); } } static void write_input_lineno(void) { if (!lflag) { ++outline; fprintf_lineno(code_file, lineno, input_file_name); } } static void define_prefixed(FILE * fp, const char *name) { int bump_line = CountLine(fp); if (bump_line) ++outline; fprintf(fp, "\n"); if (bump_line) ++outline; fprintf(fp, "#ifndef %s\n", name); if (bump_line) ++outline; fprintf(fp, "#define %-10s %s%s\n", name, symbol_prefix, name + 2); if (bump_line) ++outline; fprintf(fp, "#endif /* %s */\n", name); } static void output_prefix(FILE * fp) { if (symbol_prefix == NULL) { symbol_prefix = "yy"; } else { define_prefixed(fp, "yyparse"); define_prefixed(fp, "yylex"); define_prefixed(fp, "yyerror"); define_prefixed(fp, "yychar"); define_prefixed(fp, "yyval"); define_prefixed(fp, "yylval"); define_prefixed(fp, "yydebug"); define_prefixed(fp, "yynerrs"); define_prefixed(fp, "yyerrflag"); define_prefixed(fp, "yylhs"); define_prefixed(fp, "yylen"); define_prefixed(fp, "yydefred"); #if defined(YYBTYACC) define_prefixed(fp, "yystos"); #endif define_prefixed(fp, "yydgoto"); define_prefixed(fp, "yysindex"); define_prefixed(fp, "yyrindex"); define_prefixed(fp, "yygindex"); define_prefixed(fp, "yytable"); define_prefixed(fp, "yycheck"); define_prefixed(fp, "yyname"); define_prefixed(fp, "yyrule"); #if defined(YYBTYACC) if (locations) { define_prefixed(fp, "yyloc"); define_prefixed(fp, "yylloc"); } putc_code(fp, '\n'); putl_code(fp, "#if YYBTYACC\n"); define_prefixed(fp, "yycindex"); define_prefixed(fp, "yyctable"); putc_code(fp, '\n'); putl_code(fp, "#endif /* YYBTYACC */\n"); putc_code(fp, '\n'); #endif } if (CountLine(fp)) ++outline; fprintf(fp, "#define YYPREFIX \"%s\"\n", symbol_prefix); } static void output_code_lines(FILE * fp, int cl) { if (code_lines[cl].lines != NULL) { if (fp == code_file) { outline += (int)code_lines[cl].num; outline += 3; fprintf(fp, "\n"); } fprintf(fp, "/* %%code \"%s\" block start */\n", code_lines[cl].name); fputs(code_lines[cl].lines, fp); fprintf(fp, "/* %%code \"%s\" block end */\n", code_lines[cl].name); if (fp == code_file) { write_code_lineno(fp); } } } static void output_newline(void) { if (!rflag) ++outline; putc('\n', output_file); } static void output_line(const char *value) { fputs(value, output_file); output_newline(); } static void output_int(int value) { fprintf(output_file, "%5d,", value); } static void start_int_table(const char *name, int value) { int need = 34 - (int)(strlen(symbol_prefix) + strlen(name)); if (need < 6) need = 6; fprintf(output_file, "%sconst YYINT %s%s[] = {%*d,", StaticOrR, symbol_prefix, name, need, value); } static void start_str_table(const char *name) { fprintf(output_file, "%sconst char *const %s%s[] = {", StaticOrR, symbol_prefix, name); output_newline(); } static void end_table(void) { output_newline(); output_line("};"); } static void output_stype(FILE * fp) { if (!unionized && ntags == 0) { putc_code(fp, '\n'); putl_code(fp, "#if " "! defined(YYSTYPE) && " "! defined(YYSTYPE_IS_DECLARED)\n"); putl_code(fp, "/* Default: YYSTYPE is the semantic value type. */\n"); putl_code(fp, "typedef int YYSTYPE;\n"); putl_code(fp, "# define YYSTYPE_IS_DECLARED 1\n"); putl_code(fp, "#endif\n"); } } #if defined(YYBTYACC) static void output_ltype(FILE * fp) { putc_code(fp, '\n'); putl_code(fp, "#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED\n"); putl_code(fp, "/* Default: YYLTYPE is the text position type. */\n"); putl_code(fp, "typedef struct YYLTYPE\n"); putl_code(fp, "{\n"); putl_code(fp, " int first_line;\n"); putl_code(fp, " int first_column;\n"); putl_code(fp, " int last_line;\n"); putl_code(fp, " int last_column;\n"); putl_code(fp, " unsigned source;\n"); putl_code(fp, "} YYLTYPE;\n"); putl_code(fp, "#define YYLTYPE_IS_DECLARED 1\n"); putl_code(fp, "#endif\n"); putl_code(fp, "#define YYRHSLOC(rhs, k) ((rhs)[k])\n"); } #endif static void output_YYINT_typedef(FILE * fp) { /* generate the type used to index the various parser tables */ if (CountLine(fp)) ++outline; fprintf(fp, "typedef %s YYINT;\n", CONCAT1("", YYINT)); } static void output_rule_data(void) { int i; int j; output_YYINT_typedef(output_file); start_int_table("lhs", symbol_value[start_symbol]); j = 10; for (i = 3; i < nrules; i++) { if (j >= 10) { output_newline(); j = 1; } else ++j; output_int(symbol_value[rlhs[i]]); } end_table(); start_int_table("len", 2); j = 10; for (i = 3; i < nrules; i++) { if (j >= 10) { output_newline(); j = 1; } else j++; output_int(rrhs[i + 1] - rrhs[i] - 1); } end_table(); } static void output_yydefred(void) { int i, j; start_int_table("defred", (defred[0] ? defred[0] - 2 : 0)); j = 10; for (i = 1; i < nstates; i++) { if (j < 10) ++j; else { output_newline(); j = 1; } output_int((defred[i] ? defred[i] - 2 : 0)); } end_table(); } #if defined(YYBTYACC) static void output_accessing_symbols(void) { if (nstates != 0) { int i, j; int *translate; translate = TCMALLOC(int, nstates); NO_SPACE(translate); for (i = 0; i < nstates; ++i) { int gsymb = accessing_symbol[i]; translate[i] = symbol_pval[gsymb]; } putl_code(output_file, "#if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING)\n"); /* yystos[] may be unused, depending on compile-time defines */ start_int_table("stos", translate[0]); j = 10; for (i = 1; i < nstates; ++i) { if (j < 10) ++j; else { output_newline(); j = 1; } output_int(translate[i]); } end_table(); FREE(translate); putl_code(output_file, "#endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */\n"); } } static Value_t find_conflict_base(int cbase) { int i, j; for (i = 0; i < cbase; i++) { for (j = 0; j + cbase < nconflicts; j++) { if (conflicts[i + j] != conflicts[cbase + j]) break; } if (j + cbase >= nconflicts) break; } return (Value_t)i; } #endif static void token_actions(void) { int i, j; Value_t shiftcount, reducecount; #if defined(YYBTYACC) Value_t conflictcount = 0; Value_t csym = -1; Value_t cbase = 0; #endif Value_t max, min; Value_t *actionrow, *r, *s; action *p; actionrow = NEW2(PER_STATE * ntokens, Value_t); for (i = 0; i < nstates; ++i) { if (parser[i]) { for (j = 0; j < PER_STATE * ntokens; ++j) actionrow[j] = 0; shiftcount = 0; reducecount = 0; #if defined(YYBTYACC) if (backtrack) { conflictcount = 0; csym = -1; cbase = nconflicts; } #endif for (p = parser[i]; p; p = p->next) { #if defined(YYBTYACC) if (backtrack) { if (csym != -1 && csym != p->symbol) { conflictcount++; conflicts[nconflicts++] = -1; j = find_conflict_base(cbase); actionrow[csym + 2 * ntokens] = (Value_t)(j + 1); if (j == cbase) { cbase = nconflicts; } else { if (conflicts[cbase] == -1) cbase++; nconflicts = cbase; } csym = -1; } } #endif if (p->suppressed == 0) { if (p->action_code == SHIFT) { ++shiftcount; actionrow[p->symbol] = p->number; } else if (p->action_code == REDUCE && p->number != defred[i]) { ++reducecount; actionrow[p->symbol + ntokens] = p->number; } } #if defined(YYBTYACC) else if (backtrack && p->suppressed == 1) { csym = p->symbol; if (p->action_code == SHIFT) { conflicts[nconflicts++] = p->number; } else if (p->action_code == REDUCE && p->number != defred[i]) { if (cbase == nconflicts) { if (cbase) cbase--; else conflicts[nconflicts++] = -1; } conflicts[nconflicts++] = (Value_t)(p->number - 2); } } #endif } #if defined(YYBTYACC) if (backtrack && csym != -1) { conflictcount++; conflicts[nconflicts++] = -1; j = find_conflict_base(cbase); actionrow[csym + 2 * ntokens] = (Value_t)(j + 1); if (j == cbase) { cbase = nconflicts; } else { if (conflicts[cbase] == -1) cbase++; nconflicts = cbase; } } #endif tally[i] = shiftcount; tally[nstates + i] = reducecount; #if defined(YYBTYACC) if (backtrack) tally[2 * nstates + i] = conflictcount; #endif width[i] = 0; width[nstates + i] = 0; #if defined(YYBTYACC) if (backtrack) width[2 * nstates + i] = 0; #endif if (shiftcount > 0) { froms[i] = r = NEW2(shiftcount, Value_t); tos[i] = s = NEW2(shiftcount, Value_t); min = MAXYYINT; max = 0; for (j = 0; j < ntokens; ++j) { if (actionrow[j]) { if (min > symbol_value[j]) min = symbol_value[j]; if (max < symbol_value[j]) max = symbol_value[j]; *r++ = symbol_value[j]; *s++ = actionrow[j]; } } width[i] = (Value_t)(max - min + 1); } if (reducecount > 0) { froms[nstates + i] = r = NEW2(reducecount, Value_t); tos[nstates + i] = s = NEW2(reducecount, Value_t); min = MAXYYINT; max = 0; for (j = 0; j < ntokens; ++j) { if (actionrow[ntokens + j]) { if (min > symbol_value[j]) min = symbol_value[j]; if (max < symbol_value[j]) max = symbol_value[j]; *r++ = symbol_value[j]; *s++ = (Value_t)(actionrow[ntokens + j] - 2); } } width[nstates + i] = (Value_t)(max - min + 1); } #if defined(YYBTYACC) if (backtrack && conflictcount > 0) { froms[2 * nstates + i] = r = NEW2(conflictcount, Value_t); tos[2 * nstates + i] = s = NEW2(conflictcount, Value_t); min = MAXYYINT; max = 0; for (j = 0; j < ntokens; ++j) { if (actionrow[2 * ntokens + j]) { if (min > symbol_value[j]) min = symbol_value[j]; if (max < symbol_value[j]) max = symbol_value[j]; *r++ = symbol_value[j]; *s++ = (Value_t)(actionrow[2 * ntokens + j] - 1); } } width[2 * nstates + i] = (Value_t)(max - min + 1); } #endif } } FREE(actionrow); } static int default_goto(int symbol) { int i; int m; int n; int default_state; int max; m = goto_map[symbol]; n = goto_map[symbol + 1]; if (m == n) return (0); for (i = 0; i < nstates; i++) state_count[i] = 0; for (i = m; i < n; i++) state_count[to_state[i]]++; max = 0; default_state = 0; for (i = 0; i < nstates; i++) { if (state_count[i] > max) { max = state_count[i]; default_state = i; } } return (default_state); } static void save_column(int symbol, int default_state) { int i; int m; int n; Value_t *sp; Value_t *sp1; Value_t *sp2; Value_t count; int symno; m = goto_map[symbol]; n = goto_map[symbol + 1]; count = 0; for (i = m; i < n; i++) { if (to_state[i] != default_state) ++count; } if (count == 0) return; symno = symbol_value[symbol] + PER_STATE * nstates; froms[symno] = sp1 = sp = NEW2(count, Value_t); tos[symno] = sp2 = NEW2(count, Value_t); for (i = m; i < n; i++) { if (to_state[i] != default_state) { *sp1++ = from_state[i]; *sp2++ = to_state[i]; } } tally[symno] = count; width[symno] = (Value_t)(sp1[-1] - sp[0] + 1); } static void goto_actions(void) { int i, j, k; state_count = NEW2(nstates, Value_t); k = default_goto(start_symbol + 1); start_int_table("dgoto", k); save_column(start_symbol + 1, k); j = 10; for (i = start_symbol + 2; i < nsyms; i++) { if (j >= 10) { output_newline(); j = 1; } else ++j; k = default_goto(i); output_int(k); save_column(i, k); } end_table(); FREE(state_count); } static void sort_actions(void) { Value_t i; int j; int k; int t; int w; order = NEW2(nvectors, Value_t); nentries = 0; for (i = 0; i < nvectors; i++) { if (tally[i] > 0) { t = tally[i]; w = width[i]; j = nentries - 1; while (j >= 0 && (width[order[j]] < w)) j--; while (j >= 0 && (width[order[j]] == w) && (tally[order[j]] < t)) j--; for (k = nentries - 1; k > j; k--) order[k + 1] = order[k]; order[j + 1] = i; nentries++; } } } /* The function matching_vector determines if the vector specified by */ /* the input parameter matches a previously considered vector. The */ /* test at the start of the function checks if the vector represents */ /* a row of shifts over terminal symbols or a row of reductions, or a */ /* column of shifts over a nonterminal symbol. Berkeley Yacc does not */ /* check if a column of shifts over a nonterminal symbols matches a */ /* previously considered vector. Because of the nature of LR parsing */ /* tables, no two columns can match. Therefore, the only possible */ /* match would be between a row and a column. Such matches are */ /* unlikely. Therefore, to save time, no attempt is made to see if a */ /* column matches a previously considered vector. */ /* */ /* Matching_vector is poorly designed. The test could easily be made */ /* faster. Also, it depends on the vectors being in a specific */ /* order. */ #if defined(YYBTYACC) /* */ /* Not really any point in checking for matching conflicts -- it is */ /* extremely unlikely to occur, and conflicts are (hopefully) rare. */ #endif static int matching_vector(int vector) { int i; int k; int t; int w; int prev; i = order[vector]; if (i >= 2 * nstates) return (-1); t = tally[i]; w = width[i]; for (prev = vector - 1; prev >= 0; prev--) { int j = order[prev]; if (width[j] != w || tally[j] != t) { return (-1); } else { int match = 1; for (k = 0; match && k < t; k++) { if (tos[j][k] != tos[i][k] || froms[j][k] != froms[i][k]) match = 0; } if (match) return (j); } } return (-1); } static int pack_vector(int vector) { int i, j, k, l; int t; Value_t loc; int ok; Value_t *from; Value_t *to; int newmax; i = order[vector]; t = tally[i]; assert(t); from = froms[i]; to = tos[i]; j = lowzero - from[0]; for (k = 1; k < t; ++k) if (lowzero - from[k] > j) j = lowzero - from[k]; for (;; ++j) { if (j == 0) continue; ok = 1; for (k = 0; ok && k < t; k++) { loc = (Value_t)(j + from[k]); if (loc >= maxtable - 1) { if (loc >= MAXTABLE - 1) fatal("maximum table size exceeded"); newmax = maxtable; do { newmax += 200; } while (newmax <= loc); table = TREALLOC(Value_t, table, newmax); NO_SPACE(table); check = TREALLOC(Value_t, check, newmax); NO_SPACE(check); for (l = maxtable; l < newmax; ++l) { table[l] = 0; check[l] = -1; } maxtable = newmax; } if (check[loc] != -1) ok = 0; } for (k = 0; ok && k < vector; k++) { if (pos[k] == j) ok = 0; } if (ok) { for (k = 0; k < t; k++) { loc = (Value_t)(j + from[k]); table[loc] = to[k]; check[loc] = from[k]; if (loc > high) high = loc; } while (check[lowzero] != -1) ++lowzero; return (j); } } } static void pack_table(void) { int i; Value_t place; base = NEW2(nvectors, Value_t); pos = NEW2(nentries, Value_t); maxtable = 1000; table = NEW2(maxtable, Value_t); check = NEW2(maxtable, Value_t); lowzero = 0; high = 0; for (i = 0; i < maxtable; i++) check[i] = -1; for (i = 0; i < nentries; i++) { int state = matching_vector(i); if (state < 0) place = (Value_t)pack_vector(i); else place = base[state]; pos[i] = place; base[order[i]] = place; } for (i = 0; i < nvectors; i++) { if (froms[i]) FREE(froms[i]); if (tos[i]) FREE(tos[i]); } DO_FREE(froms); DO_FREE(tos); DO_FREE(tally); DO_FREE(width); DO_FREE(pos); } static void output_base(void) { int i, j; start_int_table("sindex", base[0]); j = 10; for (i = 1; i < nstates; i++) { if (j >= 10) { output_newline(); j = 1; } else ++j; output_int(base[i]); } end_table(); start_int_table("rindex", base[nstates]); j = 10; for (i = nstates + 1; i < 2 * nstates; i++) { if (j >= 10) { output_newline(); j = 1; } else ++j; output_int(base[i]); } end_table(); #if defined(YYBTYACC) output_line("#if YYBTYACC"); start_int_table("cindex", base[2 * nstates]); j = 10; for (i = 2 * nstates + 1; i < 3 * nstates; i++) { if (j >= 10) { output_newline(); j = 1; } else ++j; output_int(base[i]); } end_table(); output_line("#endif"); #endif start_int_table("gindex", base[PER_STATE * nstates]); j = 10; for (i = PER_STATE * nstates + 1; i < nvectors - 1; i++) { if (j >= 10) { output_newline(); j = 1; } else ++j; output_int(base[i]); } end_table(); FREE(base); } static void output_table(void) { int i; int j; if (high >= MAXYYINT) { fprintf(stderr, "YYTABLESIZE: %ld\n", high); fprintf(stderr, "Table is longer than %ld elements.\n", (long)MAXYYINT); done(1); } ++outline; fprintf(code_file, "#define YYTABLESIZE %ld\n", high); start_int_table("table", table[0]); j = 10; for (i = 1; i <= high; i++) { if (j >= 10) { output_newline(); j = 1; } else ++j; output_int(table[i]); } end_table(); FREE(table); } static void output_check(void) { int i; int j; start_int_table("check", check[0]); j = 10; for (i = 1; i <= high; i++) { if (j >= 10) { output_newline(); j = 1; } else ++j; output_int(check[i]); } end_table(); FREE(check); } #if defined(YYBTYACC) static void output_ctable(void) { int i; int j; int limit = (conflicts != 0) ? nconflicts : 0; if (limit < high) limit = (int)high; output_line("#if YYBTYACC"); start_int_table("ctable", conflicts ? conflicts[0] : -1); j = 10; for (i = 1; i < limit; i++) { if (j >= 10) { output_newline(); j = 1; } else ++j; output_int((conflicts != 0 && i < nconflicts) ? conflicts[i] : -1); } if (conflicts) FREE(conflicts); end_table(); output_line("#endif"); } #endif static void output_actions(void) { nvectors = PER_STATE * nstates + nvars; froms = NEW2(nvectors, Value_t *); tos = NEW2(nvectors, Value_t *); tally = NEW2(nvectors, Value_t); width = NEW2(nvectors, Value_t); #if defined(YYBTYACC) if (backtrack && (SRtotal + RRtotal) != 0) conflicts = NEW2(4 * (SRtotal + RRtotal), Value_t); #endif token_actions(); FREE(lookaheads); FREE(LA); FREE(LAruleno); FREE(accessing_symbol); goto_actions(); FREE(goto_base); FREE(from_state); FREE(to_state); sort_actions(); pack_table(); output_base(); output_table(); output_check(); #if defined(YYBTYACC) output_ctable(); #endif } static int is_C_identifier(char *name) { char *s; int c; s = name; c = *s; if (c == '"') { c = *++s; if (!IS_NAME1(c)) return (0); while ((c = *++s) != '"') { if (!IS_NAME2(c)) return (0); } return (1); } if (!IS_NAME1(c)) return (0); while ((c = *++s) != 0) { if (!IS_NAME2(c)) return (0); } return (1); } #if USE_HEADER_GUARDS static void start_defines_file(void) { fprintf(defines_file, "#ifndef _%s_defines_h_\n", symbol_prefix); fprintf(defines_file, "#define _%s_defines_h_\n\n", symbol_prefix); } static void end_defines_file(void) { fprintf(defines_file, "\n#endif /* _%s_defines_h_ */\n", symbol_prefix); } #else #define start_defines_file() /* nothing */ #define end_defines_file() /* nothing */ #endif static void output_defines(FILE * fp) { int c, i; if (fp == defines_file) { output_code_lines(fp, CODE_REQUIRES); } for (i = 2; i < ntokens; ++i) { char *s = symbol_name[i]; if (is_C_identifier(s) && (!sflag || *s != '"')) { fprintf(fp, "#define "); c = *s; if (c == '"') { while ((c = *++s) != '"') { putc(c, fp); } } else { do { putc(c, fp); } while ((c = *++s) != 0); } if (fp == code_file) ++outline; fprintf(fp, " %ld\n", (long)symbol_value[i]); } } if (fp == code_file) ++outline; if (fp != defines_file || iflag) fprintf(fp, "#define YYERRCODE %ld\n", (long)symbol_value[1]); if (fp == defines_file) { output_code_lines(fp, CODE_PROVIDES); } if (token_table && rflag && fp != externs_file) { if (fp == code_file) ++outline; fputs("#undef yytname\n", fp); if (fp == code_file) ++outline; fputs("#define yytname yyname\n", fp); } if (fp == defines_file || (iflag && !dflag)) { if (unionized) { if (union_file != 0) { rewind(union_file); while ((c = getc(union_file)) != EOF) putc_code(fp, c); } if (!pure_parser) fprintf(fp, "extern YYSTYPE %slval;\n", symbol_prefix); } #if defined(YYBTYACC) if (locations) { output_ltype(fp); fprintf(fp, "extern YYLTYPE %slloc;\n", symbol_prefix); } #endif } } static void output_stored_text(FILE * fp) { int c; FILE *in; if (text_file == NULL) open_error("text_file"); rewind(text_file); in = text_file; if ((c = getc(in)) == EOF) return; putc_code(fp, c); while ((c = getc(in)) != EOF) { putc_code(fp, c); } write_code_lineno(fp); } static int output_yydebug(FILE * fp) { fprintf(fp, "#ifndef YYDEBUG\n"); fprintf(fp, "#define YYDEBUG %d\n", tflag); fprintf(fp, "#endif\n"); return 3; } static void output_debug(void) { int i, j, k, max, maxtok; const char **symnam; const char *s; ++outline; fprintf(code_file, "#define YYFINAL %ld\n", (long)final_state); outline += output_yydebug(code_file); if (rflag) { output_yydebug(output_file); } maxtok = 0; for (i = 0; i < ntokens; ++i) if (symbol_value[i] > maxtok) maxtok = symbol_value[i]; /* symbol_value[$accept] = -1 */ /* symbol_value[] = 0 */ /* remaining non-terminals start at 1 */ max = maxtok; for (i = ntokens; i < nsyms; ++i) if (((maxtok + 1) + (symbol_value[i] + 1)) > max) max = (maxtok + 1) + (symbol_value[i] + 1); ++outline; fprintf(code_file, "#define YYMAXTOKEN %d\n", maxtok); ++outline; fprintf(code_file, "#define YYUNDFTOKEN %d\n", max + 1); ++outline; fprintf(code_file, "#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? " "YYUNDFTOKEN : (a))\n"); symnam = TCMALLOC(const char *, max + 2); NO_SPACE(symnam); /* Note that it is not necessary to initialize the element */ /* symnam[max]. */ #if defined(YYBTYACC) for (i = 0; i < max; ++i) symnam[i] = 0; for (i = nsyms - 1; i >= 0; --i) symnam[symbol_pval[i]] = symbol_name[i]; symnam[max + 1] = "illegal-symbol"; #else for (i = 0; i <= max; ++i) symnam[i] = 0; for (i = ntokens - 1; i >= 2; --i) symnam[symbol_value[i]] = symbol_name[i]; symnam[0] = "end-of-file"; symnam[max + 1] = "illegal-symbol"; #endif /* * bison's yytname[] array is roughly the same as byacc's yyname[] array. * The difference is that byacc does not predefine "$undefined". * * If the grammar declares "%token-table", define symbol "yytname" so * an application such as ntpd can build. */ if (token_table) { if (!rflag) { output_line("#undef yytname"); output_line("#define yytname yyname"); } } else { output_line("#if YYDEBUG"); } start_str_table("name"); j = 80; for (i = 0; i <= max + 1; ++i) { if ((s = symnam[i]) != 0) { if (s[0] == '"') { k = 7; while (*++s != '"') { ++k; if (*s == '\\') { k += 2; if (*++s == '\\') ++k; } } j += k; if (j > 80) { output_newline(); j = k; } fprintf(output_file, "\"\\\""); s = symnam[i]; while (*++s != '"') { if (*s == '\\') { fprintf(output_file, "\\\\"); if (*++s == '\\') fprintf(output_file, "\\\\"); else putc(*s, output_file); } else putc(*s, output_file); } fprintf(output_file, "\\\"\","); } else if (s[0] == '\'') { if (s[1] == '"') { j += 7; if (j > 80) { output_newline(); j = 7; } fprintf(output_file, "\"'\\\"'\","); } else { k = 5; while (*++s != '\'') { ++k; if (*s == '\\') { k += 2; if (*++s == '\\') ++k; } } j += k; if (j > 80) { output_newline(); j = k; } fprintf(output_file, "\"'"); s = symnam[i]; while (*++s != '\'') { if (*s == '\\') { fprintf(output_file, "\\\\"); if (*++s == '\\') fprintf(output_file, "\\\\"); else putc(*s, output_file); } else putc(*s, output_file); } fprintf(output_file, "'\","); } } else { k = (int)strlen(s) + 3; j += k; if (j > 80) { output_newline(); j = k; } putc('"', output_file); do { putc(*s, output_file); } while (*++s); fprintf(output_file, "\","); } } else { j += 2; if (j > 80) { output_newline(); j = 2; } fprintf(output_file, "0,"); } } end_table(); FREE(symnam); if (token_table) output_line("#if YYDEBUG"); start_str_table("rule"); for (i = 2; i < nrules; ++i) { fprintf(output_file, "\"%s :", symbol_name[rlhs[i]]); for (j = rrhs[i]; ritem[j] > 0; ++j) { s = symbol_name[ritem[j]]; if (s[0] == '"') { fprintf(output_file, " \\\""); while (*++s != '"') { if (*s == '\\') { if (s[1] == '\\') fprintf(output_file, "\\\\\\\\"); else fprintf(output_file, "\\\\%c", s[1]); ++s; } else putc(*s, output_file); } fprintf(output_file, "\\\""); } else if (s[0] == '\'') { if (s[1] == '"') fprintf(output_file, " '\\\"'"); else if (s[1] == '\\') { if (s[2] == '\\') fprintf(output_file, " '\\\\\\\\"); else fprintf(output_file, " '\\\\%c", s[2]); s += 2; while (*++s != '\'') putc(*s, output_file); putc('\'', output_file); } else fprintf(output_file, " '%c'", s[1]); } else fprintf(output_file, " %s", s); } fprintf(output_file, "\","); output_newline(); } end_table(); output_line("#endif"); } #if defined(YYBTYACC) static void output_backtracking_parser(FILE * fp) { putl_code(fp, "#undef YYBTYACC\n"); #if defined(YYBTYACC) if (backtrack) { putl_code(fp, "#define YYBTYACC 1\n"); putl_code(fp, "#define YYDEBUGSTR (yytrial ? YYPREFIX \"debug(trial)\" : YYPREFIX \"debug\")\n"); } else #endif { putl_code(fp, "#define YYBTYACC 0\n"); putl_code(fp, "#define YYDEBUGSTR YYPREFIX \"debug\"\n"); } } #endif static void output_pure_parser(FILE * fp) { putc_code(fp, '\n'); if (fp == code_file) ++outline; fprintf(fp, "#define YYPURE %d\n", pure_parser); putc_code(fp, '\n'); } #if defined(YY_NO_LEAKS) static void output_no_leaks(FILE * fp) { putc_code(fp, '\n'); if (fp == code_file) ++outline; fputs("#define YY_NO_LEAKS 1\n", fp); putc_code(fp, '\n'); } #endif static void output_trailing_text(void) { int c, last; FILE *in; if (line == 0) return; in = input_file; c = *cptr; if (c == '\n') { ++lineno; if ((c = getc(in)) == EOF) return; write_input_lineno(); putc_code(code_file, c); last = c; } else { write_input_lineno(); do { putc_code(code_file, c); } while ((c = *++cptr) != '\n'); putc_code(code_file, c); last = '\n'; } while ((c = getc(in)) != EOF) { putc_code(code_file, c); last = c; } if (last != '\n') { putc_code(code_file, '\n'); } write_code_lineno(code_file); } static void output_semantic_actions(void) { int c, last; int state; char line_state[20]; rewind(action_file); if ((c = getc(action_file)) == EOF) return; if (!lflag) { state = -1; sprintf(line_state, line_format, 1, ""); } last = c; putc_code(code_file, c); while ((c = getc(action_file)) != EOF) { /* * When writing the action file, we did not know the line-numbers in * the code-file, but wrote empty #line directives. Detect those and * replace with proper #line directives. */ if (!lflag && (last == '\n' || state >= 0)) { if (c == line_state[state + 1]) { ++state; if (line_state[state + 1] == '\0') { write_code_lineno(code_file); state = -1; } last = c; continue; } else { int n; for (n = 0; n <= state; ++n) putc_code(code_file, line_state[n]); state = -1; } } putc_code(code_file, c); last = c; } if (last != '\n') { putc_code(code_file, '\n'); } write_code_lineno(code_file); } static void output_parse_decl(FILE * fp) { putc_code(fp, '\n'); putl_code(fp, "/* compatibility with bison */\n"); putl_code(fp, "#ifdef YYPARSE_PARAM\n"); putl_code(fp, "/* compatibility with FreeBSD */\n"); putl_code(fp, "# ifdef YYPARSE_PARAM_TYPE\n"); putl_code(fp, "# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)\n"); putl_code(fp, "# else\n"); putl_code(fp, "# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)\n"); putl_code(fp, "# endif\n"); putl_code(fp, "#else\n"); puts_code(fp, "# define YYPARSE_DECL() yyparse("); puts_param_types(fp, parse_param, 0); putl_code(fp, ")\n"); putl_code(fp, "#endif\n"); } static void output_lex_decl(FILE * fp) { putc_code(fp, '\n'); putl_code(fp, "/* Parameters sent to lex. */\n"); putl_code(fp, "#ifdef YYLEX_PARAM\n"); if (pure_parser) { putl_code(fp, "# ifdef YYLEX_PARAM_TYPE\n"); #if defined(YYBTYACC) if (locations) { putl_code(fp, "# define YYLEX_DECL() yylex(YYSTYPE *yylval," " YYLTYPE *yylloc," " YYLEX_PARAM_TYPE YYLEX_PARAM)\n"); } else #endif { putl_code(fp, "# define YYLEX_DECL() yylex(YYSTYPE *yylval," " YYLEX_PARAM_TYPE YYLEX_PARAM)\n"); } putl_code(fp, "# else\n"); #if defined(YYBTYACC) if (locations) { putl_code(fp, "# define YYLEX_DECL() yylex(YYSTYPE *yylval," " YYLTYPE *yylloc," " void * YYLEX_PARAM)\n"); } else #endif { putl_code(fp, "# define YYLEX_DECL() yylex(YYSTYPE *yylval," " void * YYLEX_PARAM)\n"); } putl_code(fp, "# endif\n"); #if defined(YYBTYACC) if (locations) putl_code(fp, "# define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)\n"); else #endif putl_code(fp, "# define YYLEX yylex(&yylval, YYLEX_PARAM)\n"); } else { putl_code(fp, "# define YYLEX_DECL() yylex(void *YYLEX_PARAM)\n"); putl_code(fp, "# define YYLEX yylex(YYLEX_PARAM)\n"); } putl_code(fp, "#else\n"); if (pure_parser && lex_param) { #if defined(YYBTYACC) if (locations) puts_code(fp, "# define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLTYPE *yylloc, "); else #endif puts_code(fp, "# define YYLEX_DECL() yylex(YYSTYPE *yylval, "); puts_param_types(fp, lex_param, 0); putl_code(fp, ")\n"); #if defined(YYBTYACC) if (locations) puts_code(fp, "# define YYLEX yylex(&yylval, &yylloc, "); else #endif puts_code(fp, "# define YYLEX yylex(&yylval, "); puts_param_names(fp, lex_param, 0); putl_code(fp, ")\n"); } else if (pure_parser) { #if defined(YYBTYACC) if (locations) { putl_code(fp, "# define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLTYPE *yylloc)\n"); putl_code(fp, "# define YYLEX yylex(&yylval, &yylloc)\n"); } else #endif { putl_code(fp, "# define YYLEX_DECL() yylex(YYSTYPE *yylval)\n"); putl_code(fp, "# define YYLEX yylex(&yylval)\n"); } } else if (lex_param) { puts_code(fp, "# define YYLEX_DECL() yylex("); puts_param_types(fp, lex_param, 0); putl_code(fp, ")\n"); puts_code(fp, "# define YYLEX yylex("); puts_param_names(fp, lex_param, 0); putl_code(fp, ")\n"); } else { putl_code(fp, "# define YYLEX_DECL() yylex(void)\n"); putl_code(fp, "# define YYLEX yylex()\n"); } putl_code(fp, "#endif\n"); /* * Provide a prototype for yylex for the simplest case. This is done for * better compatibility with older yacc's, but can be a problem if someone * uses "static int yylex(void);" */ if (!pure_parser #if defined(YYBTYACC) && !backtrack #endif && !strcmp(symbol_prefix, "yy")) { putl_code(fp, "\n"); putl_code(fp, "#if !(defined(yylex) || defined(YYSTATE))\n"); putl_code(fp, "int YYLEX_DECL();\n"); putl_code(fp, "#endif\n"); } } static void output_error_decl(FILE * fp) { putc_code(fp, '\n'); putl_code(fp, "/* Parameters sent to yyerror. */\n"); putl_code(fp, "#ifndef YYERROR_DECL\n"); puts_code(fp, "#define YYERROR_DECL() yyerror("); #if defined(YYBTYACC) if (locations) puts_code(fp, "YYLTYPE *loc, "); #endif puts_param_types(fp, parse_param, 1); putl_code(fp, "const char *s)\n"); putl_code(fp, "#endif\n"); putl_code(fp, "#ifndef YYERROR_CALL\n"); puts_code(fp, "#define YYERROR_CALL(msg) yyerror("); #if defined(YYBTYACC) if (locations) puts_code(fp, "&yylloc, "); #endif puts_param_names(fp, parse_param, 1); putl_code(fp, "msg)\n"); putl_code(fp, "#endif\n"); } #if defined(YYBTYACC) static void output_yydestruct_decl(FILE * fp) { putc_code(fp, '\n'); putl_code(fp, "#ifndef YYDESTRUCT_DECL\n"); puts_code(fp, "#define YYDESTRUCT_DECL() " "yydestruct(const char *msg, int psymb, YYSTYPE *val"); #if defined(YYBTYACC) if (locations) puts_code(fp, ", YYLTYPE *loc"); #endif if (parse_param) { puts_code(fp, ", "); puts_param_types(fp, parse_param, 0); } putl_code(fp, ")\n"); putl_code(fp, "#endif\n"); putl_code(fp, "#ifndef YYDESTRUCT_CALL\n"); puts_code(fp, "#define YYDESTRUCT_CALL(msg, psymb, val"); #if defined(YYBTYACC) if (locations) puts_code(fp, ", loc"); #endif puts_code(fp, ") yydestruct(msg, psymb, val"); #if defined(YYBTYACC) if (locations) puts_code(fp, ", loc"); #endif if (parse_param) { puts_code(fp, ", "); puts_param_names(fp, parse_param, 0); } putl_code(fp, ")\n"); putl_code(fp, "#endif\n"); } static void output_initial_action(void) { if (initial_action) fprintf(code_file, "%s\n", initial_action); } static void output_yydestruct_impl(void) { int i; char *s, *destructor_code; putc_code(code_file, '\n'); putl_code(code_file, "/* Release memory associated with symbol. */\n"); putl_code(code_file, "#if ! defined YYDESTRUCT_IS_DECLARED\n"); putl_code(code_file, "static void\n"); putl_code(code_file, "YYDESTRUCT_DECL()\n"); putl_code(code_file, "{\n"); putl_code(code_file, " switch (psymb)\n"); putl_code(code_file, " {\n"); for (i = 2; i < nsyms; ++i) { if ((destructor_code = symbol_destructor[i]) != NULL) { ++outline; fprintf(code_file, "\tcase %d:\n", symbol_pval[i]); /* comprehend the number of lines in the destructor code */ for (s = destructor_code; (s = strchr(s, '\n')) != NULL; s++) ++outline; puts_code(code_file, destructor_code); putc_code(code_file, '\n'); write_code_lineno(code_file); putl_code(code_file, "\tbreak;\n"); FREE(destructor_code); } } putl_code(code_file, " }\n"); putl_code(code_file, "}\n"); putl_code(code_file, "#define YYDESTRUCT_IS_DECLARED 1\n"); putl_code(code_file, "#endif\n"); DO_FREE(symbol_destructor); } #endif static void free_itemsets(void) { core *cp, *next; FREE(state_table); for (cp = first_state; cp; cp = next) { next = cp->next; FREE(cp); } } static void free_shifts(void) { shifts *sp, *next; FREE(shift_table); for (sp = first_shift; sp; sp = next) { next = sp->next; FREE(sp); } } static void free_reductions(void) { reductions *rp, *next; FREE(reduction_table); for (rp = first_reduction; rp; rp = next) { next = rp->next; FREE(rp); } } static void output_externs(FILE * fp, const char *const section[]) { int i; const char *s; for (i = 0; (s = section[i]) != 0; ++i) { /* prefix non-blank lines that don't start with C pre-processor directives with 'extern ' */ if (*s && (*s != '#')) fputs("extern\t", fp); if (fp == code_file) ++outline; fprintf(fp, "%s\n", s); } } void output(void) { FILE *fp; free_itemsets(); free_shifts(); free_reductions(); output_code_lines(code_file, CODE_TOP); #if defined(YYBTYACC) output_backtracking_parser(output_file); if (rflag) output_backtracking_parser(code_file); #endif if (iflag) { write_code_lineno(code_file); ++outline; fprintf(code_file, "#include \"%s\"\n", externs_file_name); fp = externs_file; } else fp = code_file; output_prefix(fp); output_pure_parser(fp); #if defined(YY_NO_LEAKS) output_no_leaks(fp); #endif output_stored_text(fp); output_stype(fp); #if defined(YYBTYACC) if (locations) output_ltype(fp); #endif output_parse_decl(fp); output_lex_decl(fp); output_error_decl(fp); #if defined(YYBTYACC) if (destructor) output_yydestruct_decl(fp); #endif if (iflag || !rflag) { write_section(fp, xdecls); } if (iflag) { fprintf(externs_file, "\n"); output_yydebug(externs_file); output_externs(externs_file, global_vars); if (!pure_parser) output_externs(externs_file, impure_vars); if (dflag) { ++outline; fprintf(code_file, "#include \"%s\"\n", defines_file_name); } else output_defines(externs_file); } else { putc_code(code_file, '\n'); output_defines(code_file); } if (dflag) { start_defines_file(); output_defines(defines_file); end_defines_file(); } output_rule_data(); output_yydefred(); #if defined(YYBTYACC) output_accessing_symbols(); #endif output_actions(); free_parser(); output_debug(); if (rflag) { write_section(code_file, xdecls); output_YYINT_typedef(code_file); write_section(code_file, tables); } write_section(code_file, global_vars); if (!pure_parser) { write_section(code_file, impure_vars); } output_code_lines(code_file, CODE_REQUIRES); write_section(code_file, hdr_defs); if (!pure_parser) { write_section(code_file, hdr_vars); } output_code_lines(code_file, CODE_PROVIDES); output_code_lines(code_file, CODE_HEADER); output_trailing_text(); #if defined(YYBTYACC) if (destructor) output_yydestruct_impl(); #endif write_section(code_file, body_1); if (pure_parser) { write_section(code_file, body_vars); } write_section(code_file, body_2); if (pure_parser) { write_section(code_file, init_vars); } #if defined(YYBTYACC) if (initial_action) output_initial_action(); #endif write_section(code_file, body_3); output_semantic_actions(); write_section(code_file, trailer); } #ifdef NO_LEAKS void output_leaks(void) { DO_FREE(tally); DO_FREE(width); DO_FREE(order); } #endif byacc-20221106/VERSION0000644000000000000000000000001114331754017012575 0ustar rootroot20221106 byacc-20221106/NO_WARRANTY0000644000000000000000000000023404532510060013310 0ustar rootroot Berkeley Yacc is distributed with no warranty whatever. The author and any other contributors take no responsibility for the consequences of its use. byacc-20221106/verbose.c0000644000000000000000000001670214051573543013356 0ustar rootroot/* $Id: verbose.c,v 1.14 2021/05/20 23:57:23 tom Exp $ */ #include "defs.h" static void log_conflicts(void); static void log_unused(void); static void print_actions(int stateno); static void print_conflicts(int state); static void print_core(int state); static void print_gotos(int stateno); static void print_nulls(int state); static void print_shifts(action *p); static void print_state(int state); static void print_reductions(action *p, int defred2); static Value_t *null_rules; void verbose(void) { int i; if (!vflag) return; null_rules = TMALLOC(Value_t, nrules); NO_SPACE(null_rules); fprintf(verbose_file, "\f\n"); for (i = 0; i < nstates; i++) print_state(i); FREE(null_rules); if (nunused) log_unused(); if (SRtotal || RRtotal) log_conflicts(); fprintf(verbose_file, "\n\n%ld terminals, %ld nonterminals\n", (long)ntokens, (long)nvars); fprintf(verbose_file, "%ld grammar rules, %ld states\n", (long)(nrules - 2), (long)nstates); #if defined(YYBTYACC) { /* print out the grammar symbol # and parser internal symbol # for each symbol as an aide to writing the implementation for YYDESTRUCT_CALL() and YYSTYPE_TOSTRING() */ int maxtok = 0; fputs("\ngrammar parser grammar\n", verbose_file); fputs("symbol# value# symbol\n", verbose_file); for (i = 0; i < ntokens; ++i) { fprintf(verbose_file, " %5d %5d %s\n", i, symbol_value[i], symbol_name[i]); if (symbol_value[i] > maxtok) maxtok = symbol_value[i]; } for (i = ntokens; i < nsyms; ++i) fprintf(verbose_file, " %5d %5d %s\n", i, (maxtok + 1) + symbol_value[i] + 1, symbol_name[i]); } #endif } static void log_unused(void) { int i; Value_t *p; fprintf(verbose_file, "\n\nRules never reduced:\n"); for (i = 3; i < nrules; ++i) { if (!rules_used[i]) { fprintf(verbose_file, "\t%s :", symbol_name[rlhs[i]]); for (p = ritem + rrhs[i]; *p >= 0; ++p) fprintf(verbose_file, " %s", symbol_name[*p]); fprintf(verbose_file, " (%d)\n", i - 2); } } } static void log_conflicts(void) { int i; fprintf(verbose_file, "\n\n"); for (i = 0; i < nstates; i++) { if (SRconflicts[i] || RRconflicts[i]) { fprintf(verbose_file, "State %d contains ", i); if (SRconflicts[i] > 0) fprintf(verbose_file, "%ld shift/reduce conflict%s", (long)SRconflicts[i], PLURAL(SRconflicts[i])); if (SRconflicts[i] && RRconflicts[i]) fprintf(verbose_file, ", "); if (RRconflicts[i] > 0) fprintf(verbose_file, "%ld reduce/reduce conflict%s", (long)RRconflicts[i], PLURAL(RRconflicts[i])); fprintf(verbose_file, ".\n"); } } } static void print_state(int state) { if (state) fprintf(verbose_file, "\n\n"); if (SRconflicts[state] || RRconflicts[state]) print_conflicts(state); fprintf(verbose_file, "state %d\n", state); print_core(state); print_nulls(state); print_actions(state); } static void print_conflicts(int state) { int symbol, act, number; action *p; act = 0; /* not shift/reduce... */ number = -1; symbol = -1; for (p = parser[state]; p; p = p->next) { if (p->suppressed == 2) continue; if (p->symbol != symbol) { symbol = p->symbol; number = p->number; if (p->action_code == SHIFT) act = SHIFT; else act = REDUCE; } else if (p->suppressed == 1) { if (state == final_state && symbol == 0) { fprintf(verbose_file, "%d: shift/reduce conflict \ (accept, reduce %ld) on $end\n", state, (long)(p->number - 2)); } else { if (act == SHIFT) { fprintf(verbose_file, "%d: shift/reduce conflict \ (shift %ld, reduce %ld) on %s\n", state, (long)number, (long)(p->number - 2), symbol_name[symbol]); } else { fprintf(verbose_file, "%d: reduce/reduce conflict \ (reduce %ld, reduce %ld) on %s\n", state, (long)(number - 2), (long)(p->number - 2), symbol_name[symbol]); } } } } } static void print_core(int state) { int i; core *statep = state_table[state]; int k = statep->nitems; for (i = 0; i < k; i++) { int rule; Value_t *sp = ritem + statep->items[i]; Value_t *sp1 = sp; while (*sp >= 0) ++sp; rule = -(*sp); fprintf(verbose_file, "\t%s : ", symbol_name[rlhs[rule]]); for (sp = ritem + rrhs[rule]; sp < sp1; sp++) fprintf(verbose_file, "%s ", symbol_name[*sp]); putc('.', verbose_file); while (*sp >= 0) { fprintf(verbose_file, " %s", symbol_name[*sp]); sp++; } fprintf(verbose_file, " (%ld)\n", (long)(-2 - *sp)); } } static void print_nulls(int state) { action *p; Value_t i, j, k, nnulls; nnulls = 0; for (p = parser[state]; p; p = p->next) { if (p->action_code == REDUCE && (p->suppressed == 0 || p->suppressed == 1)) { i = p->number; if (rrhs[i] + 1 == rrhs[i + 1]) { for (j = 0; j < nnulls && i > null_rules[j]; ++j) continue; if (j == nnulls) { ++nnulls; null_rules[j] = i; } else if (i != null_rules[j]) { ++nnulls; for (k = (Value_t)(nnulls - 1); k > j; --k) null_rules[k] = null_rules[k - 1]; null_rules[j] = i; } } } } for (i = 0; i < nnulls; ++i) { j = null_rules[i]; fprintf(verbose_file, "\t%s : . (%ld)\n", symbol_name[rlhs[j]], (long)(j - 2)); } fprintf(verbose_file, "\n"); } static void print_actions(int stateno) { action *p; shifts *sp; if (stateno == final_state) fprintf(verbose_file, "\t$end accept\n"); p = parser[stateno]; if (p) { print_shifts(p); print_reductions(p, defred[stateno]); } sp = shift_table[stateno]; if (sp && sp->nshifts > 0) { int as = accessing_symbol[sp->shift[sp->nshifts - 1]]; if (ISVAR(as)) print_gotos(stateno); } } static void print_shifts(action *p) { int count; action *q; count = 0; for (q = p; q; q = q->next) { if (q->suppressed < 2 && q->action_code == SHIFT) ++count; } if (count > 0) { for (; p; p = p->next) { if (p->action_code == SHIFT && p->suppressed == 0) fprintf(verbose_file, "\t%s shift %ld\n", symbol_name[p->symbol], (long)p->number); #if defined(YYBTYACC) if (backtrack && p->action_code == SHIFT && p->suppressed == 1) fprintf(verbose_file, "\t%s [trial] shift %d\n", symbol_name[p->symbol], p->number); #endif } } } static void print_reductions(action *p, int defred2) { int anyreds; action *q; anyreds = 0; for (q = p; q; q = q->next) { if (q->action_code == REDUCE && q->suppressed < 2) { anyreds = 1; break; } } if (anyreds == 0) fprintf(verbose_file, "\t. error\n"); else { for (; p; p = p->next) { if (p->action_code == REDUCE && p->number != defred2) { int k = p->number - 2; if (p->suppressed == 0) fprintf(verbose_file, "\t%s reduce %d\n", symbol_name[p->symbol], k); #if defined(YYBTYACC) if (backtrack && p->suppressed == 1) fprintf(verbose_file, "\t%s [trial] reduce %d\n", symbol_name[p->symbol], k); #endif } } if (defred2 > 0) fprintf(verbose_file, "\t. reduce %d\n", defred2 - 2); } } static void print_gotos(int stateno) { int i; Value_t *to_state2; shifts *sp; putc('\n', verbose_file); sp = shift_table[stateno]; to_state2 = sp->shift; for (i = 0; i < sp->nshifts; ++i) { int k = to_state2[i]; int as = accessing_symbol[k]; if (ISVAR(as)) fprintf(verbose_file, "\t%s goto %d\n", symbol_name[as], k); } } byacc-20221106/symtab.c0000644000000000000000000000361212314416205013173 0ustar rootroot/* $Id: symtab.c,v 1.11 2014/03/26 00:17:09 Tom.Shields Exp $ */ #include "defs.h" /* TABLE_SIZE is the number of entries in the symbol table. */ /* TABLE_SIZE must be a power of two. */ #define TABLE_SIZE 1024 static bucket **symbol_table = 0; bucket *first_symbol; bucket *last_symbol; static int hash(const char *name) { const char *s; int c, k; assert(name && *name); s = name; k = *s; while ((c = *++s) != 0) k = (31 * k + c) & (TABLE_SIZE - 1); return (k); } bucket * make_bucket(const char *name) { bucket *bp; assert(name != 0); bp = TMALLOC(bucket, 1); NO_SPACE(bp); bp->link = 0; bp->next = 0; bp->name = TMALLOC(char, strlen(name) + 1); NO_SPACE(bp->name); bp->tag = 0; bp->value = UNDEFINED; bp->index = 0; bp->prec = 0; bp->class = UNKNOWN; bp->assoc = TOKEN; #if defined(YYBTYACC) bp->args = -1; bp->argnames = 0; bp->argtags = 0; bp->destructor = 0; #endif strcpy(bp->name, name); return (bp); } bucket * lookup(const char *name) { bucket *bp, **bpp; bpp = symbol_table + hash(name); bp = *bpp; while (bp) { if (strcmp(name, bp->name) == 0) return (bp); bpp = &bp->link; bp = *bpp; } *bpp = bp = make_bucket(name); last_symbol->next = bp; last_symbol = bp; return (bp); } void create_symbol_table(void) { int i; bucket *bp; symbol_table = TMALLOC(bucket *, TABLE_SIZE); NO_SPACE(symbol_table); for (i = 0; i < TABLE_SIZE; i++) symbol_table[i] = 0; bp = make_bucket("error"); bp->index = 1; bp->class = TERM; first_symbol = bp; last_symbol = bp; symbol_table[hash("error")] = bp; } void free_symbol_table(void) { FREE(symbol_table); symbol_table = 0; } void free_symbols(void) { bucket *p, *q; for (p = first_symbol; p; p = q) { q = p->next; FREE(p); } } byacc-20221106/README.BTYACC0000644000000000000000000005402012325422761013361 0ustar rootroot-- $Id: README.BTYACC,v 1.2 2014/04/22 08:18:57 Tom.Shields Exp $ The original README from btyacc is below. The backtracking enhancements to byacc have been merged into Thomas Dickey's byacc baseline. The %include and %define/%ifdef enhancements described below are not currently incorporated. The position management functionality ("YYPOSN", "yyposn", "YYREDUCEPOSNFUNC", "YYREDUCEPOSNFUNCARG" & "YYCALLREDUCEPOSN") is replaced by a bison-compatible "%locations" implementation. The memory management functionality ("YYDELETEVAL" & "YYDELETEPOSN") is replaced by a bison-compatible "%destructor" implementation. The detailed syntax error processing functionality ("YYERROR_DETAILED" & "yyerror_detailed()") is subsumed by the bison-compatible "yyerror()" implementation, as modified by the %parse-param and %locations directives. The debugging macro "YYDBPR()" in the parser skeleton is renamed "YYSTYPE_TOSTRING()". ------------------------------------------------------------------------------- BTYACC -- backtracking yacc =========================== BTYACC was created by Chris Dodd using ideas from many places and lots of code from the Berkeley Yacc distribution, which is a public domain yacc clone put together by the good folks at Berkeley. This code is distributed with NO WARRANTY and is public domain. It is certain to contain bugs, which you should report to: chrisd@collins.com. Vadim Maslov of Siber Systems considerably modified BTYACC to make it suitable for production environment. Several people have suggested bug fixes that were incorporated into BtYacc. See the README.BYACC files for more about Berkeley Yacc and other sources of info. http://www.siber.com/btyacc/ is the current home of BtYacc. It is provided courtesy of Siber Systems http://www.siber.com/. Version 3.0 changes ------------------- by Vadim Maslov Changes mostly occurred in btyaccpa.ske file that contains the parsing shift/reduce/backtrack algorithm. Version 3.0 innovations focus on: - text position computation and propagation, - industrial-strength error processing and recovery. ** Added mechanism for computing and propagating text position of tokens and non-terminals. Compilers often need to build AST trees such that every node in a tree can relate to the parsed program source it came from. The following applications are very likely to need this: - debuggers that show actual source of the debugged program, - source-to-source translators that want unchanged parts of the tree to generate the unchanged code. The new YYPOSN mechanism added in this version of BtYacc helps you in automating the text position computation and in assigning the computed text positions to the AST. This mechanism is successfully used in commercial parsers and source-to-source translators. In standard Yaccs every token and every non-terminal has an YYSTYPE semantic value attached to it. In this new version every token and every non-terminal also has an YYPOSN text position attached to it. YYPOSN is a user-defined type that can be anything and that has a meaning of text position attached to token or non-terminal. In addition to semantic value stack BtYacc now maintains text position stack. Behavior of the text position stack is similar to the behavior of the semantic value stack. If using text position mechanism, you need to define the following: YYPOSN Preprocessor variable that contains C/C++ type of the text position attached to every token and non-terminal. yyposn Global variable of type YYPOSN. The lexer must assign text position of the returned token to yyposn, just like it assigns semantic value of the returned token to yylval. YYREDUCEPOSNFUNC Preprocessor variable that points to function that is called after the grammar rule reduction to reduce text positions located on the stack. This function is called by BtYacc to reduce text positions. The function is called immediately after the regular rule reduction occurs. The function has the following prototype: void ReducePosn(YYPOSN &ret, YYPOSN *terms, YYSTYPE *term_vals, int term_no, int stk_pos, int yychar, YYPOSN &yyposn, UserType extra); The function arguments are: - ret Reference to the text position returned by the rule. The function must write the computed text position returned by the rule to ret. This is analogue of the $$ semantic value. - term_posns Array of the right-hand side rule components YYPOSN text positions. These are analogues of $1, $2, ..., $N in the text position world. - term_vals Array of the right-hand side (RHS) rule components YYSTYPE values. These are the $1,...,$N themselves. - term_no Number of the components in RHS of the reduced rule. Equal to size of arrays term_posns and term_vals. Also equal to N in $1,...,$N in the reduced rule. - stk_pos YYSTYPE/YYPOSN stack position before the reduction. - yychar Lookahead token that immediately follows the reduced RHS components. - yyposn YYPOSN of the token that immediately follows the reduced RHS components. - extra User-defined extra argument passed to ReducePosn. Typically this function extracts text positions from the right-hand side rule components and either assigns them to the returned $$ structure/tree or if no $$ value is returned, puts them into the ret text position from where it will be picked up by the later reduced rules. YYREDUCEPOSNFUNCARG Extra user-defined argument passed to the ReducePosn function. This argument can use any variables defined in btyaccpa.ske. ** Added code to btyaccpa.ske that automatically cleans up semantic semantic values and text positions of tokens and non-terminals that are discarded and deleted as a result of error processing. In the previous versions the discarded token and non-terminal semantic values were not cleaned that caused quite severe leaks. The only way to fix it was to add garbage collection to YYSTYPE class. Now BtYacc skeleton calls delete functions for semantic values and positions of the discarded tokens and non-terminals. You need to define the following functions that BtYacc calls when it needs to delete semantic value or text position. YYDELETEVAL User-defined function that is called by BtYacc to delete semantic value of the token or non-terminal. The user-defined function must have the prototype: void DeleteYYval(YYSTYPE v, int type); v is semantic value to delete, type is one of the following: 0 discarding token 1 discarding state 2 cleaning up stack when aborting YYDELETEPOSN User-defined function that is called by BtYacc to delete text position of the token or non-terminal. The user-defined function must have the prototype: void DeleteYYposn(YYPOSN p, int type); v is semantic value to delete, type is one of the following: 0 discarding token 1 discarding state 2 cleaning up stack when aborting ** User can define "detailed" syntax error processing function that reports an *exact* position of the token that caused the error. If you define preprocessor variable YYERROR_DETAILED in your grammar then you need define the following error processing function: void yyerror_detailed(char *text, int errt, YYSTYPE &errt_value, YYPOSN &errt_posn); It receives the following arguments: text Error message. errt Code of the token that caused the error. errt_value Value of the token that caused the error. errt_posn Text position of token that caused error. ** Dropped compatibility with C. Compatibility with C became increasingly difficult to maintain as new features were added to btyaccpa.ske. So we dropped it. If anybody wants to make the new version compatible with C, we would gladly accept the changes. Meanwhile we expect that you use C++ to write grammar actions and everything else in grammar files. Since C is (in a sense) subset of C++, your C-based grammar may work if you use C++ compiler to compile it. Version 3.0 bugs fixed ---------------------- Matthias Meixner fixed a bug: BtYacc does not correctly handle typenames, if one typename is a prefix of another one and if this type is used after the longer one. In this case BTYacc produces invalid code. Version 2.1 changes ------------------- by Vadim Maslov ** Added preprocessor statements to BtYacc that are similar in function and behavior to C/C++ preprocessor statements. These statements are used to: - Introduce modularity into a grammar by breaking it into several *.y files and assembling different grammars from the *.y modules using %include and %ifdef. - Have several versions of the same grammar by using %ifdef and $endif. - To include automatically generated grammar fragment. For instance, we use %include to include automatically generated list of tokens. Preprocessor statements are: %define Define preprocessor variable named . %ifdef If preprocessor variable named is defined by %define, then process the text from this %ifdef to the closing %endif. %endif Closing bracket for %ifdef preprocessor statement. Only one nesting level of %ifdef-%endif is allowed. %include Process contents of the file named . If is a relative name, it is looked up in a directory in which btyacc was started. Only one nesting level of %include is allowed. Version 2.0 changes ------------------- by Vadim Maslov ** Changed 16-bit short numbers to 32-bit int numbers in grammar tables, so that huge grammar tables (tables that are larger than 32768 elements) resulting from huge grammars (Cobol grammar, for instance) can work correctly. You need to have 32-bit integer to index table bigger than 32768 elements, 16-bit integer is not enough. The original BtYacc just generated non-working tables larger than 32768 elements without even notifying about the table overflow. ** Make error recovery work correctly when error happens while processing nested conflicts. Original BtYacc could infinitely cycle in certain situations that involved error recovery while in nested conflict. More detailed explanation: when we have nested conflicts (conflict that happens while trial-processing another conflict), it leads btyacc into NP-complete searching of conflict tree. The ultimate goal is YYVALID operator that selects a particular branch of that tree as a valid one. If no YYVALID is found on the tree, then error recovery takes over. The problem with this is that error recovery is started in the same state context that exists on the last surveyed branch of the conflict tree. Sometimes this last branch may be of zero length and it results in recovering to exactly the same state as existed before entering the conflict. BtYacc cycles then. We solved this problem by memorizing the longest path in the conflict tree while browsing it. If we ever get into error recovery, we restore state that existed on the longest path. Effectively we say: if we have an error, let us move forward as far as we possibly could while we were browsing the conflict tree. ** Introduce YYVALID_NESTED operation in addition to simply YYVALID. When we have a nested conflict (conflict while processing in trial mode for another conflict), we want to relate YYVALID to a particular level of conflict being in trial. Since we mostly anticipate only 2-level nested conflicts YYVALID_NESTED tells the parser to satisfy only the internal conflict. Therefore, in 1-level conflict situation YYVALID_NESTED acts like a regular YYVALID, but in 2-level conflict it is a no-op and the other YYVALID for outer conflict will be searched for. ** Improved handling of situation where /tmp directory is missing. Original btyacc just died quietly when /tmp directory was missing. We added code that states the problem explicitly. While on UNIX /tmp directory is always present, it may be missing on WIN32 systems, therefore diagnosing this situation is important. Version 1.0 changes: BackTracking ================================= by Chris Dodd BTYACC is a modified version of yacc that supports automatic backtracking and semantic disambiguation to parse ambiguous grammars, as well as syntactic sugar for inherited attributes (which tend to introduce conflicts). Whenever a btyacc generated parser runs into a shift-reduce or reduce-reduce error in the parse table, it remembers the current parse point (yacc stack and input stream state), and goes into trial parse mode. It then continues parsing, ignoring most rule actions. If it runs into an error (either through the parse table or through an action calling YYERROR), it backtracks to the most recent conflict point and tries a different alternative. If it finds a successful parse (reaches the end of the input or an action calls YYVALID), it backtracks to the point where it first entered trial parse mode, and continues with a full parse (executing all actions), following the path of the successful trial. Actions in btyacc come in two flavors -- {}-actions, which are only executed when not in trial mode, and []-actions which are executed regardless of mode. There are also inherited attributes, which look like arguments (they are enclosed in "()") and act like []-actions. What this buys you: * No more lexer feedback hack. In yacc grammars for C, a standard hack, know as the "lexer feedback hack" is used to find typedef names. The lexer uses semantic information to decide if any given identifier is a typedef-name or not and returns a special token. With btyacc, you no longer need to do this; the lexer should just always return an identifier. The btyacc grammar then needs a rule of the form: typename: ID [ if (!IsTypeName(LookupId($1))) YYERROR; ] While the hack works adequately well for parsing C, it becomes a nightmare when you try to parse something like C++, where treating an ID as a typedef becomes heavily dependent on context. * Easy disambiguation via simple ordering. Btyacc runs its trials via the rule "try shifting first, then try reducing by the order that the conflicting rules appear in the input file". This means you can deal with semantic a disambiguation rule like: [1] If it looks like a declaration it is, otherwise [2] If it looks like an expression it is, otherwise [3] it is a syntax error [Ellis&Stroustrup, Annotated C++ Reference Manual, p93] To deal with this, you need only put all the rules for declarations before the rules for expressions in the grammar file. * No extra cost if you do not use it. Backtracking is only triggered when the parse hits a shift/reduce or reduce/reduce conflict in the table. If you have no conflicts in your grammar, there is no extra cost, other than some extra code which will never be invoked. * C++ and ANSI C compatible parsers. The parsers produced by btyacc can be compiled with C++ correctly. If you "#define" YYSTYPE to be some C++ type with constructor and destructor, everything will work fine. My favorite is "#define YYSTYPE SmartPointer", where SmartPointer is a smart pointer type that does garbage collection on the pointed to objects. BTYACC was originally written to make it easy to write a C++ parser (my goal was to be able to use the grammar out of the back of the ARM with as few modifications as possible). Anyone who has ever looked at Jim Roskind public domain C++ yacc grammar, or the yacc-based grammar used in g++ knows how difficult this is. BTYACC is very useful for parsing any ambiguous grammar, particularly ones that come from trying to merge two (or more) complete grammars. Limitations of the backtracking: Currently, the generated parser does NO pruning of alternate parsing paths. To avoid an exponential explosion of possible paths (and parsing time), you need to manually tell the parser when it can throw away saved paths using YYVALID. In practice, this turns out to be fairly easy to do. A C++ parser (for example) can just put a [YYVALID;] after every complete declaration and statement rule, corresponding to pruning the backtracking state after seeing a ';' or '}' -- there will never be a situation in which it is useful to backtrack past either of these. Inherited attributes in btyacc: Inherited attributes look a lot like function arguments to non-terminals, which is what they end up being in a recursive descent parser, but NOT how they are implemented in btyacc. Basically they are just syntactic sugar for embedded semantic actions and $0, $-1, ... in normal yacc. btyacc gives you two big advantages besides just the syntax: 1. it does type checking on the inherited attributes, so you do not have to specify $0 and makes sure you give the correct number of arguments (inherited attributes) to every use of a non-terminal. 2. It "collapses" identical actions from that are produced from inherited attributes. This eliminates many potential reduce-reduce conflicts arising from the inherited attributes. You use inherited attributes by declaring the types of the attributes in the preamble with a type declaration and declaring names of the attributes on the lhs of the yacc rule. You can of course have more than one rule with the same lhs, and you can even give them different names in each, but the type and number must be the same. Here is a small example: /* lhs takes 2 inherited attributes */ %type lhs(, ) stuff(, ) %% lhs($i1, $i2) : { $$ = $i1 } | lhs($i1, $i2) stuff($1,$i2) { $$ = $2; } This is roughly equivalent to the following yacc code: lhs : { $$ = $-1; } | lhs [ $$ = $-1; ] [ $$ = $0; ] stuff { $$ = $4; } ; See the file "test/t2.y" for a longer and more complete example. At the current time, the start symbol cannot have any arguments. Variant parsers: Btyacc supports the -S flag to use a different parser skeleton, changing the way that the parser is called and used. The skeleton "push.skel" is included to produce a "passive" parser that you feed tokens to (rather than having the parser call a separate yylex routine). With push.skel, yyparse is defined as follows: int yyparse(int token, YYSTYPE yylval) You should call yyparse repeatedly with successive tokens of input. It returns 0 if more input is needed, 1 for a successful parse, and -1 for an unrecoverable parse error. Miscellaneous Features in ver. 1.0 ---------------------------------- by Chris Dodd The -r option has been implemented. The -r option tells Yacc to put the read-only tables in y.tab.c and the code and variables in y.code.c. Keith Bostic asked for this option so that :yyfix could be eliminated. The -l and -t options have been implemented. The -l option tells Yacc not to include #line directives in the code it produces. The -t option causes debugging code to be included in the compiled parser. The code for error recovery has been changed to implement the same algorithm as AT&T Yacc. There will still be differences in the way error recovery works because AT&T Yacc uses more default reductions than Berkeley Yacc. The environment variable TMPDIR determines the directory where temporary files will be created. If TMPDIR is defined, temporary files will be created in the directory whose pathname is the value of TMPDIR. By default, temporary files are created in /tmp. The keywords are now case-insensitive. For example, %nonassoc, %NONASSOC, %NonAssoc, and %nOnAsSoC are all equivalent. Commas and semicolons that are not part of C code are treated as commentary. Line-end comments, as in BCPL, are permitted. Line-end comments begin with // and end at the next end-of-line. Line-end comments are permitted in C code; they are converted to C comments on output. The form of y.output files has been changed to look more like those produced by AT&T Yacc. A new kind of declaration has been added. The form of the declaration is %ident string where string is a sequence of characters beginning with a double quote and ending with either a double quote or the next end-of-line, whichever comes first. The declaration will cause a #ident directive to be written near the start of the output file. If a parser has been compiled with debugging code, that code can be enabled by setting an environment variable. If the environment variable YYDEBUG is set to 0, debugging output is suppressed. If it is set to 1, debugging output is written to standard output. Building BtYacc --------------- by Chris Dodd and Vadim Maslov We used GCC and GNU make to compile BtYacc both on UNIX and WIN32 paltforms. You are welcome to try different combinations of makes and compilers. Most likely it will work, but it may require Makefile changes. There is no config script. Just type "make" and it should compile. AWK. If you want to change file btyaccpa.ske (backtracking parser skeleton), you will need awk to compile it into skeleton.c file. We used GNU AWK (gawk) version 3.0. It is known that using older versions of gawk may create problems in compilation, because older awks have problems with backslashes at the end of a line. For MSDOS, there a "makefile.dos" that should do the trick. Note: makefile.dos was not tested for a long time. The result of compilation should be a single executable called "btyacc" which you can install anywhere you like; it does not require any other files in the distribution to run. Legal Stuff ----------- by Chris Dodd and Vadim Maslov In English: BtYacc is freeware. BtYacc is distributed with no warranty whatsoever. The author and any other contributors take no responsibility for any and all consequences of its use. In Legalese: LIMITATION OF LIABILITY. NEITHER SIBER SYSTEMS NOR ANY OF ITS LICENSORS NOR ANY BTYACC CONTRIBUTOR SHALL BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES, OR DAMAGES FOR LOSS OF PROFITS, REVENUE, DATA OR DATA USE, CAUSED BY BTYACC AND INCURRED BY CUSTOMER OR ANY THIRD PARTY, WHETHER IN AN ACTION IN CONTRACT OR TORT, EVEN IF SIBER SYSTEMS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. byacc-20221106/makefile.in0000644000000000000000000000703314332020417013634 0ustar rootroot# $Id: makefile.in,v 1.25 2022/11/06 21:03:11 tom Exp $ # # UNIX template-makefile for Berkeley Yacc THIS = yacc #### Start of system configuration section. #### srcdir = @srcdir@ VPATH = @srcdir@ CC = @CC@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ transform = @program_transform_name@ DEFINES = EXTRA_CFLAGS = @EXTRA_CFLAGS@ CPPFLAGS = -I. -I$(srcdir) $(DEFINES) -DHAVE_CONFIG_H -DYYPATCH=`cat $(srcdir)/VERSION` @CPPFLAGS@ CFLAGS = @CFLAGS@ $(CPPFLAGS) $(EXTRA_CFLAGS) LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ AWK = @AWK@ CTAGS = @CTAGS@ ETAGS = @ETAGS@ FGREP = @FGREP@ LINT = @LINT@ LINTFLAGS = @LINT_OPTS@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ bindir = $(DESTDIR)@bindir@ mandir = $(DESTDIR)@mandir@/man1 manext = 1 testdir = $(srcdir)/test SKELETON = @SKELETON@ x = @EXEEXT@ o = .@OBJEXT@ #### End of system configuration section. #### SHELL = /bin/sh @SET_MAKE@ H_FILES = \ defs.h C_FILES = \ closure.c \ error.c \ graph.c \ lalr.c \ lr0.c \ main.c \ mkpar.c \ mstring.c \ output.c \ reader.c \ $(SKELETON).c \ symtab.c \ verbose.c \ warshall.c OBJS = \ closure$o \ error$o \ graph$o \ lalr$o \ lr0$o \ main$o \ mkpar$o \ mstring$o \ output$o \ reader$o \ $(SKELETON)$o \ symtab$o \ verbose$o \ warshall$o YACCPAR = \ btyaccpar.c \ yaccpar.c TRANSFORM_BIN = sed 's/$x$$//' |sed '$(transform)'|sed 's/$$/$x/' TRANSFORM_MAN = sed 's/$(manext)$$//'|sed '$(transform)'|sed 's/$$/$(manext)/' actual_bin = `echo $(THIS)$x | $(TRANSFORM_BIN)` actual_man = `echo $(THIS).$(manext)| $(TRANSFORM_MAN)` all : $(THIS)$x install: all installdirs $(INSTALL_PROGRAM) $(THIS)$x $(bindir)/$(actual_bin) - $(INSTALL_DATA) $(srcdir)/$(THIS).1 $(mandir)/$(actual_man) installdirs: mkdir -p $(bindir) - mkdir -p $(mandir) uninstall: - rm -f $(bindir)/$(actual_bin) - rm -f $(mandir)/$(actual_man) ################################################################################ .SUFFIXES : .c $o .i .skel .c$o: @RULE_CC@ @ECHO_CC@$(CC) -c $(CFLAGS) $< .c.i : @RULE_CC@ @ECHO_CC@$(CPP) -C $(CPPFLAGS) $*.c >$@ .skel.c : $(AWK) -f $(srcdir)/skel2c $*.skel > $@ ################################################################################ $(THIS)$x : $(OBJS) @ECHO_LD@$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $(OBJS) $(LIBS) mostlyclean : - rm -f core .nfs* *$o *.bak *.BAK *.out clean :: mostlyclean - rm -f $(THIS)$x distclean :: clean - rm -f config.log config.cache config.status config.h makefile man2html.tmp - rm -f $(testdir)/yacc/test-* $(testdir)/btyacc/test-* realclean :: distclean - rm -f tags TAGS sources : $(YACCPAR) maintainer-clean :: realclean rm -f $(YACCPAR) ################################################################################ check: $(THIS)$x @echo "** making $@" @FGREP="$(FGREP)" $(SHELL) $(testdir)/run_test.sh $(testdir) check_make: $(THIS)$x @echo "** making $@" @FGREP="$(FGREP)" $(SHELL) $(testdir)/run_make.sh $(testdir) check_lint: @echo "** making $@" @FGREP="$(FGREP)" $(SHELL) $(testdir)/run_lint.sh $(testdir) ################################################################################ tags: $(H_FILES) $(C_FILES) $(CTAGS) $(C_FILES) $(H_FILES) lint: $(C_FILES) $(LINT) $(LINTFLAGS) $(CPPFLAGS) $(C_FILES) @MAKE_UPPER_TAGS@TAGS: $(H_FILES) $(C_FILES) @MAKE_UPPER_TAGS@ $(ETAGS) $(C_FILES) $(H_FILES) depend: makedepend -- $(CPPFLAGS) -- $(C_FILES) $(OBJS) : defs.h makefile main$o \ $(SKELETON)$o : VERSION # DO NOT DELETE THIS LINE -- make depend depends on it. byacc-20221106/yaccpar.c0000644000000000000000000002775614104033603013331 0ustar rootroot/* This file generated automatically using * @Id: skel2c,v 1.4 2016/06/07 00:26:09 tom Exp @ */ /* @Id: yaccpar.skel,v 1.11 2021/06/19 20:45:25 tom Exp @ */ #include "defs.h" /* If the skeleton is changed, the banner should be changed so that */ /* the altered version can be easily distinguished from the original. */ /* */ /* The #defines included with the banner are there because they are */ /* useful in subsequent code. The macros #defined in the header or */ /* the body either are not useful outside of semantic actions or */ /* are conditional. */ const char *const banner[] = { "/* original parser id follows */", "/* yysccsid[] = \"@(#)yaccpar 1.9 (Berkeley) 02/21/93\" */", "/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */", "", "#define YYBYACC 1", CONCAT1("#define YYMAJOR ", YYMAJOR), CONCAT1("#define YYMINOR ", YYMINOR), #ifdef YYPATCH CONCAT1("#define YYPATCH ", YYPATCH), #endif "", "#define YYEMPTY (-1)", "#define yyclearin (yychar = YYEMPTY)", "#define yyerrok (yyerrflag = 0)", "#define YYRECOVERING() (yyerrflag != 0)", "#define YYENOMEM (-2)", "#define YYEOF 0", 0 }; const char *const xdecls[] = { "", "extern int YYPARSE_DECL();", 0 }; const char *const tables[] = { "extern YYINT yylhs[];", "extern YYINT yylen[];", "extern YYINT yydefred[];", "extern YYINT yydgoto[];", "extern YYINT yysindex[];", "extern YYINT yyrindex[];", "extern YYINT yygindex[];", "extern YYINT yytable[];", "extern YYINT yycheck[];", "", "#if YYDEBUG || defined(yytname)", "extern char *yyname[];", "#endif", "#if YYDEBUG", "extern char *yyrule[];", "#endif", 0 }; const char *const global_vars[] = { "", "#if YYDEBUG", "int yydebug;", "#endif", 0 }; const char *const impure_vars[] = { "", "int yyerrflag;", "int yychar;", "YYSTYPE yyval;", "YYSTYPE yylval;", "int yynerrs;", 0 }; const char *const hdr_defs[] = { "", "/* 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;", 0 }; const char *const hdr_vars[] = { "/* variables for the parser stack */", "static YYSTACKDATA yystack;", 0 }; const char *const body_vars[] = { " int yyerrflag;", " int yychar;", " YYSTYPE yyval;", " YYSTYPE yylval;", " int yynerrs;", "", " /* variables for the parser stack */", " YYSTACKDATA yystack;", 0 }; const char *const body_1[] = { "", "#if YYDEBUG", "#include /* needed for printf */", "#endif", "", "#include /* needed for malloc, etc */", "#include /* 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()", "{", 0 }; const char *const body_2[] = { " 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", "", 0 }; const char *const init_vars[] = { " memset(&yyval, 0, sizeof(yyval));", " memset(&yylval, 0, sizeof(yylval));", "", 0 }; const char *const body_3[] = { " /* yym is set below */", " /* yyn is set below */", " 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)", " {", " yychar = YYLEX;", " if (yychar < 0) yychar = YYEOF;", "#if YYDEBUG", " if (yydebug)", " {", " if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];", " printf(\"%sdebug: state %d, reading %d (%s)\\n\",", " YYPREFIX, yystate, yychar, yys);", " }", "#endif", " }", " if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&", " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 &&", " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)", " {", " yyn = yytable[yyn];", " goto yyreduce;", " }", " if (yyerrflag != 0) goto yyinrecovery;", "", " YYERROR_CALL(\"syntax error\");", "", " goto yyerrlab; /* redundant goto avoids 'unused label' warning */", "yyerrlab:", " ++yynerrs;", "", "yyinrecovery:", " if (yyerrflag < 3)", " {", " yyerrflag = 3;", " for (;;)", " {", " if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&", " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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)", " {", " if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];", " 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 > 0)", " yyval = yystack.l_mark[1-yym];", " else", " memset(&yyval, 0, sizeof yyval);", "", " switch (yyn)", " {", 0 }; const char *const trailer[] = { " }", " 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)", " {", " yychar = YYLEX;", " if (yychar < 0) yychar = YYEOF;", "#if YYDEBUG", " if (yydebug)", " {", " if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];", " printf(\"%sdebug: state %d, reading %d (%s)\\n\",", " YYPREFIX, YYFINAL, yychar, yys);", " }", "#endif", " }", " if (yychar == YYEOF) goto yyaccept;", " goto yyloop;", " }", " if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&", " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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);", "}", 0 }; void write_section(FILE * fp, const char *const section[]) { int i; const char *s; for (i = 0; (s = section[i]) != 0; ++i) { if (fp == code_file) ++outline; fprintf(fp, "%s\n", s); } } byacc-20221106/yacc.10000644000000000000000000003242514331764704012550 0ustar rootroot.\" $Id: yacc.1,v 1.42 2022/11/06 17:07:16 tom Exp $ .\" .\" .TH YACC 1 "July\ 15,\ 1990" .\" .UC 6 .ds N Yacc .ds n yacc .de Ex .RS +7 .PP .nf .ft CW .. .de Ee .fi .ft R .RE .. .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds AQ \(aq .el .ds AQ ' .ie \n(.g .ds `` \(lq .el .ds `` `` .ie \n(.g .ds '' \(rq .el .ds '' '' .\" Bulleted paragraph .de bP .ie n .IP \(bu 4 .el .IP \(bu 2 .. .TH YACC 1 "November 6, 2022" "Berkeley Yacc" "User Commands" .SH NAME \*N \- an LALR(1) parser generator .SH SYNOPSIS .B \*n [ \-BdghilLPrtvVy ] [ \-b .I file_prefix .B ] [ \-H .I defines_file .B ] [ \-o .I output_file .B ] [ \-p .I symbol_prefix .B ] .I filename .SH DESCRIPTION .B \*N reads the grammar specification in the file .I filename and generates an LALR(1) parser for it. The parsers consist of a set of LALR(1) parsing tables and a driver routine written in the C programming language. .B \*N normally writes the parse tables and the driver routine to the file .IR y.tab.c . .PP The following options are available: .TP 5 \fB\-b \fIfile_prefix\fR The .B \-b option changes the prefix prepended to the output file names to the string denoted by .I file_prefix. The default prefix is the character .I y. .TP .B \-B create a backtracking parser (compile-time configuration for \fBbtyacc\fP). .TP .B \-d causes the header file .B y.tab.h to be written. It contains #define's for the token identifiers. .TP .B \-h print a usage message to the standard error. .TP \fB\-H \fIdefines_file\fR causes #define's for the token identifiers to be written to the given \fIdefines_file\fP rather than the \fBy.tab.h\fP file used by the \fB\-d\fP option. .TP .B \-g The .B \-g option causes a graphical description of the generated LALR(1) parser to be written to the file .B y.dot in graphviz format, ready to be processed by .BR dot (1). .TP .B \-i The \fB\-i\fR option causes a supplementary header file .B y.tab.i to be written. It contains extern declarations and supplementary #define's as needed to map the conventional \fIyacc\fP \fByy\fP-prefixed names to whatever the \fB\-p\fP option may specify. The code file, e.g., \fBy.tab.c\fP is modified to #include this file as well as the \fBy.tab.h\fP file, enforcing consistent usage of the symbols defined in those files. .IP The supplementary header file makes it simpler to separate compilation of lex- and yacc-files. .TP .B \-l If the .B \-l option is not specified, .B \*n will insert \fI#line\fP directives in the generated code. The \fI#line\fP directives let the C compiler relate errors in the generated code to the user's original code. If the \fB\-l\fR option is specified, .B \*n will not insert the \fI#line\fP directives. \&\fI#line\fP directives specified by the user will be retained. .TP .B \-L enable position processing, e.g., \*(``%locations\*('' (compile-time configuration for \fBbtyacc\fP). .TP \fB\-o \fIoutput_file\fR specify the filename for the parser file. If this option is not given, the output filename is the file prefix concatenated with the file suffix, e.g., \fBy.tab.c\fP. This overrides the \fB\-b\fP option. .TP \fB\-p \fIsymbol_prefix\fR The .B \-p option changes the prefix prepended to yacc-generated symbols to the string denoted by .I symbol_prefix. The default prefix is the string .B yy. .TP .B \-P create a reentrant parser, e.g., \*(``%pure\-parser\*(''. .TP .B \-r The .B \-r option causes .B \*n to produce separate files for code and tables. The code file is named .IR y.code.c , and the tables file is named .IR y.tab.c . The prefix \*(``\fIy.\fP\*('' can be overridden using the \fB\-b\fP option. .TP .B \-s suppress \*(``\fB#define\fP\*('' statements generated for string literals in a \*(``\fB%token\fP\*('' statement, to more closely match original \fByacc\fP behavior. .IP Normally when \fB\*n\fP sees a line such as .Ex %token OP_ADD "ADD" .Ee .IP it notices that the quoted \*(``ADD\*('' is a valid C identifier, and generates a #define not only for OP_ADD, but for ADD as well, e.g., .Ex #define OP_ADD 257 .br #define ADD 258 .Ee .IP The original \fByacc\fP does not generate the second \*(``\fB#define\fP\*(''. The \fB\-s\fP option suppresses this \*(``\fB#define\fP\*(''. .IP POSIX (IEEE 1003.1 2004) documents only names and numbers for \*(``\fB%token\fP\*('', though original \fByacc\fP and bison also accept string literals. .TP .B \-t The .B \-t option changes the preprocessor directives generated by .B \*n so that debugging statements will be incorporated in the compiled code. .IP \fB\*N\fR sends debugging output to the standard output (compatible with both the original \fByacc\fP and \fBbtyacc\fP), while \fBbtyacc\fP writes debugging output to the standard error (like \fBbison\fP). .TP .B \-v The .B \-v option causes a human-readable description of the generated parser to be written to the file .I y.output. .TP .B \-V print the version number to the standard output. .TP .B \-y \fB\*n\fP ignores this option, which bison supports for ostensible POSIX compatibility. .PP The \fIfilename\fP parameter is not optional. However, \fB\*n\fP accepts a single \*(``\-\*('' to read the grammar from the standard input. A double \*(``\-\-\*('' marker denotes the end of options. A single \fIfilename\fP parameter is expected after a \*(``\-\-\*('' marker. .SH EXTENSIONS .B \*N provides some extensions for compatibility with bison and other implementations of yacc. It accepts several \fIlong options\fP which have equivalents in \*n. The \fB%destructor\fP and \fB%locations\fP features are available only if \fB\*n\fP has been configured and compiled to support the back-tracking (\fBbtyacc\fP) functionality. The remaining features are always available: .TP \fB %code\fP \fIkeyword\fP { \fIcode\fP } Adds the indicated source \fIcode\fP at a given point in the output file. The optional \fIkeyword\fP tells \fB\*n\fP where to insert the \fIcode\fP: .RS 7 .TP 5 \fBtop\fP just after the version-definition in the generated code-file. .TP 5 \fBrequires\fP just after the declaration of public parser variables. If the \fB\-d\fP option is given, the code is inserted at the beginning of the defines-file. .TP 5 \fBprovides\fP just after the declaration of private parser variables. If the \fB\-d\fP option is given, the code is inserted at the end of the defines-file. .RE .IP If no \fIkeyword\fP is given, the code is inserted at the beginning of the section of code copied verbatim from the source file. Multiple \fB%code\fP directives may be given; \fB\*n\fP inserts those into the corresponding code- or defines-file in the order that they appear in the source file. .TP \fB %debug\fP This has the same effect as the \*(``\-t\*('' command-line option. .TP \fB %destructor\fP { \fIcode\fP } \fIsymbol+\fP defines code that is invoked when a symbol is automatically discarded during error recovery. This code can be used to reclaim dynamically allocated memory associated with the corresponding semantic value for cases where user actions cannot manage the memory explicitly. .IP On encountering a parse error, the generated parser discards symbols on the stack and input tokens until it reaches a state that will allow parsing to continue. This error recovery approach results in a memory leak if the \fBYYSTYPE\fP value is, or contains, pointers to dynamically allocated memory. .IP The bracketed \fIcode\fP is invoked whenever the parser discards one of the symbols. Within \fIcode\fP, \*(``\fB$$\fP\*('' or \*(``\fB$<\fItag\fB>$\fR\*('' designates the semantic value associated with the discarded symbol, and \*(``\fB@$\fP\*('' designates its location (see \fB%locations\fP directive). .IP A per-symbol destructor is defined by listing a grammar symbol in \fIsymbol+\fP. A per-type destructor is defined by listing a semantic type tag (e.g., \*(``\*('') in \fIsymbol+\fP; in this case, the parser will invoke \fIcode\fP whenever it discards any grammar symbol that has that semantic type tag, unless that symbol has its own per-symbol destructor. .IP Two categories of default destructor are supported that are invoked when discarding any grammar symbol that has no per-symbol and no per-type destructor: .RS .bP the code for \*(``\fB<*>\fP\*('' is used for grammar symbols that have an explicitly declared semantic type tag (via \*(``\fB%type\fP\*(''); .bP the code for \*(``\fB<>\fP\*('' is used for grammar symbols that have no declared semantic type tag. .RE .TP \fB %empty\fP ignored by \fB\*n\fP. .TP \fB %expect\fP \fInumber\fP tells \fB\*n\fP the expected number of shift/reduce conflicts. That makes it only report the number if it differs. .TP \fB %expect\-rr\fP \fInumber\fP tell \fB\*n\fP the expected number of reduce/reduce conflicts. That makes it only report the number if it differs. This is (unlike bison) allowable in LALR parsers. .TP \fB %locations\fP tells \fB\*n\fP to enable management of position information associated with each token, provided by the lexer in the global variable \fByylloc\fP, similar to management of semantic value information provided in \fByylval\fP. .IP As for semantic values, locations can be referenced within actions using \fB@$\fP to refer to the location of the left hand side symbol, and \fB@\fIN\fR (\fIN\fP an integer) to refer to the location of one of the right hand side symbols. Also as for semantic values, when a rule is matched, a default action is used the compute the location represented by \fB@$\fP as the beginning of the first symbol and the end of the last symbol in the right hand side of the rule. This default computation can be overridden by explicit assignment to \fB@$\fP in a rule action. .IP The type of \fByylloc\fP is \fBYYLTYPE\fP, which is defined by default as: .Ex typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; } YYLTYPE; .Ee .IP \fBYYLTYPE\fP can be redefined by the user (\fBYYLTYPE_IS_DEFINED\fP must be defined, to inhibit the default) in the declarations section of the specification file. As in bison, the macro \fBYYLLOC_DEFAULT\fP is invoked each time a rule is matched to calculate a position for the left hand side of the rule, before the associated action is executed; this macro can be redefined by the user. .IP This directive adds a \fBYYLTYPE\fP parameter to \fByyerror()\fP. If the \fB%pure\-parser\fP directive is present, a \fBYYLTYPE\fP parameter is added to \fByylex()\fP calls. .TP \fB %lex\-param\fP { \fIargument-declaration\fP } By default, the lexer accepts no parameters, e.g., \fByylex()\fP. Use this directive to add parameter declarations for your customized lexer. .TP \fB %parse\-param\fP { \fIargument-declaration\fP } By default, the parser accepts no parameters, e.g., \fByyparse()\fP. Use this directive to add parameter declarations for your customized parser. .TP \fB %pure\-parser\fP Most variables (other than \fByydebug\fP and \fByynerrs\fP) are allocated on the stack within \fByyparse\fP, making the parser reasonably reentrant. .TP \fB %token\-table\fP Make the parser's names for tokens available in the \fByytname\fP array. However, .B \*n does not predefine \*(``$end\*('', \*(``$error\*('' or \*(``$undefined\*('' in this array. .SH PORTABILITY According to Robert Corbett, .Ex Berkeley Yacc is an LALR(1) parser generator. Berkeley Yacc has been made as compatible as possible with AT&T Yacc. Berkeley Yacc can accept any input specification that conforms to the AT&T Yacc documentation. Specifications that take advantage of undocumented features of AT&T Yacc will probably be rejected. .Ee .PP The rationale in .Ex http://pubs.opengroup.org/onlinepubs/9699919799/utilities/yacc.html .Ee .PP documents some features of AT&T yacc which are no longer required for POSIX compliance. .PP That said, you may be interested in reusing grammar files with some other implementation which is not strictly compatible with AT&T yacc. For instance, there is bison. Here are a few differences: .bP \fBYacc\fP accepts an equals mark preceding the left curly brace of an action (as in the original grammar file \fBftp.y\fP): .Ex | STAT CRLF = { statcmd(); } .Ee .bP \fBYacc\fP and bison emit code in different order, and in particular bison makes forward reference to common functions such as yylex, yyparse and yyerror without providing prototypes. .bP Bison's support for \*(``%expect\*('' is broken in more than one release. For best results using bison, delete that directive. .bP Bison has no equivalent for some of \fB\*n\fP's command-line options, relying on directives embedded in the grammar file. .bP Bison's \*(``\fB\-y\fP\*('' option does not affect bison's lack of support for features of AT&T yacc which were deemed obsolescent. .bP \fBYacc\fP accepts multiple parameters with \fB%lex\-param\fP and \fB%parse\-param\fP in two forms .Ex {type1 name1} {type2 name2} ... {type1 name1, type2 name2 ...} .Ee .IP Bison accepts the latter (though undocumented), but depending on the release may generate bad code. .bP Like bison, \fB\*n\fP will add parameters specified via \fB%parse\-param\fP to \fByyparse\fP, \fByyerror\fP and (if configured for back-tracking) to the destructor declared using \fB%destructor\fP. Bison puts the additional parameters \fIfirst\fP for \fByyparse\fP and \fByyerror\fP but \fIlast\fP for destructors. \fBYacc\fP matches this behavior. . .SH DIAGNOSTICS If there are rules that are never reduced, the number of such rules is reported on standard error. If there are any LALR(1) conflicts, the number of conflicts is reported on standard error. byacc-20221106/config_h.in0000644000000000000000000000550314030121350013624 0ustar rootroot/* config_h.in. Generated automatically from configure.in by autoheader. */ /* Define to noreturn-attribute for gcc */ #undef GCC_NORETURN /* Define to 1 if the compiler supports gcc-like printf attribute. */ #undef GCC_PRINTF /* Define to printf-attribute for gcc */ #undef GCC_PRINTFLIKE /* Define to 1 if the compiler supports gcc-like scanf attribute. */ #undef GCC_SCANF /* Define to sscanf-attribute for gcc */ #undef GCC_SCANFLIKE /* Define to unused-attribute for gcc */ #undef GCC_UNUSED /* Define if you have the header file. */ #undef HAVE_FCNTL_H /* Define if you have the `getopt' function. */ #undef HAVE_GETOPT /* Define if you have the header file. */ #undef HAVE_GETOPT_H /* Define to 1 if getopt variables are declared in header */ #undef HAVE_GETOPT_HEADER /* Define if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if you have the `dbmalloc' library (-ldbmalloc). */ #undef HAVE_LIBDBMALLOC /* Define if you have the `dmalloc' library (-ldmalloc). */ #undef HAVE_LIBDMALLOC /* Define if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if mkstemp() is available and working. */ #undef HAVE_MKSTEMP /* Define if you have the header file. */ #undef HAVE_STDINT_H /* Define if you have the header file. */ #undef HAVE_STDLIB_H /* Define if header is available and working */ #undef HAVE_STDNORETURN_H /* Define if you have the header file. */ #undef HAVE_STRINGS_H /* Define if you have the header file. */ #undef HAVE_STRING_H /* Define if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define if you have the header file. */ #undef HAVE_UNISTD_H /* Define if you have the `vsnprintf' function. */ #undef HAVE_VSNPRINTF /* Define to maximum table size (default: 32500) */ #undef MAXTABLE /* Define to 1 if filesystem supports mixed-case filenames. */ #undef MIXEDCASE_FILENAMES /* Define to 1 if we must include getopt.h */ #undef NEED_GETOPT_H /* Define to 1 if you want to perform memory-leak testing. */ #undef NO_LEAKS /* Define if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define if C11 _Noreturn keyword is supported */ #undef STDC_NORETURN /* Define to the system name. */ #undef SYSTEM_NAME /* "Define to 1 if you want to use dbmalloc for testing." */ #undef USE_DBMALLOC /* "Define to 1 if you want to use dmalloc for testing." */ #undef USE_DMALLOC /* "Define to 1 if you want to use valgrind for testing." */ #undef USE_VALGRIND /* Define to 1 to enable backtracking extension */ #undef YYBTYACC /* Define to 1 if you want to perform memory-leak testing. */ #undef YY_NO_LEAKS /* Define to `int' if does not define. */ #undef mode_t byacc-20221106/README0000644000000000000000000000257310031605145012412 0ustar rootroot-- $Id: README,v 1.2 2004/03/28 17:24:53 tom Exp $ The original README is below. I've updated this version of Berkeley Yacc to make it ANSI C compliant - Thomas Dickey ------------------------------------------------------------------------------- Berkeley Yacc is an LALR(1) parser generator. Berkeley Yacc has been made as compatible as possible with AT&T Yacc. Berkeley Yacc can accept any input specification that conforms to the AT&T Yacc documentation. Specifications that take advantage of undocumented features of AT&T Yacc will probably be rejected. Berkeley Yacc is distributed with no warranty whatever. The code is certain to contain errors. Neither the author nor any contributor takes responsibility for any consequences of its use. Berkeley Yacc is in the public domain. The data structures and algorithms used in Berkeley Yacc are all either taken from documents available to the general public or are inventions of the author. Anyone may freely distribute source or binary forms of Berkeley Yacc whether unchanged or modified. Distributers may charge whatever fees they can obtain for Berkeley Yacc. Programs generated by Berkeley Yacc may be distributed freely. Please report bugs to robert.corbett@eng.Sun.COM Include a small example if possible. Please include the banner string from skeleton.c with the bug report. Do not expect rapid responses. byacc-20221106/defs.h0000644000000000000000000003546614332025326012640 0ustar rootroot/* $Id: defs.h,v 1.71 2022/11/06 21:44:54 tom Exp $ */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #if defined(__cplusplus) /* __cplusplus, etc. */ #define class myClass #endif #define YYMAJOR 2 #define YYMINOR 0 #define CONCAT(first,second) first #second #define CONCAT1(string,number) CONCAT(string, number) #define CONCAT2(first,second) #first "." #second #ifdef YYPATCH #define VSTRING(a,b) CONCAT2(a,b) CONCAT1(" ",YYPATCH) #else #define VSTRING(a,b) CONCAT2(a,b) #endif #define VERSION VSTRING(YYMAJOR, YYMINOR) /* machine-dependent definitions: */ /* MAXCHAR is the largest unsigned character value */ /* MAXTABLE is the maximum table size */ /* YYINT is the smallest C integer type that can be */ /* used to address a table of size MAXTABLE */ /* MAXYYINT is the largest value of a YYINT */ /* MINYYINT is the most negative value of a YYINT */ /* BITS_PER_WORD is the number of bits in a C unsigned */ /* WORDSIZE computes the number of words needed to */ /* store n bits */ /* BIT returns the value of the n-th bit starting */ /* from r (0-indexed) */ /* SETBIT sets the n-th bit starting from r */ #define MAXCHAR UCHAR_MAX #ifndef MAXTABLE #define MAXTABLE INT_MAX #endif #if MAXTABLE <= SHRT_MAX #define YYINT short #define MAXYYINT SHRT_MAX #define MINYYINT SHRT_MIN #elif MAXTABLE <= INT_MAX #define YYINT int #define MAXYYINT INT_MAX #define MINYYINT INT_MIN #elif MAXTABLE <= LONG_MAX #define YYINT long #define MAXYYINT LONG_MAX #define MINYYINT LONG_MIN #else #error "MAXTABLE is too large for this machine architecture!" #endif #define BITS_PER_WORD ((int) sizeof (unsigned) * CHAR_BIT) #define WORDSIZE(n) (((n)+(BITS_PER_WORD-1))/BITS_PER_WORD) #define BIT(r, n) ((((r)[(n)/BITS_PER_WORD])>>((n)&(BITS_PER_WORD-1)))&1) #define SETBIT(r, n) ((r)[(n)/BITS_PER_WORD]|=((unsigned)1<<((n)&(BITS_PER_WORD-1)))) /* character names */ #define NUL '\0' /* the null character */ #define NEWLINE '\n' /* line feed */ #define SP ' ' /* space */ #define BS '\b' /* backspace */ #define HT '\t' /* horizontal tab */ #define VT '\013' /* vertical tab */ #define CR '\r' /* carriage return */ #define FF '\f' /* form feed */ #define QUOTE '\'' /* single quote */ #define DOUBLE_QUOTE '\"' /* double quote */ #define BACKSLASH '\\' /* backslash */ #define UCH(c) (unsigned char)(c) /* defines for constructing filenames */ #if defined(VMS) #define CODE_SUFFIX "_code.c" #define DEFINES_SUFFIX "_tab.h" #define EXTERNS_SUFFIX "_tab.i" #define OUTPUT_SUFFIX "_tab.c" #else #define CODE_SUFFIX ".code.c" #define DEFINES_SUFFIX ".tab.h" #define EXTERNS_SUFFIX ".tab.i" #define OUTPUT_SUFFIX ".tab.c" #endif #define VERBOSE_SUFFIX ".output" #define GRAPH_SUFFIX ".dot" /* keyword codes */ typedef enum { TOKEN = 0 ,LEFT ,RIGHT ,NONASSOC ,MARK ,TEXT ,TYPE ,START ,UNION ,IDENT /* trivial bison "extensions" which have POSIX equivalents */ ,NONPOSIX_DEBUG /* other bison "extensions", some useful */ ,ERROR_VERBOSE ,EXPECT ,EXPECT_RR ,LEX_PARAM ,PARSE_PARAM ,POSIX_YACC ,PURE_PARSER ,TOKEN_TABLE ,XCODE #if defined(YYBTYACC) ,DESTRUCTOR ,INITIAL_ACTION ,LOCATIONS #endif } KEY_CASES; /* symbol classes */ typedef enum { UNKNOWN = 0 ,TERM ,NONTERM ,ACTION ,ARGUMENT } SYM_CASES; /* the undefined value */ #define UNDEFINED (-1) /* action codes */ #define SHIFT 1 #define REDUCE 2 /* character macros */ #define IS_NAME1(c) (isalpha(UCH(c)) || (c) == '_' || (c) == '$') #define IS_NAME2(c) (isalnum(UCH(c)) || (c) == '_' || (c) == '$') #define IS_IDENT(c) (isalnum(UCH(c)) || (c) == '_' || (c) == '.' || (c) == '$') #define IS_OCTAL(c) ((c) >= '0' && (c) <= '7') /* symbol macros */ #define ISTOKEN(s) ((s) < start_symbol) #define ISVAR(s) ((s) >= start_symbol) /* storage allocation macros */ #define CALLOC(k,n) (calloc((size_t)(k),(size_t)(n))) #define FREE(x) (free((char*)(x))) #define MALLOC(n) (malloc((size_t)(n))) #define TCMALLOC(t,n) ((t*) calloc((size_t)(n), sizeof(t))) #define TMALLOC(t,n) ((t*) malloc((size_t)(n) * sizeof(t))) #define NEW(t) ((t*)allocate(sizeof(t))) #define NEW2(n,t) ((t*)allocate(((size_t)(n)*sizeof(t)))) #define REALLOC(p,n) (realloc((char*)(p),(size_t)(n))) #define TREALLOC(t,p,n) ((t*)realloc((char*)(p), (size_t)(n) * sizeof(t))) #define DO_FREE(x) if (x) { FREE(x); x = 0; } #define NO_SPACE(p) if (p == 0) no_space(); assert(p != 0) /* messages */ #define PLURAL(n) ((n) > 1 ? "s" : "") /* * Features which depend indirectly on the btyacc configuration, but are not * essential. */ #if defined(YYBTYACC) #define USE_HEADER_GUARDS 1 #else #define USE_HEADER_GUARDS 0 #endif typedef char Assoc_t; typedef char Class_t; typedef YYINT Index_t; typedef YYINT Value_t; /* the structure of a symbol table entry */ typedef struct bucket bucket; struct bucket { struct bucket *link; struct bucket *next; char *name; char *tag; #if defined(YYBTYACC) char **argnames; char **argtags; int args; char *destructor; #endif Value_t value; Index_t index; Value_t prec; Class_t class; Assoc_t assoc; }; /* the structure of the LR(0) state machine */ typedef struct core core; struct core { struct core *next; struct core *link; Value_t number; Value_t accessing_symbol; Value_t nitems; Value_t items[1]; }; /* the structure used to record shifts */ typedef struct shifts shifts; struct shifts { struct shifts *next; Value_t number; Value_t nshifts; Value_t shift[1]; }; /* the structure used to store reductions */ typedef struct reductions reductions; struct reductions { struct reductions *next; Value_t number; Value_t nreds; Value_t rules[1]; }; /* the structure used to represent parser actions */ typedef struct action action; struct action { struct action *next; Value_t symbol; Value_t number; Value_t prec; char action_code; Assoc_t assoc; char suppressed; }; /* the structure used to store parse/lex parameters */ typedef struct param param; struct param { struct param *next; char *name; /* parameter name */ char *type; /* everything before parameter name */ char *type2; /* everything after parameter name */ }; /* global variables */ extern char dflag2; extern char dflag; extern char gflag; extern char iflag; extern char lflag; extern char rflag; extern char sflag; extern char tflag; extern char vflag; extern const char *symbol_prefix; extern const char *myname; extern char *cptr; extern char *line; extern int lineno; extern int outline; extern int exit_code; extern int pure_parser; extern int token_table; extern int error_verbose; #if defined(YYBTYACC) extern int locations; extern int backtrack; extern int destructor; extern char *initial_action; #endif extern const char *const banner[]; extern const char *const xdecls[]; extern const char *const tables[]; extern const char *const global_vars[]; extern const char *const impure_vars[]; extern const char *const hdr_defs[]; extern const char *const hdr_vars[]; extern const char *const body_1[]; extern const char *const body_vars[]; extern const char *const init_vars[]; extern const char *const body_2[]; extern const char *const body_3[]; extern const char *const trailer[]; extern char *code_file_name; extern char *input_file_name; extern size_t input_file_name_len; extern char *defines_file_name; extern char *externs_file_name; extern FILE *action_file; extern FILE *code_file; extern FILE *defines_file; extern FILE *externs_file; extern FILE *input_file; extern FILE *output_file; extern FILE *text_file; extern FILE *union_file; extern FILE *verbose_file; extern FILE *graph_file; extern Value_t nitems; extern Value_t nrules; extern Value_t nsyms; extern Value_t ntokens; extern Value_t nvars; extern int ntags; extern char unionized; extern char line_format[]; #define fprintf_lineno(f, n, s) \ if (!lflag) \ fprintf(f, line_format, (n), (s) ? (s) : "(null)") extern Value_t start_symbol; extern char **symbol_name; extern char **symbol_pname; extern Value_t *symbol_value; extern Value_t *symbol_prec; extern char *symbol_assoc; #if defined(YYBTYACC) extern Value_t *symbol_pval; extern char **symbol_destructor; extern char **symbol_type_tag; #endif extern Value_t *ritem; extern Value_t *rlhs; extern Value_t *rrhs; extern Value_t *rprec; extern Assoc_t *rassoc; extern Value_t **derives; extern char *nullable; extern bucket *first_symbol; extern bucket *last_symbol; extern Value_t nstates; extern core *first_state; extern shifts *first_shift; extern reductions *first_reduction; extern Value_t *accessing_symbol; extern core **state_table; extern shifts **shift_table; extern reductions **reduction_table; extern unsigned *LA; extern Value_t *LAruleno; extern Value_t *lookaheads; extern Value_t *goto_base; extern Value_t *goto_map; extern Value_t *from_state; extern Value_t *to_state; extern action **parser; extern int SRexpect; extern int RRexpect; extern int SRtotal; extern int RRtotal; extern Value_t *SRconflicts; extern Value_t *RRconflicts; extern Value_t *defred; extern Value_t *rules_used; extern Value_t nunused; extern Value_t final_state; extern Value_t *itemset; extern Value_t *itemsetend; extern unsigned *ruleset; extern param *lex_param; extern param *parse_param; /* global functions */ #ifdef HAVE_STDNORETURN_H #undef GCC_NORETURN #include #define GCC_NORETURN _Noreturn #endif #ifndef GCC_NORETURN #if defined(_MSC_VER) #define GCC_NORETURN __declspec(noreturn) #else #define GCC_NORETURN /* nothing */ #endif #endif #if defined(NDEBUG) && defined(_MSC_VER) #define NODEFAULT __assume(0); #else #define NODEFAULT #endif #define NOTREACHED NODEFAULT #ifndef GCC_UNUSED #if defined(__unused) #define GCC_UNUSED __unused #else #define GCC_UNUSED /* nothing */ #endif #endif #ifndef GCC_PRINTFLIKE #define GCC_PRINTFLIKE(fmt,var) /*nothing */ #endif /* closure.c */ extern void closure(Value_t *nucleus, int n); extern void finalize_closure(void); extern void set_first_derives(void); /* error.c */ struct ainfo { int a_lineno; char *a_line; char *a_cptr; }; extern void arg_number_disagree_warning(int a_lineno, char *a_name); extern void arg_type_disagree_warning(int a_lineno, int i, char *a_name); extern GCC_NORETURN void at_error(int a_lineno, char *a_line, char *a_cptr); extern void at_warning(int a_lineno, int i); extern GCC_NORETURN void bad_formals(void); extern void default_action_warning(char *s); extern void destructor_redeclared_warning(const struct ainfo *); extern GCC_NORETURN void dollar_error(int a_lineno, char *a_line, char *a_cptr); extern void dollar_warning(int a_lineno, int i); extern GCC_NORETURN void fatal(const char *msg); extern GCC_NORETURN void illegal_character(char *c_cptr); extern GCC_NORETURN void illegal_tag(int t_lineno, char *t_line, char *t_cptr); extern GCC_NORETURN void missing_brace(void); extern GCC_NORETURN void no_grammar(void); extern GCC_NORETURN void no_space(void); extern GCC_NORETURN void open_error(const char *filename); extern GCC_NORETURN void over_unionized(char *u_cptr); extern void prec_redeclared(void); extern void reprec_warning(char *s); extern void restarted_warning(void); extern void retyped_warning(char *s); extern void revalued_warning(char *s); extern void start_requires_args(char *a_name); extern GCC_NORETURN void syntax_error(int st_lineno, char *st_line, char *st_cptr); extern GCC_NORETURN void terminal_lhs(int s_lineno); extern GCC_NORETURN void terminal_start(char *s); extern GCC_NORETURN void tokenized_start(char *s); extern GCC_NORETURN void undefined_goal(char *s); extern void undefined_symbol_warning(char *s); extern GCC_NORETURN void unexpected_EOF(void); extern void unknown_arg_warning(int d_lineno, const char *dlr_opt, const char *d_arg, const char *d_line, const char *d_cptr); extern GCC_NORETURN void unknown_rhs(int i); extern void unsupported_flag_warning(const char *flag, const char *details); extern GCC_NORETURN void unterminated_action(const struct ainfo *); extern GCC_NORETURN void unterminated_comment(const struct ainfo *); extern GCC_NORETURN void unterminated_string(const struct ainfo *); extern GCC_NORETURN void unterminated_text(const struct ainfo *); extern GCC_NORETURN void unterminated_union(const struct ainfo *); extern void untyped_arg_warning(int a_lineno, const char *dlr_opt, const char *a_name); extern GCC_NORETURN void untyped_lhs(void); extern GCC_NORETURN void untyped_rhs(int i, char *s); extern GCC_NORETURN void used_reserved(char *s); extern GCC_NORETURN void unterminated_arglist(const struct ainfo *); extern void wrong_number_args_warning(const char *which, const char *a_name); extern void wrong_type_for_arg_warning(int i, char *a_name); /* graph.c */ extern void graph(void); /* lalr.c */ extern void lalr(void); /* lr0.c */ extern void lr0(void); extern void show_cores(void); extern void show_ritems(void); extern void show_rrhs(void); extern void show_shifts(void); /* main.c */ extern void *allocate(size_t n); extern GCC_NORETURN void done(int k); /* mkpar.c */ extern void free_parser(void); extern void make_parser(void); /* mstring.c */ struct mstring { char *base, *ptr, *end; }; extern void msprintf(struct mstring *, const char *, ...) GCC_PRINTFLIKE(2,3); extern int mputchar(struct mstring *, int); extern struct mstring *msnew(void); extern struct mstring *msrenew(char *); extern char *msdone(struct mstring *); extern int strnscmp(const char *, const char *); extern unsigned int strnshash(const char *); #define mputc(m, ch) (((m)->ptr == (m)->end) \ ? mputchar(m,ch) \ : (*(m)->ptr++ = (char) (ch))) /* output.c */ extern void output(void); /* reader.c */ extern void reader(void); typedef enum { CODE_HEADER = 0 ,CODE_REQUIRES ,CODE_PROVIDES ,CODE_TOP ,CODE_IMPORTS ,CODE_MAX /* this must be last */ } CODE_CASES; extern struct code_lines { const char *name; char *lines; size_t num; } code_lines[CODE_MAX]; /* skeleton.c (generated by skel2c) */ extern void write_section(FILE * fp, const char *const section[]); /* symtab.c */ extern bucket *make_bucket(const char *); extern bucket *lookup(const char *); extern void create_symbol_table(void); extern void free_symbol_table(void); extern void free_symbols(void); /* verbose.c */ extern void verbose(void); /* warshall.c */ extern void reflexive_transitive_closure(unsigned *R, int n); #ifdef DEBUG /* closure.c */ extern void print_closure(int n); extern void print_EFF(void); extern void print_first_derives(void); /* lr0.c */ extern void print_derives(void); #endif #ifdef NO_LEAKS extern void lr0_leaks(void); extern void lalr_leaks(void); extern void mkpar_leaks(void); extern void output_leaks(void); extern void mstring_leaks(void); extern void reader_leaks(void); #endif byacc-20221106/CHANGES0000644000000000000000000064310414332026515012534 0ustar rootroot2022-11-06 Thomas E. Dickey * test/run_test.sh: use context diff, to work with AIX * defs.h: fprintf_lineno might be passed a null, when reading from stdin - show "(null)" * makefile.in, test/run_make.sh, test/run_test.sh, test/run_lint.sh: fgrep-fixes * yacc.1: mention use of stderr/stdout for usage/debugging * yacc.1: document %empty * yacc.1: document %debug * yacc.1: minor fixes with check-manpage * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2022-10-02 Thomas E. Dickey * configure: regen * aclocal.m4: resync with my-autoconf 2022-08-01 Thomas E. Dickey * config.guess, config.sub: 2022-08-01 2022-01-28 Thomas E. Dickey * package/debian/copyright: update, fix typo * package/debian/rules, package/debian/control: adapt from current Debian package * configure: regen * configure.in: change default for the backtracking option to match the most-common usage of byacc * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: update packaging, renaming debian folder back to its original location to verify that the version-mangling used in the accepted Debian package will work with the continuous-integration system. 2022-01-18 Thomas E. Dickey * package/debian/watch: adapt from current Debian package 2022-01-14 Thomas E. Dickey * VERSION, package/byacc.spec, package/detest/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2022-01-09 Thomas E. Dickey * package/detest/changelog: build-script * package/debian/changelog: update to use oldstable-compatible rules/config, for testing version upgrade * package/detest/watch: build-script * package/debian/watch: update to use oldstable-compatible rules/config, for testing version upgrade * package/detest/control: build-script * package/debian/control: update to use oldstable-compatible rules/config, for testing version upgrade * package/byacc.spec, package/mingw-byacc.spec: use rpmlint, etc., to "update" these to follow Redhat7 and later. due to incompatbilities in that route, this package will not build with #6. * reader.c, output.c: change a few malloc's to calloc's so clang analyzer can see initialized data * closure.c: modify address computation in closure.c to avoid undefined behavior on machines which do not support large offsets (analysis/patch by Jessica Clarke, cf: 2014-09-17) * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2022-01-08 Thomas E. Dickey * package/detest/copyright, package/detest/rules: build-script * package/debian/copyright, package/debian/rules: update to use oldstable-compatible rules/config, for testing version upgrade 2022-01-02 Thomas E. Dickey * package/debian/control: minor fixes adapted from btyacc package * package/debian/byacc.docs: RCS_BASE * package/detest/byacc.docs: build-script * package/debian/byacc2.prerm: RCS_BASE * package/detest/byacc2.prerm: build-script * package/debian/byacc2.postinst: RCS_BASE * package/detest/byacc2.postinst: build-script * package/debian/byacc.postinst: RCS_BASE * package/detest/byacc.postinst: build-script * package/debian/byacc.prerm: RCS_BASE * package/detest/byacc.prerm: build-script * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2022-01-01 Thomas E. Dickey * test/run_test.sh: adjust to ignore NetBSD's difference in getopt warnings. * package/pkgsrc/Makefile: resync with pkgsrc * test/yacc/expr.oxout.tab.c, test/btyacc/expr.oxout.tab.c: regen * test/expr.oxout.y, test/expr.oxout.h: fix gcc warnings * test/yacc/expr.oxout.tab.c, test/yacc/expr.oxout.tab.h: regen * test/run_make.sh: workaround for compiling the expr.oxout.y files * test/expr.oxout.y: fix syntax error * test/btyacc/expr.oxout.tab.c: regen * test/expr.oxout.h: RCS_BASE * test/yacc/expr.oxout.tab.c: fix syntax error * test/btyacc/expr.oxout.tab.c: regen, s/expr.oxout/expr_oxout/g * test/btyacc/expr.oxout.tab.h: regen * test/run_test.sh: filter the default prefix to change "." to "_", so that the generated files will compile consistently with run_make.sh * package/debian/control, package/debian/prerm, package/debian/postinst: add "byacc2" as an alternative for "yacc" * package/byacc.spec, package/debian/control, package/debian/rules: rename "btyacc" to "byacc2" to co-exist with traditional "btyacc" package * package/debian/copyright, VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2021-12-24 Thomas E. Dickey * package/debian/rules: fixes from Debian package for lintian warnings * package/debian/control: updates for Debian standard * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump * package/debian/byacc2.docs: RCS_BASE * package/detest/byacc2.docs: build-script * package/debian/docs, package/debian/copyright, package/debian/control: errata from Debian package * config.sub: 2021-12-24 From: Dmitry V. Levin config.sub: alias aarch64le to aarch64 Apparently, QNX reports aarch64 as aarch64le on little-endian machines. * config.sub (aarch64le-*): Set cpu to aarch64. (timestamp): Update. * doc/config.sub.1: Regenerate. * testsuite/config-sub.data (aarch64le-qnx): New test. Reported-by: Elad Lahav Link: https://lists.gnu.org/archive/html/config-patches/2021-12/msg00009.html 2021-12-16 Thomas E. Dickey * configure: regen * aclocal.m4: resync with my-autoconf 2021-12-13 Thomas E. Dickey * config.sub: 2021-10-27 From: Dmitry V. Levin config.sub: fix typo in timestamp * config.sub: Fix timestamp. * doc/config.sub.1: Regenerate. Reported-by: Jordi Sanfeliu Fixes: a013aac61edfa2a03727521508286480010e7bf3 Signed-off-by: Dmitry V. Levin 2021-11-30 Thomas E. Dickey * config.guess: 2021-11-30 From: Andreas F. Borchert config.guess: x86_64-pc-solaris2.11 is not properly recognized config.guess guesses Solaris 11 to run on a 32-bit platform despite Solaris 11 no longer supporting any 32-bit platform. See the following code at lines 434 to 445: | SUN_ARCH=i386 | # If there is a compiler, see if it is configured for 64-bit objects. | # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. | # This test works for both compilers. | if test "$CC_FOR_BUILD" != no_compiler_found; then | if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ | grep IS_64BIT_ARCH >/dev/null | then | SUN_ARCH=x86_64 | fi | fi If "cc" is installed, i.e. the Oracle Studio compiler, this one is chosen for $CC_FOR_BUILD. This compiler, the gcc provided by Oracle and also gcc bootstrapped from sources on that platform with a default configuration will by default generate 32-bit binaries -- even on a 64-bit platform. And __amd64 will not be defined for compilations targeting a 32-bit platform. This is different from the corresponding behaviour on GNU/Linux systems where the local platform is targeted by default. Thus, as long as you do not add "-m64" or if you have a custom-built gcc which defaults to 64 bit, you will get 32-bit binaries on Solaris despite living on a 64-bit platform. * config.guess (i86pc:SunOS:5.*:* || i86xen:SunOS:5.*:*): Adapt the test by adding the "-m64" flag. This will work properly for Solaris 10 as well (the last Solaris release that supported x86 32-bit platforms). * doc/config.guess.1: Regenerate. Signed-off-by: Dmitry V. Levin 2021-10-27 Thomas E. Dickey * config.guess: 2021-10-27 From: Jordi Sanfeliu Recognize Fiwix $ make check cd testsuite && bash config-guess.sh && rm uname PASS: config.guess checks (137 tests) cd testsuite && bash config-sub.sh PASS: config.sub checks (882 tests) PASS: config.sub idempotency checks (819 tests) PASS: config.sub canonicalise each config.guess testcase (137 tests) * config.guess (i*86:Fiwix:*:*): Recognize. * config.sub (fiwix*): Likewise. * doc/config.guess.1: Regenerate. * doc/config.sub.1: Likewise. * testsuite/config-guess.data: Add a test case for Fiwix. * testsuite/config-sub.data (i386-fiwix): New test. Signed-off-by: Dmitry V. Levin * config.sub: 2021-20-27 From: Jordi Sanfeliu Recognize Fiwix $ make check cd testsuite && bash config-guess.sh && rm uname PASS: config.guess checks (137 tests) cd testsuite && bash config-sub.sh PASS: config.sub checks (882 tests) PASS: config.sub idempotency checks (819 tests) PASS: config.sub canonicalise each config.guess testcase (137 tests) * config.guess (i*86:Fiwix:*:*): Recognize. * config.sub (fiwix*): Likewise. * doc/config.guess.1: Regenerate. * doc/config.sub.1: Likewise. * testsuite/config-guess.data: Add a test case for Fiwix. * testsuite/config-sub.data (i386-fiwix): New test. Signed-off-by: Dmitry V. Levin 2021-10-18 Thomas E. Dickey * config.sub: 2021-08-14 From: Kinshuk Dua config.sub: Fix typo in comment Fixes: 5e531d391852a54e7fab2d8ff55625fca514b305 Signed-off-by: Dmitry V. Levin 2021-08-14 Thomas E. Dickey * config.sub: 2021-08-14 From: Nick Bowler config.sub: work around command assignment bug in some shells When combining variable assignments with a shell command, some older shells (notably heirloom-sh and presumably also Solaris 10 /bin/sh) have a bug which causes the assignment to alter the current execution environment whenever the command is a shell built-in. For example: % dash -c 'x=good; x=bad echo >/dev/null; echo $x' good % jsh -c 'x=good; x=bad echo >/dev/null; echo $x' bad The config.sub script contains a few commands of the form: IFS=- read ... which triggers this bug, causing the IFS assignment to persist for the remainder of the script. This can cause misbehaviour in certain cases, for example: % jsh config.sub i386-linux-gnu config.sub: test: unknown operator gnu % jsh config.sub i386-gnu/linux sed: can't read s|gnu/linux|gnu|: No such file or directory Invalid configuration `i386-gnu/linux': OS `' not recognized * config.sub: Save and restore IFS explicitly to avoid shell bugs. * doc/config.sub.1: Regenerate. Signed-off-by: Dmitry V. Levin 2021-08-08 Thomas E. Dickey * reader.c: fix memory-leak when replacing $$'s in destructor code (report/testcase by Boris Kolpackov). * main.c: account for a memory-leak * test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/calc_code_all.tab.c, test/btyacc/calc_code_default.tab.c, test/btyacc/calc_code_imports.tab.c, test/btyacc/calc_code_provides.tab.c, test/btyacc/calc_code_requires.tab.c, test/btyacc/calc_code_top.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c, test/btyacc/defines1.calc.c, test/btyacc/defines2.calc.c, test/btyacc/defines3.calc.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c, test/btyacc/error.tab.c, test/btyacc/expr.oxout.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/rename_debug.c, test/btyacc/stdin1.calc.c, test/btyacc/stdin2.calc.c, test/btyacc/varsyntax_calc1.tab.c, test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/calc_code_all.tab.c, test/yacc/calc_code_default.tab.c, test/yacc/calc_code_imports.tab.c, test/yacc/calc_code_provides.tab.c, test/yacc/calc_code_requires.tab.c, test/yacc/calc_code_top.tab.c, test/yacc/code_calc.code.c, test/yacc/code_error.code.c, test/yacc/defines1.calc.c, test/yacc/defines2.calc.c, test/yacc/defines3.calc.c, test/yacc/empty.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax18.tab.c, test/yacc/err_syntax20.tab.c, test/yacc/error.tab.c, test/yacc/expr.oxout.tab.c, test/yacc/grammar.tab.c, test/yacc/ok_syntax1.tab.c, test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c, test/yacc/rename_debug.c, test/yacc/stdin1.calc.c, test/yacc/stdin2.calc.c, test/yacc/varsyntax_calc1.tab.c, btyaccpar.c, yaccpar.c: regen * btyaccpar.skel, yaccpar.skel: revert change to initialization of yystate, which confuses gcc, making a different warning * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2021-08-04 Thomas E. Dickey * config.sub: 2021-08-04 From: Jeremy Soller config.sub: add Linux Relibc Target $ make check cd testsuite && bash config-guess.sh && rm uname PASS: config.guess checks (136 tests) cd testsuite && bash config-sub.sh PASS: config.sub checks (881 tests) PASS: config.sub idempotency checks (818 tests) PASS: config.sub canonicalise each config.guess testcase (136 tests) * config.sub (relibc*): Recognize. * doc/config.sub.1: Regenerate. * testsuite/config-sub.data (x86_64-linux-relibc): New test. Signed-off-by: Dmitry V. Levin 2021-08-02 Thomas E. Dickey * main.c, yacc.1: add "-h" option * yacc.1: fix date * test/btyacc/no_b_opt.error, test/btyacc/no_output2.error, test/btyacc/no_p_opt.error, test/btyacc/big_b.error, test/btyacc/big_l.error, test/btyacc/help.error, test/btyacc/nostdin.error, test/yacc/big_b.error, test/yacc/big_l.error, test/yacc/help.error, test/yacc/no_b_opt.error, test/yacc/no_output2.error, test/yacc/no_p_opt.error, test/yacc/nostdin.error: regen * main.c: map any of bison's long-options which have a corresponding yacc option into the latter, without depending upon getopt_long(). * main.c: suggested patch: From: Boris Kolpackov Subject: Re: [PATCH] support bison's --defines and --output options in byacc * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2021-08-01 Thomas E. Dickey * test/btyacc/inherit2.tab.c, test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/btyacc_destroy1.tab.c: regen * output.c: fix a misplaced #line, which was after a generated line in the code-file * test/yacc/ok_syntax1.tab.c, test/yacc/pure_calc.tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c, test/yacc/err_syntax18.tab.c, test/yacc/err_syntax20.tab.c, test/yacc/expr.oxout.tab.c, test/yacc/grammar.tab.c, test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/calc_code_all.tab.c, test/yacc/calc_code_default.tab.c, test/yacc/calc_code_imports.tab.c, test/yacc/calc_code_provides.tab.c, test/yacc/calc_code_requires.tab.c, test/yacc/calc_code_top.tab.c, test/yacc/code_calc.code.c, test/yacc/defines1.calc.c, test/yacc/defines2.calc.c, test/yacc/defines3.calc.c, test/yacc/stdin1.calc.c, test/yacc/stdin2.calc.c: regen * output.c: add a state-machine to output_semantic_actions() to detect and replace the "#line" directives added by Roland Illig's change, making them show the actual line-numbers in the code-file. * test/btyacc/pure_calc.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c, test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c, test/btyacc/expr.oxout.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c, test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/calc_code_all.tab.c, test/btyacc/calc_code_default.tab.c, test/btyacc/calc_code_imports.tab.c, test/btyacc/calc_code_provides.tab.c, test/btyacc/calc_code_requires.tab.c, test/btyacc/calc_code_top.tab.c, test/btyacc/code_calc.code.c, test/btyacc/defines1.calc.c, test/btyacc/defines2.calc.c, test/btyacc/defines3.calc.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/stdin1.calc.c, test/btyacc/stdin2.calc.c: regen * reader.c: adapt a patch by Roland Illig which added #line directives with dummy filename and line number, because the debug information was incorrect. The actual fix (see output_semantic_actions) is to emit #line directives which correspond to the code-file. * reader.c: simplify an ifdef so I can balance {/} * output.c: use new macro * defs.h: add fprintf_lineno macro * reader.c: make that a little simpler - but I see that this should be using the code-file's line-numbering rather than "" * reader.c: make that into a macro, and add a begin_case() to more/less match (the #line's are not together in some btyacc cases...) * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2021-07-14 Thomas E. Dickey * reader.c: From: Roland Illig Subject: small patch for byacc ... this splits up "\nbreak;\n" output to put #line directives after first "\n" 2021-07-06 Thomas E. Dickey * config.sub: 2021-07-06 From: Stephanos Ioannidis config.sub: add Zephyr RTOS support This adds the Zephyr RTOS targets in preparation for implementing the Zephyr RTOS-specific toolchain support. $ make check cd testsuite && bash config-guess.sh && rm uname PASS: config.guess checks (136 tests) cd testsuite && bash config-sub.sh PASS: config.sub checks (880 tests) PASS: config.sub idempotency checks (817 tests) PASS: config.sub canonicalise each config.guess testcase (136 tests) * config.sub (zephyr*): Recognize. * doc/config.sub.1: Regenerate. * testsuite/config-sub.data: Add testcases for *-zephyr. Signed-off-by: Stephanos Ioannidis Signed-off-by: Dmitry V. Levin 2021-07-03 Thomas E. Dickey * config.sub: 2021-07-03 From: Ozkan Sezer config.sub: disable shellcheck SC2006 / SC2268 warnings This is in line with the recent config.guess change in commit 12fcf67c9108f4c4b581eaa302088782f0ee40ea * config.sub (shellcheck disable): Add SC2006,SC2268. Suggested-by: Jacob Bachmeyer Signed-off-by: Ozkan Sezer Signed-off-by: Dmitry V. Levin * config.sub: 2021-07-03 From: Ozkan Sezer config.sub: normalize the quoting in the `echo FOO | sed ...` Some cases quote the argument to echo and some do not. At runtime it probably does not matter because the substituted values will never contain whitespace, but quoting them all would make shellcheck more useful. * config.sub: Consistently quote the argument of echo. * doc/config.sub.1: Regenerate. Suggested-by: Jacob Bachmeyer Signed-off-by: Ozkan Sezer Signed-off-by: Dmitry V. Levin 2021-07-02 Thomas E. Dickey * config.sub: 2021-06-03 From: Ozkan Sezer config.sub: replace POSIX $( ) with classic ` ` throughout This is in line with the recent config.guess change in commit d70c4fa934de164178054c3a60aaa0024ed07c91. The patch was generated using patch-6.gawk script introduced in that commit. * config.sub: Revert POSIX command substitutions to classic form. Signed-off-by: Ozkan Sezer Signed-off-by: Dmitry V. Levin 2021-06-19 Thomas E. Dickey * configure: regen * aclocal.m4: resync with my-autoconf * test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c, test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c, test/btyacc/error.tab.c, test/btyacc/expr.oxout.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/calc_code_all.tab.c, test/btyacc/calc_code_default.tab.c, test/btyacc/calc_code_imports.tab.c, test/btyacc/calc_code_provides.tab.c, test/btyacc/calc_code_requires.tab.c, test/btyacc/calc_code_top.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c, test/btyacc/defines1.calc.c, test/btyacc/defines2.calc.c, test/btyacc/defines3.calc.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/rename_debug.c, btyaccpar.c, test/btyacc/stdin1.calc.c, test/btyacc/stdin2.calc.c, test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax18.tab.c, test/yacc/err_syntax20.tab.c, test/yacc/error.tab.c, test/yacc/expr.oxout.tab.c, test/yacc/grammar.tab.c, test/yacc/ok_syntax1.tab.c, test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/calc_code_all.tab.c, test/yacc/calc_code_default.tab.c, test/yacc/calc_code_imports.tab.c, test/yacc/calc_code_provides.tab.c, test/yacc/calc_code_requires.tab.c, test/yacc/calc_code_top.tab.c, test/yacc/code_calc.code.c, test/yacc/code_error.code.c, test/yacc/defines1.calc.c, test/yacc/defines2.calc.c, test/yacc/defines3.calc.c, test/yacc/empty.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/rename_debug.c, test/yacc/stdin1.calc.c, test/yacc/stdin2.calc.c, yaccpar.c: regen * btyaccpar.skel, yaccpar.skel: cancel unused assignments * output.c: gcc warning * test/run_test.sh, test/run_lint.sh, test/run_make.sh: shellcheck-warnings 2021-06-19 jannick0 * test/run_test.sh: changes suggested at https://github.com/jannick0/byacc-snapshots/tree/YYINT-fix-20210520 2021-06-19 Thomas E. Dickey * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2021-06-13 Thomas E. Dickey * aclocal.m4: resync with my-autoconf 2021-06-04 Thomas E. Dickey * config.guess: 2021-06-03 From: Vineet Gupta Recognize arc32 This is the 32-bit variant of ARCv3 ISA (which is not compatible with the 32-bit ARCv2 ISA) | make check | cd testsuite && bash config-guess.sh && rm uname | PASS: config.guess checks (136 tests) | cd testsuite && bash config-sub.sh | PASS: config.sub checks (864 tests) | PASS: config.sub idempotency checks (801 tests) | PASS: config.sub canonicalise each config.guess testcase (136 tests) * config.guess (arc32:Linux:*:*): Recognize. * config.sub (arc32): Likewise. * doc/config.guess.1: Regenerate. * doc/config.sub.1: Likewise. * testsuite/config-guess.data: Add a test case for arc32. * testsuite/config-sub.data (arc32, arc*-elf): Add test cases. Signed-off-by: Vineet Gupta Signed-off-by: Dmitry V. Levin * config.sub: 2021-06-03 (repaired) From: Vineet Gupta Recognize arc32 This is the 32-bit variant of ARCv3 ISA (which is not compatible with the 32-bit ARCv2 ISA) | make check | cd testsuite && bash config-guess.sh && rm uname | PASS: config.guess checks (136 tests) | cd testsuite && bash config-sub.sh | PASS: config.sub checks (864 tests) | PASS: config.sub idempotency checks (801 tests) | PASS: config.sub canonicalise each config.guess testcase (136 tests) * config.guess (arc32:Linux:*:*): Recognize. * config.sub (arc32): Likewise. * doc/config.guess.1: Regenerate. * doc/config.sub.1: Likewise. * testsuite/config-guess.data: Add a test case for arc32. * testsuite/config-sub.data (arc32, arc*-elf): Add test cases. Signed-off-by: Vineet Gupta Signed-off-by: Dmitry V. Levin 2021-05-26 Thomas E. Dickey * config.guess: 2021-05-24 From: Jacob Bachmeyer config.guess: manual fixups after previous automatic patch The tool could not handle command substitutions that span lines, but fortunately there were only two such substitutions in the script. The test for which universe is active on Pyramid is rewritten into a case block because it was the only use of a command substitution as an argument to the test command, which would require quoting. * config.guess: Rewrite "if" for Pyramid systems to "case". * config.guess: 2021-05-24 (repaired) From: Jacob Bachmeyer config.guess: replace POSIX $( ) with classic ` ` throughout The previous replacement of backticks with POSIX command substitutions was ill-considered and illogical: this script recognizes many archaic machine types that probably never had POSIX shells, therefore it needs to be able to run successfully under pre-POSIX shells. This patch was generated using the included GNU Awk program. * config.guess: Revert POSIX command substitutions to classic form. * patch-6.gawk: Store the tool that produced the automated patch. 2021-05-25 Thomas E. Dickey * config.guess: 2021-05-24 (repaired) From: Jacob Bachmeyer config.guess: manual fixup after previous automated patches This patch provides the special handling for the GNU system. As these were two small and unique edits, they were not included in the scripts. This patch also cleans up other minor issues that must be addressed before reverting to classic command substitutions and updates "shellcheck" directives to account for changes in this script and the change in "shellcheck" towards reporting individual portability issues. * config.guess: 2021-05-24 (repaired) From: Jacob Bachmeyer config.guess: automatic fixups after previous automated patch This patch was generated using the following command: sed -i config.guess \ -e '/="[^"]\+"\(-\|$\)/s/="\([^"([:space:])]\+\)"/=\1/' \ -e '/="[^"]\+"[[:alnum:]]/s/="\$\([^([:space:])]\+\)"/=${\1}/' \ -e \ '/\$(echo[^|]\+|/s/\([^[:space:]]\)[[:space:]]*|[[:space:]]*sed/\1 | sed/g' * config.guess: Remove unneeded quotes in other variable assignments, standardize spacing for "echo ... | sed" substitutions. * config.guess: 2021-05-24 (repaired) From: Jacob Bachmeyer config.guess: remove unneeded quotes and factor command substitutions This is further cleanup and simplifies some constructs that can confuse Emacs' syntax highlighting while generally reducing required quoting. This patch was generated using the included GNU Awk program. * config.guess: Remove unneeded variable quotes and factor out command substitutions when setting GUESS. * patch-3.gawk: Store the tool that produced the automated patch. * config.guess: 2021-05-24 (repaired) From: Jacob Bachmeyer config.guess: manual fixups after previous automatic patch * config.guess: Adjust a few "leftover" cases that the tool could not easily recognize and fixes comment indentation in a few other special cases. * config.guess: 2021-05-24 (repaired) From: Jacob Bachmeyer config.guess: introduce intermediate variable with uname results This will allow quoting to be significantly simplified in another pass through the file. * config.guess: Introduce GUESS variable to hold results of uname analysis. * config.guess: 2021-05-24 (repaired) From: Jacob Bachmeyer config.guess: use intermediate variable with uname results This will allow quoting to be significantly simplified in another pass through the file. This patch was generated using the included GNU Awk program. * config.guess: Use GUESS variable to hold results of uname analysis. * patch-1.gawk: Store the tool that produced the automated patch. 2021-05-24 Thomas E. Dickey * config.guess: 2021-05-24 (repaired) From: Dmitry V. Levin config.guess: fix shellcheck warning SC2154 While, according to Plan 9 documentation, the environment variable $cputype is set to the name of the kernel's CPU's architecture, shellcheck warns that cputype is referenced but not assigned. Be on the safe side and do not use cputype if it is not defined or empty. * config.guess (*:Plan9:*:*): Fix shellcheck warning SC2154. * config.guess: 2021-05-24 (repaired) From: Dmitry V. Levin config.guess: remove redundant quotes in case commands According to the GNU Autoconf Portable Shell Programming manual, the Bourne shell does not systematically split variables and back-quoted expressions, in particular on the right-hand side of assignments and in the argument of 'case'. The change is made automatically using the following command: $ sed -E -i 's/(\)/\1\2\3/' config.guess * config.guess: Simplify case commands by removing quotes around the argument. Suggested-by: Jacob Bachmeyer * config.guess: 2021-05-24 (repaired) From: Dmitry V. Levin config.guess: simplify exit status workaround on alphaev67-dec-osf5.1 Commit 29865ea8a5622cdd80b7a69a0afa78004b4cd311 introduced an exit trap reset before exiting to avoid a spurious non-zero exit status on alphaev67-dec-osf5.1. Simplify that code a bit by moving the exit trap reset around. * config.guess (alpha:OSF1:*:*): Reset exit trap earlier. * doc/config.guess.1: Regenerate. 2021-05-20 Thomas E. Dickey * test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/calc_code_all.tab.c, test/btyacc/calc_code_default.tab.c, test/btyacc/calc_code_imports.tab.c, test/btyacc/calc_code_provides.tab.c, test/btyacc/calc_code_requires.tab.c, test/btyacc/calc_code_top.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_calc.tab.c, test/btyacc/code_error.code.c, test/btyacc/code_error.tab.c, test/btyacc/defines1.calc.c, test/btyacc/defines2.calc.c, test/btyacc/defines3.calc.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c, test/btyacc/error.tab.c, test/btyacc/expr.oxout.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/rename_debug.c, test/btyacc/stdin1.calc.c, test/btyacc/stdin2.calc.c, test/btyacc/varsyntax_calc1.tab.c, test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/calc_code_all.tab.c, test/yacc/calc_code_default.tab.c, test/yacc/calc_code_imports.tab.c, test/yacc/calc_code_provides.tab.c, test/yacc/calc_code_requires.tab.c, test/yacc/calc_code_top.tab.c, test/yacc/code_calc.code.c, test/yacc/code_calc.tab.c, test/yacc/code_error.code.c, test/yacc/code_error.tab.c, test/yacc/defines1.calc.c, test/yacc/defines2.calc.c, test/yacc/defines3.calc.c, test/yacc/empty.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax18.tab.c, test/yacc/err_syntax20.tab.c, test/yacc/error.tab.c, test/yacc/expr.oxout.tab.c, test/yacc/grammar.tab.c, test/yacc/ok_syntax1.tab.c, test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c, test/yacc/rename_debug.c, test/yacc/stdin1.calc.c, test/yacc/stdin2.calc.c, test/yacc/varsyntax_calc1.tab.c: regen * mkpar.c, reader.c: change printf format to allow for long-YYINT * lalr.c, lr0.c: change type, fix gcc warnings * verbose.c: change type, fix gcc warnings also change printf format, to allow for long YYINT * output.c: change type, fix gcc warnings also change printf format, to allow for long-YYINT * package/debian/rules, package/byacc.spec: change max-table-size to correspond with switch of YYINT from short to int * defs.h: change default for MAXTABLE to INT_MAX, like the FreeBSD port. that requires changing some types to eliminate type-mismatches. * configure: regen * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2021-05-01 Thomas E. Dickey * aclocal.m4: resync with my-autoconf 2021-04-30 Thomas E. Dickey * config.sub: 2021-04-30 (repaired) From: Maciej W. Rozycki config.sub: Handle MIPS R3 and R5 ISA levels with CPU names Complement binutils commit ae52f4830604 ("Add MIPS r3 and r5 support.") and recognize MIPS CPU patterns for the R3 and R5 ISA levels, used by GAS to set defaults. * config.sub (mipsisa32r3, mipsisa32r3el, mipsisa32r5, mipsisa32r5el, mipsisa64r3, mipsisa64r3el, mipsisa64r5, mipsisa64r5el): Recognize. * doc/config.sub.1: Regenerate. * testsuite/config-sub.data: Add test cases. Signed-off-by: Dmitry V. Levin 2021-04-21 Thomas E. Dickey * config.guess, config.sub: 2021-04-21 (repaired) From: Vineet Gupta Recognize arc64 This paves way for setting up arc64 software ecosystem. $ make check cd testsuite && bash config-guess.sh && rm uname PASS: config.guess checks (136 tests) cd testsuite && bash config-sub.sh PASS: config.sub checks (853 tests) PASS: config.sub idempotency checks (790 tests) PASS: config.sub canonicalise each config.guess testcase (136 tests) * config.guess (arc64:Linux:*:*): Recognize. * config.sub (arc64): Likewise. * doc/config.guess.1: Regenerate. * doc/config.sub.1: Likewise. * testsuite/config-guess.data: Add a test case for arc64. * testsuite/config-sub.data (arc64, arc*-elf): Add test cases. Signed-off-by: Vineet Gupta Signed-off-by: Dmitry V. Levin 2021-04-16 Thomas E. Dickey * config.guess: 2021-04-16 (repaired) From: Purple Rain config.guess: add SecBSD support * config.guess (*:SecBSD:*:*): Recognize. * doc/config.guess.1: Regenerate. * testsuite/config-guess.data: Add a test case. Signed-off-by: Dmitry V. Levin * config.sub: 2021-04-16 (repaired) From: Purple Rain config.sub: add SecBSD support * config.sub (secbsd*): Recognize. * doc/config.sub.1: Regenerate. * testsuite/config-sub.data: Add x86_64-secbsd. Signed-off-by: Dmitry V. Levin 2021-03-28 Thomas E. Dickey * reader.c: ignore bison's "%empty" extension * reader.c, defs.h: %debug was a trivial bison "extension", mark it as such * yacc.1: use italics in a few places where bold was inappropriate * test/btyacc/varsyntax_calc1.tab.c, test/btyacc/varsyntax_calc1.tab.h, test/btyacc/expr.oxout.tab.c, test/btyacc/expr.oxout.tab.h, test/btyacc/inherit1.tab.c, test/btyacc/inherit1.tab.h, test/btyacc/inherit2.tab.c, test/btyacc/inherit2.tab.h, test/btyacc/ok_syntax1.tab.c, test/btyacc/ok_syntax1.tab.h, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit3.tab.h, test/btyacc/err_inherit4.tab.c, test/btyacc/err_inherit4.tab.h, test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_calc1.tab.h, test/btyacc/btyacc_demo.tab.c, test/btyacc/btyacc_demo.tab.h, test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy1.tab.h, test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy2.tab.h, test/btyacc/btyacc_destroy3.tab.c, test/btyacc/btyacc_destroy3.tab.h, test/btyacc/calc1.tab.c, test/btyacc/calc1.tab.h, test/yacc/varsyntax_calc1.tab.c, test/yacc/varsyntax_calc1.tab.h, test/yacc/expr.oxout.tab.c, test/yacc/expr.oxout.tab.h, test/yacc/ok_syntax1.tab.c, test/yacc/ok_syntax1.tab.h, test/yacc/calc1.tab.c, test/yacc/calc1.tab.h: regen * reader.c: add union tag to YYSTYPE structure for compatibility with a feature which bison copied from Solaris yacc (request by Ella Stanforth) * configure: regen * config_h.in: update for _Noreturn feature * aclocal.m4: updated to work with autoheader * defs.h: apply syntax change needed for _Noreturn keyword * package/byacc.spec, package/debian/rules: use stdnoreturn * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2021-03-20 Thomas E. Dickey * configure: regen * aclocal.m4: resync with my-autoconf (adds --enable-stdnoreturn option) 2021-03-10 Thomas E. Dickey * config.sub: 2021-03-10 (repaired) From: Idan Horo config.sub: Add support for SerenityOS * config.sub (serenity*): Recognize. * doc/config.sub.1: Regenerate. * testsuite/config-sub.data: Add i386-serenity. Signed-off-by: Dmitry V. Levin 2021-01-25 Thomas E. Dickey * config.guess: 2021-01-25 (repaired) From: Kalamatee config.guess: update AROS system detection * config.guess: Recognize *:AROS:*:*. * doc/config.guess.1: Regenerate. * testsuite/config-guess.data: Add test cases. Signed-off-by: Dmitry V. Levin 2021-01-19 Thomas E. Dickey * config.guess: 2021-01-19 (repaired) From: M. Levinson config.guess: fix shell variable quoting bug * config.guess (*:NetBSD:*:*): Spell out the full sysctl command twice instead of using a shell variable. * doc/config.guess.1: Regenerate. Fixes: 827c77253b396c07306927b2a4b794a3251c48eb Signed-off-by: Dmitry V. Levin 2021-01-09 Thomas E. Dickey * package/debian/copyright, VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2021-01-07 Thomas E. Dickey * config.sub: 2021-01-08 (repaired) From: Peixing Xin config.sub: recognize four-part configuration name for VxWorks For example: armv7m-wrs-vxworks-eabihf armv7-wrs-vxworks-eabihf i686-wrs-vxworks-simlinux i686-wrs-vxworks-simwindows powerpc-wrs-vxworks-spe x86_64-wrs-vxworks-simlinux x86_64-wrs-vxworks-simwindows * config.sub: Recognize four-part configuration name for VxWorks. * doc/config.guess.1: Regenerate. * testsuite/config-sub.data: Add test cases. Co-authored-by: John Ericson Signed-off-by: Dmitry V. Levin 2021-01-06 Thomas E. Dickey * config.sub: 2021-01-07 (repaired) From: Alan Modra config.sub: accept OS of eabi* and gnueabi* Commit 5e531d391852 broke powerpc-eabivle: $ ./config.sub powerpc-eabivle Invalid configuration `powerpc-eabivle': OS `eabivle' not recognized Also powerpc-eabisim and probably some arm configurations. * config.sub: Accept OS of eabi* and gnueabi*. * testsuite/config-sub.data: Add powerpc-eabisim and powerpc-eabivle. Signed-off-by: Dmitry V. Levin 2021-01-05 Thomas E. Dickey * configure: regen * aclocal.m4: resync with my-autoconf 2021-01-01 Thomas E. Dickey * config.guess, config.sub: 2021-01-01 (repaired) From: Dmitry V. Levin Update copyright years * config.guess: Update copyright years. * config.sub: Likewise. * doc/config.guess.1: Regenerate. * doc/config.sub.1: Likewise. 2020-12-31 Thomas E. Dickey * config.guess, config.sub: 2020-12-31 (repaired) From: Kito Cheng Recognize riscv32be and riscv64be Recently RISC-V community got patches big-endian support for binutils, and we'd like to accept that, however before accepting that I think it would be better to upstream config.sub and config.guess change here :) It's my check result on Ubuntu 18.04: $ make check cd testsuite && bash config-guess.sh && rm uname PASS: config.guess checks (131 tests) cd testsuite && bash config-sub.sh PASS: config.sub checks (830 tests) PASS: config.sub idempotency checks (767 tests) PASS: config.sub canonicalise each config.guess testcase (131 tests) * config.guess (riscv32be:Linux:*:*, riscv64be:Linux:*:*): Recognize. * config.sub (riscv32be, riscv64be): Likewise. * doc/config.guess.1: Regenerate. * doc/config.sub.1: Likewise. * testsuite/config-guess.data: Add test cases for riscv32be, and riscv64be. * testsuite/config-sub.data (riscv32be, riscv64be): Add test cases. Signed-off-by: Dmitry V. Levin 2020-12-03 Thomas E. Dickey * config.guess, config.sub: 2020-12-22 (repaired) From: Xiaotian Wu Recognize loongarch32, loongarch64, and loongarchx32 * config.guess (loongarch32:Linux:*:*, loongarch64:Linux:*:*, loongarchx32:Linux:*:*): Recognize. * config.sub (loongarch32, loongarch64, loongarchx32): Likewise. * doc/config.guess.1: Regenerate. * doc/config.sub.1: Likewise. * testsuite/config-guess.data: Add test cases for loongarch32, loongarch64, and loongarchx32. * testsuite/config-sub.data (loongarch32, loongarch64, loongarchx32): Add test cases. Signed-off-by: Dmitry V. Levin 2020-12-01 Thomas E. Dickey * config.sub: 2020-12-02 (repaired) From: Dmitry V. Levin config.sub: recognize thumbv7* * config.sub (thumbv7*): Recognize. * testsuite/config-sub.data (thumbv7): New test. Reported-by: Karl Berry Link: https://lists.gnu.org/archive/html/config-patches/2020-12/msg00001.html 2020-11-30 Thomas E. Dickey * install-sh: 2020-11-30 2020-11-19 Thomas E. Dickey * config.guess, config.sub: 2020-11-17 (repaired) From: Dmitry V. Levin .gitattributes: specify a custom git merge driver for the ChangeLog file * config.guess, config.sub: 2020-11-19 (repaired) From: Dmitry V. Levin Update URLs of the latest version of config.guess and config.sub scripts Prefer cgit URLs over gitweb as the former are usually served faster: $ time -f %e wget -q 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess' 1.06 $ time -f %e wget -q 'https://git.savannah.gnu.org/cgit/config.git/plain/config.guess' 0.73 * config.guess: Prefer cgit URLs over gitweb. (timestamp): Update. * config.sub: Likewise. * doc/config.guess.1: Regenerate. * doc/config.sub.1: Likewise. 2020-11-06 Thomas E. Dickey * config.guess, config.sub: 2020-11-07 (repaired) From: Ben Elliston Update timestamps. * config.sub: 2020-10-13 (repaired) From: Ben Elliston * config.sub, config.guess: Replace backtick `..` substitutions with POSIX $(..) command substitutions throughout. * Makefile (shellcheck): Don't exclude message SC2006. * config.guess: 2020-10-22 (repaired) From: Ben Elliston * config.sub, config.guess: Replace backtick `..` substitutions with POSIX $(..) command substitutions throughout. * Makefile (shellcheck): Don't exclude message SC2006. 2020-10-21 Thomas E. Dickey * config.guess: 2020-10-22 From: Rin Okuyama * config.guess (*:NetBSD:*:*): Handle aarch64eb. * testsuite/config-guess.data: Add test cases. Signed-off-by: Ben Elliston 2020-10-14 Thomas E. Dickey * config.sub: 2020-10-13 From: Ben Elliston Fix whitespace problem in config.sub. 2020-10-13 Thomas E. Dickey * config.sub: 2020-10-13 From: Ben Elliston * config.sub (i*86-pc-os2-emx): Recognise correctly. * testsuite/config-sub.data: Add OS/2 tests to avoid regressions. 2020-09-26 Thomas E. Dickey * config.sub: 2020-09-08 From: Fabrice Fontaine * config.sub (uclinux-uclibc*): Fix detection. * testsuite/config-sub.data: Add a test case to avoid regression. Signed-off-by: Ben Elliston 2020-09-22 Thomas E. Dickey * closure.c, warshall.c: fix undefined-behavior diagnosed with gcc -fsanitize=undefined (report by Alexander Richardson) 2020-09-20 Thomas E. Dickey * config.guess: 2020-09-19 From: Bruno Haible * config.guess: Don't use 'ldd --version' to determine the presence of musl libc, as this fails on Alpine Linux 3.10. Signed-off-by: Ben Elliston 2020-09-10 Thomas E. Dickey * LICENSE: RCS_BASE * reader.c, output.c: cppcheck -- reduce scope * defs.h: update to 2.0 * test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/calc_code_all.tab.c, test/btyacc/calc_code_default.tab.c, test/btyacc/calc_code_imports.tab.c, test/btyacc/calc_code_provides.tab.c, test/btyacc/calc_code_requires.tab.c, test/btyacc/calc_code_top.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c, test/btyacc/defines1.calc.c, test/btyacc/defines2.calc.c, test/btyacc/defines3.calc.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit1.tab.c, test/btyacc/err_inherit2.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_inherit5.tab.c, test/btyacc/err_syntax1.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax13.tab.c, test/btyacc/err_syntax14.tab.c, test/btyacc/err_syntax15.tab.c, test/btyacc/err_syntax16.tab.c, test/btyacc/err_syntax17.tab.c, test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax19.tab.c, test/btyacc/err_syntax2.tab.c, test/btyacc/err_syntax20.tab.c, test/btyacc/err_syntax21.tab.c, test/btyacc/err_syntax22.tab.c, test/btyacc/err_syntax23.tab.c, test/btyacc/err_syntax24.tab.c, test/btyacc/err_syntax25.tab.c, test/btyacc/err_syntax26.tab.c, test/btyacc/err_syntax27.tab.c, test/btyacc/err_syntax3.tab.c, test/btyacc/err_syntax4.tab.c, test/btyacc/err_syntax5.tab.c, test/btyacc/err_syntax6.tab.c, test/btyacc/err_syntax7.tab.c, test/btyacc/err_syntax7a.tab.c, test/btyacc/err_syntax7b.tab.c, test/btyacc/err_syntax8.tab.c, test/btyacc/err_syntax8a.tab.c, test/btyacc/err_syntax9.tab.c, test/btyacc/error.tab.c, test/btyacc/expr.oxout.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/rename_debug.c, test/btyacc/stdin1.calc.c, test/btyacc/stdin2.calc.c, test/btyacc/varsyntax_calc1.tab.c, test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/calc_code_all.tab.c, test/yacc/calc_code_default.tab.c, test/yacc/calc_code_imports.tab.c, test/yacc/calc_code_provides.tab.c, test/yacc/calc_code_requires.tab.c, test/yacc/calc_code_top.tab.c, test/yacc/code_calc.code.c, test/yacc/code_error.code.c, test/yacc/defines1.calc.c, test/yacc/defines2.calc.c, test/yacc/defines3.calc.c, test/yacc/empty.tab.c, test/yacc/err_syntax1.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax13.tab.c, test/yacc/err_syntax14.tab.c, test/yacc/err_syntax15.tab.c, test/yacc/err_syntax16.tab.c, test/yacc/err_syntax17.tab.c, test/yacc/err_syntax18.tab.c, test/yacc/err_syntax19.tab.c, test/yacc/err_syntax2.tab.c, test/yacc/err_syntax20.tab.c, test/yacc/err_syntax21.tab.c, test/yacc/err_syntax22.tab.c, test/yacc/err_syntax23.tab.c, test/yacc/err_syntax24.tab.c, test/yacc/err_syntax25.tab.c, test/yacc/err_syntax26.tab.c, test/yacc/err_syntax27.tab.c, test/yacc/err_syntax3.tab.c, test/yacc/err_syntax4.tab.c, test/yacc/err_syntax5.tab.c, test/yacc/err_syntax6.tab.c, test/yacc/err_syntax7.tab.c, test/yacc/err_syntax7a.tab.c, test/yacc/err_syntax7b.tab.c, test/yacc/err_syntax8.tab.c, test/yacc/err_syntax8a.tab.c, test/yacc/err_syntax9.tab.c, test/yacc/error.tab.c, test/yacc/expr.oxout.tab.c, test/yacc/grammar.tab.c, test/yacc/ok_syntax1.tab.c, test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c, test/yacc/rename_debug.c, test/yacc/stdin1.calc.c, test/yacc/stdin2.calc.c, test/yacc/varsyntax_calc1.tab.c: update to version 2.0 * reader.c: improve loop which skips backward through a (possibly nested) sequence of square-brackets. * reader.c: simplify a check to quiet a bogus cppcheck-warning * yacc.1: bump date * reader.c: add a note about a bogus cppcheck warning * configure: regen * configure.in: always check for gcc attributes, to work around defect in clang's imitation of this feature * reader.c: cppcheck -- scope reduction cppcheck -- eliminate bogus returns after no-return functions * verbose.c, output.c, mkpar.c, main.c, warshall.c, lr0.c, lalr.c, graph.c, closure.c: cppcheck -- scope reduction * package/debian/compat: quiet compatibility-warning * yacc.1: use "ASCII" for dashes which are part of proper names * configure: regen * configure.in: switch to --enable-warnings, for consistency * aclocal.m4: resync with my-autoconf, for compiler-warning fixes with macOS * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2020-09-07 Thomas E. Dickey * config.sub: 2020-09-08 From: Elad Lahav * config.sub: Fix regression in QNX recognition. * testsuite/config-sub.data: Add some test cases. Signed-off-by: Ben Elliston 2020-08-16 Thomas E. Dickey * config.guess, config.sub: 2020-08-17 2020-06-28 Thomas E. Dickey * config.sub: 2020/06/28 2020-06-14 Thomas E. Dickey * config.guess: 2020/04/26 2020-03-30 Thomas E. Dickey * package/debian/copyright: bump * test/yacc/grammar.tab.c, test/btyacc/grammar.tab.c, test/grammar.y, reader.c: typo found with codespell * yacc.1: fixes noted in the original report, overlooked in followup 2020-03-30 Bjarni.Ingi.Gislason * yacc.1: typography/spelling fixes - Debian #955175 2020-03-30 Thomas E. Dickey * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2020-03-10 Thomas E. Dickey * configure: regen * aclocal.m4: resync with my-autoconf, mostly fixes for compiler-warnings * configure.in: use macro to suppress X-dependency from newer macros 2019-12-20 Thomas E. Dickey * config.guess: 2019-12-21 2019-11-25 Tom.Shields * main.c: fix an inconsistency between the getopt and non-getopt configuration. In the former, getopt always used "yacc", not the name of the executable. 2019-11-25 Thomas E. Dickey * test/run_make.sh: suppress bison's -Wyacc warning, which is not useful. * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2019-11-19 Thomas E. Dickey * yacc.1: new version of manpage * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump * yacc.1: document %code * test/btyacc/calc_code_all.error, test/btyacc/calc_code_all.output, test/btyacc/calc_code_all.tab.c, test/btyacc/calc_code_all.tab.h, test/btyacc/calc_code_default.error, test/btyacc/calc_code_default.output, test/btyacc/calc_code_default.tab.c, test/btyacc/calc_code_default.tab.h, test/btyacc/calc_code_imports.error, test/btyacc/calc_code_imports.output, test/btyacc/calc_code_imports.tab.c, test/btyacc/calc_code_imports.tab.h, test/btyacc/calc_code_provides.error, test/btyacc/calc_code_provides.output, test/btyacc/calc_code_provides.tab.c, test/btyacc/calc_code_provides.tab.h, test/btyacc/calc_code_requires.error, test/btyacc/calc_code_requires.output, test/btyacc/calc_code_requires.tab.c, test/btyacc/calc_code_requires.tab.h, test/btyacc/calc_code_top.error, test/btyacc/calc_code_top.output, test/btyacc/calc_code_top.tab.c, test/btyacc/calc_code_top.tab.h, test/yacc/calc_code_all.tab.c, test/yacc/calc_code_all.tab.h, test/yacc/calc_code_default.tab.c, test/yacc/calc_code_provides.tab.c, test/yacc/calc_code_provides.tab.h, test/yacc/calc_code_requires.tab.c, test/yacc/calc_code_requires.tab.h, test/yacc/calc_code_top.tab.c: RCS_BASE * output.c: amend updates for 'outline' when processing "%code" in code-file * output.c: modify output_code_lines() to show begin/end block comments which were in reader.c, and to generate a #line for the code-file. * reader.c: modify copy_code() to allow for multiple %code directives for a given section, recording the input line-number for each directive as a #line in the resulting string. remove the block start/end comments, since those will be done for a whole section in output.c * mstring.c, defs.h: add msrenew() * test/yacc/calc_code_all.error, test/yacc/calc_code_all.output, test/yacc/calc_code_default.error, test/yacc/calc_code_default.output, test/yacc/calc_code_default.tab.h, test/yacc/calc_code_imports.error, test/yacc/calc_code_imports.output, test/yacc/calc_code_imports.tab.c, test/yacc/calc_code_imports.tab.h, test/yacc/calc_code_provides.error, test/yacc/calc_code_provides.output, test/yacc/calc_code_requires.error, test/yacc/calc_code_requires.output, test/yacc/calc_code_top.error, test/yacc/calc_code_top.output, test/yacc/calc_code_top.tab.h: RCS_BASE 2019-11-18 Thomas E. Dickey * test/calc_code_imports.y, test/calc_code_all.y, test/calc_code_default.y, test/calc_code_top.y, test/calc_code_provides.y, test/calc_code_requires.y: RCS_BASE 2019-11-04 Michael.Forney * defs.h: add missing "extern" for new variable "code_lines" 2019-11-03 Thomas E. Dickey * main.c: build-fix for MinGW cross-compiling * output.c, reader.c: gcc-warnings * output.c: check validity of text_file before rewind remove redundant check of iflag * main.c: fix memory-leak reported by clang * mkpar.c: guard against a null-reference reported by clang (unlikely) * reader.c: fix two coverity warnings: a) resource leak on malloc-failure b) possible null-pointer dereference on parse-error * test/btyacc/err_inherit4.tab.h, test/btyacc/btyacc_demo.tab.h: regen * defs.h: use enum's to simplify recent change * mstring.c: enable mstring() in regular byacc, since Zoulas' change relies upon it 2019-11-03 Christos.Zoulas * defs.h, reader.c, output.c: add support for bison's "%code" feature also fix a small bug: declare YYLTYPE externally when producing locations 2019-11-03 Thomas E. Dickey * test/btyacc/help.error, test/btyacc/no_b_opt.error, test/btyacc/no_output2.error, test/btyacc/no_p_opt.error, test/yacc/help.error, test/yacc/no_b_opt.error, test/yacc/no_output2.error, test/yacc/no_p_opt.error: regen * test/run_test.sh: there's no standard wording for the options-errors from getopt; filter that to "error message" in the test reference files. * main.c: provide for using getopt(), to accommodate a case where developers have relied upon non-POSIX behavior. * test/run_test.sh: getopt's messages do not print the full pathname of yacc in some cases; adjust the sed-script which changes those to "YACC" * configure: regen * config_h.in: regen, using autoheader-252 * configure.in: add configure check for getopt * configure: regen * aclocal.m4: resync with my-autoconf adds a fix which accommodates a difference in warning options between gcc/clang when --enable-warnings is not set. * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2019-09-11 Thomas E. Dickey * config.guess, config.sub: 2019-09-10 2019-06-17 Thomas E. Dickey * test/btyacc/big_b.error, test/btyacc/big_l.error, test/btyacc/help.error, test/btyacc/no_b_opt.error, test/btyacc/no_output2.error, test/btyacc/no_p_opt.error, test/btyacc/nostdin.error, test/yacc/big_b.error, test/yacc/big_l.error, test/yacc/help.error, test/yacc/no_b_opt.error, test/yacc/no_output2.error, test/yacc/no_p_opt.error, test/yacc/nostdin.error: regen * test/run_test.sh: test "-H" rather than "-D" 2019-06-16 Thomas E. Dickey * main.c, yacc.1: change "-D" option to "-H" (discussion with Ethan Sommer) * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump * test/btyacc/defines1.calc.c, test/btyacc/defines2.calc.c, test/btyacc/defines3.calc.c: RCS_BASE * test/run_test.sh: in test_defines, save the ".c" file too * test/yacc/defines3.calc.c, test/yacc/defines2.calc.c, test/yacc/defines1.calc.c: RCS_BASE * test/run_test.sh: output of test_defines should be a header ".h", not ".c" * test/btyacc/defines1.calc.h, test/btyacc/defines1.error, test/btyacc/defines1.output, test/btyacc/defines2.calc.h, test/btyacc/defines2.error, test/btyacc/defines2.output, test/btyacc/defines3.calc.h, test/btyacc/defines3.error, test/btyacc/defines3.output: RCS_BASE * main.c: however, a subsequent -d cancels -D * test/yacc/defines1.calc.h, test/yacc/defines3.calc.h: RCS_BASE * main.c: -D option implies -d * test/yacc/defines1.error, test/yacc/defines1.output, test/yacc/defines2.calc.h, test/yacc/defines2.error, test/yacc/defines2.output, test/yacc/defines3.error, test/yacc/defines3.output: RCS_BASE * yacc.1: align macro definitions with my other manpages * test/run_test.sh: add test for -D after -d or -b options * test/btyacc/stdin1.calc.c, test/btyacc/stdin1.error, test/btyacc/stdin1.output, test/btyacc/stdin2.calc.c, test/btyacc/stdin2.error, test/btyacc/stdin2.output: RCS_BASE * test/btyacc/big_b.error, test/btyacc/big_b.output, test/btyacc/big_l.error, test/btyacc/big_l.output, test/btyacc/help.error, test/btyacc/help.output, test/btyacc/no_b_opt.error, test/btyacc/no_b_opt.output, test/btyacc/no_b_opt1.error, test/btyacc/no_b_opt1.output, test/btyacc/no_code_c.error, test/btyacc/no_code_c.output, test/btyacc/no_defines.error, test/btyacc/no_defines.output, test/btyacc/no_graph.error, test/btyacc/no_graph.output, test/btyacc/no_include.error, test/btyacc/no_include.output, test/btyacc/no_opts.error, test/btyacc/no_opts.output, test/btyacc/no_output.error, test/btyacc/no_output.output, test/btyacc/no_output1.error, test/btyacc/no_output1.output, test/btyacc/no_output2.error, test/btyacc/no_output2.output, test/btyacc/no_p_opt.error, test/btyacc/no_p_opt.output, test/btyacc/no_p_opt1.error, test/btyacc/no_p_opt1.output, test/btyacc/no_verbose.error, test/btyacc/no_verbose.output, test/btyacc/nostdin.error, test/btyacc/nostdin.output, test/yacc/big_b.error, test/yacc/big_b.output, test/yacc/big_l.error, test/yacc/big_l.output, test/yacc/help.error, test/yacc/help.output, test/yacc/no_b_opt.error, test/yacc/no_b_opt.output, test/yacc/no_b_opt1.error, test/yacc/no_b_opt1.output, test/yacc/no_code_c.error, test/yacc/no_code_c.output, test/yacc/no_defines.error, test/yacc/no_defines.output, test/yacc/no_graph.error, test/yacc/no_graph.output, test/yacc/no_include.error, test/yacc/no_include.output, test/yacc/no_opts.error, test/yacc/no_opts.output, test/yacc/no_output.error, test/yacc/no_output.output, test/yacc/no_output1.error, test/yacc/no_output1.output, test/yacc/no_output2.error, test/yacc/no_output2.output, test/yacc/no_p_opt.error, test/yacc/no_p_opt.output, test/yacc/no_p_opt1.error, test/yacc/no_p_opt1.output, test/yacc/no_verbose.error, test/yacc/no_verbose.output, test/yacc/nostdin.error, test/yacc/nostdin.output: regen * test/run_test.sh: add a test for stdin "-" vs end-options "--", and correct a redirection of stderr in test_flags * test/yacc/stdin2.output, test/yacc/stdin2.calc.c, test/yacc/stdin1.calc.c, test/yacc/stdin1.error, test/yacc/stdin1.output, test/yacc/stdin2.error: RCS_BASE * test/btyacc/big_b.output, test/btyacc/big_l.output, test/btyacc/help.output, test/btyacc/no_b_opt.output, test/btyacc/no_output2.output, test/btyacc/no_p_opt.output, test/btyacc/nostdin.output, test/yacc/big_b.output, test/yacc/big_l.output, test/yacc/help.output, test/yacc/no_b_opt.output, test/yacc/no_output2.output, test/yacc/no_p_opt.output, test/yacc/nostdin.output: regen * main.c: add -D option, to specify filename vs y.tab.h for -d * defs.h: add dflag2, for -D option * yacc.1: document -D option * config_h.in: updated with autoheader-252 * configure: regen * package/debian/copyright: bump * aclocal.m4: add CF_GETOPT_HEADER * aclocal.m4: Improved autoconf macros: + CF_CC_ENV_FLAGS putting preprocessor flags in CFLAGS also is a nuisance, which can be addressed in the same way. + CF_GCC_WARNINGS factor out workaround for XTSTRINGDEFINES as CF_CONST_X_STRING + CF_GNU_SOURCE The check for _DEFAULT_SOURCE should apply to "recent" Cygwin (since early 2016), and except for "NEWLIB" vs "GLIBC" in the test, acts the same if I pretend that "newlib" is the GNU C library. Without this, the check falls through to the _XOPEN_SOURCE test, which breaks the pseudoterminal checks for xterm. + CF_POSIX_C_SOURCE add/use CF_POSIX_VISIBLE + CF_TRY_XOPEN_SOURCE use CF_APPEND_TEXT + CF_WITH_MAN2HTML use sed to work around non-POSIX tail utility + CF_XOPEN_SOURCE use CF_APPEND_TEXT add/use CF_POSIX_VISIBLE * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2019-06-10 Thomas E. Dickey * config.guess: 2019-06-10 2019-05-22 Thomas E. Dickey * config.sub: 2019-05-22 2018-06-09 Thomas E. Dickey * yacc.1: minor typographical fixes * test/btyacc/err_syntax20.tab.c, test/btyacc/error.tab.c, test/btyacc/expr.oxout.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c, test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax18.tab.c, test/btyacc/rename_debug.c, btyaccpar.c: regen * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2018-06-09 Tom.Shields * btyaccpar.skel: add casts to fix g++ (clang++) compile errors in the backtracking skeleton due to assignment of ‘void *’ to another pointer type. 2018-05-25 Thomas E. Dickey * test/run_make.sh: check if this is bison 3+ before adding options to suppress warnings * package/byacc.spec: build-fix for Mageia 6 * package/byacc.spec: add btyacc package * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump * package/debian/control: add a package for btyacc * package/debian/rules: generate a package for btyacc 2018-05-24 Thomas E. Dickey * test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c, test/btyacc/code_error.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c, test/btyacc/error.tab.c, test/btyacc/expr.oxout.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c, btyaccpar.c, test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/btyacc/rename_debug.c: regen * btyaccpar.skel: fix typo 2018-05-21 Thomas E. Dickey * test/run_make.sh: ignore case for "%" directives to skip with old-yacc, and add %token-table to the list * btyaccpar.c: regen 2018-05-21 Christos.Zoulas * btyaccpar.skel: improve compatibility with bison by changing the YYLLOC_DEFAULT macro to use YYRHSLOC() macro, and adjusting the array indices of yyerror_loc_range[] for consistency. 2018-05-10 Thomas E. Dickey * output.c: add a fallback definition for YYDEBUG to the -i externs file. * test/btyacc/rename_debug.i, test/yacc/rename_debug.i: regen * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2018-05-09 Thomas E. Dickey * configure: regen * aclocal.m4: resync with my-autoconf * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump * test/btyacc/rename_debug.i, btyaccpar.c, test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c, test/btyacc/error.tab.c, test/btyacc/expr.oxout.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/rename_debug.c, test/btyacc/varsyntax_calc1.tab.c: regen * btyaccpar.skel: apply Guy Harris' changes here as well * test/btyacc/rename_debug.i, test/yacc/rename_debug.i: regen * output.c: correct/improve fallback prototype for yylex() * test/btyacc/rename_debug.i, test/yacc/rename_debug.i: regen 2018-05-08 Thomas E. Dickey * test/btyacc/grammar.tab.c, test/yacc/grammar.tab.c: regen * test/grammar.y: quiet some warnings from gcc 7 when doing "make check_make" * package/debian/watch, package/pkgsrc/Makefile: update ftp-url * test/btyacc/ok_syntax1.tab.h, test/btyacc/btyacc_calc1.tab.h: regen * output.c: provide yylex() declaration for simple case (request by "Mutiny") * test/yacc/err_syntax20.tab.c, test/yacc/error.tab.c, test/yacc/expr.oxout.tab.c, test/yacc/grammar.tab.c, test/yacc/ok_syntax1.tab.c, test/yacc/ok_syntax1.tab.h, test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c, test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_error.code.c, test/yacc/empty.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax18.tab.c, test/yacc/rename_debug.c, test/yacc/rename_debug.i, yaccpar.c: regen * VERSION, package/byacc.spec, package/debian/changelog, package/debian/copyright, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2018-05-06 Guy.Harris * yaccpar.skel: two fixes: 1) define yydebug only if YYDEBUG is defined and 2) make yynerrs a parser-local variable if the parser is reentrant. 2018-02-24 Guy.Harris * output.c: do not emit "extern YYSTYPE yylval;" for pure parsers 2018-02-05 Thomas E. Dickey * config.sub: 2018-01-15 * config.guess: 2018-01-26 2017-12-04 erik.b.andersen * main.c: A proper path for temporary files is needed by byacc under Windows commandline, otherwise there's a risk of empty files. The TEMP environment variable is always defined in Windows. * defs.h: The noreturn attribute needs to be specified before function to be portable among compilers (gcc, clang, msvc). 2017-12-04 Thomas E. Dickey * reader.c: adapted fix by Erik B: a) increase the length of name[] to account for a trailing null b) note that calling syntax_error() from get_number() does not return 2017-09-14 Tom.Shields * yacc.1: fix typo 2017-07-09 Thomas E. Dickey * package/byacc.spec, package/mingw-byacc.spec: use predefined "configure" * reader.c: remove unused assignment * package/debian/rules: use dpkg-buildflags * configure: regen * aclocal.m4: resync with my-autoconf * reader.c, output.c, defs.h: add/use IS_NAME1() and IS_NAME2() to reduce clutter * reader.c, output.c, defs.h: guard against sign-extension in ctype-macros * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump * reader.c: check for numeric overflow in get_number() * reader.c: correct limit-checks for input filename and line-number, in case no valid filename and/or number was found. 2017-04-30 Thomas E. Dickey * test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c, test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c, test/btyacc/error.tab.c, test/btyacc/expr.oxout.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/rename_debug.c, btyaccpar.c, btyaccpar.skel: fix another uninitialized variable warning in "make check_make" for btyacc * test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/ok_syntax1.tab.c, test/btyacc/btyacc_calc1.tab.c, test/btyacc/calc3.tab.c, btyaccpar.c, btyaccpar.skel, test/yacc/ok_syntax1.tab.c, test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/calc3.tab.c, yaccpar.c, defs.h, yaccpar.skel, output.c: fix some compiler warnings for "make check_make" by adding section init_vars, which initializes the body_vars for pure-parser configuration. 2017-04-30 Tom.Shields * output.c: use YY_NO_LEAKS set in configure --with-no-leaks, in the generated code 2017-04-30 Julien.Ramseier * main.c, test/yacc/big_l.output: fix typo in unsupported-flag warning message 2017-04-30 Thomas E. Dickey * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2017-04-29 Thomas E. Dickey * config.sub: 2017-04-02 2017-03-18 Thomas E. Dickey * config.sub: 2017-02-07 * config.guess: 2017-03-05 2017-02-01 Thomas E. Dickey * test/btyacc/expr.oxout.error, test/btyacc/expr.oxout.output, test/btyacc/expr.oxout.tab.c, test/btyacc/expr.oxout.tab.h, test/yacc/expr.oxout.error, test/yacc/expr.oxout.output, test/yacc/expr.oxout.tab.c, test/yacc/expr.oxout.tab.h: RCS_BASE * package/debian/copyright: update copyright * reader.c, defs.h, main.c: avoid using regex.h since some low-end platforms do not have this * test/expr.oxout.y: RCS_BASE * configure: regen * aclocal.m4: quiet a strict gcc warning in CF_MKSTEMP 2017-02-01 Tom.Shields * main.c, reader.c, defs.h: process #line directives, like bison and flex 2017-02-01 Thomas E. Dickey * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2016-12-31 Thomas E. Dickey * config.guess, config.sub: 2017-01-01 2016-12-02 Thomas E. Dickey * test/btyacc/quote_calc4-s.tab.c, test/btyacc/varsyntax_calc1.tab.c, test/btyacc/error.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c, test/btyacc/rename_debug.c, test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.tab.c, btyaccpar.c: regen * btyaccpar.skel: changes from NetBSD + use YYINT rather than short in btyaccpar.skel (some of this had already been done by Tom Shields) + remove some casts of malloc/realloc * yaccpar.c, yaccpar.skel, output.c: changes from NetBSD - Add some more bison stuff to make the mesa/gallium parser work: %initial-action (add missing source struct member in location) %debug (unimplemented) %error-verbose (unimplemented) This changes some existing code: + yylloc is now a pointer, so + the first parameter to YYERROR_DECL() is a pointer + struct YYLTYPE now has a "source" field * test/btyacc/btyacc_demo.tab.h, test/btyacc/code_calc.tab.c, test/btyacc/code_error.tab.c, test/btyacc/err_inherit4.tab.h: regen * btyaccpar.c, btyaccpar.skel, reader.c: changes from NetBSD - Add some more bison stuff to make the mesa/gallium parser work: %initial-action (add missing source struct member in location) %debug (unimplemented) %error-verbose (unimplemented) This changes some existing code: + yylloc is now a pointer, so + the first parameter to YYERROR_DECL() is a pointer + struct YYLTYPE now has a "source" field * reader.c: fix from NetBSD: correct off-by-one when adding a null in copy_param() * reader.c: adapted from NetBSD - Convert *most* error fingerprints to: -unterminated_arglist(int a_lineno, char *a_line, char *a_cptr) +unterminated_arglist(const struct ainfo *a) - Cast new args to unsigned char * defs.h: changes from NetBSD - Add some more bison stuff to make the mesa/gallium parser work: %initial-action (add missing source struct member in location) %debug (unimplemented) %error-verbose (unimplemented) This changes some existing code: + yylloc is now a pointer, so + the first parameter to YYERROR_DECL() is a pointer + struct YYLTYPE now has a "source" field * defs.h: adapted from NetBSD - Convert *most* error fingerprints to: -unterminated_arglist(int a_lineno, char *a_line, char *a_cptr) +unterminated_arglist(const struct ainfo *a) - Cast new args to unsigned char * main.c: changes from NetBSD - Add some more bison stuff to make the mesa/gallium parser work: %initial-action (add missing source struct member in location) %debug (unimplemented) %error-verbose (unimplemented) This changes some existing code: + yylloc is now a pointer, so + the first parameter to YYERROR_DECL() is a pointer + struct YYLTYPE now has a "source" field * error.c: adapted from NetBSD - Convert *most* error fingerprints to: -unterminated_arglist(int a_lineno, char *a_line, char *a_cptr) +unterminated_arglist(const struct ainfo *a) - Cast new args to unsigned char * mstring.c: adapted change from NetBSD to add casts for ctype macros * test/btyacc/btyacc_demo.tab.h, test/btyacc/err_inherit4.tab.h: regen * output.c: reorder to eliminate a forward-reference 2016-12-02 Tom.Shields * output.c: modify output to enable compilation of a lexer generated by flex (using "%option bison-bridge" and "%option bison-locations") to be used with a parser generated by b(t)yacc (using directives "%locations" and "%pure-parser"). 2016-12-02 Thomas E. Dickey * configure: regen * aclocal.m4: Improved autoconf macros CF_CC_ENV_FLAGS + improve split between compiler and options, prompted by report where user had "ccache" before the compiler + leave non-preprocessor options in "$CC" (but still copy them to "$CFLAGS" since that's where they should be) CF_GNU_SOURCE,v + recent glibc (Debian 2.23-4 for example) has misordered ifdef/checks for new symbol _DEFAULT_SOURCE, producing warning messages when only _GNU_SOURCE is defined. Add a followup check to define _DEFAULT_SOURCE. CF_XOPEN_SOURCE + add "uclinux" to list of Linux's (patch by Yann E. Morin) + use _GNU_SOURCE for cygwin headers + build-fixes for OS/2 * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2016-11-20 Thomas E. Dickey * config.sub: 2016-11-19 * config.guess: 2016-10-02 2016-06-06 Thomas E. Dickey * configure: regen * aclocal.m4: improved autoconf macros: CF_CC_ENV_FLAGS - don't limit the check to -I, -U and -D options, since the added options can include various compiler options before and after preprocessor options. CF_PROG_LINT - add cpplint to programs to use; drop ad hoc tdlint and alint. * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump * lalr.c: indented * btyaccpar.c: regen * skel2c: adjust whitespace so that generated skeleton will follow the same format as other code * mkpar.c, verbose.c, lr0.c, reader.c, error.c, output.c: indented * reader.c: fix two compiler warnings * test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c, test/btyacc/error.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/rename_debug.c, btyaccpar.c, test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c, test/yacc/err_syntax20.tab.c, test/yacc/error.tab.c, test/yacc/grammar.tab.c, test/yacc/ok_syntax1.tab.c, test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_error.code.c, test/yacc/empty.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax18.tab.c, test/yacc/rename_debug.c, yaccpar.c: regen 2016-06-06 Tom.Shields * btyaccpar.skel, yaccpar.skel: small fix for an edge case of initialized data in Chris Dodd's btyacc changes: "Avoid crash when input pops up an Action error at the first token" 2016-06-01 Thomas E. Dickey * test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c, test/yacc/err_syntax18.tab.c, test/yacc/err_syntax20.tab.c, test/yacc/err_syntax24.error, test/yacc/error.tab.c, test/yacc/grammar.tab.c, test/yacc/ok_syntax1.tab.c, test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_calc.tab.c, test/yacc/code_calc.tab.h, test/yacc/code_error.code.c, test/yacc/empty.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c, test/yacc/rename_debug.c, yaccpar.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c, test/btyacc/err_syntax13.tab.c, test/btyacc/err_syntax14.tab.c, test/btyacc/err_syntax15.tab.c, test/btyacc/err_syntax16.tab.c, test/btyacc/err_syntax17.tab.c, test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax19.tab.c, test/btyacc/err_syntax2.tab.c, test/btyacc/err_syntax20.tab.c, test/btyacc/err_syntax21.tab.c, test/btyacc/err_syntax22.tab.c, test/btyacc/err_syntax23.tab.c, test/btyacc/err_syntax24.error, test/btyacc/err_syntax24.tab.c, test/btyacc/err_syntax25.tab.c, test/btyacc/err_syntax26.tab.c, test/btyacc/err_syntax27.tab.c, test/btyacc/err_syntax3.tab.c, test/btyacc/err_syntax4.tab.c, test/btyacc/err_syntax5.tab.c, test/btyacc/err_syntax6.tab.c, test/btyacc/err_syntax7.tab.c, test/btyacc/err_syntax7a.tab.c, test/btyacc/err_syntax7b.tab.c, test/btyacc/err_syntax8.tab.c, test/btyacc/err_syntax8a.tab.c, test/btyacc/err_syntax9.tab.c, test/btyacc/error.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.output, test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.error, test/btyacc/btyacc_demo.output, test/btyacc/btyacc_demo.tab.c, test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_calc.tab.c, test/btyacc/code_calc.tab.h, test/btyacc/code_error.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit1.tab.c, test/btyacc/err_inherit2.tab.c, test/btyacc/err_inherit3.output, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.output, test/btyacc/err_inherit4.tab.c, test/btyacc/err_inherit5.tab.c, test/btyacc/err_syntax1.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/rename_debug.c, btyaccpar.c: regen 2016-06-01 Tom.Shields * btyaccpar.skel, defs.h, error.c, output.c, reader.c, test/code_calc.y, test/err_inherit4.y, test/run_make.sh, yaccpar.skel: fixes for issues in btyacc (report by Francis Andre): + correction to the placement of the #line directive for a %union specification + recovery of a set of casts originally added into btyaccpar.c rather than into btyaccpar.skel, and so are lost whenever building from scratch + Chris Dodd's btyacc improved handling of inherited attributes to eliminate implicit empty copy rules that are not necessary, and thereby avoiding the introduction of extra parsing ambiguity + Chris Dodd's added support for @-N syntax to reference inherited position information + correction to bad interaction between %token-table and YYDEBUG, where YYDEBUG was required to be defined in order to compile the generated code + correction to yyname[] access in code included with YYDEBUG defined for single character symbols not recognized (e.g., input containing '&' character where grammar doesn't define that as a symbol) - map to existing "illegal-symbol" entry in byname[] + fixes to test/run_make.sh: skip test-err_* files; in the bison test phase skip additional files that contain features not supported by bison and inhibit new bison warning messages + minor changes to btyaccpar.skel & yaccpar.skel so they are more similar in their commonality; makes it easier to maintain the pair of files using vimdiff + changes to a couple of test cases for coverage of #3, #4 and #5 above 2016-06-01 Thomas E. Dickey * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2016-03-24 Thomas E. Dickey * reader.c: unused variable * package/pkgsrc/Makefile, package/debian/copyright: bump 2016-03-24 Jung-uk.Kim * main.c: correct logic for finding output suffix in the "-o" option, which matched the first occurrence of ".c" in the name in 2005-08-13 changes rather than at the end of the filename (patch by Jung-uk Kim) 2016-03-24 Thomas E. Dickey * aclocal.m4: update CF_WITH_MAN2HTML to use configured shell rather than /bin/sh * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2016-01-25 Thomas E. Dickey * config.guess, config.sub: 2016-01-01 2015-07-10 Thomas E. Dickey * lr0.c: fix a duplicate-free in the leak-checking * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump * reader.c: make cache-size clearer (prompted by discussion with Pedro Giffuni, Oliver Pinter) * main.c: make relationship with format/size clearer (prompted by discussion with Pedro Giffuni, Oliver Pinter) 2015-07-05 Thomas E. Dickey * configure: regen * package/pkgsrc/Makefile, package/mingw-byacc.spec, package/debian/copyright, package/debian/changelog, package/byacc.spec, VERSION: bump * aclocal.m4: resync with my-autoconf add configure option --with-man2html * makefile.in: add configure options --with-man2html * configure.in: add configure option --with-man2html 2015-05-02 Thomas E. Dickey * config.guess: 2015-03-04 * config.sub: 2015-03-08 2014-11-28 Thomas E. Dickey * lr0.c: coverity #39181: memory leak * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump 2014-11-13 Jouk.Jansen * descrip.mms: I sucessfully compiled byacc on my OpenVMS systems. However, I had to update the descrip.mms to include some extra c-source files and some dependenxcies so that it also works when the distribution is located on an ODS5 disk. The patched descrip.mms file can be found at: http://nchrem.tnw.tudelft.nl/openvms/software2.html#BYACC Please feel free to insert the file in your distribution. Regards Jouk. 2014-10-06 Thomas E. Dickey * package/detest/source/format: build-script * package/debian/source/format: change to native format to work around regression in Debian packaging. * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump * configure: regen * main.c: correct parameter for umask - for very old mkstemp's - and use type mode_t to quiet compiler warning * configure.in: add configure check for mode_t * reader.c: better fix for get_line, by ensuring there is enough space to null-terminate its result (prompted by discussion with Craig Rodrigues). 2014-10-05 Thomas E. Dickey * main.c: make change to umask before calling mkstemp, as suggested in Coverity #56902 * reader.c: adjust logic in copy_action to avoid potential null-pointer dereference (Coverity #56901) * reader.c: adjust logic to avoid potential null-pointer dereference in compile_args (Coverity #63407) * reader.c: eliminate strcpy into fixed-size buffer (Coverity #63408) * yacc.1: document changes made with respect to %parse-param * output.c: add parameters from %parse-param to destructor. The order of the parameters is intentionally inconsistent with yyparse/yyerror, for "compatibility" with bison. * test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.tab.c: regen * output.c: use puts_param_types/puts_param_names to output lex_param data. * test/btyacc/ok_syntax1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/yacc/ok_syntax1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/btyacc/error.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c, test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c, test/btyacc/rename_debug.c: regen * btyaccpar.c: add casts, change types to fix strict compiler warnings * test/btyacc/err_syntax17.tab.c, test/btyacc/err_syntax19.tab.c, test/btyacc/err_syntax2.tab.c, test/btyacc/err_syntax21.tab.c, test/btyacc/err_syntax22.tab.c, test/btyacc/err_syntax23.tab.c, test/btyacc/err_syntax24.tab.c, test/btyacc/err_syntax25.tab.c, test/btyacc/err_syntax26.tab.c, test/btyacc/err_syntax27.tab.c, test/btyacc/err_syntax3.tab.c, test/btyacc/err_syntax4.tab.c, test/btyacc/err_syntax5.tab.c, test/btyacc/err_syntax6.tab.c, test/btyacc/err_syntax7.tab.c, test/btyacc/err_syntax7a.tab.c, test/btyacc/err_syntax7b.tab.c, test/btyacc/err_syntax8.tab.c, test/btyacc/err_syntax8a.tab.c, test/btyacc/err_syntax9.tab.c, test/btyacc/err_inherit1.tab.c, test/btyacc/err_inherit2.tab.c, test/btyacc/err_inherit5.tab.c, test/btyacc/err_syntax1.tab.c, test/btyacc/err_syntax13.tab.c, test/btyacc/err_syntax14.tab.c, test/btyacc/err_syntax15.tab.c, test/btyacc/err_syntax16.tab.c: regen * output.c: gcc-warning * test/btyacc/code_calc.tab.c, test/btyacc/code_error.tab.c: regen * output.c: fix limit when merging real/workaround tables * output.c: for btyacc, it is possible to have no conflicts - but in that case, the "ctable" was not generated at all, while the skeleton uses the table. The most straightforward (workaround) is generating a dummy table which rejects any state. * test/btyacc_destroy3.y, test/btyacc_destroy2.y, test/btyacc_destroy1.y: fix "make check_make" * test/yacc/calc3.tab.c, test/yacc/ok_syntax1.tab.c, test/yacc/calc2.tab.c, test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c: regen * reader.c: trim blanks from interim value in copy_param() to handle special case when a space precedes a comma. * output.c: use two new functions, puts_param_types and puts_param_names, to improve format of the parse_param list (by trimming space after "*") as well as correcting the output of the comma-separated names (only the last name was output). * test/btyacc/ok_syntax1.tab.c, test/btyacc/btyacc_destroy3.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c: regen * reader.c: modify copy_param() to handle resulting comma-separated list. Before, it only expected a single parameter. 2014-10-04 Thomas E. Dickey * reader.c: split-out save_param() from copy_param() * reader.c: trim_blanks() did not always convert spaces - fix. * reader.c: fix some minor regressions with error-reporting * aclocal.m4: update CF_XOPEN_SOURCE for Unixware change from lynx * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump * reader.c: modify copy_param() to accept multiple parameters, each in curly braces like recent bison, as well as honoring bison's undocumented feature to accept the parameters as a comma-separated list. * test/btyacc/btyacc_destroy3.tab.c, test/btyacc/btyacc_destroy1.tab.c, test/btyacc/btyacc_destroy2.tab.c, test/btyacc/btyacc_destroy3.error, test/btyacc/btyacc_destroy3.output, test/btyacc/btyacc_destroy3.tab.h, test/btyacc/btyacc_destroy2.error, test/btyacc/btyacc_destroy2.output, test/btyacc/btyacc_destroy2.tab.h: RCS_BASE 2014-10-03 Thomas E. Dickey * test/btyacc/btyacc_demo2.error, test/btyacc/btyacc_demo2.output, test/btyacc/btyacc_demo2.tab.c, test/btyacc/btyacc_demo2.tab.h, test/btyacc/btyacc_destroy1.error, test/btyacc/btyacc_destroy1.output, test/btyacc/btyacc_destroy1.tab.h, test/btyacc_destroy3.y, test/btyacc_destroy1.y, test/btyacc_destroy2.y: RCS_BASE 2014-10-02 Thomas E. Dickey * main.c, reader.c, defs.h: use calloc in get_line() when allocating line to ensure it is fully initialized, fixes a later uninitialized value in copy_param() (FreeBSD #193499). 2014-09-17 Thomas E. Dickey * closure.c, lalr.c, output.c, defs.h: rephrase odd addressing to fix Coverity #48848, #38950, #38860, not actually a bug. 2014-09-01 Thomas E. Dickey * config.sub: update to 2014-07-28 2014-07-27 Thomas E. Dickey * configure: regen * aclocal.m4: modified to support port to Minix3.2 * package/pkgsrc/Makefile, VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec: bump 2014-07-15 Thomas E. Dickey * aclocal.m4: resync with my-autoconf (no change to configure script) * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump * test/run_test.sh: make top-level "make check" work again, by adding another step to filtering the test results. 2014-07-14 Thomas E. Dickey * test/run_test.sh: changes from Garrett Cooper's patch: a) ensure that the script returns an error-code if there are differences b) escape "." character in left side of sed expression for $YACC c) ensure that $ifBTYACC has a value * test/btyacc/big_b.output, test/btyacc/big_l.output, test/btyacc/help.output, test/btyacc/no_b_opt.output, test/btyacc/no_output2.output, test/btyacc/no_p_opt.output, test/btyacc/nostdin.output: regen (reminder by Garrett Cooper) 2014-07-14 Garrett.Cooper * test/btyacc/err_inherit1.error, test/btyacc/err_inherit2.error, test/btyacc/err_inherit3.error, test/btyacc/err_inherit4.error, test/btyacc/err_inherit5.error, test/btyacc/err_syntax1.error, test/btyacc/err_syntax10.error, test/btyacc/err_syntax11.error, test/btyacc/err_syntax12.error, test/btyacc/err_syntax13.error, test/btyacc/err_syntax14.error, test/btyacc/err_syntax15.error, test/btyacc/err_syntax16.error, test/btyacc/err_syntax17.error, test/btyacc/err_syntax18.error, test/btyacc/err_syntax19.error, test/btyacc/err_syntax2.error, test/btyacc/err_syntax21.error, test/btyacc/err_syntax22.error, test/btyacc/err_syntax23.error, test/btyacc/err_syntax24.error, test/btyacc/err_syntax25.error, test/btyacc/err_syntax26.error, test/btyacc/err_syntax27.error, test/btyacc/err_syntax3.error, test/btyacc/err_syntax4.error, test/btyacc/err_syntax5.error, test/btyacc/err_syntax6.error, test/btyacc/err_syntax7.error, test/btyacc/err_syntax7a.error, test/btyacc/err_syntax7b.error, test/btyacc/err_syntax8.error, test/btyacc/err_syntax8a.error, test/btyacc/err_syntax9.error, test/yacc/err_syntax1.error, test/yacc/err_syntax10.error, test/yacc/err_syntax11.error, test/yacc/err_syntax12.error, test/yacc/err_syntax13.error, test/yacc/err_syntax14.error, test/yacc/err_syntax15.error, test/yacc/err_syntax16.error, test/yacc/err_syntax17.error, test/yacc/err_syntax18.error, test/yacc/err_syntax19.error, test/yacc/err_syntax2.error, test/yacc/err_syntax21.error, test/yacc/err_syntax22.error, test/yacc/err_syntax23.error, test/yacc/err_syntax24.error, test/yacc/err_syntax25.error, test/yacc/err_syntax26.error, test/yacc/err_syntax27.error, test/yacc/err_syntax3.error, test/yacc/err_syntax4.error, test/yacc/err_syntax5.error, test/yacc/err_syntax6.error, test/yacc/err_syntax7.error, test/yacc/err_syntax7a.error, test/yacc/err_syntax7b.error, test/yacc/err_syntax8.error, test/yacc/err_syntax8a.error, test/yacc/err_syntax9.error: regen 2014-05-27 Tom.Shields * main.c: remove obsolete -D option from usage message 2014-05-27 Thomas E. Dickey * VERSION, package/byacc.spec, package/debian/changelog, test/yacc/big_b.output, test/yacc/big_l.output, test/yacc/help.output, test/yacc/no_b_opt.output, test/yacc/no_output2.output, test/yacc/no_p_opt.output, test/yacc/nostdin.output: bump 2014-04-22 Thomas E. Dickey * mstring.c: use vsnprintf() to ensure that msprintf's buffer is large enough. * main.c, defs.h: add mstring_leaks() * configure: regen * output.c: fix a complementary warning * mstring.c: introduce vsnprintf * configure.in, config_h.in: add check for vsnprintf * output.c: quiet a type-conversion warning * mstring.c: fix a potential memory leak on ENOMEM quiet a couple of type-conversion warnings * defs.h: add/use GCC_PRINTFLIKE for msprintf() 2014-04-22 Tom.Shields * README.BTYACC: drop "NOTES-btyacc-Changes" and "NOTES-btyacc-Disposition", merging relevant content into README.BTYACC 2014-04-22 Thomas E. Dickey * package/pkgsrc/Makefile, VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec: bump 2014-04-19 Thomas E. Dickey * config.sub: 2014-04-03 * config.guess: 2014-03-23 2014-04-09 Rick.Spates * main.c, defs.h: patch to allow DEBUG build with WIN32 system 2014-04-09 Thomas E. Dickey * output.c, reader.c: gcc warnings * reader.c: fix const-cast warnings * test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/ok_syntax1.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c, test/btyacc/code_error.tab.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/error.tab.c, test/btyacc/rename_debug.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.tab.c, output.c: fix a few clang --analyze warnings; one was a case where output_ctable emitted an empty table (which should be an error). * reader.c: appease clang --analyze * defs.h: mark two functions as no-return. * package/debian/changelog: reason for release * VERSION, package/byacc.spec, package/debian/changelog, package/mingw-byacc.spec, package/pkgsrc/Makefile: bump * makefile.in: use $LINT_OPTS from environment via configure script * test/btyacc/ok_syntax1.output, test/btyacc/ok_syntax1.tab.c, test/yacc/ok_syntax1.tab.c, test/ok_syntax1.y, test/yacc/ok_syntax1.output: tweaks to make generated files from ok_syntax1.y compile with check_make rule * test/btyacc/rename_debug.c, test/btyacc/rename_debug.error, test/btyacc/rename_debug.h, test/btyacc/rename_debug.i, test/btyacc/rename_debug.output, test/yacc/rename_debug.c: reference output for testing * test/run_test.sh: retain the renaming done for code_debug.y so that check_make will work. * test/yacc/rename_debug.error, test/yacc/rename_debug.h, test/yacc/rename_debug.i, test/yacc/rename_debug.output: reference output for testing * test/btyacc/ok_syntax1.error: RCS_BASE * test/yacc/quote_calc4-s.tab.c, test/yacc/varsyntax_calc1.tab.c, test/yacc/code_error.code.c, test/yacc/empty.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax18.tab.c, test/yacc/err_syntax20.tab.c, test/yacc/error.tab.c, test/yacc/grammar.tab.c, test/yacc/ok_syntax1.tab.c, test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4.tab.c, test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, yaccpar.c: regen * yacc.1: clarify relationship of btyacc features to default configuration. 2014-04-08 Thomas E. Dickey * test/yacc/ok_syntax1.output, test/yacc/ok_syntax1.tab.c, test/yacc/ok_syntax1.tab.h, test/btyacc/ok_syntax1.output, test/btyacc/ok_syntax1.tab.c, test/btyacc/ok_syntax1.tab.h: reference output for testing * test/ok_syntax1.y: RCS_BASE * test/yacc/ok_syntax1.error: reference output for testing * test/yacc/big_b.error, test/yacc/big_b.output, test/yacc/big_l.error, test/yacc/big_l.output, test/btyacc/big_b.error, test/btyacc/big_b.output, test/btyacc/big_l.error, test/btyacc/big_l.output, test/run_test.sh: exercise -L/-B options * test/yacc/code_debug.c, test/btyacc/code_debug.c, test/yacc/err_syntax15.tab.c, test/yacc/err_syntax16.tab.c, test/yacc/err_syntax17.tab.c, test/yacc/err_syntax18.tab.c, test/yacc/err_syntax19.tab.c, test/yacc/err_syntax2.tab.c, test/yacc/err_syntax20.tab.c, test/yacc/err_syntax21.tab.c, test/yacc/err_syntax22.tab.c, test/yacc/err_syntax23.tab.c, test/yacc/err_syntax24.tab.c, test/yacc/err_syntax25.tab.c, test/yacc/err_syntax26.tab.c, test/yacc/err_syntax27.tab.c, test/yacc/err_syntax3.tab.c, test/yacc/err_syntax4.tab.c, test/yacc/err_syntax5.tab.c, test/yacc/err_syntax6.tab.c, test/yacc/err_syntax7.tab.c, test/yacc/err_syntax7a.tab.c, test/yacc/err_syntax7b.tab.c, test/yacc/err_syntax8.tab.c, test/yacc/err_syntax8a.tab.c, test/yacc/err_syntax9.tab.c, test/yacc/error.tab.c, test/yacc/grammar.tab.c, test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c, test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_error.code.c, test/yacc/empty.tab.c, test/yacc/err_syntax1.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax13.tab.c, test/yacc/err_syntax14.tab.c, test/btyacc/err_syntax13.tab.c, test/btyacc/err_syntax14.tab.c, test/btyacc/err_syntax15.tab.c, test/btyacc/err_syntax16.tab.c, test/btyacc/err_syntax17.tab.c, test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax19.tab.c, test/btyacc/err_syntax2.tab.c, test/btyacc/err_syntax20.tab.c, test/btyacc/err_syntax21.tab.c, test/btyacc/err_syntax22.tab.c, test/btyacc/err_syntax23.tab.c, test/btyacc/err_syntax24.tab.c, test/btyacc/err_syntax25.tab.c, test/btyacc/err_syntax26.tab.c, test/btyacc/err_syntax27.tab.c, test/btyacc/err_syntax3.tab.c, test/btyacc/err_syntax4.tab.c, test/btyacc/err_syntax5.tab.c, test/btyacc/err_syntax6.tab.c, test/btyacc/err_syntax7.tab.c, test/btyacc/err_syntax7a.tab.c, test/btyacc/err_syntax7b.tab.c, test/btyacc/err_syntax8.tab.c, test/btyacc/err_syntax8a.tab.c, test/btyacc/err_syntax9.tab.c, test/btyacc/error.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/code_error.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit1.tab.c, test/btyacc/err_inherit2.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_inherit5.tab.c, test/btyacc/err_syntax1.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c, test/btyacc/btyacc_calc1.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/run_test.sh, test/yacc/no_b_opt1.output: use a better renaming of the YYPATCH definition (none of the test-cases rely upon it, but redefinition in the "make check_make" rule is a problem). * test/btyacc/err_syntax1.tab.c, test/btyacc/err_syntax13.tab.c, test/btyacc/err_syntax2.tab.c, test/btyacc/err_syntax25.tab.c, test/btyacc/err_syntax26.tab.c, test/btyacc/err_syntax27.tab.c, test/btyacc/err_syntax3.tab.c, test/btyacc/err_syntax4.tab.c, test/btyacc/err_syntax5.tab.c, test/btyacc/err_syntax6.tab.c, test/btyacc/err_syntax7.tab.c, test/btyacc/err_syntax7a.tab.c, test/btyacc/err_syntax7b.tab.c, test/btyacc/err_syntax8.tab.c, test/btyacc/err_syntax8a.tab.c, test/btyacc/err_syntax9.tab.c, test/btyacc/varsyntax_calc1.tab.c: undid temporary reordering in reader() by Tom Shields to align with byacc outputs * test/run_test.sh: remove a repeated test-case * mstring.c: minor reformatting to make coverage analysis simpler 2014-04-07 Thomas E. Dickey * test/run_test.sh: tidy * test/yacc/help.error, test/yacc/help.output, test/yacc/no_b_opt.error, test/yacc/no_b_opt.output, test/yacc/no_b_opt1.error, test/yacc/no_b_opt1.output, test/yacc/no_code_c.error, test/yacc/no_code_c.output, test/yacc/no_defines.error, test/yacc/no_defines.output, test/yacc/no_graph.error, test/yacc/no_graph.output, test/yacc/no_include.error, test/yacc/no_include.output, test/yacc/no_opts.error, test/yacc/no_opts.output, test/yacc/no_output.error, test/yacc/no_output.output, test/yacc/no_output1.error, test/yacc/no_output1.output, test/yacc/no_output2.error, test/yacc/no_output2.output, test/yacc/no_p_opt.error, test/yacc/no_p_opt.output, test/yacc/no_p_opt1.error, test/yacc/no_p_opt1.output, test/yacc/no_verbose.error, test/yacc/no_verbose.output, test/yacc/nostdin.error, test/yacc/nostdin.output, test/yacc/test-no_b_opt1.output: reference output for testing * test/run_test.sh: add special checks for flags which depend on writable/existing files * test/btyacc/no_b_opt1.output, test/btyacc/no_p_opt1.output, test/btyacc/no_b_opt.error, test/btyacc/no_b_opt.output, test/btyacc/no_b_opt1.error, test/btyacc/no_code_c.output, test/btyacc/no_p_opt.error, test/btyacc/no_p_opt.output, test/btyacc/no_p_opt1.error, test/btyacc/no_output2.output, test/btyacc/no_code_c.error, test/btyacc/no_output2.error, test/btyacc/no_include.error, test/btyacc/no_include.output, test/btyacc/no_defines.output, test/btyacc/no_defines.error, test/btyacc/no_verbose.output, test/btyacc/no_graph.output, test/btyacc/no_graph.error, test/btyacc/no_opts.error, test/btyacc/no_opts.output, test/btyacc/no_verbose.error, test/btyacc/nostdin.error, test/btyacc/nostdin.output, test/btyacc/no_output.error, test/btyacc/no_output.output, test/btyacc/no_output1.error, test/btyacc/no_output1.output: reference output for testing * main.c: change CREATE_FILE_NAMES() to use local function rather than inline code, to simplify coverage analysis. * test/btyacc/err_syntax27.error, test/btyacc/err_syntax27.output, test/btyacc/err_syntax27.tab.c, test/btyacc/err_syntax27.tab.h, test/btyacc/help.error, test/btyacc/help.output, test/yacc/err_syntax27.error, test/yacc/err_syntax27.output, test/yacc/err_syntax27.tab.c, test/yacc/err_syntax27.tab.h: reference output for testing * test/err_syntax27.y: testcase for missing_brace() * error.c: ifdef'd non-btyacc function * lr0.c: ifdef'd debug-code * yaccpar.skel: use YYINT's to replace short's as in btyaccpar.skel * test/btyacc/code_debug.c, test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax14.tab.c, test/btyacc/err_syntax15.tab.c, test/btyacc/err_syntax16.tab.c, test/btyacc/err_syntax17.tab.c, test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax19.tab.c, test/btyacc/err_syntax20.tab.c, test/btyacc/err_syntax21.tab.c, test/btyacc/err_syntax22.tab.c, test/btyacc/err_syntax23.tab.c, test/btyacc/err_syntax24.tab.c, test/btyacc/error.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c, test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit1.tab.c, test/btyacc/err_inherit2.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_inherit5.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax18.tab.c, test/yacc/err_syntax20.tab.c, test/yacc/error.tab.c, test/yacc/grammar.tab.c, test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c, test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_debug.c, test/yacc/code_error.code.c, test/yacc/empty.tab.c, test/yacc/err_syntax10.tab.c, output.c, test/yacc/err_syntax1.tab.c, test/yacc/err_syntax13.tab.c, test/yacc/err_syntax14.tab.c, test/yacc/err_syntax15.tab.c, test/yacc/err_syntax16.tab.c, test/yacc/err_syntax17.tab.c, test/yacc/err_syntax19.tab.c, test/yacc/err_syntax2.tab.c, test/yacc/err_syntax21.tab.c, test/yacc/err_syntax22.tab.c, test/yacc/err_syntax23.tab.c, test/yacc/err_syntax24.tab.c, test/yacc/err_syntax25.tab.c, test/yacc/err_syntax26.tab.c, test/yacc/err_syntax3.tab.c, test/yacc/err_syntax4.tab.c, test/yacc/err_syntax5.tab.c, test/yacc/err_syntax6.tab.c, test/yacc/err_syntax7.tab.c, test/yacc/err_syntax7a.tab.c, test/yacc/err_syntax7b.tab.c, test/yacc/err_syntax8.tab.c, test/yacc/err_syntax8a.tab.c, test/yacc/err_syntax9.tab.c, test/run_test.sh: 2010/11/26 simplification of output.c using putc_code() and putl_code() omitted an adjustment of the #line value used for code-file. Fix that. Also, amend 2005/05/04 change to run_test.sh to retain a dummy line for YYPATCH #define's to make test-outputs easier to compare #line's (report by Tom Shields) 2014-04-06 Thomas E. Dickey * reader.c: fix for valgrind (the calloc's are intentional - valgrind reported use of uninitialized memory) * lr0.c, output.c: fix for valgrind * test/btyacc/code_debug.c, test/btyacc/code_debug.error, test/btyacc/code_debug.h, test/btyacc/code_debug.i, test/btyacc/code_debug.output: RCS_BASE * test/yacc/code_debug.c, test/yacc/code_debug.h: exercise the -i option * test/yacc/code_debug.i: reference output for testing * test/run_test.sh: exercise the -i option * test/yacc/code_debug.c: reference output for testing * test/run_test.sh: exercise the "-o" option * test/yacc/code_debug.error, test/yacc/code_debug.h, test/yacc/code_debug.output: reference output for testing * output.c: don't call exit() without giving a chance to cleanup. * mstring.c: ifdef'd functions not used in byacc * btyaccpar.c: generated from btyaccpar.skel * yaccpar.c: generated from yaccpar.skel * skel2c: change the generated-by comment to show which version of this script (and which version of the given skeleton file) were used to produce the C-file. * configure: regen * makefile.in: add rules to generate byacc and btyacc parser skeleton files independently * aclocal.m4: CF_PROG_AWK - add to byacc's configure script CF_INTEL_COMPILER cleanup the -no-gcc option which was leftover from testing - prcs does not build with this option. CF_MAKE_DOCS protect $2 from substitution, for luit's "$(manext)" CF_XOPEN_SOURCE for Solaris (tested with gcc/g++ 3.4.3 on Solaris 10 and gcc/g++ 4.5.2 on Solaris 11), suppress the followup check for defining _XOPEN_SOURCE because it is not needed, as well as because g++ 4.7.3 (no package, used in Sage for Solaris 10) has some unspecified header breakage which is triggered by the duplicate definition. * configure.in: modify so skeleton-source is determined by configure options rather than by having developer rename yaccpar.skel.old to yaccpar.skel * descrip.mms: rename skeleton * vmsbuild.com: fwiw, renamed the skeleton for consistency with makefile * skel2c, skeleton.c: resync skeleton and its generating files * yaccpar.skel: renamed yaccpar.skel.old to yaccpar.skel, to allow using makefile suffix rules * yaccpar.skel.old: resync skeleton and its generating files * test/run_make.sh: improve cleanup after error recovery * test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_error.code.c, test/yacc/empty.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax18.tab.c, test/yacc/err_syntax20.tab.c, test/yacc/error.tab.c, test/yacc/grammar.tab.c, test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c, output.c, skeleton.c, defs.h: use improvement from Tom Shield's btyacc changes, getting rid of special cases for generating two yyerror calls in skeleton * output.c: simplify output_yyerror_decl() * test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c, test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/code_calc.tab.c, test/yacc/code_error.tab.c, test/yacc/empty.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax18.tab.c, test/yacc/err_syntax20.tab.c, test/yacc/error.tab.c, test/yacc/grammar.tab.c, test/yacc/pure_calc.tab.c, output.c: add second "const" to string-table declarations, from Tom Shield's btyacc changes * test/btyacc/err_syntax20.tab.c, test/btyacc/error.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c, test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax18.tab.c: discard unnecessary call on write_code_lineno() from Tom Shield's changes * test/yacc/error.tab.c, test/yacc/grammar.tab.c, test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c, test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_calc.tab.c, test/yacc/code_error.code.c, test/yacc/code_error.tab.c, test/yacc/empty.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax18.tab.c, test/yacc/err_syntax20.tab.c, output.c: use YYINT typedef from Tom Shield's btyacc changes to replace explicit "short" * test/yacc/code_calc.code.c, test/yacc/code_error.code.c, output.c: use fix from Tom Shield's btyacc changes: remove redundant extern-declaration for YYPARSE_DECL() * test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c, test/btyacc/error.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c, test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c: discard unnecessary call on write_code_lineno() from Tom Shield's changes * output.c, test/yacc/code_calc.code.c, test/yacc/code_error.code.c, test/yacc/code_calc.tab.c, test/yacc/code_error.tab.c: use fix from Tom Shield's btyacc changes: prefix-definitions went to the output (.tab.c) file in a case where they should have gone to the code (.code.c) file. Remove now-redundant call to output_prefix(). * main.c: do the same for help-message * main.c: use OUTPUT_SUFFIX symbol in an overlooked case * test/run_make.sh: modify to avoid use of VPATH, which has no standard implementation 2014-04-05 Thomas E. Dickey * test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c, test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c, test/btyacc/error.tab.c: discard a change which merged CountLines() with explicit comparisons against code_file because that adds extra to the #line values * test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c, test/yacc/calc.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_error.code.c, test/yacc/empty.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax18.tab.c, test/yacc/error.tab.c, output.c: add Tom Shield's change to allow definition of YYSTYPE_IS_DECLARED symbol to override fallback typedef for YYSTYPE when that symbol is undefined * test/btyacc/error.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c, test/btyacc/empty.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax18.tab.c: minor tweak to coding style - use parenthesis for "defined" operator's parameter * test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax20.tab.c, test/btyacc/error.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c, test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c: regen to make YYMAXTOKEN and YYUNDFTOKEN adjacent * test/yacc/err_syntax20.tab.c, test/yacc/grammar.tab.c, test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c, test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_calc.tab.c, test/yacc/code_error.code.c, test/yacc/code_error.tab.c, test/yacc/empty.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c: regen after adding the YYUNDFTOKEN symbol * output.c: integrate Tom Shield's btyacc changes which introduce the YYUNDFTOKEN symbol (I changed order of output to keep this adjacent to YYMAXTOKEN) * reader.c: merge all but one small change from Tom Shield's btyacc changes - that changes the order of code-file in the tests. * test/btyacc/btyacc_demo.tab.c: regen * test/btyacc_demo.y: fix prototypes 2014-04-04 Thomas E. Dickey * reader.c, defs.h, main.c: more merging of Tom Shield's btyacc changes. In the merge, I moved the symbol_pval inside the btyacc ifdef's and added some more btyacc ifdefs 2014-04-03 Thomas E. Dickey * reader.c: merge-in 3/4 of btyacc's changes, deferring those which change test-outputs. Tom Shield's changes split-out copy_string() and copy_comment() functions to simplify some logic, as well as adding btyacc-only chunks * makefile.in: build mstring.o, needed for changes in reader.c * output.c: merge-in all of btyacc's changes which do not change byacc's test-output. Some of the merge uses ifdef-changes which I applied to ongoing resync, e.g., the introduction of PER_STATE. 2014-04-02 Thomas E. Dickey * test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c: regen * output.c: fix typo * output.c, reader.c: merge in some chunks of reader and output files which do not affect byacc tests * test/yacc/calc2.tab.c, test/yacc/calc3.tab.c: regen * test/yacc/err_syntax6.tab.c, test/yacc/err_syntax7.tab.c, test/yacc/err_syntax7a.tab.c, test/yacc/err_syntax7b.tab.c, test/yacc/err_syntax8.tab.c, test/yacc/err_syntax8a.tab.c, test/yacc/err_syntax9.tab.c, test/yacc/error.tab.c, test/yacc/grammar.tab.c, test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c, test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_error.code.c, test/yacc/empty.tab.c, test/yacc/err_syntax1.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax13.tab.c, test/yacc/err_syntax14.tab.c, test/yacc/err_syntax15.tab.c, test/yacc/err_syntax16.tab.c, test/yacc/err_syntax17.tab.c, test/yacc/err_syntax18.tab.c, test/yacc/err_syntax19.tab.c, test/yacc/err_syntax2.tab.c, test/yacc/err_syntax20.tab.c, test/yacc/err_syntax21.tab.c, test/yacc/err_syntax22.tab.c, test/yacc/err_syntax23.tab.c, test/yacc/err_syntax24.tab.c, test/yacc/err_syntax25.tab.c, test/yacc/err_syntax26.tab.c, test/yacc/err_syntax3.tab.c, test/yacc/err_syntax4.tab.c, test/yacc/err_syntax5.tab.c, skeleton.c: incorporate YYENOMEM and YYEOF symbols from btyacc * output.c: merge chunk from btyacc changes for header-guards * btyaccpar.skel: RCS_BASE * yaccpar.skel: comment-out yysccsid[], for FreeBSD build-issues remove GCC_UNUSED to reduce name-pollution as well as being simpler * main.c: move a btyacc symbol outside ifdef to work around current state of merge * defs.h: add USE_HEADER_GUARDS to defer whether to modify byacc's header-output * test/run_make.sh: do not try to compile files used for testing syntax-errors, since they are likely to be incomplete 2014-04-02 Tom.Shields * main.c: changes for btyacc 2014-04-01 Thomas E. Dickey * reader.c: integrate change by Tom Shields to use bsearch rather than successive calls to matchec() * defs.h: typedef __compar_fn_t is unnecessary * test/btyacc/err_syntax20.tab.c, test/btyacc/error.tab.c, test/btyacc/grammar.tab.c, test/btyacc/inherit0.tab.c, test/btyacc/inherit1.tab.c, test/btyacc/inherit2.tab.c, test/btyacc/pure_calc.tab.c, test/btyacc/pure_error.tab.c, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4.tab.c, test/btyacc/varsyntax_calc1.tab.c, test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_demo.tab.c, test/btyacc/calc.tab.c, test/btyacc/calc1.tab.c, test/btyacc/calc2.tab.c, test/btyacc/calc3.tab.c, test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c, test/btyacc/empty.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax18.tab.c: omit the GCC_UNUSED, as noted by Tom Shields not really essential 2014-04-01 Tom.Shields * verbose.c: changes for btyacc, ifdef'd 2014-04-01 Thomas E. Dickey * mkpar.c: eliminate most of the ifdef's using macros 2014-04-01 Tom.Shields * mkpar.c: merge btyacc changes (ifdef'd - no change to byacc) * error.c: new functions used for reporting errors from the btyacc configuration (I reordered some, and ifdef'd the new ones -TD) 2014-03-31 Thomas E. Dickey * test/btyacc/code_calc.code.c, test/btyacc/code_error.code.c: omit the GCC_UNUSED, as noted by Tom Shields not really essential * test/btyacc/empty.tab.c, test/btyacc/err_inherit1.tab.c, test/btyacc/err_inherit2.tab.c, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit4.tab.c, test/btyacc/err_inherit5.tab.c, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax14.tab.c, test/btyacc/err_syntax15.tab.c, test/btyacc/err_syntax16.tab.c, test/btyacc/err_syntax17.tab.c, test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax19.tab.c, test/btyacc/err_syntax20.tab.c, test/btyacc/err_syntax21.tab.c, test/btyacc/err_syntax22.tab.c, test/btyacc/err_syntax23.tab.c, test/btyacc/err_syntax24.tab.c: regen 2014-03-29 Thomas E. Dickey * test/yacc/err_syntax22.tab.c, test/yacc/err_syntax23.tab.c, test/yacc/err_syntax24.tab.c, test/yacc/err_syntax25.tab.c, test/yacc/err_syntax26.tab.c, test/yacc/err_syntax3.tab.c, test/yacc/err_syntax4.tab.c, test/yacc/err_syntax5.tab.c, test/yacc/err_syntax6.tab.c, test/yacc/err_syntax7.tab.c, test/yacc/err_syntax7a.tab.c, test/yacc/err_syntax7b.tab.c, test/yacc/err_syntax8.tab.c, test/yacc/err_syntax8a.tab.c, test/yacc/err_syntax9.tab.c, test/yacc/error.tab.c, test/yacc/grammar.tab.c, test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c, test/yacc/varsyntax_calc1.tab.c, test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_error.code.c, test/yacc/empty.tab.c, test/yacc/err_syntax1.tab.c, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax13.tab.c, test/yacc/err_syntax14.tab.c, test/yacc/err_syntax15.tab.c, test/yacc/err_syntax16.tab.c, test/yacc/err_syntax17.tab.c, test/yacc/err_syntax18.tab.c, test/yacc/err_syntax19.tab.c, test/yacc/err_syntax2.tab.c, test/yacc/err_syntax20.tab.c, test/yacc/err_syntax21.tab.c, skeleton.c: comment-out yysccsid in the banner because it produces unnecessary compiler warnings. The suggested alternative (using #pragma ident) in the preceding comment is also obsolete; remove that comment (request by Gleb Smirnoff). * test/run_test.sh: for yacc, ignore the inherit testcases, since they are btyacc-specific 2014-03-28 Thomas E. Dickey * test/yacc/varsyntax_calc1.error, test/yacc/varsyntax_calc1.output, test/yacc/varsyntax_calc1.tab.c, test/yacc/varsyntax_calc1.tab.h, test/yacc/err_inherit3.error, test/yacc/err_inherit3.output, test/yacc/err_inherit3.tab.c, test/yacc/err_inherit3.tab.h, test/yacc/err_inherit4.error, test/yacc/err_inherit4.output, test/yacc/err_inherit4.tab.c, test/yacc/err_inherit4.tab.h, test/yacc/err_inherit5.error, test/yacc/err_inherit5.output, test/yacc/err_inherit5.tab.c, test/yacc/err_inherit5.tab.h, test/yacc/inherit0.error, test/yacc/inherit0.output, test/yacc/inherit0.tab.c, test/yacc/inherit0.tab.h, test/yacc/inherit1.error, test/yacc/inherit1.output, test/yacc/inherit1.tab.c, test/yacc/inherit1.tab.h, test/yacc/inherit2.error, test/yacc/inherit2.output, test/yacc/inherit2.tab.c, test/yacc/inherit2.tab.h, test/yacc/empty.error, test/yacc/empty.output, test/yacc/empty.tab.c, test/yacc/empty.tab.h, test/yacc/err_inherit1.error, test/yacc/err_inherit1.output, test/yacc/err_inherit1.tab.c, test/yacc/err_inherit1.tab.h, test/yacc/err_inherit2.error, test/yacc/err_inherit2.output, test/yacc/err_inherit2.tab.c, test/yacc/err_inherit2.tab.h: reference output for testing * test/run_lint.sh, test/run_make.sh, test/run_test.sh: moving #define's out of makefile broke check for yacc vs btyacc (fix) 2014-03-28 Tom.Shields * test/btyacc/btyacc_demo.tab.c, test/btyacc/err_inherit3.error, test/btyacc/err_inherit3.output, test/btyacc/err_inherit3.tab.c, test/btyacc/err_inherit3.tab.h, test/btyacc/err_inherit2.error, test/btyacc/err_inherit2.output, test/btyacc/err_inherit2.tab.c, test/btyacc/err_inherit2.tab.h, test/btyacc/err_inherit4.error, test/btyacc/err_inherit4.output, test/btyacc/err_inherit4.tab.c, test/btyacc/err_inherit4.tab.h, test/btyacc/err_inherit5.error, test/btyacc/err_inherit5.output, test/btyacc/err_inherit5.tab.c, test/btyacc/err_inherit5.tab.h, test/btyacc/inherit0.error, test/btyacc/inherit0.output, test/btyacc/inherit0.tab.c, test/btyacc/inherit0.tab.h, test/btyacc/inherit1.error, test/btyacc/inherit1.output, test/btyacc/inherit1.tab.c, test/btyacc/inherit1.tab.h, test/btyacc/inherit2.error, test/btyacc/inherit2.output, test/btyacc/inherit2.tab.c, test/btyacc/inherit2.tab.h, test/btyacc/calc.error, test/btyacc/err_inherit1.error, test/btyacc/err_inherit1.output, test/btyacc/err_inherit1.tab.c, test/btyacc/err_inherit1.tab.h: reference output for testing * defs.h: new functions/variables for btyacc (I reordered and ifdef'd -TD) * test/inherit0.y, test/inherit1.y: testcase for btyacc 2014-03-27 Tom.Shields * test/err_inherit5.y, test/err_inherit4.y, test/err_inherit3.y, test/err_inherit2.y, test/err_inherit1.y, test/inherit2.y: testcase for btyacc 2014-03-25 Tom.Shields * symtab.c: extra initialization needed for btyacc (I ifdef'd -TD) * yacc.1: document -L/-B features from btyacc 2014-03-25 Thomas E. Dickey * yacc.1: typo * configure: regen * configure.in: modified new options to act like those in my other configure-scripts, e.g., showing what option is being tested, and the resulting value. Put the definitions in config.h rather than in the makefile. 2014-03-25 Tom.Shields * makefile.in: add/use LINTFLAGS variable make all of the objects (not just skeleton) rebuild if makefile changes modify check-rule to reflect updates to run_test.sh vs subdirectory * mstring.c: byacc-btyacc-20140323 2014-03-25 Thomas E. Dickey * config_h.in: updated with autoheader-252 2014-03-25 Tom.Shields * README.BTYACC: byacc-btyacc-20140323 2014-03-24 Tom.Shields * test/btyacc/err_syntax1.output, test/btyacc/err_syntax1.tab.c, test/btyacc/err_syntax1.tab.h, test/btyacc/err_syntax10.error, test/btyacc/err_syntax10.output, test/btyacc/err_syntax10.tab.c, test/btyacc/err_syntax10.tab.h, test/btyacc/err_syntax11.error, test/btyacc/err_syntax11.output, test/btyacc/err_syntax11.tab.c, test/btyacc/err_syntax11.tab.h, test/btyacc/err_syntax12.error, test/btyacc/err_syntax12.output, test/btyacc/err_syntax12.tab.c, test/btyacc/err_syntax12.tab.h, test/btyacc/err_syntax13.error, test/btyacc/err_syntax13.output, test/btyacc/err_syntax13.tab.c, test/btyacc/err_syntax13.tab.h, test/btyacc/err_syntax14.error, test/btyacc/err_syntax14.output, test/btyacc/err_syntax14.tab.c, test/btyacc/err_syntax14.tab.h, test/btyacc/err_syntax15.error, test/btyacc/err_syntax15.output, test/btyacc/err_syntax15.tab.c, test/btyacc/err_syntax15.tab.h, test/btyacc/err_syntax16.error, test/btyacc/err_syntax16.output, test/btyacc/err_syntax16.tab.c, test/btyacc/err_syntax16.tab.h, test/btyacc/err_syntax17.error, test/btyacc/err_syntax17.output, test/btyacc/err_syntax17.tab.c, test/btyacc/err_syntax17.tab.h, test/btyacc/err_syntax18.error, test/btyacc/err_syntax18.output, test/btyacc/err_syntax18.tab.c, test/btyacc/err_syntax18.tab.h, test/btyacc/err_syntax19.error, test/btyacc/err_syntax19.output, test/btyacc/err_syntax19.tab.c, test/btyacc/err_syntax19.tab.h, test/btyacc/err_syntax2.output, test/btyacc/err_syntax2.tab.c, test/btyacc/err_syntax2.tab.h, test/btyacc/err_syntax20.error, test/btyacc/err_syntax20.output, test/btyacc/err_syntax20.tab.c, test/btyacc/err_syntax20.tab.h, test/btyacc/err_syntax21.error, test/btyacc/err_syntax21.output, test/btyacc/err_syntax21.tab.c, test/btyacc/err_syntax21.tab.h, test/btyacc/err_syntax22.error, test/btyacc/err_syntax22.output, test/btyacc/err_syntax22.tab.c, test/btyacc/err_syntax22.tab.h, test/btyacc/err_syntax23.error, test/btyacc/err_syntax23.output, test/btyacc/err_syntax23.tab.c, test/btyacc/err_syntax23.tab.h, test/btyacc/err_syntax24.error, test/btyacc/err_syntax24.output, test/btyacc/err_syntax24.tab.c, test/btyacc/err_syntax24.tab.h, test/btyacc/err_syntax25.error, test/btyacc/err_syntax25.output, test/btyacc/err_syntax25.tab.c, test/btyacc/err_syntax25.tab.h, test/btyacc/err_syntax26.error, test/btyacc/err_syntax26.output, test/btyacc/err_syntax26.tab.c, test/btyacc/err_syntax26.tab.h, test/btyacc/err_syntax3.output, test/btyacc/err_syntax3.tab.c, test/btyacc/err_syntax3.tab.h, test/btyacc/err_syntax4.output, test/btyacc/err_syntax4.tab.c, test/btyacc/err_syntax4.tab.h, test/btyacc/err_syntax5.output, test/btyacc/err_syntax5.tab.c, test/btyacc/err_syntax5.tab.h, test/btyacc/err_syntax6.output, test/btyacc/err_syntax6.tab.c, test/btyacc/err_syntax6.tab.h, test/btyacc/err_syntax7.output, test/btyacc/err_syntax7.tab.c, test/btyacc/err_syntax7.tab.h, test/btyacc/err_syntax7a.output, test/btyacc/err_syntax7a.tab.c, test/btyacc/err_syntax7a.tab.h, test/btyacc/err_syntax7b.output, test/btyacc/err_syntax7b.tab.c, test/btyacc/err_syntax7b.tab.h, test/btyacc/err_syntax8.output, test/btyacc/err_syntax8.tab.c, test/btyacc/err_syntax8.tab.h, test/btyacc/err_syntax8a.output, test/btyacc/err_syntax8a.tab.c, test/btyacc/err_syntax8a.tab.h, test/btyacc/err_syntax9.output, test/btyacc/err_syntax9.tab.c, test/btyacc/err_syntax9.tab.h: reference output for testing 2014-03-24 Thomas E. Dickey * defs.h: fix compiler warnings due to mputc() 2014-03-23 Tom.Shields * test/btyacc_demo.y: testcase for btyacc * test/btyacc/varsyntax_calc1.error, test/btyacc/varsyntax_calc1.output, test/btyacc/varsyntax_calc1.tab.c, test/btyacc/varsyntax_calc1.tab.h: reference output for testing * test/varsyntax_calc1.y, test/btyacc_calc1.y: testcase for btyacc 2014-03-23 Thomas E. Dickey * test/err_syntax26.error, test/err_syntax26.output, test/err_syntax26.tab.c, test/err_syntax26.tab.h, test/yacc/err_syntax26.error, test/yacc/err_syntax26.output, test/yacc/err_syntax26.tab.c, test/yacc/err_syntax26.tab.h: reference output for testing * test/err_syntax26.y: testcase for missing_brace() * test/err_syntax25.error, test/err_syntax25.output, test/err_syntax25.tab.c, test/err_syntax25.tab.h, test/yacc/err_syntax25.error, test/yacc/err_syntax25.output, test/yacc/err_syntax25.tab.c, test/yacc/err_syntax25.tab.h: reference output for testing * test/err_syntax25.y: testcase for over_unionized() * test/err_syntax24.error, test/err_syntax24.output, test/err_syntax24.tab.c, test/err_syntax24.tab.h, test/yacc/err_syntax24.error, test/yacc/err_syntax24.output, test/yacc/err_syntax24.tab.c, test/yacc/err_syntax24.tab.h: reference output for testing * test/err_syntax24.y: testcase for default_action_warning() 2014-03-23 Tom.Shields * test/btyacc/quote_calc3-s.error, test/btyacc/quote_calc4-s.error, test/btyacc/quote_calc4.error, test/btyacc/grammar.dot, test/btyacc/grammar.error, test/btyacc/pure_calc.error, test/btyacc/pure_error.error, test/btyacc/quote_calc-s.error, test/btyacc/quote_calc.error, test/btyacc/quote_calc2-s.error, test/btyacc/quote_calc2.error, test/btyacc/quote_calc3.error, test/btyacc/err_syntax2.error, test/btyacc/err_syntax3.error, test/btyacc/err_syntax4.error, test/btyacc/err_syntax5.error, test/btyacc/err_syntax6.error, test/btyacc/err_syntax7.error, test/btyacc/err_syntax7a.error, test/btyacc/err_syntax7b.error, test/btyacc/err_syntax8.error, test/btyacc/err_syntax8a.error, test/btyacc/err_syntax9.error, test/btyacc/error.error, test/btyacc/calc1.error, test/btyacc/calc2.error, test/btyacc/calc3.error, test/btyacc/code_calc.error, test/btyacc/code_error.error, test/btyacc/empty.error, test/btyacc/err_syntax1.error, test/btyacc/btyacc_calc1.error, test/btyacc/btyacc_demo.error: reference output for testing 2014-03-23 Thomas E. Dickey * test/err_syntax23.error, test/err_syntax23.output, test/err_syntax23.tab.c, test/err_syntax23.tab.h, test/yacc/err_syntax23.error, test/yacc/err_syntax23.output, test/yacc/err_syntax23.tab.c, test/yacc/err_syntax23.tab.h: reference output for testing * test/err_syntax23.y: testcase for untyped_lhs() 2014-03-23 Tom.Shields * test/run_test.sh: move test-outputs into subdirectories to keep btyacc/yacc results separate 2014-03-23 Thomas E. Dickey * test/err_syntax22.error, test/err_syntax22.output, test/err_syntax22.tab.c, test/err_syntax22.tab.h, test/yacc/err_syntax22.error, test/yacc/err_syntax22.output, test/yacc/err_syntax22.tab.c, test/yacc/err_syntax22.tab.h: reference output for testing * test/err_syntax22.y: testcase for untyped_rhs() * test/err_syntax21.error, test/err_syntax21.output, test/err_syntax21.tab.c, test/err_syntax21.tab.h, test/yacc/err_syntax21.error, test/yacc/err_syntax21.output, test/yacc/err_syntax21.tab.c, test/yacc/err_syntax21.tab.h, test/err_syntax20.error, test/err_syntax20.output, test/err_syntax20.tab.c, test/err_syntax20.tab.h, test/yacc/err_syntax20.error, test/yacc/err_syntax20.output, test/yacc/err_syntax20.tab.c, test/yacc/err_syntax20.tab.h: reference output for testing * test/err_syntax20.y: testcase for undefined_symbol_warning() * test/err_syntax21.y: testcase for unknown_rhs() * test/err_syntax19.error, test/err_syntax19.output, test/err_syntax19.tab.c, test/err_syntax19.tab.h, test/yacc/err_syntax19.error, test/yacc/err_syntax19.output, test/yacc/err_syntax19.tab.c, test/yacc/err_syntax19.tab.h: reference output for testing * test/err_syntax19.y: testcase for dollar_error() * test/err_syntax18.error, test/err_syntax18.output, test/err_syntax18.tab.c, test/err_syntax18.tab.h, test/yacc/err_syntax18.error, test/yacc/err_syntax18.output, test/yacc/err_syntax18.tab.c, test/yacc/err_syntax18.tab.h: reference output for testing * test/err_syntax18.y: testcase for dollar_warning() * test/err_syntax17.error, test/err_syntax17.output, test/err_syntax17.tab.c, test/err_syntax17.tab.h, test/yacc/err_syntax17.error, test/yacc/err_syntax17.output, test/yacc/err_syntax17.tab.c, test/yacc/err_syntax17.tab.h: reference output for testing * test/err_syntax17.y: testcase for unterminated_action() 2014-03-22 Thomas E. Dickey * test/err_syntax16.error, test/err_syntax16.output, test/err_syntax16.tab.c, test/err_syntax16.tab.h, test/yacc/err_syntax16.error, test/yacc/err_syntax16.output, test/yacc/err_syntax16.tab.c, test/yacc/err_syntax16.tab.h: reference output for testing * test/err_syntax16.y: testcase for terminal_lhs() * test/err_syntax15.error, test/err_syntax15.output, test/err_syntax15.tab.c, test/err_syntax15.tab.h, test/yacc/err_syntax15.error, test/yacc/err_syntax15.output, test/yacc/err_syntax15.tab.c, test/yacc/err_syntax15.tab.h: reference output for testing * test/err_syntax15.y: testcase for no_grammar() * test/err_syntax14.error, test/err_syntax14.output, test/err_syntax14.tab.c, test/err_syntax14.tab.h, test/yacc/err_syntax14.error, test/yacc/err_syntax14.output, test/yacc/err_syntax14.tab.c, test/yacc/err_syntax14.tab.h: reference output for testing * test/err_syntax14.y: testcase for restarted_warning() and undefined_goal() * test/err_syntax13.error, test/err_syntax13.output, test/err_syntax13.tab.c, test/err_syntax13.tab.h, test/yacc/err_syntax13.error, test/yacc/err_syntax13.output, test/yacc/err_syntax13.tab.c, test/yacc/err_syntax13.tab.h: reference output for testing * test/err_syntax13.y: testcase for terminal_start() * test/err_syntax12.error, test/err_syntax12.output, test/err_syntax12.tab.c, test/err_syntax12.tab.h, test/yacc/err_syntax12.error, test/yacc/err_syntax12.output, test/yacc/err_syntax12.tab.c, test/yacc/err_syntax12.tab.h: reference output for testing * test/err_syntax12.y: testcase for revalued_warning() * test/err_syntax11.error, test/err_syntax11.output, test/err_syntax11.tab.c, test/err_syntax11.tab.h, test/yacc/err_syntax11.error, test/yacc/err_syntax11.output, test/yacc/err_syntax11.tab.c, test/yacc/err_syntax11.tab.h: reference output for testing * test/err_syntax11.y: testcase for reprec_warning() * test/err_syntax10.error, test/err_syntax10.output, test/err_syntax10.tab.c, test/err_syntax10.tab.h, test/yacc/err_syntax10.error, test/yacc/err_syntax10.output, test/yacc/err_syntax10.tab.c, test/yacc/err_syntax10.tab.h: reference output for testing * test/err_syntax10.y: testcase for retyped_warning() 2014-03-21 Thomas E. Dickey * test/err_syntax9.error, test/err_syntax9.output, test/err_syntax9.tab.c, test/err_syntax9.tab.h, test/yacc/err_syntax9.error, test/yacc/err_syntax9.output, test/yacc/err_syntax9.tab.c, test/yacc/err_syntax9.tab.h: reference output for testing * test/err_syntax9.y: testcase for tokenized_start() * test/err_syntax8.error, test/err_syntax8.output, test/err_syntax8.tab.c, test/err_syntax8.tab.h, test/err_syntax8a.error, test/err_syntax8a.output, test/err_syntax8a.tab.c, test/err_syntax8a.tab.h, test/yacc/err_syntax8.error, test/yacc/err_syntax8.output, test/yacc/err_syntax8.tab.c, test/yacc/err_syntax8.tab.h, test/yacc/err_syntax8a.error, test/yacc/err_syntax8a.output, test/yacc/err_syntax8a.tab.c, test/yacc/err_syntax8a.tab.h: reference output for testing * test/err_syntax8a.y, test/err_syntax8.y: testcase for used_reserved() * test/err_syntax7.error, test/err_syntax7.output, test/err_syntax7.tab.c, test/err_syntax7.tab.h, test/err_syntax7a.error, test/err_syntax7a.output, test/err_syntax7a.tab.c, test/err_syntax7a.tab.h, test/err_syntax7b.error, test/err_syntax7b.output, test/err_syntax7b.tab.c, test/err_syntax7b.tab.h, test/yacc/err_syntax7.error, test/yacc/err_syntax7.output, test/yacc/err_syntax7.tab.c, test/yacc/err_syntax7.tab.h, test/yacc/err_syntax7a.error, test/yacc/err_syntax7a.output, test/yacc/err_syntax7a.tab.c, test/yacc/err_syntax7a.tab.h, test/yacc/err_syntax7b.error, test/yacc/err_syntax7b.output, test/yacc/err_syntax7b.tab.c, test/yacc/err_syntax7b.tab.h: reference output for testing * test/err_syntax7b.y, test/err_syntax7a.y, test/err_syntax7.y: testcase for illegal_character() * test/err_syntax6.error, test/err_syntax6.output, test/err_syntax6.tab.c, test/err_syntax6.tab.h, test/yacc/err_syntax6.error, test/yacc/err_syntax6.output, test/yacc/err_syntax6.tab.c, test/yacc/err_syntax6.tab.h: reference output for testing * test/err_syntax6.y: testcase for illegal_tag() * test/err_syntax5.error, test/err_syntax5.output, test/err_syntax5.tab.c, test/err_syntax5.tab.h, test/yacc/err_syntax5.error, test/yacc/err_syntax5.output, test/yacc/err_syntax5.tab.c, test/yacc/err_syntax5.tab.h: reference output for testing * test/err_syntax5.y: testcase for unterminated_union() * test/err_syntax4.error, test/err_syntax4.output, test/err_syntax4.tab.c, test/err_syntax4.tab.h, test/yacc/err_syntax4.error, test/yacc/err_syntax4.output, test/yacc/err_syntax4.tab.c, test/yacc/err_syntax4.tab.h: reference output for testing * test/err_syntax4.y: testcase for unterminated_text() * test/err_syntax3.error, test/err_syntax3.output, test/err_syntax3.tab.c, test/err_syntax3.tab.h, test/yacc/err_syntax3.error, test/yacc/err_syntax3.output, test/yacc/err_syntax3.tab.c, test/yacc/err_syntax3.tab.h: reference output for testing * test/err_syntax3.y: testcase for unterminated_string() * test/err_syntax2.error, test/err_syntax2.output, test/err_syntax2.tab.c, test/err_syntax2.tab.h, test/yacc/err_syntax2.error, test/yacc/err_syntax2.output, test/yacc/err_syntax2.tab.c, test/yacc/err_syntax2.tab.h: reference output for testing * test/err_syntax2.y: testcase for unterminated_comment() * test/err_syntax1.error, test/yacc/err_syntax1.error: reference output for testing * test/err_syntax1.y: test-case with syntax error (and nonprinting character) * test/calc.error, test/calc1.error, test/calc2.error, test/calc3.error, test/code_calc.error, test/code_error.error, test/err_syntax1.error, test/error.error, test/grammar.error, test/pure_calc.error, test/pure_error.error, test/quote_calc-s.error, test/quote_calc.error, test/quote_calc2-s.error, test/quote_calc2.error, test/quote_calc3-s.error, test/quote_calc3.error, test/quote_calc4-s.error, test/quote_calc4.error, test/yacc/calc.error, test/yacc/calc1.error, test/yacc/calc2.error, test/yacc/calc3.error, test/yacc/code_calc.error, test/yacc/code_error.error, test/yacc/error.error, test/yacc/grammar.error, test/yacc/pure_calc.error, test/yacc/pure_error.error, test/yacc/quote_calc-s.error, test/yacc/quote_calc.error, test/yacc/quote_calc2-s.error, test/yacc/quote_calc2.error, test/yacc/quote_calc3-s.error, test/yacc/quote_calc3.error, test/yacc/quote_calc4-s.error, test/yacc/quote_calc4.error: reference output for testing * test/run_test.sh: save stderr to reference files, to capture shift/reduce messages as well as syntax-error messages * test/err_syntax1.output, test/err_syntax1.tab.c, test/err_syntax1.tab.h, test/yacc/err_syntax1.output, test/yacc/err_syntax1.tab.c, test/yacc/err_syntax1.tab.h: reference output for testing * test/run_test.sh: generate a ".dot" file for the grammar file * test/grammar.dot: RCS_BASE * test/yacc/grammar.dot: reference output for testing 2014-03-19 Tom.Shields * output.c: rename MAXSHORT to MAXYYINT 2014-03-18 Tom.Shields * yaccpar.skel: skeleton with btyacc additions * NOTES-btyacc-Changes: byacc-btyacc-20140323 * test/btyacc/btyacc_calc1.output, test/btyacc/btyacc_calc1.tab.c, test/btyacc/btyacc_calc1.tab.h: reference output for testing * test/run_make.sh: move test-outputs into subdirectories to keep btyacc/yacc results separate * test/btyacc/pure_calc.tab.c, test/btyacc/pure_calc.tab.h, test/btyacc/pure_error.output, test/btyacc/pure_error.tab.c, test/btyacc/pure_error.tab.h, test/btyacc/quote_calc-s.output, test/btyacc/quote_calc-s.tab.c, test/btyacc/quote_calc-s.tab.h, test/btyacc/quote_calc.output, test/btyacc/quote_calc.tab.c, test/btyacc/quote_calc.tab.h, test/btyacc/quote_calc2-s.output, test/btyacc/quote_calc2-s.tab.c, test/btyacc/quote_calc2-s.tab.h, test/btyacc/quote_calc2.output, test/btyacc/quote_calc2.tab.c, test/btyacc/quote_calc2.tab.h, test/btyacc/quote_calc3-s.output, test/btyacc/quote_calc3-s.tab.c, test/btyacc/quote_calc3-s.tab.h, test/btyacc/quote_calc3.output, test/btyacc/quote_calc3.tab.c, test/btyacc/quote_calc3.tab.h, test/btyacc/quote_calc4-s.output, test/btyacc/quote_calc4-s.tab.c, test/btyacc/quote_calc4-s.tab.h, test/btyacc/quote_calc4.output, test/btyacc/quote_calc4.tab.c, test/btyacc/quote_calc4.tab.h, test/btyacc/calc1.output, test/btyacc/calc1.tab.c, test/btyacc/calc1.tab.h, test/btyacc/calc2.output, test/btyacc/calc2.tab.c, test/btyacc/calc2.tab.h, test/btyacc/calc3.output, test/btyacc/calc3.tab.c, test/btyacc/calc3.tab.h, test/btyacc/code_calc.code.c, test/btyacc/code_calc.output, test/btyacc/code_calc.tab.c, test/btyacc/code_calc.tab.h, test/btyacc/code_error.code.c, test/btyacc/code_error.output, test/btyacc/code_error.tab.c, test/btyacc/code_error.tab.h, test/btyacc/empty.output, test/btyacc/empty.tab.c, test/btyacc/empty.tab.h, test/btyacc/error.output, test/btyacc/error.tab.c, test/btyacc/error.tab.h, test/btyacc/grammar.output, test/btyacc/grammar.tab.c, test/btyacc/grammar.tab.h, test/btyacc/pure_calc.output, test/btyacc/btyacc_demo.output, test/btyacc/btyacc_demo.tab.h, test/btyacc/calc.output, test/btyacc/calc.tab.c, test/btyacc/calc.tab.h: reference output for testing * defs.h: several changes to help decouple the use of 'short' as the type of value used in yacc parsers. * NOTES-btyacc-Disposition: byacc-btyacc-20140323 2014-03-17 Tom.Shields * skel2c, yaccpar.skel, yaccpar.skel.old: RCS_BASE * test/run_lint.sh: move test-outputs into subdirectories to keep btyacc/yacc results separate * configure.in: add --with-max-table-size and --enable-btyacc options 2014-03-16 Tom.Shields * main.c: use Value_t rather than short 2014-03-11 Tom.Shields * test/empty.y: testcase for btyacc 2014-03-10 Tom.Shields * test/calc3.y, test/calc2.y: fix unused-variable warning 2014-02-18 Tom.Shields * lr0.c, graph.c: use Value_t rather than short * closure.c: use Value_t rather than short ifdef'd forward-reference prototypes to match ifdef'ing of the actual functions * lalr.c: rename MAXSHORT to MAXYYINT 2014-01-01 Thomas E. Dickey * yacc.1: document %token-table, improve presentation of double-quotes * VERSION, package/byacc.spec, package/debian/changelog: bump * test/yacc/calc.tab.c, test/yacc/calc1.tab.c, test/yacc/calc2.tab.c, test/yacc/calc3.tab.c, test/yacc/code_calc.code.c, test/yacc/code_calc.tab.c, test/yacc/code_error.code.c, test/yacc/code_error.tab.c, test/yacc/error.tab.c, test/yacc/grammar.tab.c, test/yacc/pure_calc.tab.c, test/yacc/pure_error.tab.c, test/yacc/quote_calc-s.tab.c, test/yacc/quote_calc.tab.c, test/yacc/quote_calc2-s.tab.c, test/yacc/quote_calc2.tab.c, test/yacc/quote_calc3-s.tab.c, test/yacc/quote_calc3.tab.c, test/yacc/quote_calc4-s.tab.c, test/yacc/quote_calc4.tab.c: reference output for testing * test/calc.tab.c, test/calc1.tab.c, test/calc2.tab.c, test/calc3.tab.c, test/code_calc.code.c, test/code_calc.tab.c, test/code_error.code.c, test/code_error.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c, test/pure_calc.tab.c, test/pure_error.tab.c, test/quote_calc-s.tab.c, test/quote_calc.tab.c, test/quote_calc2-s.tab.c, test/quote_calc2.tab.c, test/quote_calc3-s.tab.c, test/quote_calc3.tab.c, test/quote_calc4-s.tab.c, test/quote_calc4.tab.c: regen * output.c, skeleton.c: amend the last change so that yytname is #define'd as needed rather than permanent - to avoid breaking cproto for instance. 2014-01-01 Christos.Zoulas * output.c, defs.h, main.c, reader.c, skeleton.c: changes to build ntpd using byacc: - rename yyname[] to yytname[] - add YYTRANSLATE() macro - recognize bison's %token-table declaration 2014-01-01 Thomas E. Dickey * configure: regen * yacc.1: s/EE/XE/ to work around groff bug on Debian 6 * makefile.in: use CF_MAKE_DOCS * aclocal.m4: add CF_MAKE_DOCS * configure.in: use CF_MAKE_DOCS 2013-12-26 Thomas E. Dickey * config.guess: 2013-11-29 2013-11-19 Thomas E. Dickey * aclocal.m4: resync with my-autoconf (fixes for clang and mingw) 2013-10-25 Thomas E. Dickey * config.sub: 2013-10-01 2013-09-25 Thomas E. Dickey * reader.c: fix two loop-limits found by clang 3.3 --analyze * configure: regen * aclocal.m4: tweaks to CF_MIXEDCASE_FILENAMES and CF_XOPEN_SOURCE for msys from ncurses * package/mingw-byacc.spec: RCS_BASE * test/calc.tab.c, test/calc1.tab.c, test/calc2.tab.c, test/calc3.tab.c, test/code_calc.code.c, test/code_error.code.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c, test/pure_calc.tab.c, test/pure_error.tab.c, test/quote_calc-s.tab.c, test/quote_calc.tab.c, test/quote_calc2-s.tab.c, test/quote_calc2.tab.c, test/quote_calc3-s.tab.c, test/quote_calc3.tab.c, test/quote_calc4-s.tab.c, test/quote_calc4.tab.c: regen * skeleton.c: Increase default stack-size to match FreeBSD version noted as from "BSD 4.4 Lite Usr.bin Sources". See http://svnweb.freebsd.org/base/vendor/CSRG/dist/usr.bin/yacc/ http://svnweb.freebsd.org/base/head/usr.bin/yacc/ http://svnweb.freebsd.org/base/vendor/byacc/ The original 1.9 sources (on which I based development) used 500 for stacksize; the BSD Lite sources (a year or two later) used 10000. This is a change to default values; the YYMAXDEPTH and YYSTACKSIZE symbols have "always" been overridable by applications, but rarely needed to do this. RedHat began using the FreeBSD source in 2000, and switched to this source in 2007 using the 20050813 snapshot. RedHat #743343 misattributed the change in default stacksize to a regression in byacc, but did not report the issue upstream. * package/debian/changelog, VERSION, package/byacc.spec: bump 2013-09-07 Thomas E. Dickey * config.sub: update to 2013-09-15 * config.guess: update to 2013-06-10 2013-03-04 Thomas E. Dickey * package/debian/changelog, VERSION, package/byacc.spec: bump * aclocal.m4: adapt tweak from Dave Beckett to work around long-ago breakage in "new" autoconf. * output.c: fix bogus #include if "-i" is given but not "-d" (report by Richard Mitton). also while testing that, found a case where the union_file is unused; added a check for address that. * test/ftp.output, test/ftp.tab.c, test/ftp.tab.h: regen * test/ftp.y: fix most compiler warnings for "make check_make" * test/calc1.tab.c: regen * test/calc1.y: fix most compiler warnings for "make check_make" * test/calc.tab.c, test/calc1.tab.c, test/calc2.tab.c, test/calc3.tab.c, test/code_calc.code.c, test/code_error.code.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c, test/pure_calc.tab.c, test/pure_error.tab.c, test/quote_calc-s.tab.c, test/quote_calc.tab.c, test/quote_calc2-s.tab.c, test/quote_calc2.tab.c, test/quote_calc3-s.tab.c, test/quote_calc3.tab.c, test/quote_calc4-s.tab.c, test/quote_calc4.tab.c: regen * skeleton.c: quiet a gcc conversion-warning in yygrowstack() * configure: regen * aclocal.m4: another fix for CF_GCC_VERSION to handle Debian's modification of gcc message. 2013-02-10 Thomas E. Dickey * config.sub, config.guess: update to 2013-02-04 2012-10-03 Thomas E. Dickey * package/debian/changelog, package/byacc.spec, VERSION: bump * configure: regen * configure.in: moved AC_PROG_CC_STDC call into CF_PROG_CC * aclocal.m4: moved AC_PROG_CC_STDC call into CF_PROG_CC and (for other uses than byacc) the CF_PROG_CC macro provides the CF_ANSI_CC_REQD for the 2.13 flavor. * aclocal.m4, configure.in: Arian's change dropped my check for misused $CC variable - restore that with alternate macro CF_PROG_CC. 2012-10-03 Adrian.Bunk * aclocal.m4: suggested patch: drop CF_ANSI_CC_REQD, CF_ANSI_CC_CHECK, CF_PROG_EXT since they are not needed. 2012-10-03 Thomas E. Dickey * aclocal.m4: split-out CF_CC_ENV_FLAGS from CF_ANSI_CC_CHECK to avoid losing it in Adrian's suggested changes. * aclocal.m4: CF_CLANG_COMPILER - check if the given compiler is really clang. * aclocal.m4: add check for clang to CF_GCC_WARNINGS. modify CF_GCC_WARNINGS to work around old gcc warning: ncurses change to (try to) use gnatgcc exposed gnatgcc 2.8.1 on my Sarge system (versus 3.3.5 for the normal gcc). The 2.8.1's pointer-arithmetic checks fell afoul of gcc's misuse of void* in string.h; work around by excluding that check for pre-3.x compilers. * aclocal.m4: modify CF_GCC_ATTRIBUTES so that autoheader is able to see the definitions provided by this macro. use AC_DEFINE_UNQUOTED() in CF_GCC_ATTRIBUTES rather than appending to confdefs.h, since long-ago concern about the ability to pass-through parameterized macros appears to be not a problem, testing with 2.13 and 2.52 2012-10-03 Adrian.Bunk * aclocal.m4: add parameter to AC_DEFINE_UNQUOTED() to allow it to be recognized by autoheader, updated macros: CF_CHECK_CACHE CF_DISABLE_LEAKS CF_MKSTEMP CF_MIXEDCASE_FILENAMES CF_NO_LEAKS_OPTION 2012-10-03 Thomas E. Dickey * aclocal.m4: move existence-check for mkstemp out of the AC_TRY_RUN, to help with cross-compiles 2012-10-02 Thomas E. Dickey * config_h.in: Adrian Bunk request - replace this with the output from autoheader 2012-09-29 Adrian.Bunk * configure.in: suggested change: replace CF_ANSI_CC_REQD by AC_PROG_CC_STDC (since no check is needed anymore for standard C compilers), drop AC_CONST (same reason), modify AC_OUTPUT to rely upon template generated by autoheader. bump requirement to autoconf 2.52.20011201 and drop check for CF_PROG_EXT as being obsolete with autoconf 2.52x * configure.in, main.c: drop check for atexit, because it is standard C * makefile.in: add assignment for datarootdir variable. 2012-05-26 Thomas E. Dickey * package/debian/changelog, package/byacc.spec, VERSION: bump * reader.c: some versions of gcc may warn that bp is not set in mark_symbol, e.g., if GCC_NORETURN is not handled; appease the compiler. * reader.c: use the declared types Assoc_t and Value_t in some places where compiler only cared about char versus short. * reader.c: use TMALLOC() and TREALLOC() macros to simplify allocation/reallocation (no object change) * defs.h: add fallbacks for GCC_NORETURN and GCC_UNUSED to make it simpler for *BSD packagers to build without configure script. Also remove duplicate declaration of pure_parser variable (prompted by patch by Baptiste Daroussin). Also define new TMALLOC and TREALLOC macros to simplify/replace MALLOC and REALLOC macros. * symtab.c: use TMALLOC() and TREALLOC() macros to simplify allocation/reallocation (no object change) 2012-05-25 Thomas E. Dickey * output.c, main.c, verbose.c, mkpar.c, lr0.c: use TMALLOC() and TREALLOC() macros to simplify allocation/reallocation (no object change) 2012-01-15 Thomas E. Dickey * package/debian/copyright: bump * test/run_make.sh: workaround for breakage due to GNU make 3.82 * test/run_make.sh: tested with Solaris 10 (bison 1.875) and added scripting to exercise the /usr/ccs/bin/yacc executable * test/grammar.tab.c: regen * test/grammar.y: modify to also build with Solaris yacc * VERSION, package/debian/changelog, package/byacc.spec: bump * test/yacc/calc1.output: reference output for testing * test/calc1.output, test/calc1.tab.c: regen * test/calc1.y: undo the change made to appease bison, since it was only a warning. * test/pure_calc.tab.c, test/pure_error.tab.c: regen * test/run_make.sh: another fix for running from top-level directory * makefile.in: ensure that check_make rule depends on having byacc built. * test/run_make.sh: fixes for building from parent directory * test/pure_error.y, test/pure_calc.y: bison-fixes * test/calc2.tab.c, test/calc3.tab.c, test/code_error.code.c, test/ftp.tab.c, test/pure_calc.tab.c, test/pure_error.tab.c: regen * test/code_debug.y: RCS_BASE * test/calc2.y, test/calc3.y, test/code_error.y, test/ftp.y: byacc already declares yyerror * test/pure_error.y, test/pure_calc.y: modified to help make the files build with bison * test/run_make.sh: supply a "%pure-parser" directive when bison needs it. * test/code_calc.code.c: regen * test/code_calc.y: modified to help make the files build with bison * yacc.1: in testing, found that %expect did not work as documented for bison. do not recommend it for portable code. * test/run_make.sh: workaround breakage in bison's %expect directive * test/grammar.y: modified to help make the files build with bison * test/calc1.output, test/calc1.tab.c, test/grammar.tab.c: regen * test/calc1.y: quiet a spurious warning from bison 2.3 * test/calc1.tab.c: regen * test/calc1.y: modified to help make the files build with bison * yacc.1: comment on "-y" and "-P" options. * yacc.1: comment on portability * test/ftp.tab.c, test/quote_calc-s.tab.c, test/quote_calc.tab.c, test/quote_calc2-s.tab.c, test/quote_calc3-s.tab.c: regen * test/ftp.y: modified to help make the files build with bison (bison's "-y" option is of no use in providing "yacc" compatibility) * test/quote_calc2.tab.c, test/quote_calc3.tab.c, test/quote_calc4-s.tab.c, test/quote_calc4.tab.c: regen * test/code_calc.y, test/quote_calc2.y, test/quote_calc.y, test/quote_calc4.y, test/quote_calc3.y: modified to help make the files build with bison * test/calc.tab.c: regen * test/calc.y: modified to help make the files build with bison * test/error.tab.c: regen * test/error.y: modified to help make the files build with bison * test/calc2.tab.c, test/calc3.tab.c, test/code_error.code.c: regen * test/run_make.sh: check for older bisons which (2.3 for instance) do not support pure parsers * test/code_error.y, test/calc3.y, test/calc2.y: modified to help make the files build with bison * test/run_test.sh: use $opt2 in filenames of the generated files * test/quote_calc2-s.tab.c, test/quote_calc3-s.tab.c, test/quote_calc4-s.tab.c, test/quote_calc-s.tab.c, test/quote_calc.tab.c, test/quote_calc2.tab.c, test/quote_calc3.tab.c, test/quote_calc4.tab.c: regen 2012-01-14 Thomas E. Dickey * test/calc2.tab.c, test/code_calc.code.c, test/code_error.code.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c, test/calc.tab.c, test/calc1.tab.c: regen * output.c: Several changes: a) add YYLEX_PARAM_TYPE, like YYPARSE_PARAM_TYPE, but for yylex. b) modify definitions for YYLEX_DECL to be more like YYPARSE_DECL, using YYLEX_PARAM_TYPE and YYLEX_PARAM. c) add ifdef's around #define's for YYERROR_DECL and YYERROR_CALL, to help with redefinitions. * test/pure_calc.tab.c: modified to help make the files build with bison * test/run_make.sh: start work on followup, to check if the generated files build with bison. * test/pure_calc.y, test/pure_error.tab.c: modified to help make the files build with bison * test/calc3.tab.c: regen * test/quote_calc-s.output, test/quote_calc-s.tab.c, test/quote_calc-s.tab.h, test/quote_calc2-s.output, test/quote_calc2-s.tab.c, test/quote_calc2-s.tab.h, test/quote_calc3-s.output, test/quote_calc3-s.tab.c, test/quote_calc3-s.tab.h, test/quote_calc4-s.output, test/quote_calc4-s.tab.c, test/quote_calc4-s.tab.h: RCS_BASE * test/yacc/quote_calc-s.output, test/yacc/quote_calc-s.tab.h, test/yacc/quote_calc2-s.output, test/yacc/quote_calc2-s.tab.h, test/yacc/quote_calc3-s.output, test/yacc/quote_calc3-s.tab.h, test/yacc/quote_calc4-s.output, test/yacc/quote_calc4-s.tab.h: reference output for testing * test/run_test.sh: generate/test with "-s" option applied. 2012-01-13 Thomas E. Dickey * package/debian/changelog, package/byacc.spec, VERSION: bump * yacc.1: improve documentation of -s option * yacc.1: note that yacc ignores -y * main.c: add -s option to usage message. * test/quote_calc3.output, test/quote_calc3.tab.c, test/quote_calc4.output, test/quote_calc4.tab.c, test/quote_calc4.tab.h: RCS_BASE * test/yacc/quote_calc3.output, test/yacc/quote_calc4.output, test/yacc/quote_calc4.tab.h: reference output for testing * test/quote_calc3.y, test/quote_calc.tab.h: RCS_BASE * test/yacc/quote_calc.tab.h: reference output for testing * test/quote_calc.output, test/quote_calc.tab.c, test/quote_calc2.output, test/quote_calc2.tab.c, test/quote_calc2.tab.h, test/quote_calc3.tab.h: RCS_BASE * test/yacc/quote_calc.output, test/yacc/quote_calc2.output, test/yacc/quote_calc2.tab.h, test/yacc/quote_calc3.tab.h: reference output for testing * test/quote_calc4.y, test/quote_calc.y, test/quote_calc2.y: RCS_BASE * configure: regen * aclocal.m4: resync with my-autoconf, i.e., fixes for CF_XOPEN_SOURCE 2011-12-19 Thomas E. Dickey * package/debian/changelog, package/byacc.spec, VERSION: bump * yacc.1, output.c, main.c, defs.h: add "-s" option to suppress generating #define's based on string contents in a %token statement. For instance %token EQLS "Equals" would generate #define EQLS 256 #define Equals 257 Simply suppressing the second #define makes the behavior closer to yacc. (report by Paulo Andrade). 2011-09-08 Thomas E. Dickey * package/debian/changelog, package/byacc.spec, VERSION: bump * output.c: fix some more interaction between -i and -d flags to ensure YYERRCODE and YYSTYPE are declared, tested with cproto. 2011-09-07 Thomas E. Dickey * yacc.1: document "-i" option. * package/debian/changelog, package/byacc.spec, VERSION: bump * output.c: fix an interaction between -i and -d * test/code_error.code.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c, test/pure_calc.tab.c, test/pure_error.tab.c, test/calc.tab.c, test/calc1.tab.c, test/calc2.tab.c, test/calc3.tab.c, test/code_calc.code.c: regen - changes for "-i" option move the global/impure variables near the macros that may add a prefix, etc. * skeleton.c, output.c, defs.h: changes to support "-i" option. 2011-09-06 Thomas E. Dickey * reader.c: pass explicit file-pointer to write_section() * main.c: add "-i" option, to generate interface-file (suggested by Denis M. Wilson) 2011-09-05 Thomas E. Dickey * configure: regen * aclocal.m4: resync with my-autoconf: CF_ANSI_CC_CHECK (check for $CFLAGS in $CC) and CF_XOPEN_SOURCE (update aix, cygwin and netbsd checks) * defs.h, error.c, reader.c: add check for missing "}" on %parse-param and %lex-param lines (report by Denis M Wilson) 2011-04-01 Thomas E. Dickey * config.sub: update to 2011-04-01 2011-02-02 Thomas E. Dickey * config.guess: update to 2011-01-01 2010-12-29 Thomas E. Dickey * defs.h, skeleton.c: add const qualifier to skeleton data, per NetBSD changes (report by Christos Zoulas) * defs.h: mark all of the error-functions as non-returning (report by Christos Zoulas) * test/grammar.tab.c, test/pure_calc.tab.c, test/pure_error.tab.c, test/calc.tab.c, test/calc1.tab.c, test/calc2.tab.c, test/calc3.tab.c, test/code_calc.code.c, test/code_error.code.c, test/error.tab.c, test/ftp.tab.c: regen * skeleton.c: use only realloc() rather than realloc+malloc, agree that systems needing this are very rare (prompted by NetBSD change). * test/ftp.tab.c: regen 2010-12-29 Christos.Zoulas * test/ftp.y: improve example, which was stuck in 19XX and assumed file sizes were longs. 2010-12-29 Thomas E. Dickey * test/ftp.tab.c, test/grammar.tab.c, test/pure_calc.tab.c, test/pure_error.tab.c, test/calc.tab.c, test/calc1.tab.c, test/calc2.tab.c, test/calc3.tab.c, test/code_calc.code.c, test/code_error.code.c, test/error.tab.c: regen * test/pure_error.y, test/pure_calc.y, test/ftp.y, test/error.y, test/code_error.y, test/code_calc.y, test/calc.y, test/calc3.y, test/calc2.y, test/calc1.y: use byacc's YYLEX_DECL/YYERROR_DECL symbols to prototype yylex/yyerror * skeleton.c: remove explicit prototype for yylex() via YYLEX_DECL() macro, since that would prevent declaring yylex() static (request by Christos Zoulas). * test/calc2.tab.c, test/calc3.tab.c: regen 2010-12-29 Christos.Zoulas * output.c: correct definition for YYERROR_DECL() 2010-12-29 Thomas E. Dickey * package/debian/changelog, package/byacc.spec, VERSION: bump 2010-12-26 Thomas E. Dickey * defs.h, main.c: change return-type of allocate() to avoid warnings of alignment problems * main.c: Solaris declares chmod() in * configure: regen * main.c: ifdef'd use of fcntl.h * configure.in: add configure checks for fcntl.h, atexit and mkstemp * main.c: for cases where mkstemp() is not available, use tempnam/open * aclocal.m4: add CF_MKSTEMP * aclocal.m4: improve quoting, deprecate ${name-value} in favor of standard ${name:-value} 2010-12-25 Thomas E. Dickey * main.c: start revising use of tmpfile(), to make this work with MinGW. Start by implementing a mkstemp() alternative - noting that mkstemp() also is broken for MinGW. * package/debian/changelog, package/byacc.spec, VERSION: bump 2010-11-27 Thomas E. Dickey * package/byacc.spec, package/debian/changelog, VERSION: bump * test/calc2.tab.c, test/calc3.tab.c: regen * output.c: corrected use of %parse-param value in yyerror(); it doesn't use &yylval (report by Clifford Yapp) 2010-11-26 Thomas E. Dickey * skeleton.c: typo * output.c: correct line-numbering when "-r" option is used; the 'outline' variable should only be incremented when writing to the code-file. * test/code_calc.code.c, test/code_error.code.c: regen * yacc.1: bump date * yacc.1: comment on -b option vs -r * test/calc2.tab.c, test/calc2.y, test/calc3.tab.c, test/calc3.y, test/ftp.tab.c, test/grammar.tab.c, test/pure_calc.tab.c, test/pure_error.tab.c, test/calc.tab.c, test/calc1.tab.c, test/code_calc.code.c, test/code_error.code.c, test/error.tab.c: regen * output.c: improve on YYERROR_DECL(), adding dummy params which can be used for the actual function declaration. Also add YYERROR_CALL(). The two macros simplify maintaining sets of grammars which may/may not be pure. * test/calc1.y, test/ftp.tab.c, test/grammar.tab.c, test/pure_calc.tab.c, test/pure_error.tab.c, test/calc.tab.c, test/calc1.tab.c, test/calc2.tab.c, test/calc3.tab.c, test/code_calc.code.c, test/code_error.code.c, test/error.tab.c: regen * output.c: generate yyerror() calls in output.c This is for compatibility with bison, which passes the yylval to yyerror when the %parse-param feature is used. * skeleton.c, defs.h: generate yyerror() calls in output.c * output.c: simplified a little, using putc_code() and putl_code() * test/yacc/calc1.tab.h: reference output for testing * test/calc1.tab.h: regen * reader.c: improve ifdef for YYSTYPE union declaration (report by Clifford Yapp) * reader.c: accept underscore as a replacement for dash in command names, e.g., "%pure_parser" vs "%pure-parser". * test/calc1.tab.c: regen * output.c, reader.c: also ifdef YYSTYPE declaration in the generated code (report by Clifford Yapp) * package/debian/changelog, package/byacc.spec, VERSION: bump 2010-11-24 Thomas E. Dickey * main.c, defs.h, symtab.c, error.c: reduce global variables * package/debian/changelog, package/byacc.spec, VERSION: bump * reader.c: amend fix for Redhat #112617 to still call default_action_warning() for empty rules (report by Bruce Cran). 2010-11-22 Thomas E. Dickey * output.c: add ifdef to guard against redefinition of YYSTYPE union (request by Clifford Yapp). * test/calc1.tab.c: regen * test/calc1.y: cleanup compiler warnings * test/grammar.y: add "%expect" * test/calc1.tab.h: regen * test/calc1.output, test/calc1.tab.c, test/calc1.tab.h: RCS_BASE * test/calc2.tab.c, test/calc3.tab.c: regen * test/calc1.y: advanced example from Steve Johnson's paper, uses unions * test/calc3.y, test/calc2.y: init 'base', so examples can run * test/ftp.tab.c, test/ftp.y: tweaks to compile with g++ * output.c: compensate for fix in reader.c * reader.c: add/use putc_both() and puts_both(), incidentally fixing a place where a union copied to the union_file may be missing the end of the last line. * package/debian/changelog, package/byacc.spec, VERSION: bump 2010-09-28 Thomas E. Dickey * config.guess: update to 2010-09-24 2010-09-10 Thomas E. Dickey * config.sub: update to 2010-09-11 2010-06-10 Thomas E. Dickey * yacc.1, package/debian/changelog, package/byacc.spec, VERSION: bump to 2010/06/10 2010-06-09 Thomas E. Dickey * reader.c: free declarations in leak-testing code. * main.c: close code_file if -r option used, for leak-testing * defs.h, reader.c: improve %lex-param / %parse-param implementation by allowing for arrays to be passed as parameters, e.g., "int regs[26]". * test/calc3.tab.c, test/calc3.y, test/calc3.output, test/calc3.tab.h: RCS_BASE * test/yacc/calc3.output, test/yacc/calc3.tab.h: reference output for testing * test/calc2.tab.c, test/calc2.y, test/calc2.tab.h: RCS_BASE * test/yacc/calc2.tab.h: reference output for testing * test/calc2.output: RCS_BASE * test/yacc/calc2.output: reference output for testing * output.c: improve %lex-param / %parse-param implementation by allowing for arrays to be passed as parameters, e.g., "int regs[26]". * test/calc.tab.c, test/calc.y: test-cases and reference files for %lex-param / %parse-param * makefile.in: add docs-rule, for html/pdf/txt form of manpage * configure: regen * aclocal.m4: add CF_XOPEN_SOURCE, etc. * configure.in: use CF_XOPEN_SOURCE check to ensure that strdup is in scope, e.g., for c89 * test/ftp.tab.c, test/ftp.y, reader.c, symtab.c, verbose.c, lr0.c, main.c, mkpar.c, output.c, defs.h, closure.c: fix warnings from clang --analyze 2010-06-08 Thomas E. Dickey * output.c: fix to build with c89, etc. * reader.c: gcc warning * test/ftp.tab.c, test/ftp.y, test/calc.tab.c, test/code_calc.code.c, test/code_error.code.c, test/code_error.y, test/code_calc.y, test/calc.y, test/pure_error.tab.c, test/error.tab.c, test/error.y, test/pure_error.y, test/pure_calc.tab.c, test/pure_calc.y: modified test-cases to allow them to compile, to validate pure-parser changes. updated reference files to match. * output.c: move call for output_stype() earlier since it is used in pure-parser declarations * test/grammar.tab.c, test/grammar.y: modified test-cases to allow them to compile, to validate pure-parser changes. updated reference files to match. * test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c: regen * yacc.1: document %lex-param and %parse-param * test/run_lint.sh, test/run_make.sh: RCS_BASE * test/run_test.sh: further modify to allow build-directory to be in a different location by passing this directory's location as a parameter to the script. * makefile.in: add check_make and check_lint rules to help validate the generated files in the test-directory 2010-06-07 Thomas E. Dickey * test/pure_calc.tab.c, test/pure_error.tab.c: RCS_BASE * test/run_test.sh: provide for testing -r and -P options by checking if the ".y" filename begins with "code_" or "pure_", respectively. * test/code_error.code.c, test/code_error.tab.c, test/code_error.tab.h: RCS_BASE * test/yacc/code_error.tab.h: reference output for testing * test/code_calc.code.c, test/code_calc.tab.c, test/code_calc.tab.h: RCS_BASE * test/yacc/code_calc.tab.h: reference output for testing * test/pure_calc.output, test/pure_calc.tab.h, test/pure_error.output, test/pure_error.tab.h: RCS_BASE * test/yacc/pure_calc.output, test/yacc/pure_calc.tab.h, test/yacc/pure_error.output, test/yacc/pure_error.tab.h: reference output for testing * test/code_calc.output, test/code_error.output: RCS_BASE * test/yacc/code_calc.output, test/yacc/code_error.output: reference output for testing * test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c: regen * test/run_test.sh: changes to support running "make check" in a separate build-tree * main.c: add "-P" to usage message * reader.c: use UCH() macro to hide casts. 2010-06-07 Andres.Mejia * main.c, output.c, reader.c, defs.h, skeleton.c: Fix the output order of the generated parse code file. This allows for the use of YYPARSE_PARAM, by having the output that checks for YYPARSE_PARAM to be defined come after the C code block in the definitions section of a yacc file. Implement support for YYLEX_PARAM, similar to bison. This is useful for support for building reentrant lexers with flex. Fix a compatibility issue with bison's pure-parser option. Bison defines yylex as sending at least one parameter, &yylval, as the first parameter and doesn't seem to have an easy way to remove that parameter. This on the other hand is rather convenient to support saving to yylval from flex when building reentrant lexers and parsers. Add support for the %parse-param and %lex-param directives used in bison. This change bears some similarity to NetBSD's changes to byacc at http://www.mail-archive.com/source-changes-full@netbsd.org/msg08143.html Bison allows for POSIX yacc emulation via a yacc directive in the yacc file, and also via a command line switch. Implement this feature as a no-op for byacc, since byacc is designed to be POSIX yacc compatible anyway. This allows for better compatibility with yacc sources written for bison. 2010-06-07 Thomas E. Dickey * VERSION: bump to 2010/06/07 2010-06-06 Thomas E. Dickey * test/calc.tab.c, configure: regen * skeleton.c: move #include's down into the generated code, to allow user-defined code to override feature definitions, particularly with stdlib.h (request by Marcus Kool). * lr0.c, error.c, reader.c, defs.h: strict gcc 3.4.6 warnings on 64-bit platform * aclocal.m4, configure.in: add check for lint * makefile.in: add lint rule * defs.h, closure.c, lr0.c, warshall.c, main.c: fix gcc warnings, mostly for 64-bit platform * aclocal.m4: add macros for checking ctags/etags, e.g., to work with NetBSD pkgsrc * makefile.in: add etags/TAGS if available * configure.in: add configure check for actual ctags and etags programs * package/debian/copyright: add copyright notices for non-PD files * package/debian/changelog: incorporated scripts in upstream to use for test-builds * makefile.in: drop mkdirs.sh, just use "mkdir -p" * AUTHORS: nicknames for some contributors (see CHANGES for details) * package/byacc.spec: RPM file for byacc * VERSION: bump to 2010/06/06 * aclocal.m4: add copyright notice, from "my-autoconf" macros http://invisible-island.net/autoconf/autoconf.html * aclocal.m4: resync with my-autoconf. summary of changes: a) CF_ADD_CFLAGS, etc., improve quoting of ifelse() parameter b) CF_DISABLE_ECHO, change indent-convention for substituted makefile c) CF_GCC_VERSION, ignore stderr d) CF_GCC_WARNINGS, adjust options to work with c89 wrapper of gcc 2010-04-20 Thomas E. Dickey * package/debian/changelog, package/debian/compat, package/debian/control, package/debian/copyright, package/debian/docs, package/debian/postinst, package/debian/prerm, package/debian/rules, package/debian/watch: scripts from Debian package 2010-02-16 Thomas E. Dickey * yacc.1: document -P and bison-extensions * test/ftp.tab.c, test/grammar.tab.c, test/calc.tab.c, test/error.tab.c: regen * output.c: implement %pure-parser * skeleton.c: implement %pure-parser, like bison. To help with this, changed the stack variables, putting them into a struct. * reader.c: implement %pure-parser * defs.h: modified skeleton to support %pure-parser feature * main.c: add -P option to set %pure-parser * output.c: make -r and -p options work together. The -r option splits the generated parser into code/table files; for this case we cannot use static data. Also, we have to repeat the #define's used for prefix (-p) as well as the redeclaration of yyparse(). Finally, allow any of the prefixed names to be overridden, e.g., by passing a -D option to the compiler. Make that a little more readable by putting a blank line before each chunk. * defs.h: add definitions for %pure-parser * skeleton.c: put blank line before/after the redeclaration of yyparse() * output.c: allow for other program redefining yylex() * skeleton.c: split-off xdecls[] array, to move declaration of yyparse() after #define's * defs.h: split-out xdecls[] * VERSION: bump * configure: regen * aclocal.m4: add CF_REMOVE_DEFINE, needed by CF_ADD_CFLAGS * aclocal.m4: resync with my-autoconf CF_ADD_CFLAGS and CF_DISABLE_ECHO changes. 2010-02-16 Ostap.Cherkashi * skeleton.c: fix a memory leak in the generated skeleton 2010-01-01 Thomas E. Dickey * package/debian/source/format: scripts from Debian package 2009-12-31 Thomas E. Dickey * config.guess: update to 2009-12-30 * config.sub: update to 2009-12-31 2009-10-27 Thomas E. Dickey * VERSION: 20091027 * output.c, mkpar.c, defs.h, lalr.c, closure.c, graph.c, lr0.c, verbose.c, main.c, reader.c: strict compiler warnings 2009-10-26 Thomas E. Dickey * test/ftp.tab.c, test/grammar.tab.c, test/calc.tab.c, test/error.tab.c: resync * main.c, defs.h: introduce some typedefs for portability, etc. * makefile.in: don't remove "*.log" in mostlyclean rule since it interferes with regression script. * configure: regen * aclocal.m4: resync with my-autoconf 2009-08-25 Thomas E. Dickey * config.guess, config.sub: update to 2009-08-19 2009-02-21 Thomas E. Dickey * VERSION: bump * output.c: restore "yylval" symbol, omitted in cleanup on 2008/8/25 2008-12-26 Thomas E. Dickey * configure: regen with autoconf-2.52 (patched) 2008-12-25 Thomas E. Dickey * test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c, test/calc.tab.c: regenerated 2008-12-24 Thomas E. Dickey * VERSION: bump * skeleton.c: remove ifdef-lint from goto yyerrlab, to quiet gcc warning 2008-11-26 Thomas E. Dickey * verbose.c, main.c, defs.h, mkpar.c, reader.c: completed implementation of "%expect" (report by Perry E. Metzger). add "%expect-rr", which is (unlike bison) allowable in LALR parsers. 2008-11-24 Thomas E. Dickey * closure.c, defs.h, error.c, graph.c, lalr.c, lr0.c, main.c, mkpar.c, output.c, reader.c, skeleton.c, symtab.c, verbose.c, warshall.c: change indent-style (request by Perry E. Metzger) 2008-08-27 Thomas E. Dickey * test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c: better implementation of YYPARSE_PARAM, using YYPARSE_DECL() macro * VERSION: bump * skeleton.c: better implementation of YYPARSE_PARAM, using YYPARSE_DECL() macro * test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c, skeleton.c: change YYRECOVERING to YYRECOVERING(), for compatibility with other yacc's. * configure: regen'd * configure.in: add -Wwrite-strings to warnings * test/ftp.tab.c, test/grammar.tab.c, test/calc.tab.c, test/error.tab.c: add YYPARSE_PARAM and YYPARSE_PARAM_TYPE * skeleton.c: add YYPARSE_PARAM (bison) and YYPARSE_PARAM_TYPE (FreeBSD) features. * main.c, defs.h, output.c, skeleton.c, symtab.c, error.c, reader.c: fixes for gcc -Wwrite-strings * test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c: generate the tables as static-const (this is an interface change) * output.c: realign columns in start_table() * output.c: generate the tables as static-const (this is an interface change) * output.c: reorder functions to eliminate forward-references * test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c: remove 'register' keywords 2008-08-26 Thomas E. Dickey * warshall.c, verbose.c, symtab.c, skeleton.c, reader.c, output.c, mkpar.c, main.c, lr0.c, lalr.c, graph.c, error.c, closure.c: remove 'register' keywords 2008-08-25 Thomas E. Dickey * test/ftp.tab.c: regen'd * reader.c: improve the left-curly fix by testing after blanks, to avoid having a " {" at the beginning of a line. * test/error.tab.c, test/grammar.tab.c: regen'd * output.c: move the remaining newline-counting into write_XXX functions. * test/calc.tab.c: regen'd * output.c: simplify part of the output_file formatting using new functions, e.g., start_int_table(), output_newline(). * reader.c: modify copy_action() to indent the first character, it if is is left-curly brace. That makes the output look more like the original, as well as makes it simpler to edit (not confuse editors which look for a left-curly in the first column as if it were the beginning of a function). * skeleton.c: minor fixes to avoid gcc -Wconversion warnings * output.c: align the #define's produced for "-p" option * test/run_test.sh: use the "-p" option for better coverage. * output.c: simplify output_prefix() with new define_prefixed() * skeleton.c: include string.h, for memset() change stack size to unsigned to fix gcc -Wconversion warnings. * VERSION: bump to 2008/8/25 * makefile.in: add dependency on VERSION file. 2008-08-24 Thomas E. Dickey * VERSION: bump * lalr.c: improved memory-leak checking by freeing data in includes[] * test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c, test/calc.tab.c: update to match skeleton-change * configure: regen'd * skeleton.c: Add fix for stack discussed http://undeadly.org/cgi?action=article&sid=20080708155228 and applied http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/yacc/skeleton.c.diff?r1=1.28&r2=1.29 * aclocal.m4: resync with my-autoconf (no major changes) 2008-07-24 Thomas E. Dickey * package/pkgsrc/Makefile, package/pkgsrc/distinfo: scripts from NetBSD pkgsrc, for test-builds 2008-03-14 Thomas E. Dickey * config.sub: update to 2008-03-08 * config.guess: update to 2008-03-12 2007-05-09 Thomas E. Dickey * main.c: close graph, verbose files if opened, on exit. * main.c: audit memory leaks - valgrind reported some memory still in use on exit. * lalr.c, output.c, reader.c, mkpar.c, lr0.c: add hook for auditing memory leaks * defs.h: add hooks for auditing memory leaks * configure: regen'd * configure.in: use CF_DISABLE_LEAKS, which combines --disable-leaks, --with-valgrind, --with-dbmalloc and --with-dmalloc * aclocal.m4: add CF_DISABLE_LEAKS and CF_WITH_VALGRIND * aclocal.m4: improve version-checking in CF_GCC_VERSION rework dbmalloc/dmalloc options using CF_NO_LEAKS_OPTION macro * VERSION: 2007/5/9 * main.c: file_prefix did not always have a trailing null. 2007-03-25 Thomas E. Dickey * mkdirs.sh: improved version for "make -j" 2006-12-22 Thomas E. Dickey * config.guess: update to 2006/12/22 2006-12-08 Thomas E. Dickey * config.sub: update to 2006/12/08 2005-08-13 Thomas E. Dickey * main.c: add -V to usage message * makefile.in: remove -t option from ctags * VERSION: 2005/8/13 2005-08-13 schmitz * main.c: Sylvain Schmitz: modify the '-o' option to work like bison's, which sets the file-prefix. 2005-08-13 Matt.Kraai * output.c: Debian #322858 (don't close union_file, which contained data). This feature is used in groff. 2005-08-13 Thomas E. Dickey * configure: regenerated * aclocal.m4: improve checks for Intel compiler warnings 2005-06-25 Thomas E. Dickey * config.sub: update to 2005/6/2 * config.guess: update to 2005/5/27 2005-05-05 Thomas E. Dickey * defs.h: add a fallback for GCC_UNUSED 2005-05-04 Thomas E. Dickey * makefile.in: add "." to include-path to pickup config.h * reader.c: apply fix suggested by Steve Dum for end_rule() in Redhat Bugzilla #112617. * output.c: correct a limit check in pack_vector() - report/analysis by William Evans * main.c: exit after printing version. Otherwise "yacc -V" will exit with an erro after printing the usage message. * test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c: regenerated after skeleton-changes * skeleton.c: replace a few -1's with YYEMPTY * skeleton.c: delete yynewerror (no one uses it any more, and it just makes compiler warnings) * skeleton.c: adapt yygrowstack() and related definitions from FreeBSD * test/run_test.sh: filter out lines with YYPATCH, since that will change with each update * yacc.1: add -V option * main.c: add -V option to print the version. simplify option-parsing by moving the duplicate logic for setting flags into new function setflag(). * skeleton.c: move the actual definition of YYMAJOR and YYMINOR to defs.h (as numbers). add YYPATCH here so it can be tested by applications. * defs.h: add macros to define VERSION in terms of the (numeric) YYMAJOR, YYMINOR and YYPATCH symbols. * lalr.c, lr0.c, mkpar.c, defs.h, closure.c, warshall.c, output.c, verbose.c, graph.c, reader.c, main.c, symtab.c: reduce externs by making static the procedures that are not referenced outside the module in which they are defined. * makefile.in: the VERSION file holds the patch-date. Define YYPATCH, so this will be compiled into the skeleton. * VERSION: patch-level for byacc * main.c: add "-o" to usage message. It is too long for a single line; rewrite usage() to show one option per line. 2005-05-03 Thomas E. Dickey * main.c: add -o option, to work with scripts that assume bison. simplify create_file_names() with a macro. simplify done() with a macro. adapt fix from FreeBSD for signal race, e.g., if done() is interrupted by onintr(), do not flush output via exit(), but use _exit() instead. * defs.h: remove unnecessary externs for main.c * yacc.1: add -o option * graph.c: remove unused parameter * mkpar.c, defs.h, reader.c: add support for "%expect", a bison feature from FreeBSD sources * lr0.c, reader.c, main.c, skeleton.c, graph.c, symtab.c, closure.c, mkpar.c, lalr.c, error.c, warshall.c, verbose.c, output.c: indent'd * configure: regenerated for 2005/5/5 * aclocal.m4: miscellaneous updates (adds CF_INTEL_COMPILER) 2005-04-27 schmitz * defs.h, graph.c, lr0.c, main.c, makefile.in, reader.c, yacc.1: Sylvain Schmitz : add graphical output of the LALR(1) automaton for graphviz, associated with command-line option `-g' 2005-04-16 Thomas E. Dickey * config.sub: update to 2005/2/10 * config.guess: update to 2005/3/24 2005-04-13 Thomas E. Dickey * package/pkgsrc/PLIST: scripts from NetBSD pkgsrc, for test-builds 2005-03-21 Thomas E. Dickey * package/pkgsrc/DESCR: scripts from NetBSD pkgsrc, for test-builds 2004-03-28 Thomas E. Dickey * test/calc.tab.c, test/error.tab.c, test/ftp.tab.c, test/grammar.tab.c: updates due to adding yyparse() prototype * configure: RCS_BASE * configure.in: add AC_ARG_PROGRAM to make --program-prefix, etc., work. * makefile.in: first cut of script to support --program-prefix * configure.in: reorder AC_INIT/AC_CONFIG_HEADER to make this "work" with autoconf 2.52 * makefile.in: modify so DESTDIR works * makefile.in: use EXEEXT and OBJEXT * configure.in: use CF_PROG_EXT generate a config.h * defs.h: make this use the generated config.h * skeleton.c: add a forward-reference for yyparse() * aclocal.m4: add CF_CHECK_CACHE, needed for CF_PROG_EXT * yacc.1: remove the discussion of TMPDIR since it is obsolete * skeleton.c: fix a couple of minor compiler-warnings in the skeleton * defs.h: remove action_file_name, etc., since we use tmpfile() now. * main.c: use tmpfile() for opening the working files. This quiets a warning advising the use of mkstemp(). * output.c: Do not close temporary-files here, since they are opened with tmpfile(). Just rewind them, and they're ready to read back the data stored in them. * test/grammar.output, test/grammar.tab.c, test/grammar.tab.h: RCS_BASE * test/yacc/grammar.output, test/yacc/grammar.tab.h: reference output for testing * makefile.in: turn on "make check" rule * test/calc.output: RCS_BASE * test/yacc/calc.output: reference output for testing * test/run_test.sh, test/calc.tab.h: RCS_BASE * test/yacc/calc.tab.h: reference output for testing * test/ftp.tab.c: yyparse() is now yyparse(void) * test/calc.tab.c: RCS_BASE * test/error.tab.c: yyparse() is now yyparse(void) * test/README: RCS_BASE * yacc.1: various typography fixes prompted by Debian #100947 * aclocal.m4, makefile.in, configure.in: RCS_BASE * README: updated to note that this is not the original 2004-03-24 Thomas E. Dickey * test/grammar.y: RCS_BASE 2004-02-23 Thomas E. Dickey * config.sub: RCS_BASE 2004-02-17 Thomas E. Dickey * config.guess: RCS_BASE 2003-11-29 Thomas E. Dickey * install-sh: improved quoting 2002-06-29 Thomas E. Dickey * mkdirs.sh: don't use character range, since some locales don't work as expected 2001-06-22 Thomas E. Dickey * install-sh: RCS_BASE 2000-11-20 Thomas E. Dickey * test/calc.y: RCS_BASE * test/code_calc.y, test/pure_calc.y: copy of calc.y * vmsbuild.com: original version 2000-02-14 Thomas E. Dickey * main.c: fix for VMS port - making pathname for temp-file * descrip.mms: original version 2000-02-13 Thomas E. Dickey * defs.h, verbose.c, reader.c, main.c, skeleton.c, warshall.c, symtab.c, closure.c, mkpar.c, lalr.c, lr0.c, output.c, error.c: ansify 1999-11-30 Thomas E. Dickey * mkdirs.sh: RCS_BASE 1995-01-01 Thomas E. Dickey * config_h.in: RCS_BASE 1993-12-23 unknown * README.DOS, main.c: MSDOS-port 1993-12-22 unknown * reader.c, defs.h: MSDOS-port 1993-03-02 unknown * README: original version 1993-02-22 unknown * test/ftp.output, test/ftp.tab.c, test/ftp.tab.h: RCS_BASE 1993-02-22 dickey@software.org * test/yacc/error.output, test/yacc/error.tab.h: reference output for testing 1993-02-22 unknown * test/error.output, test/error.tab.c, test/error.tab.h: RCS_BASE * skeleton.c, warshall.c, main.c, output.c, reader.c, closure.c, NOTES: original version 1992-10-12 unknown * yacc.1: original version 1992-10-11 unknown * defs.h: original version 1991-01-20 unknown * mkpar.c, verbose.c: original version 1991-01-14 unknown * lr0.c, Makefile, Makefile.old: original version 1990-07-16 unknown * NEW_FEATURES: original version 1990-06-03 unknown * ACKNOWLEDGEMENTS: original version 1990-02-05 unknown * symtab.c, lalr.c, error.c: original version 1990-01-16 dickey@software.org * test/code_error.y, test/pure_error.y: RCS_BASE 1990-01-16 unknown * test/error.y: RCS_BASE 1989-11-22 unknown * NO_WARRANTY: original version 1989-09-23 unknown * test/ftp.y: RCS_BASE byacc-20221106/MANIFEST0000644000000000000000000013526314331754017012700 0ustar rootrootMANIFEST for byacc, version t20221106 -------------------------------------------------------------------------------- MANIFEST this file ACKNOWLEDGEMENTS original version of byacc - 1993 AUTHORS nicknames for some contributors (see CHANGES for details) LICENSE summary of byacc's license Makefile.old renamed from Makefile NEW_FEATURES original version of byacc - 1993 NOTES original version of byacc - 1993 NO_WARRANTY original version of byacc - 1993 README original version of byacc - 1993 README.BTYACC byacc-btyacc-20140323 VERSION patch-level aclocal.m4 macros for configure-script btyaccpar.c generated from btyaccpar.skel btyaccpar.skel bytacc's parser skeleton (renamed from yaccpar.skel) closure.c original version of byacc - 1993 config.guess configure-script utility config.sub configure-script utility config_h.in template for config.h configure snapshot 2004/3/28 configure.in template for configure-script defs.h original version of byacc - 1993 descrip.mms build-script for VMS error.c original version of byacc - 1993 graph.c write the file y.dot in graphviz format install-sh install-script lalr.c original version of byacc - 1993 lr0.c original version of byacc - 1993 main.c original version of byacc - 1993 makefile.in template for makefile mkpar.c original version of byacc - 1993 mstring.c string-utilities output.c original version of byacc - 1993 reader.c original version of byacc - 1993 skel2c awk script to transform yaccpar.skel into skeleton.c symtab.c original version of byacc - 1993 verbose.c original version of byacc - 1993 vmsbuild.com build-script for VMS warshall.c original version of byacc - 1993 yacc.1 original version of byacc - 1993 yaccpar.c generated from yaccpar.skel yaccpar.skel data which can be transformed into skeleton.c package subdirectory package/byacc.spec RPM file for byacc package/debian subdirectory package/debian/byacc2.docs extra docs for byacc2 package package/debian/byacc2.postinst post-install script for byacc2 package package/debian/byacc2.prerm pre-removal script for byacc2 package package/debian/changelog scripts from Debian package package/debian/control scripts from Debian package package/debian/copyright scripts from Debian package package/debian/rules scripts from Debian package package/debian/source subdirectory package/debian/source/format scripts from Debian package package/debian subdirectory package/debian/watch scripts from Debian package package subdirectory package/mingw-byacc.spec mingw spec-file, for cross-compiles package/pkgsrc subdirectory package/pkgsrc/DESCR scripts from NetBSD pkgsrc, for test-builds package/pkgsrc/Makefile scripts from NetBSD pkgsrc, for test-builds package/pkgsrc/PLIST scripts from NetBSD pkgsrc, for test-builds package/pkgsrc/distinfo scripts from NetBSD pkgsrc, for test-builds test subdirectory test/README describe contents of "test" subdirectory test/btyacc subdirectory test/btyacc/big_b.error exercise -L/-B options test/btyacc/big_b.output exercise -L/-B options test/btyacc/big_l.error exercise -L/-B options test/btyacc/big_l.output exercise -L/-B options test/btyacc/btyacc_calc1.error reference output for testing test/btyacc/btyacc_calc1.output reference output for testing test/btyacc/btyacc_calc1.tab.c reference output for testing test/btyacc/btyacc_calc1.tab.h reference output for testing test/btyacc/btyacc_demo.error reference output for testing test/btyacc/btyacc_demo.output reference output for testing test/btyacc/btyacc_demo.tab.c reference output for testing test/btyacc/btyacc_demo.tab.h reference output for testing test/btyacc/btyacc_destroy1.error reference output for testing test/btyacc/btyacc_destroy1.output reference output for testing test/btyacc/btyacc_destroy1.tab.c reference output for testing test/btyacc/btyacc_destroy1.tab.h reference output for testing test/btyacc/btyacc_destroy2.error reference output for testing test/btyacc/btyacc_destroy2.output reference output for testing test/btyacc/btyacc_destroy2.tab.c reference output for testing test/btyacc/btyacc_destroy2.tab.h reference output for testing test/btyacc/btyacc_destroy3.error reference output for testing test/btyacc/btyacc_destroy3.output reference output for testing test/btyacc/btyacc_destroy3.tab.c reference output for testing test/btyacc/btyacc_destroy3.tab.h reference output for testing test/btyacc/calc.error reference output for testing test/btyacc/calc.output reference output for testing test/btyacc/calc.tab.c reference output for testing test/btyacc/calc.tab.h reference output for testing test/btyacc/calc1.error reference output for testing test/btyacc/calc1.output reference output for testing test/btyacc/calc1.tab.c reference output for testing test/btyacc/calc1.tab.h reference output for testing test/btyacc/calc2.error reference output for testing test/btyacc/calc2.output reference output for testing test/btyacc/calc2.tab.c reference output for testing test/btyacc/calc2.tab.h reference output for testing test/btyacc/calc3.error reference output for testing test/btyacc/calc3.output reference output for testing test/btyacc/calc3.tab.c reference output for testing test/btyacc/calc3.tab.h reference output for testing test/btyacc/calc_code_all.error reference output for testing test/btyacc/calc_code_all.output reference output for testing test/btyacc/calc_code_all.tab.c reference output for testing test/btyacc/calc_code_all.tab.h reference output for testing test/btyacc/calc_code_default.error reference output for testing test/btyacc/calc_code_default.output reference output for testing test/btyacc/calc_code_default.tab.c reference output for testing test/btyacc/calc_code_default.tab.h reference output for testing test/btyacc/calc_code_imports.error reference output for testing test/btyacc/calc_code_imports.output reference output for testing test/btyacc/calc_code_imports.tab.c reference output for testing test/btyacc/calc_code_imports.tab.h reference output for testing test/btyacc/calc_code_provides.error reference output for testing test/btyacc/calc_code_provides.output reference output for testing test/btyacc/calc_code_provides.tab.c reference output for testing test/btyacc/calc_code_provides.tab.h reference output for testing test/btyacc/calc_code_requires.error reference output for testing test/btyacc/calc_code_requires.output reference output for testing test/btyacc/calc_code_requires.tab.c reference output for testing test/btyacc/calc_code_requires.tab.h reference output for testing test/btyacc/calc_code_top.error reference output for testing test/btyacc/calc_code_top.output reference output for testing test/btyacc/calc_code_top.tab.c reference output for testing test/btyacc/calc_code_top.tab.h reference output for testing test/btyacc/code_calc.code.c reference output for testing test/btyacc/code_calc.error reference output for testing test/btyacc/code_calc.output reference output for testing test/btyacc/code_calc.tab.c reference output for testing test/btyacc/code_calc.tab.h reference output for testing test/btyacc/code_error.code.c reference output for testing test/btyacc/code_error.error reference output for testing test/btyacc/code_error.output reference output for testing test/btyacc/code_error.tab.c reference output for testing test/btyacc/code_error.tab.h reference output for testing test/btyacc/defines1.calc.c reference output for testing test/btyacc/defines1.calc.h reference output for testing test/btyacc/defines1.error reference output for testing test/btyacc/defines1.output reference output for testing test/btyacc/defines2.calc.c reference output for testing test/btyacc/defines2.calc.h reference output for testing test/btyacc/defines2.error reference output for testing test/btyacc/defines2.output reference output for testing test/btyacc/defines3.calc.c reference output for testing test/btyacc/defines3.calc.h reference output for testing test/btyacc/defines3.error reference output for testing test/btyacc/defines3.output reference output for testing test/btyacc/empty.error reference output for testing test/btyacc/empty.output reference output for testing test/btyacc/empty.tab.c reference output for testing test/btyacc/empty.tab.h reference output for testing test/btyacc/err_inherit1.error reference output for testing test/btyacc/err_inherit1.output reference output for testing test/btyacc/err_inherit1.tab.c reference output for testing test/btyacc/err_inherit1.tab.h reference output for testing test/btyacc/err_inherit2.error reference output for testing test/btyacc/err_inherit2.output reference output for testing test/btyacc/err_inherit2.tab.c reference output for testing test/btyacc/err_inherit2.tab.h reference output for testing test/btyacc/err_inherit3.error reference output for testing test/btyacc/err_inherit3.output reference output for testing test/btyacc/err_inherit3.tab.c reference output for testing test/btyacc/err_inherit3.tab.h reference output for testing test/btyacc/err_inherit4.error reference output for testing test/btyacc/err_inherit4.output reference output for testing test/btyacc/err_inherit4.tab.c reference output for testing test/btyacc/err_inherit4.tab.h reference output for testing test/btyacc/err_inherit5.error reference output for testing test/btyacc/err_inherit5.output reference output for testing test/btyacc/err_inherit5.tab.c reference output for testing test/btyacc/err_inherit5.tab.h reference output for testing test/btyacc/err_syntax1.error reference output for testing test/btyacc/err_syntax1.output reference output for testing test/btyacc/err_syntax1.tab.c reference output for testing test/btyacc/err_syntax1.tab.h reference output for testing test/btyacc/err_syntax10.error reference output for testing test/btyacc/err_syntax10.output reference output for testing test/btyacc/err_syntax10.tab.c reference output for testing test/btyacc/err_syntax10.tab.h reference output for testing test/btyacc/err_syntax11.error reference output for testing test/btyacc/err_syntax11.output reference output for testing test/btyacc/err_syntax11.tab.c reference output for testing test/btyacc/err_syntax11.tab.h reference output for testing test/btyacc/err_syntax12.error reference output for testing test/btyacc/err_syntax12.output reference output for testing test/btyacc/err_syntax12.tab.c reference output for testing test/btyacc/err_syntax12.tab.h reference output for testing test/btyacc/err_syntax13.error reference output for testing test/btyacc/err_syntax13.output reference output for testing test/btyacc/err_syntax13.tab.c reference output for testing test/btyacc/err_syntax13.tab.h reference output for testing test/btyacc/err_syntax14.error reference output for testing test/btyacc/err_syntax14.output reference output for testing test/btyacc/err_syntax14.tab.c reference output for testing test/btyacc/err_syntax14.tab.h reference output for testing test/btyacc/err_syntax15.error reference output for testing test/btyacc/err_syntax15.output reference output for testing test/btyacc/err_syntax15.tab.c reference output for testing test/btyacc/err_syntax15.tab.h reference output for testing test/btyacc/err_syntax16.error reference output for testing test/btyacc/err_syntax16.output reference output for testing test/btyacc/err_syntax16.tab.c reference output for testing test/btyacc/err_syntax16.tab.h reference output for testing test/btyacc/err_syntax17.error reference output for testing test/btyacc/err_syntax17.output reference output for testing test/btyacc/err_syntax17.tab.c reference output for testing test/btyacc/err_syntax17.tab.h reference output for testing test/btyacc/err_syntax18.error reference output for testing test/btyacc/err_syntax18.output reference output for testing test/btyacc/err_syntax18.tab.c reference output for testing test/btyacc/err_syntax18.tab.h reference output for testing test/btyacc/err_syntax19.error reference output for testing test/btyacc/err_syntax19.output reference output for testing test/btyacc/err_syntax19.tab.c reference output for testing test/btyacc/err_syntax19.tab.h reference output for testing test/btyacc/err_syntax2.error reference output for testing test/btyacc/err_syntax2.output reference output for testing test/btyacc/err_syntax2.tab.c reference output for testing test/btyacc/err_syntax2.tab.h reference output for testing test/btyacc/err_syntax20.error reference output for testing test/btyacc/err_syntax20.output reference output for testing test/btyacc/err_syntax20.tab.c reference output for testing test/btyacc/err_syntax20.tab.h reference output for testing test/btyacc/err_syntax21.error reference output for testing test/btyacc/err_syntax21.output reference output for testing test/btyacc/err_syntax21.tab.c reference output for testing test/btyacc/err_syntax21.tab.h reference output for testing test/btyacc/err_syntax22.error reference output for testing test/btyacc/err_syntax22.output reference output for testing test/btyacc/err_syntax22.tab.c reference output for testing test/btyacc/err_syntax22.tab.h reference output for testing test/btyacc/err_syntax23.error reference output for testing test/btyacc/err_syntax23.output reference output for testing test/btyacc/err_syntax23.tab.c reference output for testing test/btyacc/err_syntax23.tab.h reference output for testing test/btyacc/err_syntax24.error reference output for testing test/btyacc/err_syntax24.output reference output for testing test/btyacc/err_syntax24.tab.c reference output for testing test/btyacc/err_syntax24.tab.h reference output for testing test/btyacc/err_syntax25.error reference output for testing test/btyacc/err_syntax25.output reference output for testing test/btyacc/err_syntax25.tab.c reference output for testing test/btyacc/err_syntax25.tab.h reference output for testing test/btyacc/err_syntax26.error reference output for testing test/btyacc/err_syntax26.output reference output for testing test/btyacc/err_syntax26.tab.c reference output for testing test/btyacc/err_syntax26.tab.h reference output for testing test/btyacc/err_syntax27.error reference output for testing test/btyacc/err_syntax27.output reference output for testing test/btyacc/err_syntax27.tab.c reference output for testing test/btyacc/err_syntax27.tab.h reference output for testing test/btyacc/err_syntax3.error reference output for testing test/btyacc/err_syntax3.output reference output for testing test/btyacc/err_syntax3.tab.c reference output for testing test/btyacc/err_syntax3.tab.h reference output for testing test/btyacc/err_syntax4.error reference output for testing test/btyacc/err_syntax4.output reference output for testing test/btyacc/err_syntax4.tab.c reference output for testing test/btyacc/err_syntax4.tab.h reference output for testing test/btyacc/err_syntax5.error reference output for testing test/btyacc/err_syntax5.output reference output for testing test/btyacc/err_syntax5.tab.c reference output for testing test/btyacc/err_syntax5.tab.h reference output for testing test/btyacc/err_syntax6.error reference output for testing test/btyacc/err_syntax6.output reference output for testing test/btyacc/err_syntax6.tab.c reference output for testing test/btyacc/err_syntax6.tab.h reference output for testing test/btyacc/err_syntax7.error reference output for testing test/btyacc/err_syntax7.output reference output for testing test/btyacc/err_syntax7.tab.c reference output for testing test/btyacc/err_syntax7.tab.h reference output for testing test/btyacc/err_syntax7a.error reference output for testing test/btyacc/err_syntax7a.output reference output for testing test/btyacc/err_syntax7a.tab.c reference output for testing test/btyacc/err_syntax7a.tab.h reference output for testing test/btyacc/err_syntax7b.error reference output for testing test/btyacc/err_syntax7b.output reference output for testing test/btyacc/err_syntax7b.tab.c reference output for testing test/btyacc/err_syntax7b.tab.h reference output for testing test/btyacc/err_syntax8.error reference output for testing test/btyacc/err_syntax8.output reference output for testing test/btyacc/err_syntax8.tab.c reference output for testing test/btyacc/err_syntax8.tab.h reference output for testing test/btyacc/err_syntax8a.error reference output for testing test/btyacc/err_syntax8a.output reference output for testing test/btyacc/err_syntax8a.tab.c reference output for testing test/btyacc/err_syntax8a.tab.h reference output for testing test/btyacc/err_syntax9.error reference output for testing test/btyacc/err_syntax9.output reference output for testing test/btyacc/err_syntax9.tab.c reference output for testing test/btyacc/err_syntax9.tab.h reference output for testing test/btyacc/error.error reference output for testing test/btyacc/error.output reference output for testing test/btyacc/error.tab.c reference output for testing test/btyacc/error.tab.h reference output for testing test/btyacc/expr.oxout.error reference output for testing test/btyacc/expr.oxout.output reference output for testing test/btyacc/expr.oxout.tab.c reference output for testing test/btyacc/expr.oxout.tab.h reference output for testing test/btyacc/grammar.dot reference output for testing test/btyacc/grammar.error reference output for testing test/btyacc/grammar.output reference output for testing test/btyacc/grammar.tab.c reference output for testing test/btyacc/grammar.tab.h reference output for testing test/btyacc/help.error reference output for testing test/btyacc/help.output reference output for testing test/btyacc/inherit0.error reference output for testing test/btyacc/inherit0.output reference output for testing test/btyacc/inherit0.tab.c reference output for testing test/btyacc/inherit0.tab.h reference output for testing test/btyacc/inherit1.error reference output for testing test/btyacc/inherit1.output reference output for testing test/btyacc/inherit1.tab.c reference output for testing test/btyacc/inherit1.tab.h reference output for testing test/btyacc/inherit2.error reference output for testing test/btyacc/inherit2.output reference output for testing test/btyacc/inherit2.tab.c reference output for testing test/btyacc/inherit2.tab.h reference output for testing test/btyacc/no_b_opt.error reference output for testing test/btyacc/no_b_opt.output reference output for testing test/btyacc/no_b_opt1.error reference output for testing test/btyacc/no_b_opt1.output reference output for testing test/btyacc/no_code_c.error reference output for testing test/btyacc/no_code_c.output reference output for testing test/btyacc/no_defines.error reference output for testing test/btyacc/no_defines.output reference output for testing test/btyacc/no_graph.error reference output for testing test/btyacc/no_graph.output reference output for testing test/btyacc/no_include.error reference output for testing test/btyacc/no_include.output reference output for testing test/btyacc/no_opts.error reference output for testing test/btyacc/no_opts.output reference output for testing test/btyacc/no_output.error reference output for testing test/btyacc/no_output.output reference output for testing test/btyacc/no_output1.error reference output for testing test/btyacc/no_output1.output reference output for testing test/btyacc/no_output2.error reference output for testing test/btyacc/no_output2.output reference output for testing test/btyacc/no_p_opt.error reference output for testing test/btyacc/no_p_opt.output reference output for testing test/btyacc/no_p_opt1.error reference output for testing test/btyacc/no_p_opt1.output reference output for testing test/btyacc/no_verbose.error reference output for testing test/btyacc/no_verbose.output reference output for testing test/btyacc/nostdin.error reference output for testing test/btyacc/nostdin.output reference output for testing test/btyacc/ok_syntax1.error reference output for testing test/btyacc/ok_syntax1.output reference output for testing test/btyacc/ok_syntax1.tab.c reference output for testing test/btyacc/ok_syntax1.tab.h reference output for testing test/btyacc/pure_calc.error reference output for testing test/btyacc/pure_calc.output reference output for testing test/btyacc/pure_calc.tab.c reference output for testing test/btyacc/pure_calc.tab.h reference output for testing test/btyacc/pure_error.error reference output for testing test/btyacc/pure_error.output reference output for testing test/btyacc/pure_error.tab.c reference output for testing test/btyacc/pure_error.tab.h reference output for testing test/btyacc/quote_calc-s.error reference output for testing test/btyacc/quote_calc-s.output reference output for testing test/btyacc/quote_calc-s.tab.c reference output for testing test/btyacc/quote_calc-s.tab.h reference output for testing test/btyacc/quote_calc.error reference output for testing test/btyacc/quote_calc.output reference output for testing test/btyacc/quote_calc.tab.c reference output for testing test/btyacc/quote_calc.tab.h reference output for testing test/btyacc/quote_calc2-s.error reference output for testing test/btyacc/quote_calc2-s.output reference output for testing test/btyacc/quote_calc2-s.tab.c reference output for testing test/btyacc/quote_calc2-s.tab.h reference output for testing test/btyacc/quote_calc2.error reference output for testing test/btyacc/quote_calc2.output reference output for testing test/btyacc/quote_calc2.tab.c reference output for testing test/btyacc/quote_calc2.tab.h reference output for testing test/btyacc/quote_calc3-s.error reference output for testing test/btyacc/quote_calc3-s.output reference output for testing test/btyacc/quote_calc3-s.tab.c reference output for testing test/btyacc/quote_calc3-s.tab.h reference output for testing test/btyacc/quote_calc3.error reference output for testing test/btyacc/quote_calc3.output reference output for testing test/btyacc/quote_calc3.tab.c reference output for testing test/btyacc/quote_calc3.tab.h reference output for testing test/btyacc/quote_calc4-s.error reference output for testing test/btyacc/quote_calc4-s.output reference output for testing test/btyacc/quote_calc4-s.tab.c reference output for testing test/btyacc/quote_calc4-s.tab.h reference output for testing test/btyacc/quote_calc4.error reference output for testing test/btyacc/quote_calc4.output reference output for testing test/btyacc/quote_calc4.tab.c reference output for testing test/btyacc/quote_calc4.tab.h reference output for testing test/btyacc/rename_debug.c reference output for testing test/btyacc/rename_debug.error reference output for testing test/btyacc/rename_debug.h reference output for testing test/btyacc/rename_debug.i reference output for testing test/btyacc/rename_debug.output reference output for testing test/btyacc/stdin1.calc.c reference output for testing test/btyacc/stdin1.error reference output for testing test/btyacc/stdin1.output reference output for testing test/btyacc/stdin2.calc.c reference output for testing test/btyacc/stdin2.error reference output for testing test/btyacc/stdin2.output reference output for testing test/btyacc/varsyntax_calc1.error reference output for testing test/btyacc/varsyntax_calc1.output reference output for testing test/btyacc/varsyntax_calc1.tab.c reference output for testing test/btyacc/varsyntax_calc1.tab.h reference output for testing test subdirectory test/btyacc_calc1.y testcase for btyacc test/btyacc_demo.y testcase for btyacc test/btyacc_destroy1.y btyacc test-case for %parse-param test/btyacc_destroy2.y btyacc test-case for %parse-param test/btyacc_destroy3.y btyacc test-case for %parse-param test/calc.y example from VMS freeware version of byacc test/calc1.y advanced example from Steve Johnson's paper. test/calc2.y test-cases and reference files for %lex-param / %parse-param test/calc3.y test-cases and reference files for %lex-param / %parse-param test/calc_code_all.y test-case for "%code" with all recognized keywords test/calc_code_default.y test-case for "%code" with no keyword test/calc_code_imports.y test-case for "%code imports" test/calc_code_provides.y test-case for "%code provides" test/calc_code_requires.y test-case for "%code requires" test/calc_code_top.y test-case for "%code top" test/code_calc.y reference input for testing test/code_debug.y test-input, for -i, -o, -d options test/code_error.y reference input for testing test/empty.y testcase for btyacc test/err_inherit1.y testcase for btyacc test/err_inherit2.y testcase for btyacc test/err_inherit3.y testcase for btyacc test/err_inherit4.y testcase for btyacc test/err_inherit5.y testcase for btyacc test/err_syntax1.y test-case with syntax error (and nonprinting character) test/err_syntax10.y testcase for retyped_warning() test/err_syntax11.y testcase for reprec_warning() test/err_syntax12.y testcase for revalued_warning() test/err_syntax13.y testcase for terminal_start() test/err_syntax14.y testcase for restarted_warning() and undefined_goal() test/err_syntax15.y testcase for no_grammar() test/err_syntax16.y testcase for terminal_lhs() test/err_syntax17.y testcase for unterminated_action() test/err_syntax18.y testcase for dollar_warning() test/err_syntax19.y testcase for dollar_error() test/err_syntax2.y testcase for unterminated_comment() test/err_syntax20.y testcase for undefined_symbol_warning() test/err_syntax21.y testcase for unknown_rhs() test/err_syntax22.y testcase for untyped_rhs() test/err_syntax23.y testcase for untyped_lhs() test/err_syntax24.y testcase for default_action_warning() test/err_syntax25.y testcase for over_unionized() test/err_syntax26.y testcase for unexpected_EOF() test/err_syntax27.y testcase for missing_brace() test/err_syntax3.y testcase for unterminated_string() test/err_syntax4.y testcase for unterminated_text() test/err_syntax5.y testcase for unterminated_union() test/err_syntax6.y testcase for illegal_tag() test/err_syntax7.y testcase for illegal_character() test/err_syntax7a.y testcase for illegal_character() test/err_syntax7b.y testcase for illegal_character() test/err_syntax8.y testcase for used_reserved() test/err_syntax8a.y testcase for used_reserved() test/err_syntax9.y testcase for tokenized_start() test/error.y original version of byacc - 1993 test/expr.oxout.h stub for "run_make.sh" test/expr.oxout.y test-case for "#line" feature test/grammar.y grammar from cproto test/inherit0.y testcase for btyacc test/inherit1.y testcase for btyacc test/inherit2.y testcase for btyacc test/ok_syntax1.y testcase for valid literal syntax test/pure_calc.y reference input for testing test/pure_error.y reference input for testing test/quote_calc.y test-case for %token using quoted name test/quote_calc2.y test-case for %token using quoted name test/quote_calc3.y test-case for %token using quoted name test/quote_calc4.y test-case for %token using quoted name test/run_lint.sh run lint, using the build-directory's makefile, on each ".c" file in test-directory test/run_make.sh do a test-compile of each ".c" file in the test-directory test/run_test.sh test-script for byacc test/varsyntax_calc1.y testcase for btyacc test/yacc subdirectory test/yacc/big_b.error exercise -L/-B options test/yacc/big_b.output exercise -L/-B options test/yacc/big_l.error exercise -L/-B options test/yacc/big_l.output exercise -L/-B options test/yacc/calc.error reference output for testing test/yacc/calc.output reference output for testing test/yacc/calc.tab.c reference output for testing test/yacc/calc.tab.h reference output for testing test/yacc/calc1.error reference output for testing test/yacc/calc1.output reference output for testing test/yacc/calc1.tab.c reference output for testing test/yacc/calc1.tab.h reference output for testing test/yacc/calc2.error reference output for testing test/yacc/calc2.output reference output for testing test/yacc/calc2.tab.c reference output for testing test/yacc/calc2.tab.h reference output for testing test/yacc/calc3.error reference output for testing test/yacc/calc3.output reference output for testing test/yacc/calc3.tab.c reference output for testing test/yacc/calc3.tab.h reference output for testing test/yacc/calc_code_all.error reference output for testing test/yacc/calc_code_all.output reference output for testing test/yacc/calc_code_all.tab.c reference output for testing test/yacc/calc_code_all.tab.h reference output for testing test/yacc/calc_code_default.error reference output for testing test/yacc/calc_code_default.output reference output for testing test/yacc/calc_code_default.tab.c reference output for testing test/yacc/calc_code_default.tab.h reference output for testing test/yacc/calc_code_imports.error reference output for testing test/yacc/calc_code_imports.output reference output for testing test/yacc/calc_code_imports.tab.c reference output for testing test/yacc/calc_code_imports.tab.h reference output for testing test/yacc/calc_code_provides.error reference output for testing test/yacc/calc_code_provides.output reference output for testing test/yacc/calc_code_provides.tab.c reference output for testing test/yacc/calc_code_provides.tab.h reference output for testing test/yacc/calc_code_requires.error reference output for testing test/yacc/calc_code_requires.output reference output for testing test/yacc/calc_code_requires.tab.c reference output for testing test/yacc/calc_code_requires.tab.h reference output for testing test/yacc/calc_code_top.error reference output for testing test/yacc/calc_code_top.output reference output for testing test/yacc/calc_code_top.tab.c reference output for testing test/yacc/calc_code_top.tab.h reference output for testing test/yacc/code_calc.code.c reference output for testing test/yacc/code_calc.error reference output for testing test/yacc/code_calc.output reference output for testing test/yacc/code_calc.tab.c reference output for testing test/yacc/code_calc.tab.h reference output for testing test/yacc/code_error.code.c reference output for testing test/yacc/code_error.error reference output for testing test/yacc/code_error.output reference output for testing test/yacc/code_error.tab.c reference output for testing test/yacc/code_error.tab.h reference output for testing test/yacc/defines1.calc.c reference output for testing test/yacc/defines1.calc.h reference output for testing test/yacc/defines1.error reference output for testing test/yacc/defines1.output reference output for testing test/yacc/defines2.calc.c reference output for testing test/yacc/defines2.calc.h reference output for testing test/yacc/defines2.error reference output for testing test/yacc/defines2.output reference output for testing test/yacc/defines3.calc.c reference output for testing test/yacc/defines3.calc.h reference output for testing test/yacc/defines3.error reference output for testing test/yacc/defines3.output reference output for testing test/yacc/empty.error reference output for testing test/yacc/empty.output reference output for testing test/yacc/empty.tab.c reference output for testing test/yacc/empty.tab.h reference output for testing test/yacc/err_syntax1.error reference output for testing test/yacc/err_syntax1.output reference output for testing test/yacc/err_syntax1.tab.c reference output for testing test/yacc/err_syntax1.tab.h reference output for testing test/yacc/err_syntax10.error reference output for testing test/yacc/err_syntax10.output reference output for testing test/yacc/err_syntax10.tab.c reference output for testing test/yacc/err_syntax10.tab.h reference output for testing test/yacc/err_syntax11.error reference output for testing test/yacc/err_syntax11.output reference output for testing test/yacc/err_syntax11.tab.c reference output for testing test/yacc/err_syntax11.tab.h reference output for testing test/yacc/err_syntax12.error reference output for testing test/yacc/err_syntax12.output reference output for testing test/yacc/err_syntax12.tab.c reference output for testing test/yacc/err_syntax12.tab.h reference output for testing test/yacc/err_syntax13.error reference output for testing test/yacc/err_syntax13.output reference output for testing test/yacc/err_syntax13.tab.c reference output for testing test/yacc/err_syntax13.tab.h reference output for testing test/yacc/err_syntax14.error reference output for testing test/yacc/err_syntax14.output reference output for testing test/yacc/err_syntax14.tab.c reference output for testing test/yacc/err_syntax14.tab.h reference output for testing test/yacc/err_syntax15.error reference output for testing test/yacc/err_syntax15.output reference output for testing test/yacc/err_syntax15.tab.c reference output for testing test/yacc/err_syntax15.tab.h reference output for testing test/yacc/err_syntax16.error reference output for testing test/yacc/err_syntax16.output reference output for testing test/yacc/err_syntax16.tab.c reference output for testing test/yacc/err_syntax16.tab.h reference output for testing test/yacc/err_syntax17.error reference output for testing test/yacc/err_syntax17.output reference output for testing test/yacc/err_syntax17.tab.c reference output for testing test/yacc/err_syntax17.tab.h reference output for testing test/yacc/err_syntax18.error reference output for testing test/yacc/err_syntax18.output reference output for testing test/yacc/err_syntax18.tab.c reference output for testing test/yacc/err_syntax18.tab.h reference output for testing test/yacc/err_syntax19.error reference output for testing test/yacc/err_syntax19.output reference output for testing test/yacc/err_syntax19.tab.c reference output for testing test/yacc/err_syntax19.tab.h reference output for testing test/yacc/err_syntax2.error reference output for testing test/yacc/err_syntax2.output reference output for testing test/yacc/err_syntax2.tab.c reference output for testing test/yacc/err_syntax2.tab.h reference output for testing test/yacc/err_syntax20.error reference output for testing test/yacc/err_syntax20.output reference output for testing test/yacc/err_syntax20.tab.c reference output for testing test/yacc/err_syntax20.tab.h reference output for testing test/yacc/err_syntax21.error reference output for testing test/yacc/err_syntax21.output reference output for testing test/yacc/err_syntax21.tab.c reference output for testing test/yacc/err_syntax21.tab.h reference output for testing test/yacc/err_syntax22.error reference output for testing test/yacc/err_syntax22.output reference output for testing test/yacc/err_syntax22.tab.c reference output for testing test/yacc/err_syntax22.tab.h reference output for testing test/yacc/err_syntax23.error reference output for testing test/yacc/err_syntax23.output reference output for testing test/yacc/err_syntax23.tab.c reference output for testing test/yacc/err_syntax23.tab.h reference output for testing test/yacc/err_syntax24.error reference output for testing test/yacc/err_syntax24.output reference output for testing test/yacc/err_syntax24.tab.c reference output for testing test/yacc/err_syntax24.tab.h reference output for testing test/yacc/err_syntax25.error reference output for testing test/yacc/err_syntax25.output reference output for testing test/yacc/err_syntax25.tab.c reference output for testing test/yacc/err_syntax25.tab.h reference output for testing test/yacc/err_syntax26.error reference output for testing test/yacc/err_syntax26.output reference output for testing test/yacc/err_syntax26.tab.c reference output for testing test/yacc/err_syntax26.tab.h reference output for testing test/yacc/err_syntax27.error reference output for testing test/yacc/err_syntax27.output reference output for testing test/yacc/err_syntax27.tab.c reference output for testing test/yacc/err_syntax27.tab.h reference output for testing test/yacc/err_syntax3.error reference output for testing test/yacc/err_syntax3.output reference output for testing test/yacc/err_syntax3.tab.c reference output for testing test/yacc/err_syntax3.tab.h reference output for testing test/yacc/err_syntax4.error reference output for testing test/yacc/err_syntax4.output reference output for testing test/yacc/err_syntax4.tab.c reference output for testing test/yacc/err_syntax4.tab.h reference output for testing test/yacc/err_syntax5.error reference output for testing test/yacc/err_syntax5.output reference output for testing test/yacc/err_syntax5.tab.c reference output for testing test/yacc/err_syntax5.tab.h reference output for testing test/yacc/err_syntax6.error reference output for testing test/yacc/err_syntax6.output reference output for testing test/yacc/err_syntax6.tab.c reference output for testing test/yacc/err_syntax6.tab.h reference output for testing test/yacc/err_syntax7.error reference output for testing test/yacc/err_syntax7.output reference output for testing test/yacc/err_syntax7.tab.c reference output for testing test/yacc/err_syntax7.tab.h reference output for testing test/yacc/err_syntax7a.error reference output for testing test/yacc/err_syntax7a.output reference output for testing test/yacc/err_syntax7a.tab.c reference output for testing test/yacc/err_syntax7a.tab.h reference output for testing test/yacc/err_syntax7b.error reference output for testing test/yacc/err_syntax7b.output reference output for testing test/yacc/err_syntax7b.tab.c reference output for testing test/yacc/err_syntax7b.tab.h reference output for testing test/yacc/err_syntax8.error reference output for testing test/yacc/err_syntax8.output reference output for testing test/yacc/err_syntax8.tab.c reference output for testing test/yacc/err_syntax8.tab.h reference output for testing test/yacc/err_syntax8a.error reference output for testing test/yacc/err_syntax8a.output reference output for testing test/yacc/err_syntax8a.tab.c reference output for testing test/yacc/err_syntax8a.tab.h reference output for testing test/yacc/err_syntax9.error reference output for testing test/yacc/err_syntax9.output reference output for testing test/yacc/err_syntax9.tab.c reference output for testing test/yacc/err_syntax9.tab.h reference output for testing test/yacc/error.error reference output for testing test/yacc/error.output reference output for testing test/yacc/error.tab.c reference output for testing test/yacc/error.tab.h reference output for testing test/yacc/expr.oxout.error reference output for testing test/yacc/expr.oxout.output reference output for testing test/yacc/expr.oxout.tab.c reference output for testing test/yacc/expr.oxout.tab.h reference output for testing test/yacc/grammar.dot reference output for testing test/yacc/grammar.error reference output for testing test/yacc/grammar.output reference output for testing test/yacc/grammar.tab.c reference output for testing test/yacc/grammar.tab.h reference output for testing test/yacc/help.error reference output for testing test/yacc/help.output reference output for testing test/yacc/no_b_opt.error reference output for testing test/yacc/no_b_opt.output reference output for testing test/yacc/no_b_opt1.error reference output for testing test/yacc/no_b_opt1.output reference output for testing test/yacc/no_code_c.error reference output for testing test/yacc/no_code_c.output reference output for testing test/yacc/no_defines.error reference output for testing test/yacc/no_defines.output reference output for testing test/yacc/no_graph.error reference output for testing test/yacc/no_graph.output reference output for testing test/yacc/no_include.error reference output for testing test/yacc/no_include.output reference output for testing test/yacc/no_opts.error reference output for testing test/yacc/no_opts.output reference output for testing test/yacc/no_output.error reference output for testing test/yacc/no_output.output reference output for testing test/yacc/no_output1.error reference output for testing test/yacc/no_output1.output reference output for testing test/yacc/no_output2.error reference output for testing test/yacc/no_output2.output reference output for testing test/yacc/no_p_opt.error reference output for testing test/yacc/no_p_opt.output reference output for testing test/yacc/no_p_opt1.error reference output for testing test/yacc/no_p_opt1.output reference output for testing test/yacc/no_verbose.error reference output for testing test/yacc/no_verbose.output reference output for testing test/yacc/nostdin.error reference output for testing test/yacc/nostdin.output reference output for testing test/yacc/ok_syntax1.error reference output for testing test/yacc/ok_syntax1.output reference output for testing test/yacc/ok_syntax1.tab.c reference output for testing test/yacc/ok_syntax1.tab.h reference output for testing test/yacc/pure_calc.error reference output for testing test/yacc/pure_calc.output reference output for testing test/yacc/pure_calc.tab.c reference output for testing test/yacc/pure_calc.tab.h reference output for testing test/yacc/pure_error.error reference output for testing test/yacc/pure_error.output reference output for testing test/yacc/pure_error.tab.c reference output for testing test/yacc/pure_error.tab.h reference output for testing test/yacc/quote_calc-s.error reference output for testing test/yacc/quote_calc-s.output reference output for testing test/yacc/quote_calc-s.tab.c reference output for testing test/yacc/quote_calc-s.tab.h reference output for testing test/yacc/quote_calc.error reference output for testing test/yacc/quote_calc.output reference output for testing test/yacc/quote_calc.tab.c reference output for testing test/yacc/quote_calc.tab.h reference output for testing test/yacc/quote_calc2-s.error reference output for testing test/yacc/quote_calc2-s.output reference output for testing test/yacc/quote_calc2-s.tab.c reference output for testing test/yacc/quote_calc2-s.tab.h reference output for testing test/yacc/quote_calc2.error reference output for testing test/yacc/quote_calc2.output reference output for testing test/yacc/quote_calc2.tab.c reference output for testing test/yacc/quote_calc2.tab.h reference output for testing test/yacc/quote_calc3-s.error reference output for testing test/yacc/quote_calc3-s.output reference output for testing test/yacc/quote_calc3-s.tab.c reference output for testing test/yacc/quote_calc3-s.tab.h reference output for testing test/yacc/quote_calc3.error reference output for testing test/yacc/quote_calc3.output reference output for testing test/yacc/quote_calc3.tab.c reference output for testing test/yacc/quote_calc3.tab.h reference output for testing test/yacc/quote_calc4-s.error reference output for testing test/yacc/quote_calc4-s.output reference output for testing test/yacc/quote_calc4-s.tab.c reference output for testing test/yacc/quote_calc4-s.tab.h reference output for testing test/yacc/quote_calc4.error reference output for testing test/yacc/quote_calc4.output reference output for testing test/yacc/quote_calc4.tab.c reference output for testing test/yacc/quote_calc4.tab.h reference output for testing test/yacc/rename_debug.c reference output for testing test/yacc/rename_debug.error reference output for testing test/yacc/rename_debug.h reference output for testing test/yacc/rename_debug.i reference output for testing test/yacc/rename_debug.output reference output for testing test/yacc/stdin1.calc.c reference output for testing test/yacc/stdin1.error reference output for testing test/yacc/stdin1.output reference output for testing test/yacc/stdin2.calc.c reference output for testing test/yacc/stdin2.error reference output for testing test/yacc/stdin2.output reference output for testing test/yacc/varsyntax_calc1.error reference output for testing test/yacc/varsyntax_calc1.output reference output for testing test/yacc/varsyntax_calc1.tab.c reference output for testing test/yacc/varsyntax_calc1.tab.h reference output for testing byacc-20221106/error.c0000644000000000000000000002152213020337413013023 0ustar rootroot/* $Id: error.c,v 1.14 2016/12/02 18:35:55 tom Exp $ */ /* routines for printing error messages */ #include "defs.h" void fatal(const char *msg) { fprintf(stderr, "%s: f - %s\n", myname, msg); done(2); } void no_space(void) { fprintf(stderr, "%s: f - out of space\n", myname); done(2); } void open_error(const char *filename) { fprintf(stderr, "%s: f - cannot open \"%s\"\n", myname, filename); done(2); } void missing_brace(void) { fprintf(stderr, "%s: e - line %d of \"%s\", missing '}'\n", myname, lineno, input_file_name); done(1); } void unexpected_EOF(void) { fprintf(stderr, "%s: e - line %d of \"%s\", unexpected end-of-file\n", myname, lineno, input_file_name); done(1); } static void print_pos(const char *st_line, const char *st_cptr) { const char *s; if (st_line == 0) return; for (s = st_line; *s != '\n'; ++s) { if (isprint(UCH(*s)) || *s == '\t') putc(*s, stderr); else putc('?', stderr); } putc('\n', stderr); for (s = st_line; s < st_cptr; ++s) { if (*s == '\t') putc('\t', stderr); else putc(' ', stderr); } putc('^', stderr); putc('\n', stderr); } void syntax_error(int st_lineno, char *st_line, char *st_cptr) { fprintf(stderr, "%s: e - line %d of \"%s\", syntax error\n", myname, st_lineno, input_file_name); print_pos(st_line, st_cptr); done(1); } void unterminated_comment(const struct ainfo *a) { fprintf(stderr, "%s: e - line %d of \"%s\", unmatched /*\n", myname, a->a_lineno, input_file_name); print_pos(a->a_line, a->a_cptr); done(1); } void unterminated_string(const struct ainfo *a) { fprintf(stderr, "%s: e - line %d of \"%s\", unterminated string\n", myname, a->a_lineno, input_file_name); print_pos(a->a_line, a->a_cptr); done(1); } void unterminated_text(const struct ainfo *a) { fprintf(stderr, "%s: e - line %d of \"%s\", unmatched %%{\n", myname, a->a_lineno, input_file_name); print_pos(a->a_line, a->a_cptr); done(1); } void unterminated_union(const struct ainfo *a) { fprintf(stderr, "%s: e - line %d of \"%s\", unterminated %%union \ declaration\n", myname, a->a_lineno, input_file_name); print_pos(a->a_line, a->a_cptr); done(1); } void over_unionized(char *u_cptr) { fprintf(stderr, "%s: e - line %d of \"%s\", too many %%union \ declarations\n", myname, lineno, input_file_name); print_pos(line, u_cptr); done(1); } void illegal_tag(int t_lineno, char *t_line, char *t_cptr) { fprintf(stderr, "%s: e - line %d of \"%s\", illegal tag\n", myname, t_lineno, input_file_name); print_pos(t_line, t_cptr); done(1); } void illegal_character(char *c_cptr) { fprintf(stderr, "%s: e - line %d of \"%s\", illegal character\n", myname, lineno, input_file_name); print_pos(line, c_cptr); done(1); } void used_reserved(char *s) { fprintf(stderr, "%s: e - line %d of \"%s\", illegal use of reserved symbol \ %s\n", myname, lineno, input_file_name, s); done(1); } void tokenized_start(char *s) { fprintf(stderr, "%s: e - line %d of \"%s\", the start symbol %s cannot be \ declared to be a token\n", myname, lineno, input_file_name, s); done(1); } void retyped_warning(char *s) { fprintf(stderr, "%s: w - line %d of \"%s\", the type of %s has been \ redeclared\n", myname, lineno, input_file_name, s); } void reprec_warning(char *s) { fprintf(stderr, "%s: w - line %d of \"%s\", the precedence of %s has been \ redeclared\n", myname, lineno, input_file_name, s); } void revalued_warning(char *s) { fprintf(stderr, "%s: w - line %d of \"%s\", the value of %s has been \ redeclared\n", myname, lineno, input_file_name, s); } void terminal_start(char *s) { fprintf(stderr, "%s: e - line %d of \"%s\", the start symbol %s is a \ token\n", myname, lineno, input_file_name, s); done(1); } void restarted_warning(void) { fprintf(stderr, "%s: w - line %d of \"%s\", the start symbol has been \ redeclared\n", myname, lineno, input_file_name); } void no_grammar(void) { fprintf(stderr, "%s: e - line %d of \"%s\", no grammar has been \ specified\n", myname, lineno, input_file_name); done(1); } void terminal_lhs(int s_lineno) { fprintf(stderr, "%s: e - line %d of \"%s\", a token appears on the lhs \ of a production\n", myname, s_lineno, input_file_name); done(1); } void prec_redeclared(void) { fprintf(stderr, "%s: w - line %d of \"%s\", conflicting %%prec \ specifiers\n", myname, lineno, input_file_name); } void unterminated_action(const struct ainfo *a) { fprintf(stderr, "%s: e - line %d of \"%s\", unterminated action\n", myname, a->a_lineno, input_file_name); print_pos(a->a_line, a->a_cptr); done(1); } void dollar_warning(int a_lineno, int i) { fprintf(stderr, "%s: w - line %d of \"%s\", $%d references beyond the \ end of the current rule\n", myname, a_lineno, input_file_name, i); } void dollar_error(int a_lineno, char *a_line, char *a_cptr) { fprintf(stderr, "%s: e - line %d of \"%s\", illegal $-name\n", myname, a_lineno, input_file_name); print_pos(a_line, a_cptr); done(1); } void untyped_lhs(void) { fprintf(stderr, "%s: e - line %d of \"%s\", $$ is untyped\n", myname, lineno, input_file_name); done(1); } void untyped_rhs(int i, char *s) { fprintf(stderr, "%s: e - line %d of \"%s\", $%d (%s) is untyped\n", myname, lineno, input_file_name, i, s); done(1); } void unknown_rhs(int i) { fprintf(stderr, "%s: e - line %d of \"%s\", $%d is untyped\n", myname, lineno, input_file_name, i); done(1); } void default_action_warning(char *s) { fprintf(stderr, "%s: w - line %d of \"%s\", the default action for %s assigns an \ undefined value to $$\n", myname, lineno, input_file_name, s); } void undefined_goal(char *s) { fprintf(stderr, "%s: e - the start symbol %s is undefined\n", myname, s); done(1); } void undefined_symbol_warning(char *s) { fprintf(stderr, "%s: w - the symbol %s is undefined\n", myname, s); } #if ! defined(YYBTYACC) void unsupported_flag_warning(const char *flag, const char *details) { fprintf(stderr, "%s: w - %s flag unsupported, %s\n", myname, flag, details); } #endif #if defined(YYBTYACC) void at_warning(int a_lineno, int i) { fprintf(stderr, "%s: w - line %d of \"%s\", @%d references beyond the \ end of the current rule\n", myname, a_lineno, input_file_name, i); } void at_error(int a_lineno, char *a_line, char *a_cptr) { fprintf(stderr, "%s: e - line %d of \"%s\", illegal @$ or @N reference\n", myname, a_lineno, input_file_name); print_pos(a_line, a_cptr); done(1); } void unterminated_arglist(const struct ainfo *a) { fprintf(stderr, "%s: e - line %d of \"%s\", unterminated argument list\n", myname, a->a_lineno, input_file_name); print_pos(a->a_line, a->a_cptr); done(1); } void arg_number_disagree_warning(int a_lineno, char *a_name) { fprintf(stderr, "%s: w - line %d of \"%s\", number of arguments of %s " "doesn't agree with previous declaration\n", myname, a_lineno, input_file_name, a_name); } void bad_formals(void) { fprintf(stderr, "%s: e - line %d of \"%s\", bad formal argument list\n", myname, lineno, input_file_name); print_pos(line, cptr); done(1); } void arg_type_disagree_warning(int a_lineno, int i, char *a_name) { fprintf(stderr, "%s: w - line %d of \"%s\", type of argument %d " "to %s doesn't agree with previous declaration\n", myname, a_lineno, input_file_name, i, a_name); } void unknown_arg_warning(int d_lineno, const char *dlr_opt, const char *d_arg, const char *d_line, const char *d_cptr) { fprintf(stderr, "%s: w - line %d of \"%s\", unknown argument %s%s\n", myname, d_lineno, input_file_name, dlr_opt, d_arg); print_pos(d_line, d_cptr); } void untyped_arg_warning(int a_lineno, const char *dlr_opt, const char *a_name) { fprintf(stderr, "%s: w - line %d of \"%s\", untyped argument %s%s\n", myname, a_lineno, input_file_name, dlr_opt, a_name); } void wrong_number_args_warning(const char *which, const char *a_name) { fprintf(stderr, "%s: w - line %d of \"%s\", wrong number of %sarguments for %s\n", myname, lineno, input_file_name, which, a_name); print_pos(line, cptr); } void wrong_type_for_arg_warning(int i, char *a_name) { fprintf(stderr, "%s: w - line %d of \"%s\", wrong type for default argument %d to %s\n", myname, lineno, input_file_name, i, a_name); print_pos(line, cptr); } void start_requires_args(char *a_name) { fprintf(stderr, "%s: w - line %d of \"%s\", start symbol %s requires arguments\n", myname, 0, input_file_name, a_name); } void destructor_redeclared_warning(const struct ainfo *a) { fprintf(stderr, "%s: w - line %d of \"%s\", destructor redeclared\n", myname, a->a_lineno, input_file_name); print_pos(a->a_line, a->a_cptr); } #endif byacc-20221106/AUTHORS0000644000000000000000000000036711403002667012605 0ustar rootroot-- $Id: AUTHORS,v 1.1 2010/06/06 20:31:51 tom Exp $ -- vile:txtmode -- This file is used by a script that collects contributor information and -- resolves nicknames vs fullnames. dickey Thomas Dickey schmitz Sylvain Schmitz unknown Robert Corbett byacc-20221106/mkpar.c0000644000000000000000000001727514051573543013031 0ustar rootroot/* $Id: mkpar.c,v 1.18 2021/05/20 23:57:23 tom Exp $ */ #include "defs.h" #define NotSuppressed(p) ((p)->suppressed == 0) #if defined(YYBTYACC) #define MaySuppress(p) ((backtrack ? ((p)->suppressed <= 1) : (p)->suppressed == 0)) /* suppress the preferred action => enable backtracking */ #define StartBacktrack(p) if (backtrack && (p) != NULL && NotSuppressed(p)) (p)->suppressed = 1 #else #define MaySuppress(p) ((p)->suppressed == 0) #define StartBacktrack(p) /*nothing */ #endif static action *add_reduce(action *actions, int ruleno, int symbol); static action *add_reductions(int stateno, action *actions); static action *get_shifts(int stateno); static action *parse_actions(int stateno); static int sole_reduction(int stateno); static void defreds(void); static void find_final_state(void); static void free_action_row(action *p); static void remove_conflicts(void); static void total_conflicts(void); static void unused_rules(void); action **parser; int SRexpect; int RRexpect; int SRtotal; int RRtotal; Value_t *SRconflicts; Value_t *RRconflicts; Value_t *defred; Value_t *rules_used; Value_t nunused; Value_t final_state; static Value_t SRcount; static Value_t RRcount; void make_parser(void) { int i; parser = NEW2(nstates, action *); for (i = 0; i < nstates; i++) parser[i] = parse_actions(i); find_final_state(); remove_conflicts(); unused_rules(); if (SRtotal + RRtotal > 0) total_conflicts(); defreds(); } static action * parse_actions(int stateno) { action *actions; actions = get_shifts(stateno); actions = add_reductions(stateno, actions); return (actions); } static action * get_shifts(int stateno) { action *actions, *temp; shifts *sp; Value_t *to_state2; actions = 0; sp = shift_table[stateno]; if (sp) { Value_t i; to_state2 = sp->shift; for (i = (Value_t)(sp->nshifts - 1); i >= 0; i--) { Value_t k = to_state2[i]; Value_t symbol = accessing_symbol[k]; if (ISTOKEN(symbol)) { temp = NEW(action); temp->next = actions; temp->symbol = symbol; temp->number = k; temp->prec = symbol_prec[symbol]; temp->action_code = SHIFT; temp->assoc = symbol_assoc[symbol]; actions = temp; } } } return (actions); } static action * add_reductions(int stateno, action *actions) { int i, j, m, n; int tokensetsize; tokensetsize = WORDSIZE(ntokens); m = lookaheads[stateno]; n = lookaheads[stateno + 1]; for (i = m; i < n; i++) { int ruleno = LAruleno[i]; unsigned *rowp = LA + i * tokensetsize; for (j = ntokens - 1; j >= 0; j--) { if (BIT(rowp, j)) actions = add_reduce(actions, ruleno, j); } } return (actions); } static action * add_reduce(action *actions, int ruleno, int symbol) { action *temp, *prev, *next; prev = 0; for (next = actions; next && next->symbol < symbol; next = next->next) prev = next; while (next && next->symbol == symbol && next->action_code == SHIFT) { prev = next; next = next->next; } while (next && next->symbol == symbol && next->action_code == REDUCE && next->number < ruleno) { prev = next; next = next->next; } temp = NEW(action); temp->next = next; temp->symbol = (Value_t)symbol; temp->number = (Value_t)ruleno; temp->prec = rprec[ruleno]; temp->action_code = REDUCE; temp->assoc = rassoc[ruleno]; if (prev) prev->next = temp; else actions = temp; return (actions); } static void find_final_state(void) { Value_t *to_state2; shifts *p; if ((p = shift_table[0]) != 0) { int i; int goal = ritem[1]; to_state2 = p->shift; for (i = p->nshifts - 1; i >= 0; --i) { final_state = to_state2[i]; if (accessing_symbol[final_state] == goal) break; } } } static void unused_rules(void) { int i; action *p; rules_used = TMALLOC(Value_t, nrules); NO_SPACE(rules_used); for (i = 0; i < nrules; ++i) rules_used[i] = 0; for (i = 0; i < nstates; ++i) { for (p = parser[i]; p; p = p->next) { if ((p->action_code == REDUCE) && MaySuppress(p)) rules_used[p->number] = 1; } } nunused = 0; for (i = 3; i < nrules; ++i) if (!rules_used[i]) ++nunused; if (nunused) { if (nunused == 1) fprintf(stderr, "%s: 1 rule never reduced\n", myname); else fprintf(stderr, "%s: %ld rules never reduced\n", myname, (long)nunused); } } static void remove_conflicts(void) { int i; action *p, *pref = 0; SRtotal = 0; RRtotal = 0; SRconflicts = NEW2(nstates, Value_t); RRconflicts = NEW2(nstates, Value_t); for (i = 0; i < nstates; i++) { int symbol = -1; SRcount = 0; RRcount = 0; #if defined(YYBTYACC) pref = NULL; #endif for (p = parser[i]; p; p = p->next) { if (p->symbol != symbol) { /* the first parse action for each symbol is the preferred action */ pref = p; symbol = p->symbol; } /* following conditions handle multiple, i.e., conflicting, parse actions */ else if (i == final_state && symbol == 0) { SRcount++; p->suppressed = 1; StartBacktrack(pref); } else if (pref != 0 && pref->action_code == SHIFT) { if (pref->prec > 0 && p->prec > 0) { if (pref->prec < p->prec) { pref->suppressed = 2; pref = p; } else if (pref->prec > p->prec) { p->suppressed = 2; } else if (pref->assoc == LEFT) { pref->suppressed = 2; pref = p; } else if (pref->assoc == RIGHT) { p->suppressed = 2; } else { pref->suppressed = 2; p->suppressed = 2; } } else { SRcount++; p->suppressed = 1; StartBacktrack(pref); } } else { RRcount++; p->suppressed = 1; StartBacktrack(pref); } } SRtotal += SRcount; RRtotal += RRcount; SRconflicts[i] = SRcount; RRconflicts[i] = RRcount; } } static void total_conflicts(void) { fprintf(stderr, "%s: ", myname); if (SRtotal == 1) fprintf(stderr, "1 shift/reduce conflict"); else if (SRtotal > 1) fprintf(stderr, "%d shift/reduce conflicts", SRtotal); if (SRtotal && RRtotal) fprintf(stderr, ", "); if (RRtotal == 1) fprintf(stderr, "1 reduce/reduce conflict"); else if (RRtotal > 1) fprintf(stderr, "%d reduce/reduce conflicts", RRtotal); fprintf(stderr, ".\n"); if (SRexpect >= 0 && SRtotal != SRexpect) { fprintf(stderr, "%s: ", myname); fprintf(stderr, "expected %d shift/reduce conflict%s.\n", SRexpect, PLURAL(SRexpect)); exit_code = EXIT_FAILURE; } if (RRexpect >= 0 && RRtotal != RRexpect) { fprintf(stderr, "%s: ", myname); fprintf(stderr, "expected %d reduce/reduce conflict%s.\n", RRexpect, PLURAL(RRexpect)); exit_code = EXIT_FAILURE; } } static int sole_reduction(int stateno) { int count, ruleno; action *p; count = 0; ruleno = 0; for (p = parser[stateno]; p; p = p->next) { if (p->action_code == SHIFT && MaySuppress(p)) return (0); else if ((p->action_code == REDUCE) && MaySuppress(p)) { if (ruleno > 0 && p->number != ruleno) return (0); if (p->symbol != 1) ++count; ruleno = p->number; } } if (count == 0) return (0); return (ruleno); } static void defreds(void) { int i; defred = NEW2(nstates, Value_t); for (i = 0; i < nstates; i++) defred[i] = (Value_t)sole_reduction(i); } static void free_action_row(action *p) { action *q; while (p) { q = p->next; FREE(p); p = q; } } void free_parser(void) { int i; for (i = 0; i < nstates; i++) free_action_row(parser[i]); FREE(parser); } #ifdef NO_LEAKS void mkpar_leaks(void) { DO_FREE(defred); DO_FREE(rules_used); DO_FREE(SRconflicts); DO_FREE(RRconflicts); } #endif byacc-20221106/descrip.mms0000644000000000000000000000222212431176152013677 0ustar rootrootCFLAGS = /decc $(CC_OPTIONS)/Diagnostics /Define=(NDEBUG) /Object=$@ /Include=([]) LINKFLAGS = /map=$(MMS$TARGET_NAME)/cross_reference/exec=$(MMS$TARGET_NAME).exe LINKER = cc OBJS = closure.obj, \ error.obj,graph.obj, \ lalr.obj, \ lr0.obj, \ main.obj, \ mkpar.obj,mstring.obj, \ output.obj, \ reader.obj, \ yaccpar.obj, \ symtab.obj, \ verbose.obj, \ warshall.obj PROGRAM = yacc.exe all : $(PROGRAM) @ write sys$output "All done" $(PROGRAM) : $(OBJS) @ write sys$output "Loading $(PROGRAM) ... " @ $(LINK) $(LINKFLAGS) $(OBJS) @ write sys$output "done" clean : @- if f$search("*.obj") .nes. "" then delete *.obj;* @- if f$search("*.lis") .nes. "" then delete *.lis;* @- if f$search("*.log") .nes. "" then delete *.log;* clobber : clean @- if f$search("*.exe") .nes. "" then delete *.exe;* $(OBJS) : defs.h closure.obj : closure.c error.obj : error.c graph.obj : graph.c lalr.obj : lalr.c lr0.obj : lr0.c main.obj : main.c mkpar.obj : mkpar.c mstring.obj : mstring.c output.obj : output.c reader.obj : reader.c yaccpar.obj : yaccpar.c symtab.obj : symtab.c verbose.obj : verbose.c warshall.obj : warshall.c byacc-20221106/lalr.c0000644000000000000000000002523514051573543012644 0ustar rootroot/* $Id: lalr.c,v 1.14 2021/05/20 23:57:23 tom Exp $ */ #include "defs.h" typedef struct shorts { struct shorts *next; Value_t value; } shorts; static Value_t map_goto(int state, int symbol); static Value_t **transpose(Value_t **R, int n); static void add_lookback_edge(int stateno, int ruleno, int gotono); static void build_relations(void); static void compute_FOLLOWS(void); static void compute_lookaheads(void); static void digraph(Value_t **relation); static void initialize_F(void); static void initialize_LA(void); static void set_accessing_symbol(void); static void set_goto_map(void); static void set_maxrhs(void); static void set_reduction_table(void); static void set_shift_table(void); static void set_state_table(void); static void traverse(int i); static int tokensetsize; Value_t *lookaheads; Value_t *LAruleno; unsigned *LA; Value_t *accessing_symbol; core **state_table; shifts **shift_table; reductions **reduction_table; Value_t *goto_base; Value_t *goto_map; Value_t *from_state; Value_t *to_state; static Value_t infinity; static int maxrhs; static Value_t ngotos; static unsigned *F; static Value_t **includes; static shorts **lookback; static Value_t **R; static Value_t *INDEX; static Value_t *VERTICES; static Value_t top; void lalr(void) { tokensetsize = WORDSIZE(ntokens); set_state_table(); set_accessing_symbol(); set_shift_table(); set_reduction_table(); set_maxrhs(); initialize_LA(); set_goto_map(); initialize_F(); build_relations(); compute_FOLLOWS(); compute_lookaheads(); } static void set_state_table(void) { core *sp; state_table = NEW2(nstates, core *); for (sp = first_state; sp; sp = sp->next) state_table[sp->number] = sp; } static void set_accessing_symbol(void) { core *sp; accessing_symbol = NEW2(nstates, Value_t); for (sp = first_state; sp; sp = sp->next) accessing_symbol[sp->number] = sp->accessing_symbol; } static void set_shift_table(void) { shifts *sp; shift_table = NEW2(nstates, shifts *); for (sp = first_shift; sp; sp = sp->next) shift_table[sp->number] = sp; } static void set_reduction_table(void) { reductions *rp; reduction_table = NEW2(nstates, reductions *); for (rp = first_reduction; rp; rp = rp->next) reduction_table[rp->number] = rp; } static void set_maxrhs(void) { Value_t *itemp; Value_t *item_end; int length; int max; length = 0; max = 0; item_end = ritem + nitems; for (itemp = ritem; itemp < item_end; itemp++) { if (*itemp >= 0) { length++; } else { if (length > max) max = length; length = 0; } } maxrhs = max; } static void initialize_LA(void) { int i, j, k; reductions *rp; lookaheads = NEW2(nstates + 1, Value_t); k = 0; for (i = 0; i < nstates; i++) { lookaheads[i] = (Value_t)k; rp = reduction_table[i]; if (rp) k += rp->nreds; } lookaheads[nstates] = (Value_t)k; LA = NEW2(k * tokensetsize, unsigned); LAruleno = NEW2(k, Value_t); lookback = NEW2(k, shorts *); k = 0; for (i = 0; i < nstates; i++) { rp = reduction_table[i]; if (rp) { for (j = 0; j < rp->nreds; j++) { LAruleno[k] = rp->rules[j]; k++; } } } } static void set_goto_map(void) { shifts *sp; int i; int symbol; int k; Value_t *temp_base; Value_t *temp_map; Value_t state2; goto_base = NEW2(nvars + 1, Value_t); temp_base = NEW2(nvars + 1, Value_t); goto_map = goto_base - ntokens; temp_map = temp_base - ntokens; ngotos = 0; for (sp = first_shift; sp; sp = sp->next) { for (i = sp->nshifts - 1; i >= 0; i--) { symbol = accessing_symbol[sp->shift[i]]; if (ISTOKEN(symbol)) break; if (ngotos == MAXYYINT) fatal("too many gotos"); ngotos++; goto_map[symbol]++; } } k = 0; for (i = ntokens; i < nsyms; i++) { temp_map[i] = (Value_t)k; k += goto_map[i]; } for (i = ntokens; i < nsyms; i++) goto_map[i] = temp_map[i]; goto_map[nsyms] = (Value_t)ngotos; temp_map[nsyms] = (Value_t)ngotos; from_state = NEW2(ngotos, Value_t); to_state = NEW2(ngotos, Value_t); for (sp = first_shift; sp; sp = sp->next) { Value_t state1 = sp->number; for (i = sp->nshifts - 1; i >= 0; i--) { state2 = sp->shift[i]; symbol = accessing_symbol[state2]; if (ISTOKEN(symbol)) break; k = temp_map[symbol]++; from_state[k] = state1; to_state[k] = state2; } } FREE(temp_base); } /* Map_goto maps a state/symbol pair into its numeric representation. */ static Value_t map_goto(int state, int symbol) { int low = goto_map[symbol]; int high = goto_map[symbol + 1]; for (;;) { int middle; int s; assert(low <= high); middle = (low + high) >> 1; s = from_state[middle]; if (s == state) return (Value_t)(middle); else if (s < state) low = middle + 1; else high = middle - 1; } } static void initialize_F(void) { int i; int j; int k; shifts *sp; Value_t *edge; unsigned *rowp; Value_t *rp; Value_t **reads; int nedges; int symbol; int nwords; nwords = ngotos * tokensetsize; F = NEW2(nwords, unsigned); reads = NEW2(ngotos, Value_t *); edge = NEW2(ngotos + 1, Value_t); nedges = 0; rowp = F; for (i = 0; i < ngotos; i++) { int stateno = to_state[i]; sp = shift_table[stateno]; if (sp) { k = sp->nshifts; for (j = 0; j < k; j++) { symbol = accessing_symbol[sp->shift[j]]; if (ISVAR(symbol)) break; SETBIT(rowp, symbol); } for (; j < k; j++) { symbol = accessing_symbol[sp->shift[j]]; if (nullable[symbol]) edge[nedges++] = map_goto(stateno, symbol); } if (nedges) { reads[i] = rp = NEW2(nedges + 1, Value_t); for (j = 0; j < nedges; j++) rp[j] = edge[j]; rp[nedges] = -1; nedges = 0; } } rowp += tokensetsize; } SETBIT(F, 0); digraph(reads); for (i = 0; i < ngotos; i++) { if (reads[i]) FREE(reads[i]); } FREE(reads); FREE(edge); } static void build_relations(void) { int i; int j; int k; Value_t *rulep; Value_t *rp; shifts *sp; int length; int done_flag; Value_t stateno; int symbol2; Value_t *shortp; Value_t *edge; Value_t *states; Value_t **new_includes; includes = NEW2(ngotos, Value_t *); edge = NEW2(ngotos + 1, Value_t); states = NEW2(maxrhs + 1, Value_t); for (i = 0; i < ngotos; i++) { int nedges = 0; int symbol1 = accessing_symbol[to_state[i]]; Value_t state1 = from_state[i]; for (rulep = derives[symbol1]; *rulep >= 0; rulep++) { length = 1; states[0] = state1; stateno = state1; for (rp = ritem + rrhs[*rulep]; *rp >= 0; rp++) { symbol2 = *rp; sp = shift_table[stateno]; k = sp->nshifts; for (j = 0; j < k; j++) { stateno = sp->shift[j]; if (accessing_symbol[stateno] == symbol2) break; } states[length++] = stateno; } add_lookback_edge(stateno, *rulep, i); length--; done_flag = 0; while (!done_flag) { done_flag = 1; rp--; if (ISVAR(*rp)) { stateno = states[--length]; edge[nedges++] = map_goto(stateno, *rp); if (nullable[*rp] && length > 0) done_flag = 0; } } } if (nedges) { includes[i] = shortp = NEW2(nedges + 1, Value_t); for (j = 0; j < nedges; j++) shortp[j] = edge[j]; shortp[nedges] = -1; } } new_includes = transpose(includes, ngotos); for (i = 0; i < ngotos; i++) if (includes[i]) FREE(includes[i]); FREE(includes); includes = new_includes; FREE(edge); FREE(states); } static void add_lookback_edge(int stateno, int ruleno, int gotono) { int i, k; int found; shorts *sp; i = lookaheads[stateno]; k = lookaheads[stateno + 1]; found = 0; while (!found && i < k) { if (LAruleno[i] == ruleno) found = 1; else ++i; } assert(found); sp = NEW(shorts); sp->next = lookback[i]; sp->value = (Value_t)gotono; lookback[i] = sp; } static Value_t ** transpose(Value_t **R2, int n) { Value_t **new_R; Value_t **temp_R; Value_t *nedges; Value_t *sp; int i; nedges = NEW2(n, Value_t); for (i = 0; i < n; i++) { sp = R2[i]; if (sp) { while (*sp >= 0) nedges[*sp++]++; } } new_R = NEW2(n, Value_t *); temp_R = NEW2(n, Value_t *); for (i = 0; i < n; i++) { int k = nedges[i]; if (k > 0) { sp = NEW2(k + 1, Value_t); new_R[i] = sp; temp_R[i] = sp; sp[k] = -1; } } FREE(nedges); for (i = 0; i < n; i++) { sp = R2[i]; if (sp) { while (*sp >= 0) *temp_R[*sp++]++ = (Value_t)i; } } FREE(temp_R); return (new_R); } static void compute_FOLLOWS(void) { digraph(includes); } static void compute_lookaheads(void) { int i, n; unsigned *fp1, *fp2, *fp3; shorts *sp, *next; unsigned *rowp; rowp = LA; n = lookaheads[nstates]; for (i = 0; i < n; i++) { fp3 = rowp + tokensetsize; for (sp = lookback[i]; sp; sp = sp->next) { fp1 = rowp; fp2 = F + tokensetsize * sp->value; while (fp1 < fp3) *fp1++ |= *fp2++; } rowp = fp3; } for (i = 0; i < n; i++) for (sp = lookback[i]; sp; sp = next) { next = sp->next; FREE(sp); } FREE(lookback); FREE(F); } static void digraph(Value_t **relation) { int i; infinity = (Value_t)(ngotos + 2); INDEX = NEW2(ngotos + 1, Value_t); VERTICES = NEW2(ngotos + 1, Value_t); top = 0; R = relation; for (i = 0; i < ngotos; i++) INDEX[i] = 0; for (i = 0; i < ngotos; i++) { if (INDEX[i] == 0 && R[i]) traverse(i); } FREE(INDEX); FREE(VERTICES); } static void traverse(int i) { unsigned *fp1; unsigned *fp2; unsigned *fp3; int j; Value_t *rp; Value_t height; unsigned *base; VERTICES[++top] = (Value_t)i; INDEX[i] = height = top; base = F + i * tokensetsize; fp3 = base + tokensetsize; rp = R[i]; if (rp) { while ((j = *rp++) >= 0) { if (INDEX[j] == 0) traverse(j); if (INDEX[i] > INDEX[j]) INDEX[i] = INDEX[j]; fp1 = base; fp2 = F + j * tokensetsize; while (fp1 < fp3) *fp1++ |= *fp2++; } } if (INDEX[i] == height) { for (;;) { j = VERTICES[top--]; INDEX[j] = infinity; if (i == j) break; fp1 = base; fp2 = F + j * tokensetsize; while (fp1 < fp3) *fp2++ = *fp1++; } } } #ifdef NO_LEAKS void lalr_leaks(void) { if (includes != 0) { int i; for (i = 0; i < ngotos; i++) { free(includes[i]); } DO_FREE(includes); } } #endif byacc-20221106/config.sub0000755000000000000000000010507714271704511013527 0ustar rootroot#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-08-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read kernel os <&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ | linux-musl* | linux-relibc* | linux-uclibc* ) ;; uclinux-uclibc* ) ;; -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: byacc-20221106/install-sh0000755000000000000000000003577613761220263013560 0ustar rootroot#!/bin/sh # install - install a program, script, or datafile scriptversion=2020-11-14.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 # Create dirs (including intermediate dirs) using mode 755. # This is like GNU 'install' as of coreutils 8.32 (2020). mkdir_umask=22 backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -p pass -p to $cpprog. -s $stripprog installed files. -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG By default, rm is invoked with -f; when overridden with RMPROG, it's up to you to specify -f if you want it. If -S is not specified, no backups are attempted. Email bug reports to bug-automake@gnu.org. Automake home page: https://www.gnu.org/software/automake/ " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -p) cpprog="$cpprog -p";; -s) stripcmd=$stripprog;; -S) backupsuffix="$2" shift;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? # Don't chown directories that already exist. if test $dstdir_status = 0; then chowncmd="" fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false # The $RANDOM variable is not portable (e.g., dash). Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap ' ret=$? rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null exit $ret ' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p'. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # If $backupsuffix is set, and the file being installed # already exists, attempt a backup. Don't worry if it fails, # e.g., if mv doesn't support -f. if test -n "$backupsuffix" && test -f "$dst"; then $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null fi # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: byacc-20221106/btyaccpar.c0000644000000000000000000013571414104033612013651 0ustar rootroot/* This file generated automatically using * @Id: skel2c,v 1.4 2016/06/07 00:26:09 tom Exp @ */ /* @Id: btyaccpar.skel,v 1.12 2021/06/19 20:46:31 tom Exp @ */ #include "defs.h" /* If the skeleton is changed, the banner should be changed so that */ /* the altered version can be easily distinguished from the original. */ /* */ /* The #defines included with the banner are there because they are */ /* useful in subsequent code. The macros #defined in the header or */ /* the body either are not useful outside of semantic actions or */ /* are conditional. */ const char *const banner[] = { "/* original parser id follows */", "/* yysccsid[] = \"@(#)yaccpar 1.9 (Berkeley) 02/21/93\" */", "/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */", "", "#define YYBYACC 1", CONCAT1("#define YYMAJOR ", YYMAJOR), CONCAT1("#define YYMINOR ", YYMINOR), #ifdef YYPATCH CONCAT1("#define YYPATCH ", YYPATCH), #endif "", "#define YYEMPTY (-1)", "#define yyclearin (yychar = YYEMPTY)", "#define yyerrok (yyerrflag = 0)", "#define YYRECOVERING() (yyerrflag != 0)", "#define YYENOMEM (-2)", "#define YYEOF 0", 0 }; const char *const xdecls[] = { "", "extern int YYPARSE_DECL();", 0 }; const char *const tables[] = { "extern const YYINT yylhs[];", "extern const YYINT yylen[];", "extern const YYINT yydefred[];", "extern const YYINT yystos[];", "extern const YYINT yydgoto[];", "extern const YYINT yysindex[];", "extern const YYINT yyrindex[];", #if defined(YYBTYACC) "#if YYBTYACC", "extern const YYINT yycindex[];", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ "extern const YYINT yygindex[];", "extern const YYINT yytable[];", "extern const YYINT yycheck[];", #if defined(YYBTYACC) "#if YYBTYACC", "extern const YYINT yyctable[];", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ "", "#if YYDEBUG || defined(yytname)", "extern const char *const yyname[];", "#endif", "#if YYDEBUG", "extern const char *const yyrule[];", "#endif", 0 }; const char *const global_vars[] = { "", "#if YYDEBUG", "int yydebug;", "#endif", 0 }; const char *const impure_vars[] = { "", "int yyerrflag;", "int yychar;", "YYSTYPE yyval;", "YYSTYPE yylval;", "int yynerrs;", "", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", "YYLTYPE yyloc; /* position returned by actions */", "YYLTYPE yylloc; /* position from the lexer */", "#endif", 0 }; const char *const hdr_defs[] = { "", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", "#ifndef YYLLOC_DEFAULT", "#define YYLLOC_DEFAULT(loc, rhs, n) \\", "do \\", "{ \\", " if (n == 0) \\", " { \\", " (loc).first_line = YYRHSLOC(rhs, 0).last_line; \\", " (loc).first_column = YYRHSLOC(rhs, 0).last_column; \\", " (loc).last_line = YYRHSLOC(rhs, 0).last_line; \\", " (loc).last_column = YYRHSLOC(rhs, 0).last_column; \\", " } \\", " else \\", " { \\", " (loc).first_line = YYRHSLOC(rhs, 1).first_line; \\", " (loc).first_column = YYRHSLOC(rhs, 1).first_column; \\", " (loc).last_line = YYRHSLOC(rhs, n).last_line; \\", " (loc).last_column = YYRHSLOC(rhs, n).last_column; \\", " } \\", "} while (0)", "#endif /* YYLLOC_DEFAULT */", "#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */", #if defined(YYBTYACC) "#if YYBTYACC", "", "#ifndef YYLVQUEUEGROWTH", "#define YYLVQUEUEGROWTH 32", "#endif", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ "", "/* 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", "", "#ifndef YYINITSTACKSIZE", "#define YYINITSTACKSIZE 200", "#endif", "", "typedef struct {", " unsigned stacksize;", " YYINT *s_base;", " YYINT *s_mark;", " YYINT *s_last;", " YYSTYPE *l_base;", " YYSTYPE *l_mark;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " YYLTYPE *p_base;", " YYLTYPE *p_mark;", "#endif", "} YYSTACKDATA;", #if defined(YYBTYACC) "#if YYBTYACC", "", "struct YYParseState_s", "{", " struct YYParseState_s *save; /* Previously saved parser state */", " YYSTACKDATA yystack; /* saved parser stack */", " int state; /* saved parser state */", " int errflag; /* saved error recovery status */", " int lexeme; /* saved index of the conflict lexeme in the lexical queue */", " YYINT ctry; /* saved index in yyctable[] for this conflict */", "};", "typedef struct YYParseState_s YYParseState;", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ 0 }; const char *const hdr_vars[] = { "/* variables for the parser stack */", "static YYSTACKDATA yystack;", #if defined(YYBTYACC) "#if YYBTYACC", "", "/* Current parser state */", "static YYParseState *yyps = 0;", "", "/* yypath != NULL: do the full parse, starting at *yypath parser state. */", "static YYParseState *yypath = 0;", "", "/* Base of the lexical value queue */", "static YYSTYPE *yylvals = 0;", "", "/* Current position at lexical value queue */", "static YYSTYPE *yylvp = 0;", "", "/* End position of lexical value queue */", "static YYSTYPE *yylve = 0;", "", "/* The last allocated position at the lexical value queue */", "static YYSTYPE *yylvlim = 0;", "", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", "/* Base of the lexical position queue */", "static YYLTYPE *yylpsns = 0;", "", "/* Current position at lexical position queue */", "static YYLTYPE *yylpp = 0;", "", "/* End position of lexical position queue */", "static YYLTYPE *yylpe = 0;", "", "/* The last allocated position at the lexical position queue */", "static YYLTYPE *yylplim = 0;", "#endif", "", "/* Current position at lexical token queue */", "static YYINT *yylexp = 0;", "", "static YYINT *yylexemes = 0;", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ 0 }; const char *const body_vars[] = { " int yyerrflag;", " int yychar;", " YYSTYPE yyval;", " YYSTYPE yylval;", " int yynerrs;", "", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " YYLTYPE yyloc; /* position returned by actions */", " YYLTYPE yylloc; /* position from the lexer */", "#endif", "", " /* variables for the parser stack */", " YYSTACKDATA yystack;", #if defined(YYBTYACC) "#if YYBTYACC", "", " /* Current parser state */", " static YYParseState *yyps = 0;", "", " /* yypath != NULL: do the full parse, starting at *yypath parser state. */", " static YYParseState *yypath = 0;", "", " /* Base of the lexical value queue */", " static YYSTYPE *yylvals = 0;", "", " /* Current position at lexical value queue */", " static YYSTYPE *yylvp = 0;", "", " /* End position of lexical value queue */", " static YYSTYPE *yylve = 0;", "", " /* The last allocated position at the lexical value queue */", " static YYSTYPE *yylvlim = 0;", "", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " /* Base of the lexical position queue */", " static YYLTYPE *yylpsns = 0;", "", " /* Current position at lexical position queue */", " static YYLTYPE *yylpp = 0;", "", " /* End position of lexical position queue */", " static YYLTYPE *yylpe = 0;", "", " /* The last allocated position at the lexical position queue */", " static YYLTYPE *yylplim = 0;", "#endif", "", " /* Current position at lexical token queue */", " static YYINT *yylexp = 0;", "", " static YYINT *yylexemes = 0;", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ 0 }; const char *const body_1[] = { "", "/* For use in generated program */", "#define yydepth (int)(yystack.s_mark - yystack.s_base)", #if defined(YYBTYACC) "#if YYBTYACC", "#define yytrial (yyps->save)", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ "", "#if YYDEBUG", "#include /* needed for printf */", "#endif", "", "#include /* needed for malloc, etc */", "#include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " YYLTYPE *newps;", "#endif", "", " 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;", "", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));", " if (newps == 0)", " return YYENOMEM;", "", " data->p_base = newps;", " data->p_mark = newps + i;", "#endif", "", " data->stacksize = newsize;", " data->s_last = data->s_base + newsize - 1;", "", "#if YYDEBUG", " if (yydebug)", " fprintf(stderr, \"%sdebug: stack size increased to %d\\n\", YYPREFIX, newsize);", "#endif", " return 0;", "}", "", "#if YYPURE || defined(YY_NO_LEAKS)", "static void yyfreestack(YYSTACKDATA *data)", "{", " free(data->s_base);", " free(data->l_base);", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " free(data->p_base);", "#endif", " memset(data, 0, sizeof(*data));", "}", "#else", "#define yyfreestack(data) /* nothing */", "#endif /* YYPURE || defined(YY_NO_LEAKS) */", #if defined(YYBTYACC) "#if YYBTYACC", "", "static YYParseState *", "yyNewState(unsigned size)", "{", " YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));", " if (p == NULL) return NULL;", "", " p->yystack.stacksize = size;", " if (size == 0)", " {", " p->yystack.s_base = NULL;", " p->yystack.l_base = NULL;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " p->yystack.p_base = NULL;", "#endif", " return p;", " }", " p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT));", " if (p->yystack.s_base == NULL) return NULL;", " p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));", " if (p->yystack.l_base == NULL) return NULL;", " memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));", " if (p->yystack.p_base == NULL) return NULL;", " memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));", "#endif", "", " return p;", "}", "", "static void", "yyFreeState(YYParseState *p)", "{", " yyfreestack(&p->yystack);", " free(p);", "}", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ "", "#define YYABORT goto yyabort", "#define YYREJECT goto yyabort", "#define YYACCEPT goto yyaccept", "#define YYERROR goto yyerrlab", #if defined(YYBTYACC) "#if YYBTYACC", "#define YYVALID do { if (yyps->save) goto yyvalid; } while(0)", "#define YYVALID_NESTED do { if (yyps->save && \\", " yyps->save->save == 0) goto yyvalid; } while(0)", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ "", "int", "YYPARSE_DECL()", "{", 0 }; const char *const body_2[] = { " int yym, yyn, yystate, yyresult;", #if defined(YYBTYACC) "#if YYBTYACC", " int yynewerrflag;", " YYParseState *yyerrctx = NULL;", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */", "#endif", "#if YYDEBUG", " const char *yys;", "", " if ((yys = getenv(\"YYDEBUG\")) != 0)", " {", " yyn = *yys;", " if (yyn >= '0' && yyn <= '9')", " yydebug = yyn - '0';", " }", " if (yydebug)", " fprintf(stderr, \"%sdebug[<# of symbols on state stack>]\\n\", YYPREFIX);", "#endif", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range));", "#endif", "", 0 }; const char *const init_vars[] = { " yyerrflag = 0;", " yychar = 0;", " memset(&yyval, 0, sizeof(yyval));", " memset(&yylval, 0, sizeof(yylval));", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " memset(&yyloc, 0, sizeof(yyloc));", " memset(&yylloc, 0, sizeof(yylloc));", "#endif", "", 0 }; const char *const body_3[] = { #if defined(YYBTYACC) "#if YYBTYACC", " yyps = yyNewState(0); if (yyps == 0) goto yyenomem;", " yyps->save = 0;", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ " yym = 0;", " /* yyn is set below */", " 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;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yystack.p_mark = yystack.p_base;", "#endif", " yystate = 0;", " *yystack.s_mark = 0;", "", "yyloop:", " if ((yyn = yydefred[yystate]) != 0) goto yyreduce;", " if (yychar < 0)", " {", #if defined(YYBTYACC) "#if YYBTYACC", " do {", " if (yylvp < yylve)", " {", " /* we're currently re-reading tokens */", " yylval = *yylvp++;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yylloc = *yylpp++;", "#endif", " yychar = *yylexp++;", " break;", " }", " if (yyps->save)", " {", " /* in trial mode; save scanner results for future parse attempts */", " if (yylvp == yylvlim)", " { /* Enlarge lexical value queue */", " size_t p = (size_t) (yylvp - yylvals);", " size_t s = (size_t) (yylvlim - yylvals);", "", " s += YYLVQUEUEGROWTH;", " if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem;", " if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;", "#endif", " yylvp = yylve = yylvals + p;", " yylvlim = yylvals + s;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yylpp = yylpe = yylpsns + p;", " yylplim = yylpsns + s;", "#endif", " yylexp = yylexemes + p;", " }", " *yylexp = (YYINT) YYLEX;", " *yylvp++ = yylval;", " yylve++;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " *yylpp++ = yylloc;", " yylpe++;", "#endif", " yychar = *yylexp++;", " break;", " }", " /* normal operation, no conflict encountered */", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ " yychar = YYLEX;", #if defined(YYBTYACC) "#if YYBTYACC", " } while (0);", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ " if (yychar < 0) yychar = YYEOF;", "#if YYDEBUG", " if (yydebug)", " {", " if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];", " fprintf(stderr, \"%s[%d]: state %d, reading token %d (%s)\",", " YYDEBUGSTR, yydepth, yystate, yychar, yys);", "#ifdef YYSTYPE_TOSTRING", #if defined(YYBTYACC) "#if YYBTYACC", " if (!yytrial)", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ " fprintf(stderr, \" <%s>\", YYSTYPE_TOSTRING(yychar, yylval));", "#endif", " fputc('\\n', stderr);", " }", "#endif", " }", #if defined(YYBTYACC) "#if YYBTYACC", "", " /* Do we have a conflict? */", " if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&", " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)", " {", " YYINT ctry;", "", " if (yypath)", " {", " YYParseState *save;", "#if YYDEBUG", " if (yydebug)", " fprintf(stderr, \"%s[%d]: CONFLICT in state %d: following successful trial parse\\n\",", " YYDEBUGSTR, yydepth, yystate);", "#endif", " /* Switch to the next conflict context */", " save = yypath;", " yypath = save->save;", " save->save = NULL;", " ctry = save->ctry;", " if (save->state != yystate) YYABORT;", " yyFreeState(save);", "", " }", " else", " {", "", " /* Unresolved conflict - start/continue trial parse */", " YYParseState *save;", "#if YYDEBUG", " if (yydebug)", " {", " fprintf(stderr, \"%s[%d]: CONFLICT in state %d. \", YYDEBUGSTR, yydepth, yystate);", " if (yyps->save)", " fputs(\"ALREADY in conflict, continuing trial parse.\\n\", stderr);", " else", " fputs(\"Starting trial parse.\\n\", stderr);", " }", "#endif", " save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));", " if (save == NULL) goto yyenomem;", " save->save = yyps->save;", " save->state = yystate;", " save->errflag = yyerrflag;", " save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base);", " memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));", " save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base);", " memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base);", " memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));", "#endif", " ctry = yytable[yyn];", " if (yyctable[ctry] == -1)", " {", "#if YYDEBUG", " if (yydebug && yychar >= YYEOF)", " fprintf(stderr, \"%s[%d]: backtracking 1 token\\n\", YYDEBUGSTR, yydepth);", "#endif", " ctry++;", " }", " save->ctry = ctry;", " if (yyps->save == NULL)", " {", " /* If this is a first conflict in the stack, start saving lexemes */", " if (!yylexemes)", " {", " yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT));", " if (yylexemes == NULL) goto yyenomem;", " yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));", " if (yylvals == NULL) goto yyenomem;", " yylvlim = yylvals + YYLVQUEUEGROWTH;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));", " if (yylpsns == NULL) goto yyenomem;", " yylplim = yylpsns + YYLVQUEUEGROWTH;", "#endif", " }", " if (yylvp == yylve)", " {", " yylvp = yylve = yylvals;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yylpp = yylpe = yylpsns;", "#endif", " yylexp = yylexemes;", " if (yychar >= YYEOF)", " {", " *yylve++ = yylval;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " *yylpe++ = yylloc;", "#endif", " *yylexp = (YYINT) yychar;", " yychar = YYEMPTY;", " }", " }", " }", " if (yychar >= YYEOF)", " {", " yylvp--;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yylpp--;", "#endif", " yylexp--;", " yychar = YYEMPTY;", " }", " save->lexeme = (int) (yylvp - yylvals);", " yyps->save = save;", " }", " if (yytable[yyn] == ctry)", " {", "#if YYDEBUG", " if (yydebug)", " fprintf(stderr, \"%s[%d]: state %d, shifting to state %d\\n\",", " YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);", "#endif", " if (yychar < 0)", " {", " yylvp++;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yylpp++;", "#endif", " yylexp++;", " }", " if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)", " goto yyoverflow;", " yystate = yyctable[ctry];", " *++yystack.s_mark = (YYINT) yystate;", " *++yystack.l_mark = yylval;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " *++yystack.p_mark = yylloc;", "#endif", " yychar = YYEMPTY;", " if (yyerrflag > 0) --yyerrflag;", " goto yyloop;", " }", " else", " {", " yyn = yyctable[ctry];", " goto yyreduce;", " }", " } /* End of code dealing with conflicts */", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ " if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&", " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)", " {", "#if YYDEBUG", " if (yydebug)", " fprintf(stderr, \"%s[%d]: state %d, shifting to state %d\\n\",", " YYDEBUGSTR, yydepth, 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;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " *++yystack.p_mark = yylloc;", "#endif", " yychar = YYEMPTY;", " if (yyerrflag > 0) --yyerrflag;", " goto yyloop;", " }", " if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&", " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)", " {", " yyn = yytable[yyn];", " goto yyreduce;", " }", " if (yyerrflag != 0) goto yyinrecovery;", #if defined(YYBTYACC) "#if YYBTYACC", "", " yynewerrflag = 1;", " goto yyerrhandler;", " goto yyerrlab; /* redundant goto avoids 'unused label' warning */", "", "yyerrlab:", " /* explicit YYERROR from an action -- pop the rhs of the rule reduced", " * before looking for error recovery */", " yystack.s_mark -= yym;", " yystate = *yystack.s_mark;", " yystack.l_mark -= yym;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yystack.p_mark -= yym;", "#endif", "", " yynewerrflag = 0;", "yyerrhandler:", " while (yyps->save)", " {", " int ctry;", " YYParseState *save = yyps->save;", "#if YYDEBUG", " if (yydebug)", " fprintf(stderr, \"%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\\n\",", " YYDEBUGSTR, yydepth, yystate, yyps->save->state,", " (int)(yylvp - yylvals - yyps->save->lexeme));", "#endif", " /* Memorize most forward-looking error state in case it's really an error. */", " if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)", " {", " /* Free old saved error context state */", " if (yyerrctx) yyFreeState(yyerrctx);", " /* Create and fill out new saved error context state */", " yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));", " if (yyerrctx == NULL) goto yyenomem;", " yyerrctx->save = yyps->save;", " yyerrctx->state = yystate;", " yyerrctx->errflag = yyerrflag;", " yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);", " memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));", " yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);", " memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);", " memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));", "#endif", " yyerrctx->lexeme = (int) (yylvp - yylvals);", " }", " yylvp = yylvals + save->lexeme;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yylpp = yylpsns + save->lexeme;", "#endif", " yylexp = yylexemes + save->lexeme;", " yychar = YYEMPTY;", " yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);", " memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));", " yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);", " memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);", " memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));", "#endif", " ctry = ++save->ctry;", " yystate = save->state;", " /* We tried shift, try reduce now */", " if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;", " yyps->save = save->save;", " save->save = NULL;", " yyFreeState(save);", "", " /* Nothing left on the stack -- error */", " if (!yyps->save)", " {", "#if YYDEBUG", " if (yydebug)", " fprintf(stderr, \"%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\\n\",", " YYPREFIX, yydepth);", "#endif", " /* Restore state as it was in the most forward-advanced error */", " yylvp = yylvals + yyerrctx->lexeme;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yylpp = yylpsns + yyerrctx->lexeme;", "#endif", " yylexp = yylexemes + yyerrctx->lexeme;", " yychar = yylexp[-1];", " yylval = yylvp[-1];", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yylloc = yylpp[-1];", "#endif", " yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);", " memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));", " yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);", " memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);", " memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));", "#endif", " yystate = yyerrctx->state;", " yyFreeState(yyerrctx);", " yyerrctx = NULL;", " }", " yynewerrflag = 1;", " }", " if (yynewerrflag == 0) goto yyinrecovery;", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ "", " YYERROR_CALL(\"syntax error\");", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */", "#endif", "", "#if !YYBTYACC", " goto yyerrlab; /* redundant goto avoids 'unused label' warning */", "yyerrlab:", "#endif", " ++yynerrs;", "", "yyinrecovery:", " if (yyerrflag < 3)", " {", " yyerrflag = 3;", " for (;;)", " {", " if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&", " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)", " {", "#if YYDEBUG", " if (yydebug)", " fprintf(stderr, \"%s[%d]: state %d, error recovery shifting to state %d\\n\",", " YYDEBUGSTR, yydepth, *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;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " /* lookahead position is error end position */", " yyerror_loc_range[2] = yylloc;", " YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */", " *++yystack.p_mark = yyloc;", "#endif", " goto yyloop;", " }", " else", " {", "#if YYDEBUG", " if (yydebug)", " fprintf(stderr, \"%s[%d]: error recovery discarding state %d\\n\",", " YYDEBUGSTR, yydepth, *yystack.s_mark);", "#endif", " if (yystack.s_mark <= yystack.s_base) goto yyabort;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " /* the current TOS position is the error start position */", " yyerror_loc_range[1] = *yystack.p_mark;", "#endif", "#if defined(YYDESTRUCT_CALL)", #if defined(YYBTYACC) "#if YYBTYACC", " if (!yytrial)", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " YYDESTRUCT_CALL(\"error: discarding state\",", " yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);", "#else", " YYDESTRUCT_CALL(\"error: discarding state\",", " yystos[*yystack.s_mark], yystack.l_mark);", "#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */", "#endif /* defined(YYDESTRUCT_CALL) */", " --yystack.s_mark;", " --yystack.l_mark;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " --yystack.p_mark;", "#endif", " }", " }", " }", " else", " {", " if (yychar == YYEOF) goto yyabort;", "#if YYDEBUG", " if (yydebug)", " {", " if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];", " fprintf(stderr, \"%s[%d]: state %d, error recovery discarding token %d (%s)\\n\",", " YYDEBUGSTR, yydepth, yystate, yychar, yys);", " }", "#endif", "#if defined(YYDESTRUCT_CALL)", #if defined(YYBTYACC) "#if YYBTYACC", " if (!yytrial)", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " YYDESTRUCT_CALL(\"error: discarding token\", yychar, &yylval, &yylloc);", "#else", " YYDESTRUCT_CALL(\"error: discarding token\", yychar, &yylval);", "#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */", "#endif /* defined(YYDESTRUCT_CALL) */", " yychar = YYEMPTY;", " goto yyloop;", " }", "", "yyreduce:", " yym = yylen[yyn];", "#if YYDEBUG", " if (yydebug)", " {", " fprintf(stderr, \"%s[%d]: state %d, reducing by rule %d (%s)\",", " YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);", "#ifdef YYSTYPE_TOSTRING", #if defined(YYBTYACC) "#if YYBTYACC", " if (!yytrial)", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ " if (yym > 0)", " {", " int i;", " fputc('<', stderr);", " for (i = yym; i > 0; i--)", " {", " if (i != yym) fputs(\", \", stderr);", " fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],", " yystack.l_mark[1-i]), stderr);", " }", " fputc('>', stderr);", " }", "#endif", " fputc('\\n', stderr);", " }", "#endif", " if (yym > 0)", " yyval = yystack.l_mark[1-yym];", " else", " memset(&yyval, 0, sizeof yyval);", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", "", " /* Perform position reduction */", " memset(&yyloc, 0, sizeof(yyloc));", #if defined(YYBTYACC) "#if YYBTYACC", " if (!yytrial)", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ " {", " YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym);", " /* just in case YYERROR is invoked within the action, save", " the start of the rhs as the error start position */", " yyerror_loc_range[1] = yystack.p_mark[1-yym];", " }", "#endif", "", " switch (yyn)", " {", 0 }; const char *const trailer[] = { " default:", " break;", " }", " yystack.s_mark -= yym;", " yystate = *yystack.s_mark;", " yystack.l_mark -= yym;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yystack.p_mark -= yym;", "#endif", " yym = yylhs[yyn];", " if (yystate == 0 && yym == 0)", " {", "#if YYDEBUG", " if (yydebug)", " {", " fprintf(stderr, \"%s[%d]: after reduction, \", YYDEBUGSTR, yydepth);", "#ifdef YYSTYPE_TOSTRING", #if defined(YYBTYACC) "#if YYBTYACC", " if (!yytrial)", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ " fprintf(stderr, \"result is <%s>, \", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));", "#endif", " fprintf(stderr, \"shifting from state 0 to final state %d\\n\", YYFINAL);", " }", "#endif", " yystate = YYFINAL;", " *++yystack.s_mark = YYFINAL;", " *++yystack.l_mark = yyval;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " *++yystack.p_mark = yyloc;", "#endif", " if (yychar < 0)", " {", #if defined(YYBTYACC) "#if YYBTYACC", " do {", " if (yylvp < yylve)", " {", " /* we're currently re-reading tokens */", " yylval = *yylvp++;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yylloc = *yylpp++;", "#endif", " yychar = *yylexp++;", " break;", " }", " if (yyps->save)", " {", " /* in trial mode; save scanner results for future parse attempts */", " if (yylvp == yylvlim)", " { /* Enlarge lexical value queue */", " size_t p = (size_t) (yylvp - yylvals);", " size_t s = (size_t) (yylvlim - yylvals);", "", " s += YYLVQUEUEGROWTH;", " if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL)", " goto yyenomem;", " if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)", " goto yyenomem;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)", " goto yyenomem;", "#endif", " yylvp = yylve = yylvals + p;", " yylvlim = yylvals + s;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yylpp = yylpe = yylpsns + p;", " yylplim = yylpsns + s;", "#endif", " yylexp = yylexemes + p;", " }", " *yylexp = (YYINT) YYLEX;", " *yylvp++ = yylval;", " yylve++;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " *yylpp++ = yylloc;", " yylpe++;", "#endif", " yychar = *yylexp++;", " break;", " }", " /* normal operation, no conflict encountered */", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ " yychar = YYLEX;", #if defined(YYBTYACC) "#if YYBTYACC", " } while (0);", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ " if (yychar < 0) yychar = YYEOF;", "#if YYDEBUG", " if (yydebug)", " {", " if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];", " fprintf(stderr, \"%s[%d]: state %d, reading token %d (%s)\\n\",", " YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);", " }", "#endif", " }", " if (yychar == YYEOF) goto yyaccept;", " goto yyloop;", " }", " if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&", " yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)", " yystate = yytable[yyn];", " else", " yystate = yydgoto[yym];", "#if YYDEBUG", " if (yydebug)", " {", " fprintf(stderr, \"%s[%d]: after reduction, \", YYDEBUGSTR, yydepth);", "#ifdef YYSTYPE_TOSTRING", #if defined(YYBTYACC) "#if YYBTYACC", " if (!yytrial)", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ " fprintf(stderr, \"result is <%s>, \", YYSTYPE_TOSTRING(yystos[yystate], yyval));", "#endif", " fprintf(stderr, \"shifting from state %d to state %d\\n\", *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;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " *++yystack.p_mark = yyloc;", "#endif", " goto yyloop;", #if defined(YYBTYACC) "#if YYBTYACC", "", " /* Reduction declares that this path is valid. Set yypath and do a full parse */", "yyvalid:", " if (yypath) YYABORT;", " while (yyps->save)", " {", " YYParseState *save = yyps->save;", " yyps->save = save->save;", " save->save = yypath;", " yypath = save;", " }", "#if YYDEBUG", " if (yydebug)", " fprintf(stderr, \"%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\\n\",", " YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));", "#endif", " if (yyerrctx)", " {", " yyFreeState(yyerrctx);", " yyerrctx = NULL;", " }", " yylvp = yylvals + yypath->lexeme;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yylpp = yylpsns + yypath->lexeme;", "#endif", " yylexp = yylexemes + yypath->lexeme;", " yychar = YYEMPTY;", " yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);", " memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));", " yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);", " memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);", " memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));", "#endif", " yystate = yypath->state;", " goto yyloop;", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ "", "yyoverflow:", " YYERROR_CALL(\"yacc stack overflow\");", #if defined(YYBTYACC) "#if YYBTYACC", " goto yyabort_nomem;", "yyenomem:", " YYERROR_CALL(\"memory exhausted\");", "yyabort_nomem:", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ " yyresult = 2;", " goto yyreturn;", "", "yyabort:", " yyresult = 1;", " goto yyreturn;", "", "yyaccept:", #if defined(YYBTYACC) "#if YYBTYACC", " if (yyps->save) goto yyvalid;", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ " yyresult = 0;", "", "yyreturn:", "#if defined(YYDESTRUCT_CALL)", " if (yychar != YYEOF && yychar != YYEMPTY)", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " YYDESTRUCT_CALL(\"cleanup: discarding token\", yychar, &yylval, &yylloc);", "#else", " YYDESTRUCT_CALL(\"cleanup: discarding token\", yychar, &yylval);", "#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */", "", " {", " YYSTYPE *pv;", "#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)", " YYLTYPE *pp;", "", " for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)", " YYDESTRUCT_CALL(\"cleanup: discarding state\",", " yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);", "#else", " for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)", " YYDESTRUCT_CALL(\"cleanup: discarding state\",", " yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);", "#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */", " }", "#endif /* defined(YYDESTRUCT_CALL) */", "", #if defined(YYBTYACC) "#if YYBTYACC", " if (yyerrctx)", " {", " yyFreeState(yyerrctx);", " yyerrctx = NULL;", " }", " while (yyps)", " {", " YYParseState *save = yyps;", " yyps = save->save;", " save->save = NULL;", " yyFreeState(save);", " }", " while (yypath)", " {", " YYParseState *save = yypath;", " yypath = save->save;", " save->save = NULL;", " yyFreeState(save);", " }", "#endif /* YYBTYACC */", #endif /* defined(YYBTYACC) */ " yyfreestack(&yystack);", " return (yyresult);", "}", 0 }; void write_section(FILE * fp, const char *const section[]) { int i; const char *s; for (i = 0; (s = section[i]) != 0; ++i) { if (fp == code_file) ++outline; fprintf(fp, "%s\n", s); } } byacc-20221106/main.c0000644000000000000000000004160714104040406012621 0ustar rootroot/* $Id: main.c,v 1.73 2021/08/08 20:39:34 tom Exp $ */ #include #if !defined(_WIN32) || defined(__MINGW32__) #include /* for _exit() */ #else #include /* for _exit() */ #endif #include "defs.h" #ifdef HAVE_MKSTEMP # define USE_MKSTEMP 1 #elif defined(HAVE_FCNTL_H) # define USE_MKSTEMP 1 # include /* for open(), O_EXCL, etc. */ #else # define USE_MKSTEMP 0 #endif #if USE_MKSTEMP #include #include typedef struct _my_tmpfiles { struct _my_tmpfiles *next; char *name; } MY_TMPFILES; static MY_TMPFILES *my_tmpfiles; #endif /* USE_MKSTEMP */ char dflag; char dflag2; char gflag; char iflag; char lflag; static char oflag; char rflag; char sflag; char tflag; char vflag; const char *symbol_prefix; const char *myname = "yacc"; int lineno; int outline; static char default_file_prefix[] = "y"; static char *file_prefix = default_file_prefix; char *code_file_name; char *input_file_name; size_t input_file_name_len = 0; char *defines_file_name; char *externs_file_name; static char *graph_file_name; static char *output_file_name; static char *verbose_file_name; FILE *action_file; /* a temp file, used to save actions associated */ /* with rules until the parser is written */ FILE *code_file; /* y.code.c (used when the -r option is specified) */ FILE *defines_file; /* y.tab.h */ FILE *externs_file; /* y.tab.i */ FILE *input_file; /* the input file */ FILE *output_file; /* y.tab.c */ FILE *text_file; /* a temp file, used to save text until all */ /* symbols have been defined */ FILE *union_file; /* a temp file, used to save the union */ /* definition until all symbol have been */ /* defined */ FILE *verbose_file; /* y.output */ FILE *graph_file; /* y.dot */ Value_t nitems; Value_t nrules; Value_t nsyms; Value_t ntokens; Value_t nvars; Value_t start_symbol; char **symbol_name; char **symbol_pname; Value_t *symbol_value; Value_t *symbol_prec; char *symbol_assoc; int pure_parser; int token_table; int error_verbose; #if defined(YYBTYACC) Value_t *symbol_pval; char **symbol_destructor; char **symbol_type_tag; int locations = 0; /* default to no position processing */ int backtrack = 0; /* default is no backtracking */ char *initial_action = NULL; #endif int exit_code; Value_t *ritem; Value_t *rlhs; Value_t *rrhs; Value_t *rprec; Assoc_t *rassoc; Value_t **derives; char *nullable; /* * Since fclose() is called via the signal handler, it might die. Don't loop * if there is a problem closing a file. */ #define DO_CLOSE(fp) \ if (fp != 0) { \ FILE *use = fp; \ fp = 0; \ fclose(use); \ } static int got_intr = 0; void done(int k) { DO_CLOSE(input_file); DO_CLOSE(output_file); if (iflag) DO_CLOSE(externs_file); if (rflag) DO_CLOSE(code_file); DO_CLOSE(action_file); DO_CLOSE(defines_file); DO_CLOSE(graph_file); DO_CLOSE(text_file); DO_CLOSE(union_file); DO_CLOSE(verbose_file); if (got_intr) _exit(EXIT_FAILURE); #ifdef NO_LEAKS DO_FREE(input_file_name); if (rflag) DO_FREE(code_file_name); if (dflag && !dflag2) DO_FREE(defines_file_name); if (iflag) DO_FREE(externs_file_name); if (oflag) DO_FREE(output_file_name); if (vflag) DO_FREE(verbose_file_name); if (gflag) DO_FREE(graph_file_name); lr0_leaks(); lalr_leaks(); mkpar_leaks(); mstring_leaks(); output_leaks(); reader_leaks(); #endif exit(k); } static void onintr(int sig GCC_UNUSED) { got_intr = 1; done(EXIT_FAILURE); } static void set_signals(void) { #ifdef SIGINT if (signal(SIGINT, SIG_IGN) != SIG_IGN) signal(SIGINT, onintr); #endif #ifdef SIGTERM if (signal(SIGTERM, SIG_IGN) != SIG_IGN) signal(SIGTERM, onintr); #endif #ifdef SIGHUP if (signal(SIGHUP, SIG_IGN) != SIG_IGN) signal(SIGHUP, onintr); #endif } #define SIZEOF(v) (sizeof(v) / sizeof((v)[0])) /* * Long options are provided only as a compatibility aid for scripters. */ /* *INDENT-OFF* */ static const struct { const char long_opt[16]; const char yacc_arg; const char yacc_opt; } long_opts[] = { { "defines", 1, 'H' }, { "file-prefix", 1, 'b' }, { "graph", 0, 'g' }, { "help", 0, 'h' }, { "name-prefix", 1, 'p' }, { "no-lines", 0, 'l' }, { "output", 1, 'o' }, { "version", 0, 'V' } }; /* *INDENT-ON* */ /* * Usage-message is designed for 80 columns, with some unknowns. Account for * those in the maximum width so that the usage message uses no relocatable * pointers. */ #define USAGE_COLS (80 + sizeof(DEFINES_SUFFIX) + sizeof(OUTPUT_SUFFIX)) static void usage(void) { /* *INDENT-OFF* */ static const char msg[][USAGE_COLS] = { { " -b file_prefix set filename prefix (default \"y.\")" }, { " -B create a backtracking parser" }, { " -d write definitions (" DEFINES_SUFFIX ")" }, { " -h print this help-message" }, { " -H defines_file write definitions to defines_file" }, { " -i write interface (y.tab.i)" }, { " -g write a graphical description" }, { " -l suppress #line directives" }, { " -L enable position processing, e.g., \"%locations\"" }, { " -o output_file (default \"" OUTPUT_SUFFIX "\")" }, { " -p symbol_prefix set symbol prefix (default \"yy\")" }, { " -P create a reentrant parser, e.g., \"%pure-parser\"" }, { " -r produce separate code and table files (y.code.c)" }, { " -s suppress #define's for quoted names in %token lines" }, { " -t add debugging support" }, { " -v write description (y.output)" }, { " -V show version information and exit" }, }; /* *INDENT-ON* */ unsigned n; fflush(stdout); fprintf(stderr, "Usage: %s [options] filename\n", myname); fprintf(stderr, "\nOptions:\n"); for (n = 0; n < SIZEOF(msg); ++n) { fprintf(stderr, "%s\n", msg[n]); } fprintf(stderr, "\nLong options:\n"); for (n = 0; n < SIZEOF(long_opts); ++n) { fprintf(stderr, " --%-20s-%c\n", long_opts[n].long_opt, long_opts[n].yacc_opt); } exit(EXIT_FAILURE); } static void invalid_option(const char *option) { fprintf(stderr, "invalid option: %s\n", option); usage(); } static void setflag(int ch) { switch (ch) { case 'B': #if defined(YYBTYACC) backtrack = 1; #else unsupported_flag_warning("-B", "reconfigure with --enable-btyacc"); #endif break; case 'd': dflag = 1; dflag2 = 0; break; case 'g': gflag = 1; break; case 'i': iflag = 1; break; case 'l': lflag = 1; break; case 'L': #if defined(YYBTYACC) locations = 1; #else unsupported_flag_warning("-L", "reconfigure with --enable-btyacc"); #endif break; case 'P': pure_parser = 1; break; case 'r': rflag = 1; break; case 's': sflag = 1; break; case 't': tflag = 1; break; case 'v': vflag = 1; break; case 'V': printf("%s - %s\n", myname, VERSION); exit(EXIT_SUCCESS); case 'y': /* noop for bison compatibility. byacc is already designed to be posix * yacc compatible. */ break; default: usage(); } } static void getargs(int argc, char *argv[]) { int i; #ifdef HAVE_GETOPT int ch; #endif /* * Map bison's long-options into yacc short options. */ for (i = 1; i < argc; ++i) { char *a = argv[i]; if (!strncmp(a, "--", 2)) { char *eqls; size_t lc; size_t len; if ((len = strlen(a)) == 2) break; if ((eqls = strchr(a, '=')) != NULL) { len = (size_t)(eqls - a); if (len == 0 || eqls[1] == '\0') invalid_option(a); } for (lc = 0; lc < SIZEOF(long_opts); ++lc) { if (!strncmp(long_opts[lc].long_opt, a + 2, len - 2)) { if (eqls != NULL && !long_opts[lc].yacc_arg) invalid_option(a); *a++ = '-'; *a++ = long_opts[lc].yacc_opt; *a = '\0'; if (eqls) { while ((*a++ = *++eqls) != '\0') /* empty */ ; } break; } } if (!strncmp(a, "--", 2)) invalid_option(a); } } #ifdef HAVE_GETOPT if (argc > 0) myname = argv[0]; while ((ch = getopt(argc, argv, "Bb:dghH:ilLo:Pp:rstVvy")) != -1) { switch (ch) { case 'b': file_prefix = optarg; break; case 'h': usage(); break; case 'H': dflag = dflag2 = 1; defines_file_name = optarg; break; case 'o': output_file_name = optarg; break; case 'p': symbol_prefix = optarg; break; default: setflag(ch); break; } } if ((i = optind) < argc) { /* getopt handles "--" specially, while we handle "-" specially */ if (!strcmp(argv[i], "-")) { if ((i + 1) < argc) usage(); input_file = stdin; return; } } #else char *s; int ch; if (argc > 0) myname = argv[0]; for (i = 1; i < argc; ++i) { s = argv[i]; if (*s != '-') break; switch (ch = *++s) { case '\0': input_file = stdin; if (i + 1 < argc) usage(); return; case '-': ++i; goto no_more_options; case 'b': if (*++s) file_prefix = s; else if (++i < argc) file_prefix = argv[i]; else usage(); continue; case 'H': dflag = dflag2 = 1; if (*++s) defines_file_name = s; else if (++i < argc) defines_file_name = argv[i]; else usage(); continue; case 'o': if (*++s) output_file_name = s; else if (++i < argc) output_file_name = argv[i]; else usage(); continue; case 'p': if (*++s) symbol_prefix = s; else if (++i < argc) symbol_prefix = argv[i]; else usage(); continue; default: setflag(ch); break; } for (;;) { switch (ch = *++s) { case '\0': goto end_of_option; default: setflag(ch); break; } } end_of_option:; } no_more_options: #endif /* HAVE_GETOPT */ if (i + 1 != argc) usage(); input_file_name_len = strlen(argv[i]); input_file_name = TMALLOC(char, input_file_name_len + 1); NO_SPACE(input_file_name); strcpy(input_file_name, argv[i]); } void * allocate(size_t n) { void *p; p = NULL; if (n) { p = CALLOC(1, n); NO_SPACE(p); } return (p); } #define CREATE_FILE_NAME(dest, suffix) \ dest = alloc_file_name(len, suffix) static char * alloc_file_name(size_t len, const char *suffix) { char *result = TMALLOC(char, len + strlen(suffix) + 1); if (result == 0) no_space(); strcpy(result, file_prefix); strcpy(result + len, suffix); return result; } static char * find_suffix(char *name, const char *suffix) { size_t len = strlen(name); size_t slen = strlen(suffix); if (len >= slen) { name += len - slen; if (strcmp(name, suffix) == 0) return name; } return NULL; } static void create_file_names(void) { size_t len; const char *defines_suffix; const char *externs_suffix; char *suffix; suffix = NULL; defines_suffix = DEFINES_SUFFIX; externs_suffix = EXTERNS_SUFFIX; /* compute the file_prefix from the user provided output_file_name */ if (output_file_name != 0) { if (!(suffix = find_suffix(output_file_name, OUTPUT_SUFFIX)) && (suffix = find_suffix(output_file_name, ".c"))) { defines_suffix = ".h"; externs_suffix = ".i"; } } if (suffix != NULL) { len = (size_t)(suffix - output_file_name); file_prefix = TMALLOC(char, len + 1); NO_SPACE(file_prefix); strncpy(file_prefix, output_file_name, len)[len] = 0; } else len = strlen(file_prefix); /* if "-o filename" was not given */ if (output_file_name == 0) { oflag = 1; CREATE_FILE_NAME(output_file_name, OUTPUT_SUFFIX); } if (rflag) { CREATE_FILE_NAME(code_file_name, CODE_SUFFIX); } else code_file_name = output_file_name; if (dflag && !dflag2) { CREATE_FILE_NAME(defines_file_name, defines_suffix); } if (iflag) { CREATE_FILE_NAME(externs_file_name, externs_suffix); } if (vflag) { CREATE_FILE_NAME(verbose_file_name, VERBOSE_SUFFIX); } if (gflag) { CREATE_FILE_NAME(graph_file_name, GRAPH_SUFFIX); } if (suffix != NULL) { FREE(file_prefix); } } #if USE_MKSTEMP static void close_tmpfiles(void) { while (my_tmpfiles != 0) { MY_TMPFILES *next = my_tmpfiles->next; (void)chmod(my_tmpfiles->name, 0644); (void)unlink(my_tmpfiles->name); free(my_tmpfiles->name); free(my_tmpfiles); my_tmpfiles = next; } } #ifndef HAVE_MKSTEMP static int my_mkstemp(char *temp) { int fd; char *dname; char *fname; char *name; /* * Split-up to use tempnam, rather than tmpnam; the latter (like * mkstemp) is unusable on Windows. */ if ((fname = strrchr(temp, '/')) != 0) { dname = strdup(temp); dname[++fname - temp] = '\0'; } else { dname = 0; fname = temp; } if ((name = tempnam(dname, fname)) != 0) { fd = open(name, O_CREAT | O_EXCL | O_RDWR); strcpy(temp, name); } else { fd = -1; } if (dname != 0) free(dname); return fd; } #define mkstemp(s) my_mkstemp(s) #endif #endif /* * tmpfile() should be adequate, except that it may require special privileges * to use, e.g., MinGW and Windows 7 where it tries to use the root directory. */ static FILE * open_tmpfile(const char *label) { #define MY_FMT "%s/%.*sXXXXXX" FILE *result; #if USE_MKSTEMP const char *tmpdir; char *name; if (((tmpdir = getenv("TMPDIR")) == 0 || access(tmpdir, W_OK) != 0) || ((tmpdir = getenv("TEMP")) == 0 || access(tmpdir, W_OK) != 0)) { #ifdef P_tmpdir tmpdir = P_tmpdir; #else tmpdir = "/tmp"; #endif if (access(tmpdir, W_OK) != 0) tmpdir = "."; } /* The size of the format is guaranteed to be longer than the result from * printing empty strings with it; this calculation accounts for the * string-lengths as well. */ name = malloc(strlen(tmpdir) + sizeof(MY_FMT) + strlen(label)); result = 0; if (name != 0) { int fd; const char *mark; mode_t save_umask = umask(0177); if ((mark = strrchr(label, '_')) == 0) mark = label + strlen(label); sprintf(name, MY_FMT, tmpdir, (int)(mark - label), label); fd = mkstemp(name); if (fd >= 0 && (result = fdopen(fd, "w+")) != 0) { MY_TMPFILES *item; if (my_tmpfiles == 0) { atexit(close_tmpfiles); } item = NEW(MY_TMPFILES); NO_SPACE(item); item->name = name; NO_SPACE(item->name); item->next = my_tmpfiles; my_tmpfiles = item; } else { FREE(name); } (void)umask(save_umask); } #else result = tmpfile(); #endif if (result == 0) open_error(label); return result; #undef MY_FMT } static void open_files(void) { create_file_names(); if (input_file == 0) { input_file = fopen(input_file_name, "r"); if (input_file == 0) open_error(input_file_name); } action_file = open_tmpfile("action_file"); text_file = open_tmpfile("text_file"); if (vflag) { verbose_file = fopen(verbose_file_name, "w"); if (verbose_file == 0) open_error(verbose_file_name); } if (gflag) { graph_file = fopen(graph_file_name, "w"); if (graph_file == 0) open_error(graph_file_name); fprintf(graph_file, "digraph %s {\n", file_prefix); fprintf(graph_file, "\tedge [fontsize=10];\n"); fprintf(graph_file, "\tnode [shape=box,fontsize=10];\n"); fprintf(graph_file, "\torientation=landscape;\n"); fprintf(graph_file, "\trankdir=LR;\n"); fprintf(graph_file, "\t/*\n"); fprintf(graph_file, "\tmargin=0.2;\n"); fprintf(graph_file, "\tpage=\"8.27,11.69\"; // for A4 printing\n"); fprintf(graph_file, "\tratio=auto;\n"); fprintf(graph_file, "\t*/\n"); } if (dflag || dflag2) { defines_file = fopen(defines_file_name, "w"); if (defines_file == 0) open_error(defines_file_name); union_file = open_tmpfile("union_file"); } if (iflag) { externs_file = fopen(externs_file_name, "w"); if (externs_file == 0) open_error(externs_file_name); } output_file = fopen(output_file_name, "w"); if (output_file == 0) open_error(output_file_name); if (rflag) { code_file = fopen(code_file_name, "w"); if (code_file == 0) open_error(code_file_name); } else code_file = output_file; } int main(int argc, char *argv[]) { SRexpect = -1; RRexpect = -1; exit_code = EXIT_SUCCESS; set_signals(); getargs(argc, argv); open_files(); reader(); lr0(); lalr(); make_parser(); graph(); finalize_closure(); verbose(); output(); done(exit_code); /*NOTREACHED */ } byacc-20221106/test/0000755000000000000000000000000014332026515012510 5ustar rootrootbyacc-20221106/test/code_error.y0000644000000000000000000000052511704617046015034 0ustar rootroot%{ #ifdef YYBISON int yylex(void); static void yyerror(const char *); #endif %} %% S: error %% #include #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/err_syntax25.y0000644000000000000000000000070612313700556015253 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %union { int ival; double dval; } %union { int ival2; double dval2; } %start expr %type expr %token NUMBER %% expr : '(' recur ')' ; recur : NUMBER { $$ = 1; } ; %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/err_syntax9.y0000644000000000000000000000046312313162311015164 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %start text %token text '(' '*' '&' %% S: error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/calc1.y0000644000000000000000000001034212115227010013653 0ustar rootroot%{ /* http://dinosaur.compilertools.net/yacc/index.html */ #include #include #include #include typedef struct interval { double lo, hi; } INTERVAL; INTERVAL vmul(double, double, INTERVAL); INTERVAL vdiv(double, double, INTERVAL); extern int yylex(void); static void yyerror(const char *s); int dcheck(INTERVAL); double dreg[26]; INTERVAL vreg[26]; %} %expect 18 %start line %union { int ival; double dval; INTERVAL vval; } %token DREG VREG /* indices into dreg, vreg arrays */ %token CONST /* floating point constant */ %type dexp /* expression */ %type vexp /* interval expression */ /* precedence information about the operators */ %left '+' '-' %left '*' '/' %left UMINUS /* precedence for unary minus */ %% /* beginning of rules section */ lines : /* empty */ | lines line ; line : dexp '\n' { (void) printf("%15.8f\n", $1); } | vexp '\n' { (void) printf("(%15.8f, %15.8f)\n", $1.lo, $1.hi); } | DREG '=' dexp '\n' { dreg[$1] = $3; } | VREG '=' vexp '\n' { vreg[$1] = $3; } | error '\n' { yyerrok; } ; dexp : CONST | DREG { $$ = dreg[$1]; } | dexp '+' dexp { $$ = $1 + $3; } | dexp '-' dexp { $$ = $1 - $3; } | dexp '*' dexp { $$ = $1 * $3; } | dexp '/' dexp { $$ = $1 / $3; } | '-' dexp %prec UMINUS { $$ = -$2; } | '(' dexp ')' { $$ = $2; } ; vexp : dexp { $$.hi = $$.lo = $1; } | '(' dexp ',' dexp ')' { $$.lo = $2; $$.hi = $4; if ( $$.lo > $$.hi ) { (void) printf("interval out of order\n"); YYERROR; } } | VREG { $$ = vreg[$1]; } | vexp '+' vexp { $$.hi = $1.hi + $3.hi; $$.lo = $1.lo + $3.lo; } | dexp '+' vexp { $$.hi = $1 + $3.hi; $$.lo = $1 + $3.lo; } | vexp '-' vexp { $$.hi = $1.hi - $3.lo; $$.lo = $1.lo - $3.hi; } | dexp '-' vexp { $$.hi = $1 - $3.lo; $$.lo = $1 - $3.hi; } | vexp '*' vexp { $$ = vmul( $1.lo, $1.hi, $3 ); } | dexp '*' vexp { $$ = vmul ($1, $1, $3 ); } | vexp '/' vexp { if (dcheck($3)) YYERROR; $$ = vdiv ( $1.lo, $1.hi, $3 ); } | dexp '/' vexp { if (dcheck ( $3 )) YYERROR; $$ = vdiv ($1, $1, $3 ); } | '-' vexp %prec UMINUS { $$.hi = -$2.lo; $$.lo = -$2.hi; } | '(' vexp ')' { $$ = $2; } ; %% /* beginning of subroutines section */ #define BSZ 50 /* buffer size for floating point numbers */ /* lexical analysis */ static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { int c; while ((c = getchar()) == ' ') { /* skip over blanks */ } if (isupper(c)) { yylval.ival = c - 'A'; return (VREG); } if (islower(c)) { yylval.ival = c - 'a'; return (DREG); } if (isdigit(c) || c == '.') { /* gobble up digits, points, exponents */ char buf[BSZ + 1], *cp = buf; int dot = 0, expr = 0; for (; (cp - buf) < BSZ; ++cp, c = getchar()) { *cp = (char) c; if (isdigit(c)) continue; if (c == '.') { if (dot++ || expr) return ('.'); /* will cause syntax error */ continue; } if (c == 'e') { if (expr++) return ('e'); /* will cause syntax error */ continue; } /* end of number */ break; } *cp = '\0'; if ((cp - buf) >= BSZ) printf("constant too long: truncated\n"); else ungetc(c, stdin); /* push back last char read */ yylval.dval = atof(buf); return (CONST); } return (c); } static INTERVAL hilo(double a, double b, double c, double d) { /* returns the smallest interval containing a, b, c, and d */ /* used by *, / routines */ INTERVAL v; if (a > b) { v.hi = a; v.lo = b; } else { v.hi = b; v.lo = a; } if (c > d) { if (c > v.hi) v.hi = c; if (d < v.lo) v.lo = d; } else { if (d > v.hi) v.hi = d; if (c < v.lo) v.lo = c; } return (v); } INTERVAL vmul(double a, double b, INTERVAL v) { return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo)); } int dcheck(INTERVAL v) { if (v.hi >= 0. && v.lo <= 0.) { printf("divisor interval contains 0.\n"); return (1); } return (0); } INTERVAL vdiv(double a, double b, INTERVAL v) { return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo)); } byacc-20221106/test/err_syntax18.y0000644000000000000000000000047712313536346015266 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %% expr : '(' expr ')' { $$ = $4; } ; %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/calc2.y0000644000000000000000000000450012307445131013664 0ustar rootroot%parse-param { int regs[26] } %parse-param { int *base } %lex-param { int *base } %{ # include # include #ifdef YYBISON #define YYLEX_PARAM base #define YYLEX_DECL() yylex(int *YYLEX_PARAM) #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) int YYLEX_DECL(); static void YYERROR_DECL(); #endif %} %start list %token DIGIT LETTER %left '|' %left '&' %left '+' '-' %left '*' '/' '%' %left UMINUS /* supplies precedence for unary minus */ %% /* beginning of rules section */ list : /* empty */ | list stat '\n' | list error '\n' { yyerrok ; } ; stat : expr { printf("%d\n",$1);} | LETTER '=' expr { regs[$1] = $3; } ; expr : '(' expr ')' { $$ = $2; } | expr '+' expr { $$ = $1 + $3; } | expr '-' expr { $$ = $1 - $3; } | expr '*' expr { $$ = $1 * $3; } | expr '/' expr { $$ = $1 / $3; } | expr '%' expr { $$ = $1 % $3; } | expr '&' expr { $$ = $1 & $3; } | expr '|' expr { $$ = $1 | $3; } | '-' expr %prec UMINUS { $$ = - $2; } | LETTER { $$ = regs[$1]; } | number ; number: DIGIT { $$ = $1; (*base) = ($1==0) ? 8 : 10; } | number DIGIT { $$ = (*base) * $1 + $2; } ; %% /* start of programs */ #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main (void) { int regs[26]; int base = 10; while(!feof(stdin)) { yyparse(regs, &base); } return 0; } #define UNUSED(x) ((void)(x)) static void YYERROR_DECL() { UNUSED(regs); /* %parse-param regs is not actually used here */ UNUSED(base); /* %parse-param base is not actually used here */ fprintf(stderr, "%s\n", s); } int YYLEX_DECL() { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = (c - '0') % (*base); return ( DIGIT ); } return( c ); } byacc-20221106/test/btyacc_destroy3.y0000644000000000000000000000307612414222035016003 0ustar rootroot%parse-param { struct parser_param *param, int flag } %{ #include typedef enum {cGLOBAL, cLOCAL} class; typedef enum {tREAL, tINTEGER} type; typedef char * name; struct symbol { class c; type t; name id; }; typedef struct symbol symbol; struct namelist { symbol *s; struct namelist *next; }; typedef struct namelist namelist; struct parser_param { int *rtrn; symbol ss; }; extern symbol *mksymbol(type t, class c, name id); #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) #endif %} %token GLOBAL LOCAL %token REAL INTEGER %token NAME %type declaration %type locnamelist %type class %type type %type namelist %destructor { if (!param->rtrn) close($$); } %destructor { namelist *p = $$; while (p != NULL) { namelist *pp = p; p = p->next; free(pp->s); free(pp); } } declaration %union { class cval; type tval; namelist * nlist; name id; } %start declaration %% declaration: class type namelist'(' class ',' type ')' { $$ = $3; } | type locnamelist '(' class ')' { $$ = $2; } ; class : GLOBAL { $$ = cGLOBAL; } | LOCAL { $$ = cLOCAL; } ; type : REAL { $$ = tREAL; } | INTEGER { $$ = tINTEGER; } ; namelist: namelist NAME { $$->s = mksymbol($0, $0, $2); $$->next = $1; } | NAME { $$->s = mksymbol(0, 0, $1); $$->next = NULL; } ; locnamelist: namelist '(' LOCAL ',' type ')' { $$ = $1; } ; %% extern int YYLEX_DECL(); extern void YYERROR_DECL(); byacc-20221106/test/inherit2.y0000644000000000000000000000257712315170104014432 0ustar rootroot%{ #include typedef enum {cGLOBAL, cLOCAL} class; typedef enum {tREAL, tINTEGER} type; typedef char * name; struct symbol { class c; type t; name id; }; typedef struct symbol symbol; struct namelist { symbol *s; struct namelist *next; }; typedef struct namelist namelist; extern symbol *mksymbol(type t, class c, name id); #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) #endif %} %token GLOBAL LOCAL %token REAL INTEGER %token NAME %type declaration namelist(, ) locnamelist() %type class %type type %destructor { namelist *p = $$; while (p != NULL) { namelist *pp = p; p = p->next; free(pp->s); free(pp); } } %union { class cval; type tval; namelist * nlist; name id; } %start declaration %% declaration: class type namelist($1, $2) { $$ = $3; } | type locnamelist($1) { $$ = $2; } ; class : GLOBAL { $$ = cGLOBAL; } | LOCAL { $$ = cLOCAL; } ; type : REAL { $$ = tREAL; } | INTEGER { $$ = tINTEGER; } ; namelist($c, $t): namelist NAME { $$->s = mksymbol($t, $c, $2); $$->next = $1; } | NAME { $$->s = mksymbol($t, $c, $1); $$->next = NULL; } ; locnamelist($t): namelist(cLOCAL, $t) { $$ = $1; } ; %% extern int YYLEX_DECL(); extern void YYERROR_DECL(); byacc-20221106/test/run_make.sh0000755000000000000000000000737614332017675014674 0ustar rootroot#!/bin/sh # $Id: run_make.sh,v 1.21 2022/11/06 20:57:33 tom Exp $ # vi:ts=4 sw=4: # do a test-compile on each of the ".c" files in the test-directory BISON=`bison --version 2>/dev/null | head -n 1 | sed -e 's/^[^0-9.]*//' -e 's/[^0-9.]*$//'` if test $# = 1 then PROG_DIR=`pwd` TEST_DIR=$1 else PROG_DIR=.. TEST_DIR=. fi THIS_DIR=`pwd` : "${FGREP:=grep -F}" ifBTYACC=`$FGREP -l 'define YYBTYACC' config.h > /dev/null; test $? != 0; echo $?` if test "$ifBTYACC" = 0; then REF_DIR=${TEST_DIR}/yacc else REF_DIR=${TEST_DIR}/btyacc fi MY_MAKE="make -f $PROG_DIR/makefile srcdir=$PROG_DIR" run_make() { C_FILE=`basename "$1"` O_FILE=`basename "$C_FILE" .c`.o shift RETEST=`unset CDPATH; cd $TEST_DIR; pwd` cd "$REF_DIR" test -f "$I_FILE" && rm "$I_FILE" make -f "$PROG_DIR/makefile" EXTRA_CFLAGS=-I$RETEST srcdir="$PROG_DIR" "$O_FILE" "$@" test -f "$O_FILE" && rm "$O_FILE" cd "$THIS_DIR" } echo "** `date`" echo "** program is in $PROG_DIR" echo "** test-files in $REF_DIR" for input in ${REF_DIR}/*.c do case $input in #(vi ${REF_DIR}/err_*|\ ${REF_DIR}/test-err_*) continue ;; esac test -f "$input" || continue run_make "$input" DEFS= case $input in #(vi ${REF_DIR}/pure_*) # DEFS="-DYYLEX_PARAM=flag -DYYLEX_PARAM_TYPE=int" ;; esac if test "x$DEFS" != "x" then run_make "$input" DEFINES="$DEFS" fi done if test -n "$BISON" then echo "** compare with bison $BISON" for input in ${TEST_DIR}/*.y do test -f "$input" || continue case $input in ${TEST_DIR}/err_*|\ ${TEST_DIR}/test-err_*) continue ;; ${TEST_DIR}/ok_syntax*|\ ${TEST_DIR}/varsyntax*) # Bison does not support all byacc legacy syntax continue ;; ${TEST_DIR}/btyacc_*) # Bison does not support the btyacc []-action & inherited attribute extensions. continue ;; esac # Bison does not support pure-parser from command-line. # Also, its support for %expect is generally broken. # Work around these issues using a temporary file. echo "... testing $input" rm -f run_make.[coy] case $input in ${TEST_DIR}/pure_*) if test -z "`$FGREP -i -l '%pure-parser' "$input"`" then echo "%pure-parser" >>run_make.y fi ;; esac sed -e '/^%expect/s,%expect.*,,' "$input" >>run_make.y case $BISON in [3-9].[0-9]*.[0-9]*) bison -Wno-other -Wno-conflicts-sr -Wconflicts-rr -y -Wno-yacc run_make.y ;; *) bison -y run_make.y ;; esac if test -f "y.tab.c" then sed -e '/^#line/s,"run_make.y","'"$input"'",' y.tab.c >run_make.c rm -f y.tab.c input=run_make.c object=run_make.o if test -f $input then $MY_MAKE $object DEFINES='-DYYENABLE_NLS=0 -DYYLTYPE_IS_TRIVIAL=1 -DYYSTACK_USE_ALLOCA=0 -DYYMAXDEPTH=0' else echo "?? $input not found" fi fi rm -f run_make.[coy] done fi YACC= for name in /usr/ccs/bin/yacc do if test -f $name then YACC=$name fi done if test -n "$YACC" then echo "** compare with $YACC" for input in ${TEST_DIR}/*.y do test -f "$input" || continue echo "... testing $input" rm -f run_make.[coy] case $input in pure_*) echo "... skipping $input" continue; ;; *) if $FGREP -i '%pure-parser' "$input" >/dev/null || $FGREP -i '%parse-param' "$input" >/dev/null || $FGREP -i '%lex-param' "$input" >/dev/null || $FGREP -i '%token-table' "$input" >/dev/null || $FGREP 'YYLEX_PARAM' "$input" >/dev/null then echo "... skipping $input" continue; fi ;; esac sed -e '/^%expect/s,%expect.*,,' "$input" >>run_make.y $YACC run_make.y if test -f y.tab.c then sed -e '/^#line/s,"run_make.y","'"$input"'",' y.tab.c >run_make.c rm -f y.tab.c input=run_make.c object=run_make.o if test -f $input then $MY_MAKE $object else echo "?? $input not found" fi fi rm -f run_make.[coy] done fi byacc-20221106/test/quote_calc2.y0000644000000000000000000000373511704572163015120 0ustar rootroot%{ # include # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); %} %start list %token OP_ADD "ADD" %token OP_SUB "SUB" %token OP_MUL "MUL" %token OP_DIV "DIV" %token OP_MOD "MOD" %token OP_AND "AND" %token DIGIT LETTER %left '|' %left '&' %left '+' '-' %left '*' '/' '%' %left UMINUS /* supplies precedence for unary minus */ %% /* beginning of rules section */ list : /* empty */ | list stat '\n' | list error '\n' { yyerrok ; } ; stat : expr { printf("%d\n",$1);} | LETTER '=' expr { regs[$1] = $3; } ; expr : '(' expr ')' { $$ = $2; } | expr "ADD" expr { $$ = $1 + $3; } | expr "SUB" expr { $$ = $1 - $3; } | expr "MUL" expr { $$ = $1 * $3; } | expr "DIV" expr { $$ = $1 / $3; } | expr "MOD" expr { $$ = $1 % $3; } | expr "AND" expr { $$ = $1 & $3; } | expr '|' expr { $$ = $1 | $3; } | "SUB" expr %prec UMINUS { $$ = - $2; } | LETTER { $$ = regs[$1]; } | number ; number: DIGIT { $$ = $1; base = ($1==0) ? 8 : 10; } | number DIGIT { $$ = base * $1 + $2; } ; %% /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } byacc-20221106/test/err_syntax8.y0000644000000000000000000000043712313161470015171 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %token . '\777' %% S: error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/err_syntax5.y0000644000000000000000000000045512313155312015164 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %union { char *str; int num %% S: error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/err_syntax4.y0000644000000000000000000000041412313154502015156 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); } %% S: error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/err_syntax23.y0000644000000000000000000000064212313677725015263 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %union { int ival; double dval; } %type recur %token NUMBER %% expr : '(' recur ')' { $$ = $2; } ; recur : NUMBER { $$ = 1; } ; %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/btyacc_destroy2.y0000644000000000000000000000307612414222030015775 0ustar rootroot%parse-param { struct parser_param *param } { int flag } %{ #include typedef enum {cGLOBAL, cLOCAL} class; typedef enum {tREAL, tINTEGER} type; typedef char * name; struct symbol { class c; type t; name id; }; typedef struct symbol symbol; struct namelist { symbol *s; struct namelist *next; }; typedef struct namelist namelist; struct parser_param { int *rtrn; symbol ss; }; extern symbol *mksymbol(type t, class c, name id); #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) #endif %} %token GLOBAL LOCAL %token REAL INTEGER %token NAME %type declaration %type locnamelist %type class %type type %type namelist %destructor { if (!param->rtrn) close($$); } %destructor { namelist *p = $$; while (p != NULL) { namelist *pp = p; p = p->next; free(pp->s); free(pp); } } declaration %union { class cval; type tval; namelist * nlist; name id; } %start declaration %% declaration: class type namelist'(' class ',' type ')' { $$ = $3; } | type locnamelist '(' class ')' { $$ = $2; } ; class : GLOBAL { $$ = cGLOBAL; } | LOCAL { $$ = cLOCAL; } ; type : REAL { $$ = tREAL; } | INTEGER { $$ = tINTEGER; } ; namelist: namelist NAME { $$->s = mksymbol($0, $0, $2); $$->next = $1; } | NAME { $$->s = mksymbol(0, 0, $1); $$->next = NULL; } ; locnamelist: namelist '(' LOCAL ',' type ')' { $$ = $1; } ; %% extern int YYLEX_DECL(); extern void YYERROR_DECL(); byacc-20221106/test/err_syntax3.y0000644000000000000000000000045012313153556015165 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %token '(' '*' '& %% S: error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/err_syntax7a.y0000644000000000000000000000044512313161017015325 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %token '\xfff' %% S: error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/btyacc_demo.y0000644000000000000000000001506712317763153015173 0ustar rootroot/* * demonstrate enhancements derived from btyacc: * backtracking to resolve conflicts * semantic disambiguation via []-actions invoking YYVALID & YYERROR * %locations * @$ & @N to refer to lhs & rhs symbol location * %destructor * syntactic suger for inherited attributes * extension to %type to define inherited attribute type */ %LOCATIONS %{ /* dummy types just for compile check */ typedef int Code; typedef int Decl_List; typedef int Expr; typedef int Expr_List; typedef int Scope; typedef int Type; enum Operator { ADD, SUB, MUL, MOD, DIV, DEREF }; typedef unsigned char bool; typedef struct Decl { Scope *scope; Type *type; bool (*istype)(void); } Decl; #include "btyacc_demo.tab.h" #include #include %} %union { Scope *scope; Expr *expr; Expr_List *elist; Type *type; Decl *decl; Decl_List *dlist; Code *code; char *id; }; %left '+' '-' %left '*' '/' '%' %nonassoc PREFIX %nonassoc POSTFIX '(' '[' '.' %token ID %token CONSTANT %token EXTERN REGISTER STATIC CONST VOLATILE IF THEN ELSE CLCL %type expr() %type decl() declarator_list(, ) decl_list() %type statement() statement_list() block_statement() %type declarator(, ) formal_arg() %type decl_specs() decl_spec() typename() cv_quals cv_qual %type opt_scope() %type formal_arg_list() nonempty_formal_arg_list() %destructor { // 'msg' is a 'char *' indicating the context of destructor invocation printf("%s accessed by symbol \"decl\" (case s.b. 273) @ position[%d,%d..%d,%d]\n", msg, @$.first_line, @$.first_column, @$.last_line, @$.last_column); free($$->scope); free($$->type); } decl %destructor { printf("%s accessed by symbol with type (case s.b. 279 & 280) @ position[%d,%d..%d,%d]\n", msg, @$.first_line, @$.first_column, @$.last_line, @$.last_column); free($$); } %destructor { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, @$.first_line, @$.first_column, @$.last_line, @$.last_column); free($$); } <*> %destructor { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, @$.first_line, @$.first_column, @$.last_line, @$.last_column); /* in this example, we don't know what to do here */ } <> %start input %% opt_scope($e): [ $$ = $e; ] | CLCL [ $$ = global_scope; ] | opt_scope ID CLCL [ Decl *d = lookup($1, $2); if (!d || !d->scope) YYERROR; $$ = d->scope; ] ; typename($e): opt_scope ID [ Decl *d = lookup($1, $2); if (d == NULL || d->istype() == 0) YYERROR; $$ = d->type; ] ; input: decl_list(global_scope = new_scope(0)) ; decl_list($e): | decl_list decl($e) ; decl($e): decl_specs declarator_list($e,$1) ';' [YYVALID;] | decl_specs declarator($e,$1) block_statement(start_fn_def($e, $2)) { /* demonstrate use of @$ & @N, although this is just the default computation and so is not necessary */ @$.first_line = @1.first_line; @$.first_column = @1.first_column; @$.last_line = @3.last_line; @$.last_column = @3.last_column; finish_fn_def($2, $3); } ; decl_specs($e): decl_spec [ $$ = $1; ] | decl_specs decl_spec($e) [ $$ = type_combine($1, $2); ] ; cv_quals: [ $$ = 0; ] | cv_quals cv_qual [ $$ = type_combine($1, $2); ] ; decl_spec($e): cv_qual [ $$ = $1; ] | typename [ $$ = $1; ] | EXTERN [ $$ = bare_extern(); ] | REGISTER [ $$ = bare_register(); ] | STATIC [ $$ = bare_static(); ] ; cv_qual: CONST [ $$ = bare_const(); ] | VOLATILE [ $$ = bare_volatile(); ] ; declarator_list($e, $t): declarator_list ',' declarator($e, $t) | declarator ; declarator($e, $t): /* empty */ [ if (!$t) YYERROR; ] { $$ = declare($e, 0, $t); } | ID { $$ = declare($e, $1, $t); } | '(' declarator($e, $t) ')' { $$ = $2; } | '*' cv_quals declarator($e, $t) %prec PREFIX { $$ = make_pointer($3, $2); } | declarator '[' expr($e) ']' { $$ = make_array($1->type, $3); } | declarator '(' formal_arg_list($e) ')' cv_quals { $$ = build_function($1, $3, $5); } ; formal_arg_list($e): { $$ = 0; } | nonempty_formal_arg_list { $$ = $1; } ; nonempty_formal_arg_list($e): nonempty_formal_arg_list ',' formal_arg($e) { $$ = append_dlist($1, $3); } | formal_arg { $$ = build_dlist($1); } ; formal_arg($e): decl_specs declarator($e,$1) { $$ = $2; } ; expr($e): expr '+' expr($e) { $$ = build_expr($1, ADD, $3); } | expr '-' expr($e) { $$ = build_expr($1, SUB, $3); } | expr '*' expr($e) { $$ = build_expr($1, MUL, $3); } | expr '%' expr($e) { $$ = build_expr($1, MOD, $3); } | expr '/' expr($e) { $$ = build_expr($1, DIV, $3); } | '*' expr($e) %prec PREFIX { $$ = build_expr(0, DEREF, $2); } | ID { $$ = var_expr($e, $1); } | CONSTANT { $$ = $1; } ; statement($e): decl { $$ = 0; } | expr($e) ';' [YYVALID;] { $$ = build_expr_code($1); } | IF '(' expr($e) ')' THEN statement($e) ELSE statement($e) [YYVALID;] { $$ = build_if($3, $6, $8); } | IF '(' expr($e) ')' THEN statement($e) [YYVALID;] { $$ = build_if($3, $6, 0); } | block_statement(new_scope($e)) [YYVALID;]{ $$ = $1; } ; statement_list($e): { $$ = 0; } | statement_list statement($e) { $$ = code_append($1, $2); } ; block_statement($e): '{' statement_list($e) '}' { $$ = $2; } ; %% extern int YYLEX_DECL(); extern void YYERROR_DECL(); extern Scope *global_scope; extern Decl * lookup(Scope *scope, char *id); extern Scope * new_scope(Scope *outer_scope); extern Scope * start_fn_def(Scope *scope, Decl *fn_decl); extern void finish_fn_def(Decl *fn_decl, Code *block); extern Type * type_combine(Type *specs, Type *spec); extern Type * bare_extern(void); extern Type * bare_register(void); extern Type * bare_static(void); extern Type * bare_const(void); extern Type * bare_volatile(void); extern Decl * declare(Scope *scope, char *id, Type *type); extern Decl * make_pointer(Decl *decl, Type *type); extern Decl * make_array(Type *type, Expr *expr); extern Decl * build_function(Decl *decl, Decl_List *dlist, Type *type); extern Decl_List * append_dlist(Decl_List *dlist, Decl *decl); extern Decl_List * build_dlist(Decl *decl); extern Expr * build_expr(Expr *left, enum Operator op, Expr *right); extern Expr * var_expr(Scope *scope, char *id); extern Code * build_expr_code(Expr *expr); extern Code * build_if(Expr *cond_expr, Code *then_stmt, Code *else_stmt); extern Code * code_append(Code *stmt_list, Code *stmt); byacc-20221106/test/quote_calc.y0000644000000000000000000000374411704572072015035 0ustar rootroot%{ # include # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); %} %start list %token OP_ADD "ADD" %token OP_SUB "SUB" %token OP_MUL "MUL" %token OP_DIV "DIV" %token OP_MOD "MOD" %token OP_AND "AND" %token DIGIT LETTER %left '|' %left '&' %left '+' '-' %left '*' '/' '%' %left UMINUS /* supplies precedence for unary minus */ %% /* beginning of rules section */ list : /* empty */ | list stat '\n' | list error '\n' { yyerrok ; } ; stat : expr { printf("%d\n",$1);} | LETTER '=' expr { regs[$1] = $3; } ; expr : '(' expr ')' { $$ = $2; } | expr OP_ADD expr { $$ = $1 + $3; } | expr OP_SUB expr { $$ = $1 - $3; } | expr OP_MUL expr { $$ = $1 * $3; } | expr OP_DIV expr { $$ = $1 / $3; } | expr OP_MOD expr { $$ = $1 % $3; } | expr OP_AND expr { $$ = $1 & $3; } | expr '|' expr { $$ = $1 | $3; } | OP_SUB expr %prec UMINUS { $$ = - $2; } | LETTER { $$ = regs[$1]; } | number ; number: DIGIT { $$ = $1; base = ($1==0) ? 8 : 10; } | number DIGIT { $$ = base * $1 + $2; } ; %% /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } byacc-20221106/test/calc_code_top.y0000644000000000000000000000364313564642417015501 0ustar rootroot%code top { /* CODE-TOP */ } %code top { /* CODE-TOP2 */ } %{ # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); %} %start list %token DIGIT LETTER %left '|' %left '&' %left '+' '-' %left '*' '/' '%' %left UMINUS /* supplies precedence for unary minus */ %% /* beginning of rules section */ list : /* empty */ | list stat '\n' | list error '\n' { yyerrok ; } ; stat : expr { printf("%d\n",$1);} | LETTER '=' expr { regs[$1] = $3; } ; expr : '(' expr ')' { $$ = $2; } | expr '+' expr { $$ = $1 + $3; } | expr '-' expr { $$ = $1 - $3; } | expr '*' expr { $$ = $1 * $3; } | expr '/' expr { $$ = $1 / $3; } | expr '%' expr { $$ = $1 % $3; } | expr '&' expr { $$ = $1 & $3; } | expr '|' expr { $$ = $1 | $3; } | '-' expr %prec UMINUS { $$ = - $2; } | LETTER { $$ = regs[$1]; } | number ; number: DIGIT { $$ = $1; base = ($1==0) ? 8 : 10; } | number DIGIT { $$ = base * $1 + $2; } ; %% /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } byacc-20221106/test/err_syntax16.y0000644000000000000000000000051212313423024015236 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %token second %% firstx : '(' secondx ; second : ')' ; S: error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/err_inherit2.y0000644000000000000000000000261412315170206015275 0ustar rootroot%{ #include typedef enum {cGLOBAL, cLOCAL} class; typedef enum {tREAL, tINTEGER} type; typedef char * name; struct symbol { class c; type t; name id; }; typedef struct symbol symbol; struct namelist { symbol *s; struct namelist *next; }; typedef struct namelist namelist; extern symbol *mksymbol(type t, class c, name id); #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) #endif %} %token GLOBAL LOCAL %token REAL INTEGER %token NAME %type declaration namelist(, ) locnamelist() %type class %type type %destructor { namelist *p = $$; while (p != NULL) { namelist *pp = p; p = p->next; free(pp->s); free(pp); } } %union { class cval; type tval; namelist * nlist; name id; } %start declaration %% declaration: class type namelist($1, $2) { $$ = $3; } | type locnamelist($1) { $$ = $2; } ; class : GLOBAL { $$ = cGLOBAL; } | LOCAL { $$ = cLOCAL; } ; type : REAL { $$ = tREAL; } | INTEGER { $$ = tINTEGER; } ; namelist($c, $t, extra): namelist NAME { $$->s = mksymbol($t, $c, $2); $$->next = $1; } | NAME { $$->s = mksymbol($t, $c, $1); $$->next = NULL; } ; locnamelist($t): namelist(cLOCAL, $t) { $$ = $1; } ; %% extern int YYLEX_DECL(); extern void YYERROR_DECL(); byacc-20221106/test/grammar.y0000644000000000000000000006575013640503405014344 0ustar rootroot/* $Id: grammar.y,v 1.7 2020/03/30 23:55:49 tom Exp $ * * yacc grammar for C function prototype generator * This was derived from the grammar in Appendix A of * "The C Programming Language" by Kernighan and Ritchie. */ %expect 1 %{ #ifdef YYBISON #include #define YYSTYPE_IS_DECLARED #define yyerror yaccError #endif #if defined(YYBISON) || !defined(YYBYACC) static void yyerror(const char *s); #endif %} %token '(' '*' '&' /* identifiers that are not reserved words */ T_IDENTIFIER T_TYPEDEF_NAME T_DEFINE_NAME /* storage class */ T_AUTO T_EXTERN T_REGISTER T_STATIC T_TYPEDEF /* This keyword included for compatibility with C++. */ T_INLINE /* This keyword included for compatibility with GCC */ T_EXTENSION /* type specifiers */ T_CHAR T_DOUBLE T_FLOAT T_INT T_VOID T_LONG T_SHORT T_SIGNED T_UNSIGNED T_ENUM T_STRUCT T_UNION /* C9X new types */ T_Bool T_Complex T_Imaginary /* type qualifiers */ T_TYPE_QUALIFIER /* paired square brackets and everything between them: [ ... ] */ T_BRACKETS %token /* left brace */ T_LBRACE /* all input to the matching right brace */ T_MATCHRBRACE /* three periods */ T_ELLIPSIS /* constant expression or paired braces following an equal sign */ T_INITIALIZER /* string literal */ T_STRING_LITERAL /* asm */ T_ASM /* ( "string literal" ) following asm keyword */ T_ASMARG /* va_dcl from */ T_VA_DCL %type decl_specifiers decl_specifier %type storage_class type_specifier type_qualifier %type struct_or_union_specifier enum_specifier %type init_declarator_list %type init_declarator declarator direct_declarator %type abs_declarator direct_abs_declarator %type parameter_type_list parameter_list %type parameter_declaration %type opt_identifier_list identifier_list %type struct_or_union pointer opt_type_qualifiers type_qualifier_list any_id identifier_or_ref %type enumeration %{ #include #include #include #define OPT_LINTLIBRARY 1 #ifndef TRUE #define TRUE (1) #endif #ifndef FALSE #define FALSE (0) #endif /* #include "cproto.h" */ #define MAX_TEXT_SIZE 1024 #define TEXT_LEN (MAX_TEXT_SIZE / 2 - 3) /* Prototype styles */ #if OPT_LINTLIBRARY #define PROTO_ANSI_LLIB -2 /* form ANSI lint-library source */ #define PROTO_LINTLIBRARY -1 /* form lint-library source */ #endif #define PROTO_NONE 0 /* do not output any prototypes */ #define PROTO_TRADITIONAL 1 /* comment out parameters */ #define PROTO_ABSTRACT 2 /* comment out parameter names */ #define PROTO_ANSI 3 /* ANSI C prototype */ typedef int PrototypeStyle; typedef char boolean; extern boolean types_out; extern PrototypeStyle proto_style; #define ansiLintLibrary() (proto_style == PROTO_ANSI_LLIB) #define knrLintLibrary() (proto_style == PROTO_LINTLIBRARY) #define lintLibrary() (knrLintLibrary() || ansiLintLibrary()) #if OPT_LINTLIBRARY #define FUNC_UNKNOWN -1 /* unspecified */ #else #define FUNC_UNKNOWN 0 /* unspecified (same as FUNC_NONE) */ #endif #define FUNC_NONE 0 /* not a function definition */ #define FUNC_TRADITIONAL 1 /* traditional style */ #define FUNC_ANSI 2 /* ANSI style */ #define FUNC_BOTH 3 /* both styles */ typedef int FuncDefStyle; /* Source file text */ typedef struct text { char text[MAX_TEXT_SIZE]; /* source text */ long begin; /* offset in temporary file */ } Text; /* Declaration specifier flags */ #define DS_NONE 0 /* default */ #define DS_EXTERN 1 /* contains "extern" specifier */ #define DS_STATIC 2 /* contains "static" specifier */ #define DS_CHAR 4 /* contains "char" type specifier */ #define DS_SHORT 8 /* contains "short" type specifier */ #define DS_FLOAT 16 /* contains "float" type specifier */ #define DS_INLINE 32 /* contains "inline" specifier */ #define DS_JUNK 64 /* we're not interested in this declaration */ /* This structure stores information about a declaration specifier. */ typedef struct decl_spec { unsigned short flags; /* flags defined above */ char *text; /* source text */ long begin; /* offset in temporary file */ } DeclSpec; /* This is a list of function parameters. */ typedef struct _ParameterList { struct parameter *first; /* pointer to first parameter in list */ struct parameter *last; /* pointer to last parameter in list */ long begin_comment; /* begin offset of comment */ long end_comment; /* end offset of comment */ char *comment; /* comment at start of parameter list */ } ParameterList; /* This structure stores information about a declarator. */ typedef struct _Declarator { char *name; /* name of variable or function */ char *text; /* source text */ long begin; /* offset in temporary file */ long begin_comment; /* begin offset of comment */ long end_comment; /* end offset of comment */ FuncDefStyle func_def; /* style of function definition */ ParameterList params; /* function parameters */ boolean pointer; /* TRUE if it declares a pointer */ struct _Declarator *head; /* head function declarator */ struct _Declarator *func_stack; /* stack of function declarators */ struct _Declarator *next; /* next declarator in list */ } Declarator; /* This structure stores information about a function parameter. */ typedef struct parameter { struct parameter *next; /* next parameter in list */ DeclSpec decl_spec; Declarator *declarator; char *comment; /* comment following the parameter */ } Parameter; /* This is a list of declarators. */ typedef struct declarator_list { Declarator *first; /* pointer to first declarator in list */ Declarator *last; /* pointer to last declarator in list */ } DeclaratorList; /* #include "symbol.h" */ typedef struct symbol { struct symbol *next; /* next symbol in list */ char *name; /* name of symbol */ char *value; /* value of symbol (for defines) */ short flags; /* symbol attributes */ } Symbol; /* parser stack entry type */ typedef union { Text text; DeclSpec decl_spec; Parameter *parameter; ParameterList param_list; Declarator *declarator; DeclaratorList decl_list; } YYSTYPE; /* The hash table length should be a prime number. */ #define SYM_MAX_HASH 251 typedef struct symbol_table { Symbol *bucket[SYM_MAX_HASH]; /* hash buckets */ } SymbolTable; extern SymbolTable *new_symbol_table /* Create symbol table */ (void); extern void free_symbol_table /* Destroy symbol table */ (SymbolTable *s); extern Symbol *find_symbol /* Lookup symbol name */ (SymbolTable *s, const char *n); extern Symbol *new_symbol /* Define new symbol */ (SymbolTable *s, const char *n, const char *v, int f); /* #include "semantic.h" */ extern void new_decl_spec (DeclSpec *, const char *, long, int); extern void free_decl_spec (DeclSpec *); extern void join_decl_specs (DeclSpec *, DeclSpec *, DeclSpec *); extern void check_untagged (DeclSpec *); extern Declarator *new_declarator (const char *, const char *, long); extern void free_declarator (Declarator *); extern void new_decl_list (DeclaratorList *, Declarator *); extern void free_decl_list (DeclaratorList *); extern void add_decl_list (DeclaratorList *, DeclaratorList *, Declarator *); extern Parameter *new_parameter (DeclSpec *, Declarator *); extern void free_parameter (Parameter *); extern void new_param_list (ParameterList *, Parameter *); extern void free_param_list (ParameterList *); extern void add_param_list (ParameterList *, ParameterList *, Parameter *); extern void new_ident_list (ParameterList *); extern void add_ident_list (ParameterList *, ParameterList *, const char *); extern void set_param_types (ParameterList *, DeclSpec *, DeclaratorList *); extern void gen_declarations (DeclSpec *, DeclaratorList *); extern void gen_prototype (DeclSpec *, Declarator *); extern void gen_func_declarator (Declarator *); extern void gen_func_definition (DeclSpec *, Declarator *); extern void init_parser (void); extern void process_file (FILE *infile, char *name); extern char *cur_text (void); extern char *cur_file_name (void); extern char *implied_typedef (void); extern void include_file (char *name, int convert); extern char *supply_parm (int count); extern char *xstrdup (const char *); extern int already_declared (char *name); extern int is_actual_func (Declarator *d); extern int lint_ellipsis (Parameter *p); extern int want_typedef (void); extern void begin_tracking (void); extern void begin_typedef (void); extern void copy_typedef (char *s); extern void ellipsis_varargs (Declarator *d); extern void end_typedef (void); extern void flush_varargs (void); extern void fmt_library (int code); extern void imply_typedef (const char *s); extern void indent (FILE *outf); extern void put_blankline (FILE *outf); extern void put_body (FILE *outf, DeclSpec *decl_spec, Declarator *declarator); extern void put_char (FILE *outf, int c); extern void put_error (void); extern void put_newline (FILE *outf); extern void put_padded (FILE *outf, const char *s); extern void put_string (FILE *outf, const char *s); extern void track_in (void); extern boolean file_comments; extern FuncDefStyle func_style; extern char base_file[]; extern int yylex (void); /* declaration specifier attributes for the typedef statement currently being * scanned */ static int cur_decl_spec_flags; /* pointer to parameter list for the current function definition */ static ParameterList *func_params; /* A parser semantic action sets this pointer to the current declarator in * a function parameter declaration in order to catch any comments following * the parameter declaration on the same line. If the lexer scans a comment * and is not NULL, then the comment is attached to the * declarator. To ignore subsequent comments, the lexer sets this to NULL * after scanning a comment or end of line. */ static Declarator *cur_declarator; /* temporary string buffer */ static char buf[MAX_TEXT_SIZE]; /* table of typedef names */ static SymbolTable *typedef_names; /* table of define names */ static SymbolTable *define_names; /* table of type qualifiers */ static SymbolTable *type_qualifiers; /* information about the current input file */ typedef struct { char *base_name; /* base input file name */ char *file_name; /* current file name */ FILE *file; /* input file */ unsigned line_num; /* current line number in input file */ FILE *tmp_file; /* temporary file */ long begin_comment; /* tmp file offset after last written ) or ; */ long end_comment; /* tmp file offset after last comment */ boolean convert; /* if TRUE, convert function definitions */ boolean changed; /* TRUE if conversion done in this file */ } IncludeStack; static IncludeStack *cur_file; /* current input file */ /* #include "yyerror.c" */ static int haveAnsiParam (void); /* Flags to enable us to find if a procedure returns a value. */ static int return_val; /* nonzero on BRACES iff return-expression found */ static const char * dft_decl_spec (void) { return (lintLibrary() && !return_val) ? "void" : "int"; } static int haveAnsiParam (void) { Parameter *p; if (func_params != 0) { for (p = func_params->first; p != 0; p = p->next) { if (p->declarator->func_def == FUNC_ANSI) { return TRUE; } } } return FALSE; } %} %% program : /* empty */ | translation_unit ; translation_unit : external_declaration | translation_unit external_declaration ; external_declaration : declaration | function_definition | ';' | linkage_specification | T_ASM T_ASMARG ';' | error T_MATCHRBRACE { yyerrok; } | error ';' { yyerrok; } ; braces : T_LBRACE T_MATCHRBRACE ; linkage_specification : T_EXTERN T_STRING_LITERAL braces { /* Provide an empty action here so bison will not complain about * incompatible types in the default action it normally would * have generated. */ } | T_EXTERN T_STRING_LITERAL declaration { /* empty */ } ; declaration : decl_specifiers ';' { #if OPT_LINTLIBRARY if (types_out && want_typedef()) { gen_declarations(&$1, (DeclaratorList *)0); flush_varargs(); } #endif free_decl_spec(&$1); end_typedef(); } | decl_specifiers init_declarator_list ';' { if (func_params != NULL) { set_param_types(func_params, &$1, &$2); } else { gen_declarations(&$1, &$2); #if OPT_LINTLIBRARY flush_varargs(); #endif free_decl_list(&$2); } free_decl_spec(&$1); end_typedef(); } | any_typedef decl_specifiers { cur_decl_spec_flags = $2.flags; free_decl_spec(&$2); } opt_declarator_list ';' { end_typedef(); } ; any_typedef : T_EXTENSION T_TYPEDEF { begin_typedef(); } | T_TYPEDEF { begin_typedef(); } ; opt_declarator_list : /* empty */ | declarator_list ; declarator_list : declarator { int flags = cur_decl_spec_flags; /* If the typedef is a pointer type, then reset the short type * flags so it does not get promoted. */ if (strcmp($1->text, $1->name) != 0) flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT); new_symbol(typedef_names, $1->name, NULL, flags); free_declarator($1); } | declarator_list ',' declarator { int flags = cur_decl_spec_flags; if (strcmp($3->text, $3->name) != 0) flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT); new_symbol(typedef_names, $3->name, NULL, flags); free_declarator($3); } ; function_definition : decl_specifiers declarator { check_untagged(&$1); if ($2->func_def == FUNC_NONE) { yyerror("syntax error"); YYERROR; } func_params = &($2->head->params); func_params->begin_comment = cur_file->begin_comment; func_params->end_comment = cur_file->end_comment; } opt_declaration_list T_LBRACE { /* If we're converting to K&R and we've got a nominally K&R * function which has a parameter which is ANSI (i.e., a prototyped * function pointer), then we must override the deciphered value of * 'func_def' so that the parameter will be converted. */ if (func_style == FUNC_TRADITIONAL && haveAnsiParam() && $2->head->func_def == func_style) { $2->head->func_def = FUNC_BOTH; } func_params = NULL; if (cur_file->convert) gen_func_definition(&$1, $2); gen_prototype(&$1, $2); #if OPT_LINTLIBRARY flush_varargs(); #endif free_decl_spec(&$1); free_declarator($2); } T_MATCHRBRACE | declarator { if ($1->func_def == FUNC_NONE) { yyerror("syntax error"); YYERROR; } func_params = &($1->head->params); func_params->begin_comment = cur_file->begin_comment; func_params->end_comment = cur_file->end_comment; } opt_declaration_list T_LBRACE T_MATCHRBRACE { DeclSpec decl_spec; func_params = NULL; new_decl_spec(&decl_spec, dft_decl_spec(), $1->begin, DS_NONE); if (cur_file->convert) gen_func_definition(&decl_spec, $1); gen_prototype(&decl_spec, $1); #if OPT_LINTLIBRARY flush_varargs(); #endif free_decl_spec(&decl_spec); free_declarator($1); } ; opt_declaration_list : /* empty */ | T_VA_DCL | declaration_list ; declaration_list : declaration | declaration_list declaration ; decl_specifiers : decl_specifier | decl_specifiers decl_specifier { join_decl_specs(&$$, &$1, &$2); free($1.text); free($2.text); } ; decl_specifier : storage_class | type_specifier | type_qualifier ; storage_class : T_AUTO { new_decl_spec(&$$, $1.text, $1.begin, DS_NONE); } | T_EXTERN { new_decl_spec(&$$, $1.text, $1.begin, DS_EXTERN); } | T_REGISTER { new_decl_spec(&$$, $1.text, $1.begin, DS_NONE); } | T_STATIC { new_decl_spec(&$$, $1.text, $1.begin, DS_STATIC); } | T_INLINE { new_decl_spec(&$$, $1.text, $1.begin, DS_INLINE); } | T_EXTENSION { new_decl_spec(&$$, $1.text, $1.begin, DS_JUNK); } ; type_specifier : T_CHAR { new_decl_spec(&$$, $1.text, $1.begin, DS_CHAR); } | T_DOUBLE { new_decl_spec(&$$, $1.text, $1.begin, DS_NONE); } | T_FLOAT { new_decl_spec(&$$, $1.text, $1.begin, DS_FLOAT); } | T_INT { new_decl_spec(&$$, $1.text, $1.begin, DS_NONE); } | T_LONG { new_decl_spec(&$$, $1.text, $1.begin, DS_NONE); } | T_SHORT { new_decl_spec(&$$, $1.text, $1.begin, DS_SHORT); } | T_SIGNED { new_decl_spec(&$$, $1.text, $1.begin, DS_NONE); } | T_UNSIGNED { new_decl_spec(&$$, $1.text, $1.begin, DS_NONE); } | T_VOID { new_decl_spec(&$$, $1.text, $1.begin, DS_NONE); } | T_Bool { new_decl_spec(&$$, $1.text, $1.begin, DS_CHAR); } | T_Complex { new_decl_spec(&$$, $1.text, $1.begin, DS_NONE); } | T_Imaginary { new_decl_spec(&$$, $1.text, $1.begin, DS_NONE); } | T_TYPEDEF_NAME { Symbol *s; s = find_symbol(typedef_names, $1.text); if (s != NULL) new_decl_spec(&$$, $1.text, $1.begin, s->flags); } | struct_or_union_specifier | enum_specifier ; type_qualifier : T_TYPE_QUALIFIER { new_decl_spec(&$$, $1.text, $1.begin, DS_NONE); } | T_DEFINE_NAME { /* This rule allows the nonterminal to scan #define * names as if they were type modifiers. */ Symbol *s; s = find_symbol(define_names, $1.text); if (s != NULL) new_decl_spec(&$$, $1.text, $1.begin, s->flags); } ; struct_or_union_specifier : struct_or_union any_id braces { char *s; if ((s = implied_typedef()) == 0) (void)sprintf(s = buf, "%.*s %.*s", TEXT_LEN, $1.text, TEXT_LEN, $2.text); new_decl_spec(&$$, s, $1.begin, DS_NONE); } | struct_or_union braces { char *s; if ((s = implied_typedef()) == 0) (void)sprintf(s = buf, "%.*s {}", TEXT_LEN, $1.text); new_decl_spec(&$$, s, $1.begin, DS_NONE); } | struct_or_union any_id { (void)sprintf(buf, "%.*s %.*s", TEXT_LEN, $1.text, TEXT_LEN, $2.text); new_decl_spec(&$$, buf, $1.begin, DS_NONE); } ; struct_or_union : T_STRUCT { imply_typedef($$.text); } | T_UNION { imply_typedef($$.text); } ; init_declarator_list : init_declarator { new_decl_list(&$$, $1); } | init_declarator_list ',' init_declarator { add_decl_list(&$$, &$1, $3); } ; init_declarator : declarator { if ($1->func_def != FUNC_NONE && func_params == NULL && func_style == FUNC_TRADITIONAL && cur_file->convert) { gen_func_declarator($1); fputs(cur_text(), cur_file->tmp_file); } cur_declarator = $$; } | declarator '=' { if ($1->func_def != FUNC_NONE && func_params == NULL && func_style == FUNC_TRADITIONAL && cur_file->convert) { gen_func_declarator($1); fputs(" =", cur_file->tmp_file); } } T_INITIALIZER ; enum_specifier : enumeration any_id braces { char *s; if ((s = implied_typedef()) == 0) (void)sprintf(s = buf, "enum %.*s", TEXT_LEN, $2.text); new_decl_spec(&$$, s, $1.begin, DS_NONE); } | enumeration braces { char *s; if ((s = implied_typedef()) == 0) (void)sprintf(s = buf, "%.*s {}", TEXT_LEN, $1.text); new_decl_spec(&$$, s, $1.begin, DS_NONE); } | enumeration any_id { (void)sprintf(buf, "enum %.*s", TEXT_LEN, $2.text); new_decl_spec(&$$, buf, $1.begin, DS_NONE); } ; enumeration : T_ENUM { imply_typedef("enum"); $$ = $1; } ; any_id : T_IDENTIFIER | T_TYPEDEF_NAME ; declarator : pointer direct_declarator { $$ = $2; (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, $1.text, TEXT_LEN, $$->text); free($$->text); $$->text = xstrdup(buf); $$->begin = $1.begin; $$->pointer = TRUE; } | direct_declarator ; direct_declarator : identifier_or_ref { $$ = new_declarator($1.text, $1.text, $1.begin); } | '(' declarator ')' { $$ = $2; (void)sprintf(buf, "(%.*s)", TEXT_LEN, $$->text); free($$->text); $$->text = xstrdup(buf); $$->begin = $1.begin; } | direct_declarator T_BRACKETS { $$ = $1; (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, $$->text, TEXT_LEN, $2.text); free($$->text); $$->text = xstrdup(buf); } | direct_declarator '(' parameter_type_list ')' { $$ = new_declarator("%s()", $1->name, $1->begin); $$->params = $3; $$->func_stack = $1; $$->head = ($1->func_stack == NULL) ? $$ : $1->head; $$->func_def = FUNC_ANSI; } | direct_declarator '(' opt_identifier_list ')' { $$ = new_declarator("%s()", $1->name, $1->begin); $$->params = $3; $$->func_stack = $1; $$->head = ($1->func_stack == NULL) ? $$ : $1->head; $$->func_def = FUNC_TRADITIONAL; } ; pointer : '*' opt_type_qualifiers { (void)sprintf($$.text, "*%.*s", TEXT_LEN, $2.text); $$.begin = $1.begin; } | '*' opt_type_qualifiers pointer { (void)sprintf($$.text, "*%.*s%.*s", TEXT_LEN, $2.text, TEXT_LEN, $3.text); $$.begin = $1.begin; } ; opt_type_qualifiers : /* empty */ { strcpy($$.text, ""); $$.begin = 0L; } | type_qualifier_list ; type_qualifier_list : type_qualifier { (void)sprintf($$.text, "%s ", $1.text); $$.begin = $1.begin; free($1.text); } | type_qualifier_list type_qualifier { (void)sprintf($$.text, "%.*s%.*s ", TEXT_LEN, $1.text, TEXT_LEN, $2.text); $$.begin = $1.begin; free($2.text); } ; parameter_type_list : parameter_list | parameter_list ',' T_ELLIPSIS { add_ident_list(&$$, &$1, "..."); } ; parameter_list : parameter_declaration { new_param_list(&$$, $1); } | parameter_list ',' parameter_declaration { add_param_list(&$$, &$1, $3); } ; parameter_declaration : decl_specifiers declarator { check_untagged(&$1); $$ = new_parameter(&$1, $2); } | decl_specifiers abs_declarator { check_untagged(&$1); $$ = new_parameter(&$1, $2); } | decl_specifiers { check_untagged(&$1); $$ = new_parameter(&$1, (Declarator *)0); } ; opt_identifier_list : /* empty */ { new_ident_list(&$$); } | identifier_list ; identifier_list : any_id { new_ident_list(&$$); add_ident_list(&$$, &$$, $1.text); } | identifier_list ',' any_id { add_ident_list(&$$, &$1, $3.text); } ; identifier_or_ref : any_id { $$ = $1; } | '&' any_id { #if OPT_LINTLIBRARY if (lintLibrary()) { /* Lint doesn't grok C++ ref variables */ $$ = $2; } else #endif (void)sprintf($$.text, "&%.*s", TEXT_LEN, $2.text); $$.begin = $1.begin; } ; abs_declarator : pointer { $$ = new_declarator($1.text, "", $1.begin); } | pointer direct_abs_declarator { $$ = $2; (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, $1.text, TEXT_LEN, $$->text); free($$->text); $$->text = xstrdup(buf); $$->begin = $1.begin; } | direct_abs_declarator ; direct_abs_declarator : '(' abs_declarator ')' { $$ = $2; (void)sprintf(buf, "(%.*s)", TEXT_LEN, $$->text); free($$->text); $$->text = xstrdup(buf); $$->begin = $1.begin; } | direct_abs_declarator T_BRACKETS { $$ = $1; (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, $$->text, TEXT_LEN, $2.text); free($$->text); $$->text = xstrdup(buf); } | T_BRACKETS { $$ = new_declarator($1.text, "", $1.begin); } | direct_abs_declarator '(' parameter_type_list ')' { $$ = new_declarator("%s()", "", $1->begin); $$->params = $3; $$->func_stack = $1; $$->head = ($1->func_stack == NULL) ? $$ : $1->head; $$->func_def = FUNC_ANSI; } | direct_abs_declarator '(' ')' { $$ = new_declarator("%s()", "", $1->begin); $$->func_stack = $1; $$->head = ($1->func_stack == NULL) ? $$ : $1->head; $$->func_def = FUNC_ANSI; } | '(' parameter_type_list ')' { Declarator *d; d = new_declarator("", "", $1.begin); $$ = new_declarator("%s()", "", $1.begin); $$->params = $2; $$->func_stack = d; $$->head = $$; $$->func_def = FUNC_ANSI; } | '(' ')' { Declarator *d; d = new_declarator("", "", $1.begin); $$ = new_declarator("%s()", "", $1.begin); $$->func_stack = d; $$->head = $$; $$->func_def = FUNC_ANSI; } ; %% /* lex.yy.c */ #define BEGIN yy_start = 1 + 2 * #define CPP1 1 #define INIT1 2 #define INIT2 3 #define CURLY 4 #define LEXYACC 5 #define ASM 6 #define CPP_INLINE 7 extern char *yytext; extern FILE *yyin, *yyout; static int curly; /* number of curly brace nesting levels */ static int ly_count; /* number of occurrences of %% */ static int inc_depth; /* include nesting level */ static SymbolTable *included_files; /* files already included */ static int yy_start = 0; /* start state number */ #define grammar_error(s) yaccError(s) static void yaccError (const char *msg) { func_params = NULL; put_error(); /* tell what line we're on, and what file */ fprintf(stderr, "%s at token '%s'\n", msg, yytext); } /* Initialize the table of type qualifier keywords recognized by the lexical * analyzer. */ void init_parser (void) { static const char *keywords[] = { "const", "restrict", "volatile", "interrupt", #ifdef vms "noshare", "readonly", #endif #if defined(MSDOS) || defined(OS2) "__cdecl", "__export", "__far", "__fastcall", "__fortran", "__huge", "__inline", "__interrupt", "__loadds", "__near", "__pascal", "__saveregs", "__segment", "__stdcall", "__syscall", "_cdecl", "_cs", "_ds", "_es", "_export", "_far", "_fastcall", "_fortran", "_huge", "_interrupt", "_loadds", "_near", "_pascal", "_saveregs", "_seg", "_segment", "_ss", "cdecl", "far", "huge", "near", "pascal", #ifdef OS2 "__far16", #endif #endif #ifdef __GNUC__ /* gcc aliases */ "__builtin_va_arg", "__builtin_va_list", "__const", "__const__", "__inline", "__inline__", "__restrict", "__restrict__", "__volatile", "__volatile__", #endif }; unsigned i; /* Initialize type qualifier table. */ type_qualifiers = new_symbol_table(); for (i = 0; i < sizeof(keywords)/sizeof(keywords[0]); ++i) { new_symbol(type_qualifiers, keywords[i], NULL, DS_NONE); } } /* Process the C source file. Write function prototypes to the standard * output. Convert function definitions and write the converted source * code to a temporary file. */ void process_file (FILE *infile, char *name) { char *s; if (strlen(name) > 2) { s = name + strlen(name) - 2; if (*s == '.') { ++s; if (*s == 'l' || *s == 'y') BEGIN LEXYACC; #if defined(MSDOS) || defined(OS2) if (*s == 'L' || *s == 'Y') BEGIN LEXYACC; #endif } } included_files = new_symbol_table(); typedef_names = new_symbol_table(); define_names = new_symbol_table(); inc_depth = -1; curly = 0; ly_count = 0; func_params = NULL; yyin = infile; include_file(strcpy(base_file, name), func_style != FUNC_NONE); if (file_comments) { #if OPT_LINTLIBRARY if (lintLibrary()) { put_blankline(stdout); begin_tracking(); } #endif put_string(stdout, "/* "); put_string(stdout, cur_file_name()); put_string(stdout, " */\n"); } yyparse(); free_symbol_table(define_names); free_symbol_table(typedef_names); free_symbol_table(included_files); } #ifdef NO_LEAKS void free_parser(void) { free_symbol_table (type_qualifiers); #ifdef FLEX_SCANNER if (yy_current_buffer != 0) yy_delete_buffer(yy_current_buffer); #endif } #endif byacc-20221106/test/calc_code_all.y0000644000000000000000000000410313564642527015441 0ustar rootroot%code { /* CODE-DEFAULT2 */ } %code { /* CODE-DEFAULT */ } %code requires { /* CODE-REQUIRES */ } %code provides { /* CODE-PROVIDES */ } %code top { /* CODE-TOP */ } %code provides { /* CODE-PROVIDES2 */ } %{ # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); %} %start list %token DIGIT LETTER %left '|' %left '&' %left '+' '-' %left '*' '/' '%' %left UMINUS /* supplies precedence for unary minus */ %% /* beginning of rules section */ list : /* empty */ | list stat '\n' | list error '\n' { yyerrok ; } ; stat : expr { printf("%d\n",$1);} | LETTER '=' expr { regs[$1] = $3; } ; expr : '(' expr ')' { $$ = $2; } | expr '+' expr { $$ = $1 + $3; } | expr '-' expr { $$ = $1 - $3; } | expr '*' expr { $$ = $1 * $3; } | expr '/' expr { $$ = $1 / $3; } | expr '%' expr { $$ = $1 % $3; } | expr '&' expr { $$ = $1 & $3; } | expr '|' expr { $$ = $1 | $3; } | '-' expr %prec UMINUS { $$ = - $2; } | LETTER { $$ = regs[$1]; } | number ; number: DIGIT { $$ = $1; base = ($1==0) ? 8 : 10; } | number DIGIT { $$ = base * $1 + $2; } ; %% /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } byacc-20221106/test/expr.oxout.h0000644000000000000000000000327214164143573015027 0ustar rootroot/* testing only */ typedef int yyyWAT; typedef int yyyWST; typedef int yyyFT; typedef struct yyyLexemes { char * lexeme; } yyyLexemes; typedef struct yyyAttribs { yyyLexemes yyyAttrb1; } yyyAttribs; typedef struct yyyParent { struct yyyGNT * noderef; struct yyyStackItem * stackref; } yyyParent; typedef struct yyyGNT { int * refCountList; int refCountListLen; struct yyyParent parent; int parentIsStack; int prodNum; int whichSym; struct yyyGNT ** cL; int cLlen; yyyAttribs yyyAttrbs; } yyyGNT; typedef int yyyRCT; typedef struct yyyStackItem { int wa; int whichSym; yyyGNT * node; long solvedSAlist; } yyySIT; #define yyyRSitem yyySIT yyyRSitem *yyyRSTop; yyyRSitem *yyyAfterRS; yyyRSitem *yyyRS; #undef yyparse #undef yylex #undef yyerror #undef yychar #undef yyval #undef yylval #undef yydebug #undef yynerrs #undef yyerrflag #undef yylhs #undef yylen #undef yydefred #undef yystos #undef yydgoto #undef yysindex #undef yyrindex #undef yygindex #undef yytable #undef yycheck #undef yyname #undef yyrule #undef yycindex #undef yyctable struct { int test_yycheck [256]; int test_yydefred [256]; int test_yydgoto [256]; int test_yygindex [256]; int test_yylen [256]; int test_yylhs [256]; int test_yyrindex [256]; int test_yysindex [256]; int test_yytable [256]; #define yycheck test_expr.test_yycheck #define yydefred test_expr.test_yydefred #define yydgoto test_expr.test_yydgoto #define yygindex test_expr.test_yygindex #define yylen test_expr.test_yylen #define yylhs test_expr.test_yylhs #define yyrindex test_expr.test_yyrindex #define yysindex test_expr.test_yysindex #define yytable test_expr.test_yytable } test_expr; byacc-20221106/test/yacc/0000755000000000000000000000000014164144476013441 5ustar rootrootbyacc-20221106/test/yacc/err_syntax12.output0000644000000000000000000000040612313420260017242 0ustar rootroot 0 $accept : S $end 1 S : error state 0 $accept : . S $end (0) error shift 1 . error S goto 2 state 1 S : error . (1) . reduce 1 state 2 $accept : S . $end (0) $end accept 3 terminals, 2 nonterminals 2 grammar rules, 3 states byacc-20221106/test/yacc/quote_calc2-s.tab.h0000644000000000000000000000025211704267405017012 0ustar rootroot#define OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 byacc-20221106/test/yacc/calc.output0000644000000000000000000001536010031623753015617 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states byacc-20221106/test/yacc/quote_calc3.output0000644000000000000000000002614511704143103017114 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr OP_ADD expr 8 | expr OP_SUB expr 9 | expr OP_MUL expr 10 | expr OP_DIV expr 11 | expr OP_MOD expr 12 | expr OP_AND expr 13 | expr '|' expr 14 | OP_SUB expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 OP_SUB shift 3 DIGIT shift 4 LETTER shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 expr : OP_SUB . expr (14) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 12 number goto 9 state 4 number : DIGIT . (17) . reduce 17 state 5 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 13 OP_ADD reduce 15 OP_SUB reduce 15 OP_MUL reduce 15 OP_DIV reduce 15 OP_MOD reduce 15 OP_AND reduce 15 '|' reduce 15 '\n' reduce 15 state 6 expr : '(' . expr ')' (6) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 OP_ADD reduce 16 OP_SUB reduce 16 OP_MUL reduce 16 OP_DIV reduce 16 OP_MOD reduce 16 OP_AND reduce 16 '|' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 expr : LETTER . (15) . reduce 15 12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD 12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB 12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL 12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV 12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD 12: shift/reduce conflict (shift 21, reduce 14) on OP_AND state 12 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) expr : OP_SUB expr . (14) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' reduce 14 '\n' reduce 14 ')' reduce 14 state 13 stat : LETTER '=' . expr (5) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 24 number goto 9 state 14 expr : '(' expr . ')' (6) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr OP_ADD . expr (7) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr OP_SUB . expr (8) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr OP_MUL . expr (9) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr OP_DIV . expr (10) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr OP_MOD . expr (11) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr OP_AND . expr (12) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '|' . expr (13) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD 26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB 26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL 26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV 26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD 26: shift/reduce conflict (shift 21, reduce 7) on OP_AND 26: shift/reduce conflict (shift 22, reduce 7) on '|' state 26 expr : expr . OP_ADD expr (7) expr : expr OP_ADD expr . (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 7 ')' reduce 7 27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD 27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB 27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL 27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV 27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD 27: shift/reduce conflict (shift 21, reduce 8) on OP_AND 27: shift/reduce conflict (shift 22, reduce 8) on '|' state 27 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr OP_SUB expr . (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 8 ')' reduce 8 28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD 28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB 28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL 28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV 28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD 28: shift/reduce conflict (shift 21, reduce 9) on OP_AND 28: shift/reduce conflict (shift 22, reduce 9) on '|' state 28 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr OP_MUL expr . (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 9 ')' reduce 9 29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD 29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB 29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL 29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV 29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD 29: shift/reduce conflict (shift 21, reduce 10) on OP_AND 29: shift/reduce conflict (shift 22, reduce 10) on '|' state 29 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr OP_DIV expr . (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 10 ')' reduce 10 30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD 30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB 30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL 30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV 30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD 30: shift/reduce conflict (shift 21, reduce 11) on OP_AND 30: shift/reduce conflict (shift 22, reduce 11) on '|' state 30 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr OP_MOD expr . (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 11 ')' reduce 11 31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD 31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB 31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL 31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV 31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD 31: shift/reduce conflict (shift 21, reduce 12) on OP_AND 31: shift/reduce conflict (shift 22, reduce 12) on '|' state 31 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr OP_AND expr . (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 12 ')' reduce 12 32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD 32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB 32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL 32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV 32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD 32: shift/reduce conflict (shift 21, reduce 13) on OP_AND state 32 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' reduce 13 '\n' reduce 13 ')' reduce 13 State 12 contains 6 shift/reduce conflicts. State 26 contains 7 shift/reduce conflicts. State 27 contains 7 shift/reduce conflicts. State 28 contains 7 shift/reduce conflicts. State 29 contains 7 shift/reduce conflicts. State 30 contains 7 shift/reduce conflicts. State 31 contains 7 shift/reduce conflicts. State 32 contains 6 shift/reduce conflicts. 28 terminals, 5 nonterminals 19 grammar rules, 33 states byacc-20221106/test/yacc/calc_code_imports.tab.h0000644000000000000000000000007013564732111020015 0ustar rootroot#define DIGIT 257 #define LETTER 258 #define UMINUS 259 byacc-20221106/test/yacc/code_error.tab.c0000644000000000000000000000243114051574134016466 0ustar rootroottypedef int YYINT; const YYINT error_lhs[] = { -1, 0, }; const YYINT error_len[] = { 2, 1, }; const YYINT error_defred[] = { 0, 1, 0, }; const YYINT error_dgoto[] = { 2, }; const YYINT error_sindex[] = { -256, 0, 0, }; const YYINT error_rindex[] = { 0, 0, 0, }; const YYINT error_gindex[] = { 0, }; const YYINT error_table[] = { 1, }; const YYINT error_check[] = { 256, }; #ifndef YYDEBUG #define YYDEBUG 0 #endif #if YYDEBUG const char *const error_name[] = { "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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol", }; const char *const error_rule[] = { "$accept : S", "S : error", }; #endif byacc-20221106/test/yacc/no_p_opt.output0000644000000000000000000000000013501466650016521 0ustar rootrootbyacc-20221106/test/yacc/quote_calc2-s.error0000644000000000000000000000004112313150003017121 0ustar rootrootYACC: 54 shift/reduce conflicts. byacc-20221106/test/yacc/empty.error0000644000000000000000000000000012315405303015621 0ustar rootrootbyacc-20221106/test/yacc/err_syntax6.tab.h0000644000000000000000000000000012313157616016623 0ustar rootrootbyacc-20221106/test/yacc/calc_code_all.output0000644000000000000000000001536013564732111017444 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states byacc-20221106/test/yacc/err_syntax20.output0000644000000000000000000000065012313666054017257 0ustar rootroot 0 $accept : expr $end 1 expr : '(' recur ')' state 0 $accept : . expr $end (0) '(' shift 1 . error expr goto 2 state 1 expr : '(' . recur ')' (1) recur shift 3 . error state 2 $accept : expr . $end (0) $end accept state 3 expr : '(' recur . ')' (1) ')' shift 4 . error state 4 expr : '(' recur ')' . (1) . reduce 1 5 terminals, 2 nonterminals 2 grammar rules, 5 states byacc-20221106/test/yacc/quote_calc.tab.h0000644000000000000000000000041211704141461016457 0ustar rootroot#define OP_ADD 257 #define ADD 258 #define OP_SUB 259 #define SUB 260 #define OP_MUL 261 #define MUL 262 #define OP_DIV 263 #define DIV 264 #define OP_MOD 265 #define MOD 266 #define OP_AND 267 #define AND 268 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 byacc-20221106/test/yacc/code_error.output0000644000000000000000000000040611403310250017020 0ustar rootroot 0 $accept : S $end 1 S : error state 0 $accept : . S $end (0) error shift 1 . error S goto 2 state 1 S : error . (1) . reduce 1 state 2 $accept : S . $end (0) $end accept 2 terminals, 2 nonterminals 2 grammar rules, 3 states byacc-20221106/test/yacc/err_syntax20.tab.c0000644000000000000000000003002114104034777016702 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse err_syntax20_parse #endif /* yyparse */ #ifndef yylex #define yylex err_syntax20_lex #endif /* yylex */ #ifndef yyerror #define yyerror err_syntax20_error #endif /* yyerror */ #ifndef yychar #define yychar err_syntax20_char #endif /* yychar */ #ifndef yyval #define yyval err_syntax20_val #endif /* yyval */ #ifndef yylval #define yylval err_syntax20_lval #endif /* yylval */ #ifndef yydebug #define yydebug err_syntax20_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs err_syntax20_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag err_syntax20_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs err_syntax20_lhs #endif /* yylhs */ #ifndef yylen #define yylen err_syntax20_len #endif /* yylen */ #ifndef yydefred #define yydefred err_syntax20_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto err_syntax20_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex err_syntax20_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex err_syntax20_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex err_syntax20_gindex #endif /* yygindex */ #ifndef yytable #define yytable err_syntax20_table #endif /* yytable */ #ifndef yycheck #define yycheck err_syntax20_check #endif /* yycheck */ #ifndef yyname #define yyname err_syntax20_name #endif /* yyname */ #ifndef yyrule #define yyrule err_syntax20_rule #endif /* yyrule */ #define YYPREFIX "err_syntax20_" #define YYPURE 0 #line 2 "err_syntax20.y" int yylex(void); static void yyerror(const char *); #line 104 "err_syntax20.tab.c" /* 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 recur 257 #define YYERRCODE 256 typedef int YYINT; static const YYINT err_syntax20_lhs[] = { -1, 0, }; static const YYINT err_syntax20_len[] = { 2, 3, }; static const YYINT err_syntax20_defred[] = { 0, 0, 0, 0, 1, }; static const YYINT err_syntax20_dgoto[] = { 2, }; static const YYINT err_syntax20_sindex[] = { -40, -256, 0, -39, 0, }; static const YYINT err_syntax20_rindex[] = { 0, 0, 0, 0, 0, }; static const YYINT err_syntax20_gindex[] = { 0, }; #define YYTABLESIZE 2 static const YYINT err_syntax20_table[] = { 1, 3, 4, }; static const YYINT err_syntax20_check[] = { 40, 257, 41, }; #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 257 #define YYUNDFTOKEN 260 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const err_syntax20_name[] = { "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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"recur",0,0, "illegal-symbol", }; static const char *const err_syntax20_rule[] = { "$accept : expr", "expr : '(' recur ')'", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 16 "err_syntax20.y" #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } #line 249 "err_syntax20.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 1: #line 12 "err_syntax20.y" { yystack.l_mark[-1].rechk = 3; } #line 451 "err_syntax20.tab.c" break; #line 453 "err_syntax20.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax9.tab.h0000644000000000000000000000000012313162325016617 0ustar rootrootbyacc-20221106/test/yacc/calc_code_top.output0000644000000000000000000001536013564732111017476 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states byacc-20221106/test/yacc/pure_calc.tab.h0000644000000000000000000000007011403310251016264 0ustar rootroot#define DIGIT 257 #define LETTER 258 #define UMINUS 259 byacc-20221106/test/yacc/quote_calc3.tab.h0000644000000000000000000000025211704127477016557 0ustar rootroot#define OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 byacc-20221106/test/yacc/pure_error.error0000644000000000000000000000000012313150003016637 0ustar rootrootbyacc-20221106/test/yacc/defines2.error0000644000000000000000000000000013501473524016172 0ustar rootrootbyacc-20221106/test/yacc/calc1.output0000644000000000000000000003571611704624176015717 0ustar rootroot 0 $accept : line $end 1 lines : 2 | lines line 3 line : dexp '\n' 4 | vexp '\n' 5 | DREG '=' dexp '\n' 6 | VREG '=' vexp '\n' 7 | error '\n' 8 dexp : CONST 9 | DREG 10 | dexp '+' dexp 11 | dexp '-' dexp 12 | dexp '*' dexp 13 | dexp '/' dexp 14 | '-' dexp 15 | '(' dexp ')' 16 vexp : dexp 17 | '(' dexp ',' dexp ')' 18 | VREG 19 | vexp '+' vexp 20 | dexp '+' vexp 21 | vexp '-' vexp 22 | dexp '-' vexp 23 | vexp '*' vexp 24 | dexp '*' vexp 25 | vexp '/' vexp 26 | dexp '/' vexp 27 | '-' vexp 28 | '(' vexp ')' state 0 $accept : . line $end (0) error shift 1 DREG shift 2 VREG shift 3 CONST shift 4 '-' shift 5 '(' shift 6 . error line goto 7 dexp goto 8 vexp goto 9 state 1 line : error . '\n' (7) '\n' shift 10 . error state 2 line : DREG . '=' dexp '\n' (5) dexp : DREG . (9) '=' shift 11 '+' reduce 9 '-' reduce 9 '*' reduce 9 '/' reduce 9 '\n' reduce 9 state 3 line : VREG . '=' vexp '\n' (6) vexp : VREG . (18) '=' shift 12 '+' reduce 18 '-' reduce 18 '*' reduce 18 '/' reduce 18 '\n' reduce 18 state 4 dexp : CONST . (8) . reduce 8 state 5 dexp : '-' . dexp (14) vexp : '-' . vexp (27) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 15 vexp goto 16 state 6 dexp : '(' . dexp ')' (15) vexp : '(' . dexp ',' dexp ')' (17) vexp : '(' . vexp ')' (28) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 17 vexp goto 18 state 7 $accept : line . $end (0) $end accept 8: shift/reduce conflict (shift 19, reduce 16) on '+' 8: shift/reduce conflict (shift 20, reduce 16) on '-' 8: shift/reduce conflict (shift 21, reduce 16) on '*' 8: shift/reduce conflict (shift 22, reduce 16) on '/' 8: shift/reduce conflict (shift 23, reduce 16) on '\n' state 8 line : dexp . '\n' (3) dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '+' shift 19 '-' shift 20 '*' shift 21 '/' shift 22 '\n' shift 23 state 9 line : vexp . '\n' (4) vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '+' shift 24 '-' shift 25 '*' shift 26 '/' shift 27 '\n' shift 28 . error state 10 line : error '\n' . (7) . reduce 7 state 11 line : DREG '=' . dexp '\n' (5) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 31 state 12 line : VREG '=' . vexp '\n' (6) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 33 state 13 dexp : DREG . (9) . reduce 9 state 14 vexp : VREG . (18) . reduce 18 15: reduce/reduce conflict (reduce 14, reduce 16) on '+' 15: reduce/reduce conflict (reduce 14, reduce 16) on '-' 15: reduce/reduce conflict (reduce 14, reduce 16) on '*' 15: reduce/reduce conflict (reduce 14, reduce 16) on '/' 15: reduce/reduce conflict (reduce 14, reduce 16) on '\n' 15: reduce/reduce conflict (reduce 14, reduce 16) on ')' state 15 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '-' dexp . (14) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) . reduce 14 state 16 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : '-' vexp . (27) . reduce 27 17: shift/reduce conflict (shift 19, reduce 16) on '+' 17: shift/reduce conflict (shift 20, reduce 16) on '-' 17: shift/reduce conflict (shift 21, reduce 16) on '*' 17: shift/reduce conflict (shift 22, reduce 16) on '/' 17: shift/reduce conflict (shift 34, reduce 16) on ')' state 17 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '(' dexp . ')' (15) vexp : dexp . (16) vexp : '(' dexp . ',' dexp ')' (17) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '+' shift 19 '-' shift 20 '*' shift 21 '/' shift 22 ')' shift 34 ',' shift 35 state 18 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : '(' vexp . ')' (28) '+' shift 24 '-' shift 25 '*' shift 26 '/' shift 27 ')' shift 36 . error state 19 dexp : dexp '+' . dexp (10) vexp : dexp '+' . vexp (20) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 37 vexp goto 38 state 20 dexp : dexp '-' . dexp (11) vexp : dexp '-' . vexp (22) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 39 vexp goto 40 state 21 dexp : dexp '*' . dexp (12) vexp : dexp '*' . vexp (24) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 41 vexp goto 42 state 22 dexp : dexp '/' . dexp (13) vexp : dexp '/' . vexp (26) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 43 vexp goto 44 state 23 line : dexp '\n' . (3) . reduce 3 state 24 vexp : vexp '+' . vexp (19) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 45 state 25 vexp : vexp '-' . vexp (21) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 46 state 26 vexp : vexp '*' . vexp (23) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 47 state 27 vexp : vexp '/' . vexp (25) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 48 state 28 line : vexp '\n' . (4) . reduce 4 state 29 dexp : '-' . dexp (14) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 49 state 30 dexp : '(' . dexp ')' (15) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 50 state 31 line : DREG '=' dexp . '\n' (5) dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) '+' shift 51 '-' shift 52 '*' shift 53 '/' shift 54 '\n' shift 55 . error 32: shift/reduce conflict (shift 19, reduce 16) on '+' 32: shift/reduce conflict (shift 20, reduce 16) on '-' 32: shift/reduce conflict (shift 21, reduce 16) on '*' 32: shift/reduce conflict (shift 22, reduce 16) on '/' state 32 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '+' shift 19 '-' shift 20 '*' shift 21 '/' shift 22 '\n' reduce 16 ')' reduce 16 state 33 line : VREG '=' vexp . '\n' (6) vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '+' shift 24 '-' shift 25 '*' shift 26 '/' shift 27 '\n' shift 56 . error state 34 dexp : '(' dexp ')' . (15) . reduce 15 state 35 vexp : '(' dexp ',' . dexp ')' (17) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 57 state 36 vexp : '(' vexp ')' . (28) . reduce 28 37: reduce/reduce conflict (reduce 10, reduce 16) on '+' 37: reduce/reduce conflict (reduce 10, reduce 16) on '-' 37: shift/reduce conflict (shift 21, reduce 16) on '*' 37: shift/reduce conflict (shift 22, reduce 16) on '/' 37: reduce/reduce conflict (reduce 10, reduce 16) on '\n' 37: reduce/reduce conflict (reduce 10, reduce 16) on ')' state 37 dexp : dexp . '+' dexp (10) dexp : dexp '+' dexp . (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '*' shift 21 '/' shift 22 '+' reduce 10 '-' reduce 10 '\n' reduce 10 ')' reduce 10 ',' reduce 10 state 38 vexp : vexp . '+' vexp (19) vexp : dexp '+' vexp . (20) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 20 '-' reduce 20 '\n' reduce 20 ')' reduce 20 39: reduce/reduce conflict (reduce 11, reduce 16) on '+' 39: reduce/reduce conflict (reduce 11, reduce 16) on '-' 39: shift/reduce conflict (shift 21, reduce 16) on '*' 39: shift/reduce conflict (shift 22, reduce 16) on '/' 39: reduce/reduce conflict (reduce 11, reduce 16) on '\n' 39: reduce/reduce conflict (reduce 11, reduce 16) on ')' state 39 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp '-' dexp . (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '*' shift 21 '/' shift 22 '+' reduce 11 '-' reduce 11 '\n' reduce 11 ')' reduce 11 ',' reduce 11 state 40 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : dexp '-' vexp . (22) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 22 '-' reduce 22 '\n' reduce 22 ')' reduce 22 41: reduce/reduce conflict (reduce 12, reduce 16) on '+' 41: reduce/reduce conflict (reduce 12, reduce 16) on '-' 41: reduce/reduce conflict (reduce 12, reduce 16) on '*' 41: reduce/reduce conflict (reduce 12, reduce 16) on '/' 41: reduce/reduce conflict (reduce 12, reduce 16) on '\n' 41: reduce/reduce conflict (reduce 12, reduce 16) on ')' state 41 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp '*' dexp . (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) . reduce 12 state 42 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : dexp '*' vexp . (24) vexp : vexp . '/' vexp (25) . reduce 24 43: reduce/reduce conflict (reduce 13, reduce 16) on '+' 43: reduce/reduce conflict (reduce 13, reduce 16) on '-' 43: reduce/reduce conflict (reduce 13, reduce 16) on '*' 43: reduce/reduce conflict (reduce 13, reduce 16) on '/' 43: reduce/reduce conflict (reduce 13, reduce 16) on '\n' 43: reduce/reduce conflict (reduce 13, reduce 16) on ')' state 43 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : dexp '/' dexp . (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) . reduce 13 state 44 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : dexp '/' vexp . (26) . reduce 26 state 45 vexp : vexp . '+' vexp (19) vexp : vexp '+' vexp . (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 19 '-' reduce 19 '\n' reduce 19 ')' reduce 19 state 46 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp '-' vexp . (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 21 '-' reduce 21 '\n' reduce 21 ')' reduce 21 state 47 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp '*' vexp . (23) vexp : vexp . '/' vexp (25) . reduce 23 state 48 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : vexp '/' vexp . (25) . reduce 25 state 49 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '-' dexp . (14) . reduce 14 state 50 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '(' dexp . ')' (15) '+' shift 51 '-' shift 52 '*' shift 53 '/' shift 54 ')' shift 34 . error state 51 dexp : dexp '+' . dexp (10) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 58 state 52 dexp : dexp '-' . dexp (11) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 59 state 53 dexp : dexp '*' . dexp (12) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 60 state 54 dexp : dexp '/' . dexp (13) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 61 state 55 line : DREG '=' dexp '\n' . (5) . reduce 5 state 56 line : VREG '=' vexp '\n' . (6) . reduce 6 state 57 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : '(' dexp ',' dexp . ')' (17) '+' shift 51 '-' shift 52 '*' shift 53 '/' shift 54 ')' shift 62 . error state 58 dexp : dexp . '+' dexp (10) dexp : dexp '+' dexp . (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) '*' shift 53 '/' shift 54 '+' reduce 10 '-' reduce 10 '\n' reduce 10 ')' reduce 10 state 59 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp '-' dexp . (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) '*' shift 53 '/' shift 54 '+' reduce 11 '-' reduce 11 '\n' reduce 11 ')' reduce 11 state 60 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp '*' dexp . (12) dexp : dexp . '/' dexp (13) . reduce 12 state 61 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : dexp '/' dexp . (13) . reduce 13 state 62 vexp : '(' dexp ',' dexp ')' . (17) . reduce 17 Rules never reduced: lines : (1) lines : lines line (2) State 8 contains 5 shift/reduce conflicts. State 15 contains 6 reduce/reduce conflicts. State 17 contains 5 shift/reduce conflicts. State 32 contains 4 shift/reduce conflicts. State 37 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts. State 39 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts. State 41 contains 6 reduce/reduce conflicts. State 43 contains 6 reduce/reduce conflicts. 15 terminals, 5 nonterminals 29 grammar rules, 63 states byacc-20221106/test/yacc/err_syntax10.output0000644000000000000000000000040612313416277017255 0ustar rootroot 0 $accept : S $end 1 S : error state 0 $accept : . S $end (0) error shift 1 . error S goto 2 state 1 S : error . (1) . reduce 1 state 2 $accept : S . $end (0) $end accept 5 terminals, 2 nonterminals 2 grammar rules, 3 states byacc-20221106/test/yacc/err_syntax18.error0000644000000000000000000000013112361053263017044 0ustar rootrootYACC: w - line 9 of "./err_syntax18.y", $4 references beyond the end of the current rule byacc-20221106/test/yacc/err_syntax1.error0000644000000000000000000000007512361053263016763 0ustar rootrootYACC: e - line 1 of "./err_syntax1.y", syntax error ?% { ^ byacc-20221106/test/yacc/quote_calc-s.tab.c0000644000000000000000000004544014104034777016734 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse quote_calc_parse #endif /* yyparse */ #ifndef yylex #define yylex quote_calc_lex #endif /* yylex */ #ifndef yyerror #define yyerror quote_calc_error #endif /* yyerror */ #ifndef yychar #define yychar quote_calc_char #endif /* yychar */ #ifndef yyval #define yyval quote_calc_val #endif /* yyval */ #ifndef yylval #define yylval quote_calc_lval #endif /* yylval */ #ifndef yydebug #define yydebug quote_calc_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs quote_calc_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag quote_calc_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs quote_calc_lhs #endif /* yylhs */ #ifndef yylen #define yylen quote_calc_len #endif /* yylen */ #ifndef yydefred #define yydefred quote_calc_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto quote_calc_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex quote_calc_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex quote_calc_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex quote_calc_gindex #endif /* yygindex */ #ifndef yytable #define yytable quote_calc_table #endif /* yytable */ #ifndef yycheck #define yycheck quote_calc_check #endif /* yycheck */ #ifndef yyname #define yyname quote_calc_name #endif /* yyname */ #ifndef yyrule #define yyrule quote_calc_rule #endif /* yyrule */ #define YYPREFIX "quote_calc_" #define YYPURE 0 #line 2 "quote_calc.y" # include # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); #line 111 "quote_calc-s.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 OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #define YYERRCODE 256 typedef int YYINT; static const YYINT quote_calc_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT quote_calc_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT quote_calc_defred[] = { 1, 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, 0, 0, }; static const YYINT quote_calc_dgoto[] = { 1, 7, 8, 9, }; static const YYINT quote_calc_sindex[] = { 0, -38, 5, -36, 0, -51, -36, 7, -121, -248, 0, 0, -243, -36, -22, 0, -36, -36, -36, -36, -36, -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, -121, -243, }; static const YYINT quote_calc_rindex[] = { 0, 0, 0, 0, 0, -9, 0, 0, 13, -10, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, -3, -2, -1, 1, 2, 3, -4, }; static const YYINT quote_calc_gindex[] = { 0, 0, 42, 0, }; #define YYTABLESIZE 258 static const YYINT quote_calc_table[] = { 16, 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, 10, 11, 12, 16, 10, 17, 15, 18, 25, 19, 23, 20, 4, 21, 5, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, }; static const YYINT quote_calc_check[] = { 10, 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, 10, 10, 10, 257, 10, 259, 10, 261, 41, 263, 269, 265, 10, 267, 10, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, 19, 20, 21, 22, -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, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, -1, 259, -1, 261, -1, 263, -1, 265, -1, 267, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, 259, -1, 259, -1, -1, -1, -1, -1, -1, -1, 269, 270, 269, 270, 257, -1, 259, -1, 261, -1, 263, -1, 265, -1, 267, -1, 257, 257, 259, 259, 261, 261, 263, 263, 265, 265, 267, 267, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 271 #define YYUNDFTOKEN 277 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const quote_calc_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV", "\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",0,0,0, 0,0,"illegal-symbol", }; static const char *const quote_calc_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr OP_ADD expr", "expr : expr OP_SUB expr", "expr : expr OP_MUL expr", "expr : expr OP_DIV expr", "expr : expr OP_MOD expr", "expr : expr OP_AND expr", "expr : expr '|' expr", "expr : OP_SUB expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 73 "quote_calc.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 371 "quote_calc-s.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 35 "quote_calc.y" { yyerrok ; } #line 573 "quote_calc-s.tab.c" break; case 4: #line 39 "quote_calc.y" { printf("%d\n",yystack.l_mark[0]);} #line 578 "quote_calc-s.tab.c" break; case 5: #line 41 "quote_calc.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 583 "quote_calc-s.tab.c" break; case 6: #line 45 "quote_calc.y" { yyval = yystack.l_mark[-1]; } #line 588 "quote_calc-s.tab.c" break; case 7: #line 47 "quote_calc.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 593 "quote_calc-s.tab.c" break; case 8: #line 49 "quote_calc.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 598 "quote_calc-s.tab.c" break; case 9: #line 51 "quote_calc.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 603 "quote_calc-s.tab.c" break; case 10: #line 53 "quote_calc.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 608 "quote_calc-s.tab.c" break; case 11: #line 55 "quote_calc.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 613 "quote_calc-s.tab.c" break; case 12: #line 57 "quote_calc.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 618 "quote_calc-s.tab.c" break; case 13: #line 59 "quote_calc.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 623 "quote_calc-s.tab.c" break; case 14: #line 61 "quote_calc.y" { yyval = - yystack.l_mark[0]; } #line 628 "quote_calc-s.tab.c" break; case 15: #line 63 "quote_calc.y" { yyval = regs[yystack.l_mark[0]]; } #line 633 "quote_calc-s.tab.c" break; case 17: #line 68 "quote_calc.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 638 "quote_calc-s.tab.c" break; case 18: #line 70 "quote_calc.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 643 "quote_calc-s.tab.c" break; #line 645 "quote_calc-s.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/calc_code_default.tab.h0000644000000000000000000000007013564732111017744 0ustar rootroot#define DIGIT 257 #define LETTER 258 #define UMINUS 259 byacc-20221106/test/yacc/stdin1.calc.c0000644000000000000000000004101614104034777015706 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #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 2 "(null)" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 31 "stdin1.calc.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 #if !(defined(yylex) || defined(YYSTATE)) int YYLEX_DECL(); #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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT yylhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT yylen[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT yydefred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; static const YYINT yydgoto[] = { 1, 7, 8, 9, }; static const YYINT yysindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT yyrindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; static const YYINT yygindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT yytable[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT yycheck[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #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,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", }; static const char *const yyrule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 66 "(null)" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 280 "stdin1.calc.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 28 "(null)" { yyerrok ; } #line 482 "stdin1.calc.c" break; case 4: #line 32 "(null)" { printf("%d\n",yystack.l_mark[0]);} #line 487 "stdin1.calc.c" break; case 5: #line 34 "(null)" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 492 "stdin1.calc.c" break; case 6: #line 38 "(null)" { yyval = yystack.l_mark[-1]; } #line 497 "stdin1.calc.c" break; case 7: #line 40 "(null)" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 502 "stdin1.calc.c" break; case 8: #line 42 "(null)" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 507 "stdin1.calc.c" break; case 9: #line 44 "(null)" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 512 "stdin1.calc.c" break; case 10: #line 46 "(null)" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 517 "stdin1.calc.c" break; case 11: #line 48 "(null)" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 522 "stdin1.calc.c" break; case 12: #line 50 "(null)" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 527 "stdin1.calc.c" break; case 13: #line 52 "(null)" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 532 "stdin1.calc.c" break; case 14: #line 54 "(null)" { yyval = - yystack.l_mark[0]; } #line 537 "stdin1.calc.c" break; case 15: #line 56 "(null)" { yyval = regs[yystack.l_mark[0]]; } #line 542 "stdin1.calc.c" break; case 17: #line 61 "(null)" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 547 "stdin1.calc.c" break; case 18: #line 63 "(null)" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 552 "stdin1.calc.c" break; #line 554 "stdin1.calc.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/no_b_opt.error0000644000000000000000000000236014102076731016302 0ustar rootrootYACC: error message Usage: YACC [options] filename Options: -b file_prefix set filename prefix (default "y.") -B create a backtracking parser -d write definitions (.tab.h) -h print this help-message -H defines_file write definitions to defines_file -i write interface (y.tab.i) -g write a graphical description -l suppress #line directives -L enable position processing, e.g., "%locations" -o output_file (default ".tab.c") -p symbol_prefix set symbol prefix (default "yy") -P create a reentrant parser, e.g., "%pure-parser" -r produce separate code and table files (y.code.c) -s suppress #define's for quoted names in %token lines -t add debugging support -v write description (y.output) -V show version information and exit Long options: --defines -H --file-prefix -b --graph -g --help -h --name-prefix -p --no-lines -l --output -o --version -V byacc-20221106/test/yacc/err_syntax17.tab.h0000644000000000000000000000000012313535512016700 0ustar rootrootbyacc-20221106/test/yacc/defines3.error0000644000000000000000000000000013501473524016173 0ustar rootrootbyacc-20221106/test/yacc/rename_debug.error0000644000000000000000000000000012321224045017077 0ustar rootrootbyacc-20221106/test/yacc/err_syntax20.error0000644000000000000000000000005012313666054017042 0ustar rootrootYACC: w - the symbol recur is undefined byacc-20221106/test/yacc/err_syntax10.error0000644000000000000000000000034412361053263017042 0ustar rootrootYACC: w - line 7 of "./err_syntax10.y", the type of '(' has been redeclared YACC: w - line 7 of "./err_syntax10.y", the type of '*' has been redeclared YACC: w - line 7 of "./err_syntax10.y", the type of '&' has been redeclared byacc-20221106/test/yacc/help.output0000644000000000000000000000000013501466650015634 0ustar rootrootbyacc-20221106/test/yacc/ok_syntax1.tab.h0000644000000000000000000000101214030125300016422 0ustar rootroot#define DIGIT 257 #define LETTER 258 #define OCT1 259 #define HEX1 260 #define HEX2 261 #define HEX3 262 #define STR1 263 #define STR2 265 #define BELL 266 #define BS 267 #define NL 268 #define LF 269 #define CR 270 #define TAB 271 #define VT 272 #define UMINUS 273 #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 typedef union YYSTYPE { char * cval; int ival; double dval; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ byacc-20221106/test/yacc/rename_debug.c0000644000000000000000000002304414104034777016221 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #line 17 "rename_debug.c" #include "rename_debug.i" #include "rename_debug.h" typedef int YYINT; static const YYINT yylhs[] = { -1, 0, }; static const YYINT yylen[] = { 2, 1, }; static const YYINT yydefred[] = { 0, 1, 0, }; static const YYINT yydgoto[] = { 2, }; static const YYINT yysindex[] = { -256, 0, 0, }; static const YYINT yyrindex[] = { 0, 0, 0, }; static const YYINT yygindex[] = { 0, }; #define YYTABLESIZE 0 static const YYINT yytable[] = { 1, }; static const YYINT yycheck[] = { 256, }; #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 1 #endif #define YYMAXTOKEN 256 #define YYUNDFTOKEN 259 #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,0, 0,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 : S", "S : error", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 12 "code_debug.y" #include #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } #line 132 "rename_debug.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { } 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax1.output0000644000000000000000000000000012313147311017151 0ustar rootrootbyacc-20221106/test/yacc/calc_code_requires.error0000644000000000000000000000000013564732111020305 0ustar rootrootbyacc-20221106/test/yacc/no_output2.error0000644000000000000000000000236014102076731016621 0ustar rootrootYACC: error message Usage: YACC [options] filename Options: -b file_prefix set filename prefix (default "y.") -B create a backtracking parser -d write definitions (.tab.h) -h print this help-message -H defines_file write definitions to defines_file -i write interface (y.tab.i) -g write a graphical description -l suppress #line directives -L enable position processing, e.g., "%locations" -o output_file (default ".tab.c") -p symbol_prefix set symbol prefix (default "yy") -P create a reentrant parser, e.g., "%pure-parser" -r produce separate code and table files (y.code.c) -s suppress #define's for quoted names in %token lines -t add debugging support -v write description (y.output) -V show version information and exit Long options: --defines -H --file-prefix -b --graph -g --help -h --name-prefix -p --no-lines -l --output -o --version -V byacc-20221106/test/yacc/err_syntax7a.output0000644000000000000000000000000012313161123017315 0ustar rootrootbyacc-20221106/test/yacc/no_output1.output0000644000000000000000000000000013501466650017021 0ustar rootrootbyacc-20221106/test/yacc/code_error.tab.h0000644000000000000000000000000011403311507016450 0ustar rootrootbyacc-20221106/test/yacc/err_syntax17.tab.c0000644000000000000000000000067213726503203016713 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/calc.tab.c0000644000000000000000000004333414104034777015257 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse calc_parse #endif /* yyparse */ #ifndef yylex #define yylex calc_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc_error #endif /* yyerror */ #ifndef yychar #define yychar calc_char #endif /* yychar */ #ifndef yyval #define yyval calc_val #endif /* yyval */ #ifndef yylval #define yylval calc_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc_len #endif /* yylen */ #ifndef yydefred #define yydefred calc_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto calc_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc_table #endif /* yytable */ #ifndef yycheck #define yycheck calc_check #endif /* yycheck */ #ifndef yyname #define yyname calc_name #endif /* yyname */ #ifndef yyrule #define yyrule calc_rule #endif /* yyrule */ #define YYPREFIX "calc_" #define YYPURE 0 #line 2 "calc.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 111 "calc.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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; static const YYINT calc_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; static const YYINT calc_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", }; static const char *const calc_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 66 "calc.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 356 "calc.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 28 "calc.y" { yyerrok ; } #line 558 "calc.tab.c" break; case 4: #line 32 "calc.y" { printf("%d\n",yystack.l_mark[0]);} #line 563 "calc.tab.c" break; case 5: #line 34 "calc.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 568 "calc.tab.c" break; case 6: #line 38 "calc.y" { yyval = yystack.l_mark[-1]; } #line 573 "calc.tab.c" break; case 7: #line 40 "calc.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 578 "calc.tab.c" break; case 8: #line 42 "calc.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 583 "calc.tab.c" break; case 9: #line 44 "calc.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 588 "calc.tab.c" break; case 10: #line 46 "calc.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 593 "calc.tab.c" break; case 11: #line 48 "calc.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 598 "calc.tab.c" break; case 12: #line 50 "calc.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 603 "calc.tab.c" break; case 13: #line 52 "calc.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 608 "calc.tab.c" break; case 14: #line 54 "calc.y" { yyval = - yystack.l_mark[0]; } #line 613 "calc.tab.c" break; case 15: #line 56 "calc.y" { yyval = regs[yystack.l_mark[0]]; } #line 618 "calc.tab.c" break; case 17: #line 61 "calc.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 623 "calc.tab.c" break; case 18: #line 63 "calc.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 628 "calc.tab.c" break; #line 630 "calc.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/code_calc.tab.h0000644000000000000000000000013612723666306016253 0ustar rootroot#define DIGIT 257 #define LETTER 258 #define UMINUS 259 #undef yytname #define yytname yyname byacc-20221106/test/yacc/error.tab.h0000644000000000000000000000000005342077626015476 0ustar rootrootbyacc-20221106/test/yacc/calc_code_all.error0000644000000000000000000000000013564732111017216 0ustar rootrootbyacc-20221106/test/yacc/quote_calc3.error0000644000000000000000000000004112313150003016662 0ustar rootrootYACC: 54 shift/reduce conflicts. byacc-20221106/test/yacc/ok_syntax1.output0000644000000000000000000001536012321233210017002 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '\n' reduce 15 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '\n' reduce 16 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 13 '|' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 12 '|' reduce 12 '&' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 7 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 8 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 42 terminals, 5 nonterminals 19 grammar rules, 33 states byacc-20221106/test/yacc/quote_calc-s.error0000644000000000000000000000004112313150003017037 0ustar rootrootYACC: 54 shift/reduce conflicts. byacc-20221106/test/yacc/err_syntax21.error0000644000000000000000000000006712361053263017046 0ustar rootrootYACC: e - line 12 of "./err_syntax21.y", $0 is untyped byacc-20221106/test/yacc/calc.tab.h0000644000000000000000000000007010031623656015245 0ustar rootroot#define DIGIT 257 #define LETTER 258 #define UMINUS 259 byacc-20221106/test/yacc/err_syntax22.tab.h0000644000000000000000000000000012313672523016700 0ustar rootrootbyacc-20221106/test/yacc/calc2.output0000644000000000000000000001536011404014137015674 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states byacc-20221106/test/yacc/calc_code_provides.error0000644000000000000000000000000013564732111020301 0ustar rootrootbyacc-20221106/test/yacc/calc1.tab.c0000644000000000000000000005511114104034777015334 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse calc1_parse #endif /* yyparse */ #ifndef yylex #define yylex calc1_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc1_error #endif /* yyerror */ #ifndef yychar #define yychar calc1_char #endif /* yychar */ #ifndef yyval #define yyval calc1_val #endif /* yyval */ #ifndef yylval #define yylval calc1_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc1_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc1_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc1_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc1_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc1_len #endif /* yylen */ #ifndef yydefred #define yydefred calc1_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto calc1_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc1_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc1_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc1_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc1_table #endif /* yytable */ #ifndef yycheck #define yycheck calc1_check #endif /* yycheck */ #ifndef yyname #define yyname calc1_name #endif /* yyname */ #ifndef yyrule #define yyrule calc1_rule #endif /* yyrule */ #define YYPREFIX "calc1_" #define YYPURE 0 #line 2 "calc1.y" /* http://dinosaur.compilertools.net/yacc/index.html */ #include #include #include #include typedef struct interval { double lo, hi; } INTERVAL; INTERVAL vmul(double, double, INTERVAL); INTERVAL vdiv(double, double, INTERVAL); extern int yylex(void); static void yyerror(const char *s); int dcheck(INTERVAL); double dreg[26]; INTERVAL vreg[26]; #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #line 31 "calc1.y" typedef union YYSTYPE { int ival; double dval; INTERVAL vval; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 141 "calc1.tab.c" /* 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 DREG 257 #define VREG 258 #define CONST 259 #define UMINUS 260 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc1_lhs[] = { -1, 3, 3, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; static const YYINT calc1_len[] = { 2, 0, 2, 2, 2, 4, 4, 2, 1, 1, 3, 3, 3, 3, 2, 3, 1, 5, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, }; static const YYINT calc1_defred[] = { 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 7, 0, 0, 9, 18, 14, 27, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 15, 0, 28, 0, 0, 0, 0, 12, 24, 13, 26, 0, 0, 23, 25, 14, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, 12, 13, 17, }; static const YYINT calc1_dgoto[] = { 7, 32, 9, 0, }; static const YYINT calc1_sindex[] = { -40, -8, -48, -47, 0, -37, -37, 0, 2, 17, 0, -34, -37, 0, 0, 0, 0, -25, 90, -37, -37, -37, -37, 0, -37, -37, -37, -37, 0, -34, -34, 25, 125, 31, 0, -34, 0, -11, 37, -11, 37, 0, 0, 0, 0, 37, 37, 0, 0, 0, 111, -34, -34, -34, -34, 0, 0, 118, 69, 69, 0, 0, 0, }; static const YYINT calc1_rindex[] = { 0, 0, 38, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9, 0, 0, 0, 0, 51, -3, 56, 61, 0, 0, 0, 0, 67, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 83, 0, 0, 0, }; static const YYINT calc1_gindex[] = { 0, 4, 124, 0, }; #define YYTABLESIZE 225 static const YYINT calc1_table[] = { 6, 16, 10, 6, 8, 5, 30, 20, 5, 15, 17, 29, 23, 11, 12, 31, 34, 21, 19, 35, 20, 0, 22, 37, 39, 41, 43, 28, 0, 0, 0, 21, 16, 49, 50, 55, 22, 0, 20, 57, 20, 56, 20, 0, 21, 19, 0, 20, 9, 22, 0, 0, 0, 0, 18, 58, 59, 60, 61, 26, 24, 10, 25, 0, 27, 0, 11, 53, 51, 0, 52, 22, 54, 26, 24, 0, 25, 19, 27, 26, 9, 9, 21, 9, 27, 9, 18, 18, 10, 18, 0, 18, 10, 11, 10, 10, 10, 11, 0, 11, 11, 11, 22, 0, 22, 0, 22, 0, 19, 0, 19, 53, 19, 21, 0, 21, 54, 21, 0, 10, 0, 10, 0, 10, 11, 0, 11, 0, 11, 16, 18, 36, 26, 24, 0, 25, 33, 27, 0, 0, 0, 0, 0, 38, 40, 42, 44, 0, 45, 46, 47, 48, 34, 53, 51, 0, 52, 0, 54, 62, 53, 51, 0, 52, 0, 54, 0, 21, 19, 0, 20, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 13, 14, 4, 13, 0, 4, }; static const YYINT calc1_check[] = { 40, 10, 10, 40, 0, 45, 40, 10, 45, 5, 6, 45, 10, 61, 61, 11, 41, 42, 43, 44, 45, -1, 47, 19, 20, 21, 22, 10, -1, -1, -1, 42, 41, 29, 30, 10, 47, -1, 41, 35, 43, 10, 45, -1, 42, 43, -1, 45, 10, 47, -1, -1, -1, -1, 10, 51, 52, 53, 54, 42, 43, 10, 45, -1, 47, -1, 10, 42, 43, -1, 45, 10, 47, 42, 43, -1, 45, 10, 47, 42, 42, 43, 10, 45, 47, 47, 42, 43, 10, 45, -1, 47, 41, 10, 43, 44, 45, 41, -1, 43, 44, 45, 41, -1, 43, -1, 45, -1, 41, -1, 43, 42, 45, 41, -1, 43, 47, 45, -1, 41, -1, 43, -1, 45, 41, -1, 43, -1, 45, 5, 6, 41, 42, 43, -1, 45, 12, 47, -1, -1, -1, -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, 41, 42, 43, -1, 45, -1, 47, 41, 42, 43, -1, 45, -1, 47, -1, 42, 43, -1, 45, -1, 47, -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, 256, 257, 258, 259, 257, 258, 259, 257, -1, 259, }; #define YYFINAL 7 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 260 #define YYUNDFTOKEN 266 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc1_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0, 0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"DREG","VREG","CONST","UMINUS",0,0,0,0,0,"illegal-symbol", }; static const char *const calc1_rule[] = { "$accept : line", "lines :", "lines : lines line", "line : dexp '\\n'", "line : vexp '\\n'", "line : DREG '=' dexp '\\n'", "line : VREG '=' vexp '\\n'", "line : error '\\n'", "dexp : CONST", "dexp : DREG", "dexp : dexp '+' dexp", "dexp : dexp '-' dexp", "dexp : dexp '*' dexp", "dexp : dexp '/' dexp", "dexp : '-' dexp", "dexp : '(' dexp ')'", "vexp : dexp", "vexp : '(' dexp ',' dexp ')'", "vexp : VREG", "vexp : vexp '+' vexp", "vexp : dexp '+' vexp", "vexp : vexp '-' vexp", "vexp : dexp '-' vexp", "vexp : vexp '*' vexp", "vexp : dexp '*' vexp", "vexp : vexp '/' vexp", "vexp : dexp '/' vexp", "vexp : '-' vexp", "vexp : '(' vexp ')'", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 176 "calc1.y" /* beginning of subroutines section */ #define BSZ 50 /* buffer size for floating point numbers */ /* lexical analysis */ static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { int c; while ((c = getchar()) == ' ') { /* skip over blanks */ } if (isupper(c)) { yylval.ival = c - 'A'; return (VREG); } if (islower(c)) { yylval.ival = c - 'a'; return (DREG); } if (isdigit(c) || c == '.') { /* gobble up digits, points, exponents */ char buf[BSZ + 1], *cp = buf; int dot = 0, expr = 0; for (; (cp - buf) < BSZ; ++cp, c = getchar()) { *cp = (char) c; if (isdigit(c)) continue; if (c == '.') { if (dot++ || expr) return ('.'); /* will cause syntax error */ continue; } if (c == 'e') { if (expr++) return ('e'); /* will cause syntax error */ continue; } /* end of number */ break; } *cp = '\0'; if ((cp - buf) >= BSZ) printf("constant too long: truncated\n"); else ungetc(c, stdin); /* push back last char read */ yylval.dval = atof(buf); return (CONST); } return (c); } static INTERVAL hilo(double a, double b, double c, double d) { /* returns the smallest interval containing a, b, c, and d */ /* used by *, / routines */ INTERVAL v; if (a > b) { v.hi = a; v.lo = b; } else { v.hi = b; v.lo = a; } if (c > d) { if (c > v.hi) v.hi = c; if (d < v.lo) v.lo = d; } else { if (d > v.hi) v.hi = d; if (c < v.lo) v.lo = c; } return (v); } INTERVAL vmul(double a, double b, INTERVAL v) { return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo)); } int dcheck(INTERVAL v) { if (v.hi >= 0. && v.lo <= 0.) { printf("divisor interval contains 0.\n"); return (1); } return (0); } INTERVAL vdiv(double a, double b, INTERVAL v) { return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo)); } #line 493 "calc1.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 57 "calc1.y" { (void) printf("%15.8f\n", yystack.l_mark[-1].dval); } #line 697 "calc1.tab.c" break; case 4: #line 61 "calc1.y" { (void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi); } #line 704 "calc1.tab.c" break; case 5: #line 65 "calc1.y" { dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval; } #line 711 "calc1.tab.c" break; case 6: #line 69 "calc1.y" { vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval; } #line 718 "calc1.tab.c" break; case 7: #line 73 "calc1.y" { yyerrok; } #line 725 "calc1.tab.c" break; case 9: #line 80 "calc1.y" { yyval.dval = dreg[yystack.l_mark[0].ival]; } #line 732 "calc1.tab.c" break; case 10: #line 84 "calc1.y" { yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval; } #line 739 "calc1.tab.c" break; case 11: #line 88 "calc1.y" { yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval; } #line 746 "calc1.tab.c" break; case 12: #line 92 "calc1.y" { yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval; } #line 753 "calc1.tab.c" break; case 13: #line 96 "calc1.y" { yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval; } #line 760 "calc1.tab.c" break; case 14: #line 100 "calc1.y" { yyval.dval = -yystack.l_mark[0].dval; } #line 767 "calc1.tab.c" break; case 15: #line 104 "calc1.y" { yyval.dval = yystack.l_mark[-1].dval; } #line 774 "calc1.tab.c" break; case 16: #line 110 "calc1.y" { yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval; } #line 781 "calc1.tab.c" break; case 17: #line 114 "calc1.y" { yyval.vval.lo = yystack.l_mark[-3].dval; yyval.vval.hi = yystack.l_mark[-1].dval; if ( yyval.vval.lo > yyval.vval.hi ) { (void) printf("interval out of order\n"); YYERROR; } } #line 794 "calc1.tab.c" break; case 18: #line 124 "calc1.y" { yyval.vval = vreg[yystack.l_mark[0].ival]; } #line 801 "calc1.tab.c" break; case 19: #line 128 "calc1.y" { yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi; yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo; } #line 809 "calc1.tab.c" break; case 20: #line 133 "calc1.y" { yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi; yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo; } #line 817 "calc1.tab.c" break; case 21: #line 138 "calc1.y" { yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo; yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi; } #line 825 "calc1.tab.c" break; case 22: #line 143 "calc1.y" { yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo; yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi; } #line 833 "calc1.tab.c" break; case 23: #line 148 "calc1.y" { yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); } #line 840 "calc1.tab.c" break; case 24: #line 152 "calc1.y" { yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); } #line 847 "calc1.tab.c" break; case 25: #line 156 "calc1.y" { if (dcheck(yystack.l_mark[0].vval)) YYERROR; yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); } #line 855 "calc1.tab.c" break; case 26: #line 161 "calc1.y" { if (dcheck ( yystack.l_mark[0].vval )) YYERROR; yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); } #line 863 "calc1.tab.c" break; case 27: #line 166 "calc1.y" { yyval.vval.hi = -yystack.l_mark[0].vval.lo; yyval.vval.lo = -yystack.l_mark[0].vval.hi; } #line 871 "calc1.tab.c" break; case 28: #line 171 "calc1.y" { yyval.vval = yystack.l_mark[-1].vval; } #line 878 "calc1.tab.c" break; #line 880 "calc1.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax4.output0000644000000000000000000000000012313154514017157 0ustar rootrootbyacc-20221106/test/yacc/nostdin.error0000644000000000000000000000233414102076731016162 0ustar rootrootUsage: YACC [options] filename Options: -b file_prefix set filename prefix (default "y.") -B create a backtracking parser -d write definitions (.tab.h) -h print this help-message -H defines_file write definitions to defines_file -i write interface (y.tab.i) -g write a graphical description -l suppress #line directives -L enable position processing, e.g., "%locations" -o output_file (default ".tab.c") -p symbol_prefix set symbol prefix (default "yy") -P create a reentrant parser, e.g., "%pure-parser" -r produce separate code and table files (y.code.c) -s suppress #define's for quoted names in %token lines -t add debugging support -v write description (y.output) -V show version information and exit Long options: --defines -H --file-prefix -b --graph -g --help -h --name-prefix -p --no-lines -l --output -o --version -V byacc-20221106/test/yacc/err_syntax7b.error0000644000000000000000000000013712361053263017132 0ustar rootrootYACC: e - line 6 of "./err_syntax7b.y", illegal character %token '\x.' ^ byacc-20221106/test/yacc/err_syntax7.tab.c0000644000000000000000000000067213726503203016632 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/err_syntax9.output0000644000000000000000000000000012313162325017163 0ustar rootrootbyacc-20221106/test/yacc/stdin1.error0000644000000000000000000000000013501464601015671 0ustar rootrootbyacc-20221106/test/yacc/pure_error.output0000644000000000000000000000040611403310251017062 0ustar rootroot 0 $accept : S $end 1 S : error state 0 $accept : . S $end (0) error shift 1 . error S goto 2 state 1 S : error . (1) . reduce 1 state 2 $accept : S . $end (0) $end accept 2 terminals, 2 nonterminals 2 grammar rules, 3 states byacc-20221106/test/yacc/grammar.tab.h0000644000000000000000000000140310031624574015772 0ustar rootroot#define T_IDENTIFIER 257 #define T_TYPEDEF_NAME 258 #define T_DEFINE_NAME 259 #define T_AUTO 260 #define T_EXTERN 261 #define T_REGISTER 262 #define T_STATIC 263 #define T_TYPEDEF 264 #define T_INLINE 265 #define T_EXTENSION 266 #define T_CHAR 267 #define T_DOUBLE 268 #define T_FLOAT 269 #define T_INT 270 #define T_VOID 271 #define T_LONG 272 #define T_SHORT 273 #define T_SIGNED 274 #define T_UNSIGNED 275 #define T_ENUM 276 #define T_STRUCT 277 #define T_UNION 278 #define T_Bool 279 #define T_Complex 280 #define T_Imaginary 281 #define T_TYPE_QUALIFIER 282 #define T_BRACKETS 283 #define T_LBRACE 284 #define T_MATCHRBRACE 285 #define T_ELLIPSIS 286 #define T_INITIALIZER 287 #define T_STRING_LITERAL 288 #define T_ASM 289 #define T_ASMARG 290 #define T_VA_DCL 291 byacc-20221106/test/yacc/defines3.calc.h0000644000000000000000000000007013501473645016205 0ustar rootroot#define DIGIT 257 #define LETTER 258 #define UMINUS 259 byacc-20221106/test/yacc/quote_calc.tab.c0000644000000000000000000004553414104034777016500 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse quote_calc_parse #endif /* yyparse */ #ifndef yylex #define yylex quote_calc_lex #endif /* yylex */ #ifndef yyerror #define yyerror quote_calc_error #endif /* yyerror */ #ifndef yychar #define yychar quote_calc_char #endif /* yychar */ #ifndef yyval #define yyval quote_calc_val #endif /* yyval */ #ifndef yylval #define yylval quote_calc_lval #endif /* yylval */ #ifndef yydebug #define yydebug quote_calc_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs quote_calc_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag quote_calc_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs quote_calc_lhs #endif /* yylhs */ #ifndef yylen #define yylen quote_calc_len #endif /* yylen */ #ifndef yydefred #define yydefred quote_calc_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto quote_calc_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex quote_calc_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex quote_calc_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex quote_calc_gindex #endif /* yygindex */ #ifndef yytable #define yytable quote_calc_table #endif /* yytable */ #ifndef yycheck #define yycheck quote_calc_check #endif /* yycheck */ #ifndef yyname #define yyname quote_calc_name #endif /* yyname */ #ifndef yyrule #define yyrule quote_calc_rule #endif /* yyrule */ #define YYPREFIX "quote_calc_" #define YYPURE 0 #line 2 "quote_calc.y" # include # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); #line 111 "quote_calc.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 OP_ADD 257 #define ADD 258 #define OP_SUB 259 #define SUB 260 #define OP_MUL 261 #define MUL 262 #define OP_DIV 263 #define DIV 264 #define OP_MOD 265 #define MOD 266 #define OP_AND 267 #define AND 268 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #define YYERRCODE 256 typedef int YYINT; static const YYINT quote_calc_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT quote_calc_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT quote_calc_defred[] = { 1, 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, 0, 0, }; static const YYINT quote_calc_dgoto[] = { 1, 7, 8, 9, }; static const YYINT quote_calc_sindex[] = { 0, -38, 5, -36, 0, -51, -36, 7, -121, -248, 0, 0, -243, -36, -22, 0, -36, -36, -36, -36, -36, -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, -121, -243, }; static const YYINT quote_calc_rindex[] = { 0, 0, 0, 0, 0, -9, 0, 0, 13, -10, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, -3, -2, -1, 1, 2, 3, -4, }; static const YYINT quote_calc_gindex[] = { 0, 0, 42, 0, }; #define YYTABLESIZE 258 static const YYINT quote_calc_table[] = { 16, 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, 10, 11, 12, 16, 10, 17, 15, 18, 25, 19, 23, 20, 4, 21, 5, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, }; static const YYINT quote_calc_check[] = { 10, 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, 10, 10, 10, 257, 10, 259, 10, 261, 41, 263, 269, 265, 10, 267, 10, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, 19, 20, 21, 22, -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, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, -1, 259, -1, 261, -1, 263, -1, 265, -1, 267, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, 259, -1, 259, -1, -1, -1, -1, -1, -1, -1, 269, 270, 269, 270, 257, -1, 259, -1, 261, -1, 263, -1, 265, -1, 267, -1, 257, 257, 259, 259, 261, 261, 263, 263, 265, 265, 267, 267, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 271 #define YYUNDFTOKEN 277 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const quote_calc_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV", "\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",0,0,0, 0,0,"illegal-symbol", }; static const char *const quote_calc_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr OP_ADD expr", "expr : expr OP_SUB expr", "expr : expr OP_MUL expr", "expr : expr OP_DIV expr", "expr : expr OP_MOD expr", "expr : expr OP_AND expr", "expr : expr '|' expr", "expr : OP_SUB expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 73 "quote_calc.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 377 "quote_calc.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 35 "quote_calc.y" { yyerrok ; } #line 579 "quote_calc.tab.c" break; case 4: #line 39 "quote_calc.y" { printf("%d\n",yystack.l_mark[0]);} #line 584 "quote_calc.tab.c" break; case 5: #line 41 "quote_calc.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 589 "quote_calc.tab.c" break; case 6: #line 45 "quote_calc.y" { yyval = yystack.l_mark[-1]; } #line 594 "quote_calc.tab.c" break; case 7: #line 47 "quote_calc.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 599 "quote_calc.tab.c" break; case 8: #line 49 "quote_calc.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 604 "quote_calc.tab.c" break; case 9: #line 51 "quote_calc.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 609 "quote_calc.tab.c" break; case 10: #line 53 "quote_calc.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 614 "quote_calc.tab.c" break; case 11: #line 55 "quote_calc.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 619 "quote_calc.tab.c" break; case 12: #line 57 "quote_calc.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 624 "quote_calc.tab.c" break; case 13: #line 59 "quote_calc.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 629 "quote_calc.tab.c" break; case 14: #line 61 "quote_calc.y" { yyval = - yystack.l_mark[0]; } #line 634 "quote_calc.tab.c" break; case 15: #line 63 "quote_calc.y" { yyval = regs[yystack.l_mark[0]]; } #line 639 "quote_calc.tab.c" break; case 17: #line 68 "quote_calc.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 644 "quote_calc.tab.c" break; case 18: #line 70 "quote_calc.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 649 "quote_calc.tab.c" break; #line 651 "quote_calc.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax7a.error0000644000000000000000000000014112361053263017124 0ustar rootrootYACC: e - line 6 of "./err_syntax7a.y", illegal character %token '\xfff' ^ byacc-20221106/test/yacc/err_syntax24.output0000644000000000000000000000000012313700403017233 0ustar rootrootbyacc-20221106/test/yacc/err_syntax8.tab.c0000644000000000000000000000067213726503203016633 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/defines1.output0000644000000000000000000000000013501473524016400 0ustar rootrootbyacc-20221106/test/yacc/no_code_c.output0000644000000000000000000000000013501466650016614 0ustar rootrootbyacc-20221106/test/yacc/err_syntax18.tab.c0000644000000000000000000003024614104034777016722 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse err_syntax18_parse #endif /* yyparse */ #ifndef yylex #define yylex err_syntax18_lex #endif /* yylex */ #ifndef yyerror #define yyerror err_syntax18_error #endif /* yyerror */ #ifndef yychar #define yychar err_syntax18_char #endif /* yychar */ #ifndef yyval #define yyval err_syntax18_val #endif /* yyval */ #ifndef yylval #define yylval err_syntax18_lval #endif /* yylval */ #ifndef yydebug #define yydebug err_syntax18_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs err_syntax18_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag err_syntax18_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs err_syntax18_lhs #endif /* yylhs */ #ifndef yylen #define yylen err_syntax18_len #endif /* yylen */ #ifndef yydefred #define yydefred err_syntax18_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto err_syntax18_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex err_syntax18_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex err_syntax18_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex err_syntax18_gindex #endif /* yygindex */ #ifndef yytable #define yytable err_syntax18_table #endif /* yytable */ #ifndef yycheck #define yycheck err_syntax18_check #endif /* yycheck */ #ifndef yyname #define yyname err_syntax18_name #endif /* yyname */ #ifndef yyrule #define yyrule err_syntax18_rule #endif /* yyrule */ #define YYPREFIX "err_syntax18_" #define YYPURE 0 #line 2 "err_syntax18.y" int yylex(void); static void yyerror(const char *); #line 104 "err_syntax18.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 YYERRCODE 256 typedef int YYINT; static const YYINT err_syntax18_lhs[] = { -1, 0, }; static const YYINT err_syntax18_len[] = { 2, 3, }; static const YYINT err_syntax18_defred[] = { 0, 0, 0, 0, 1, }; static const YYINT err_syntax18_dgoto[] = { 2, }; static const YYINT err_syntax18_sindex[] = { -40, -40, 0, -39, 0, }; static const YYINT err_syntax18_rindex[] = { 0, 0, 0, 0, 0, }; static const YYINT err_syntax18_gindex[] = { 2, }; #define YYTABLESIZE 3 static const YYINT err_syntax18_table[] = { 1, 0, 4, 3, }; static const YYINT err_syntax18_check[] = { 40, -1, 41, 1, }; #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 256 #define YYUNDFTOKEN 259 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const err_syntax18_name[] = { "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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol", }; static const char *const err_syntax18_rule[] = { "$accept : expr", "expr : '(' expr ')'", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 13 "err_syntax18.y" #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } #line 253 "err_syntax18.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 1: #line 9 "err_syntax18.y" { yyval = yystack.l_mark[1]; } #line 455 "err_syntax18.tab.c" break; #line 457 "err_syntax18.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/no_output.error0000644000000000000000000000005213501466650016540 0ustar rootrootYACC: f - cannot open "nosuchfile.output" byacc-20221106/test/yacc/err_syntax26.output0000644000000000000000000000000012313701125017237 0ustar rootrootbyacc-20221106/test/yacc/code_error.error0000644000000000000000000000000012313150003016576 0ustar rootrootbyacc-20221106/test/yacc/err_syntax25.tab.c0000644000000000000000000000067213726503203016712 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/calc_code_all.tab.c0000644000000000000000000004556414104034777017110 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 /* %code "top" block start */ #line 5 "calc_code_all.y" /* CODE-TOP */ /* %code "top" block end */ #line 22 "calc_code_all.tab.c" #ifndef yyparse #define yyparse calc_code_all_parse #endif /* yyparse */ #ifndef yylex #define yylex calc_code_all_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc_code_all_error #endif /* yyerror */ #ifndef yychar #define yychar calc_code_all_char #endif /* yychar */ #ifndef yyval #define yyval calc_code_all_val #endif /* yyval */ #ifndef yylval #define yylval calc_code_all_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc_code_all_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc_code_all_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc_code_all_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc_code_all_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc_code_all_len #endif /* yylen */ #ifndef yydefred #define yydefred calc_code_all_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto calc_code_all_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc_code_all_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc_code_all_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc_code_all_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc_code_all_table #endif /* yytable */ #ifndef yycheck #define yycheck calc_code_all_check #endif /* yycheck */ #ifndef yyname #define yyname calc_code_all_name #endif /* yyname */ #ifndef yyrule #define yyrule calc_code_all_rule #endif /* yyrule */ #define YYPREFIX "calc_code_all_" #define YYPURE 0 #line 9 "calc_code_all.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 117 "calc_code_all.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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc_code_all_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc_code_all_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc_code_all_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; static const YYINT calc_code_all_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc_code_all_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc_code_all_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; static const YYINT calc_code_all_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc_code_all_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc_code_all_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc_code_all_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", }; static const char *const calc_code_all_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* %code "requires" block start */ #line 3 "calc_code_all.y" /* CODE-REQUIRES */ /* %code "requires" block end */ #line 299 "calc_code_all.tab.c" /* 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; /* %code "provides" block start */ #line 4 "calc_code_all.y" /* CODE-PROVIDES */ #line 6 "calc_code_all.y" /* CODE-PROVIDES2 */ /* %code "provides" block end */ #line 333 "calc_code_all.tab.c" /* %code "" block start */ #line 1 "calc_code_all.y" /* CODE-DEFAULT2 */ #line 2 "calc_code_all.y" /* CODE-DEFAULT */ /* %code "" block end */ #line 341 "calc_code_all.tab.c" #line 73 "calc_code_all.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 384 "calc_code_all.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 35 "calc_code_all.y" { yyerrok ; } #line 586 "calc_code_all.tab.c" break; case 4: #line 39 "calc_code_all.y" { printf("%d\n",yystack.l_mark[0]);} #line 591 "calc_code_all.tab.c" break; case 5: #line 41 "calc_code_all.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 596 "calc_code_all.tab.c" break; case 6: #line 45 "calc_code_all.y" { yyval = yystack.l_mark[-1]; } #line 601 "calc_code_all.tab.c" break; case 7: #line 47 "calc_code_all.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 606 "calc_code_all.tab.c" break; case 8: #line 49 "calc_code_all.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 611 "calc_code_all.tab.c" break; case 9: #line 51 "calc_code_all.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 616 "calc_code_all.tab.c" break; case 10: #line 53 "calc_code_all.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 621 "calc_code_all.tab.c" break; case 11: #line 55 "calc_code_all.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 626 "calc_code_all.tab.c" break; case 12: #line 57 "calc_code_all.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 631 "calc_code_all.tab.c" break; case 13: #line 59 "calc_code_all.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 636 "calc_code_all.tab.c" break; case 14: #line 61 "calc_code_all.y" { yyval = - yystack.l_mark[0]; } #line 641 "calc_code_all.tab.c" break; case 15: #line 63 "calc_code_all.y" { yyval = regs[yystack.l_mark[0]]; } #line 646 "calc_code_all.tab.c" break; case 17: #line 68 "calc_code_all.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 651 "calc_code_all.tab.c" break; case 18: #line 70 "calc_code_all.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 656 "calc_code_all.tab.c" break; #line 658 "calc_code_all.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax13.tab.c0000644000000000000000000000067213726503203016707 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/err_syntax16.error0000644000000000000000000000012412361053263017044 0ustar rootrootYACC: e - line 14 of "./err_syntax16.y", a token appears on the lhs of a production byacc-20221106/test/yacc/rename_debug.output0000644000000000000000000000040612321224045017320 0ustar rootroot 0 $accept : S $end 1 S : error state 0 $accept : . S $end (0) error shift 1 . error S goto 2 state 1 S : error . (1) . reduce 1 state 2 $accept : S . $end (0) $end accept 2 terminals, 2 nonterminals 2 grammar rules, 3 states byacc-20221106/test/yacc/expr.oxout.output0000644000000000000000000000525213044507216017051 0ustar rootroot 0 $accept : yyyAugNonterm $end 1 $$1 : 2 yyyAugNonterm : $$1 s 3 s : expr 4 expr : expr '*' expr 5 | expr '+' expr 6 | expr '/' expr 7 | expr '-' expr 8 | '(' expr ')' 9 | ID 10 | CONST state 0 $accept : . yyyAugNonterm $end (0) $$1 : . (1) . reduce 1 yyyAugNonterm goto 1 $$1 goto 2 state 1 $accept : yyyAugNonterm . $end (0) $end accept state 2 yyyAugNonterm : $$1 . s (2) ID shift 3 CONST shift 4 '(' shift 5 . error s goto 6 expr goto 7 state 3 expr : ID . (9) . reduce 9 state 4 expr : CONST . (10) . reduce 10 state 5 expr : '(' . expr ')' (8) ID shift 3 CONST shift 4 '(' shift 5 . error expr goto 8 state 6 yyyAugNonterm : $$1 s . (2) . reduce 2 state 7 s : expr . (3) expr : expr . '*' expr (4) expr : expr . '+' expr (5) expr : expr . '/' expr (6) expr : expr . '-' expr (7) '+' shift 9 '-' shift 10 '*' shift 11 '/' shift 12 $end reduce 3 state 8 expr : expr . '*' expr (4) expr : expr . '+' expr (5) expr : expr . '/' expr (6) expr : expr . '-' expr (7) expr : '(' expr . ')' (8) '+' shift 9 '-' shift 10 '*' shift 11 '/' shift 12 ')' shift 13 . error state 9 expr : expr '+' . expr (5) ID shift 3 CONST shift 4 '(' shift 5 . error expr goto 14 state 10 expr : expr '-' . expr (7) ID shift 3 CONST shift 4 '(' shift 5 . error expr goto 15 state 11 expr : expr '*' . expr (4) ID shift 3 CONST shift 4 '(' shift 5 . error expr goto 16 state 12 expr : expr '/' . expr (6) ID shift 3 CONST shift 4 '(' shift 5 . error expr goto 17 state 13 expr : '(' expr ')' . (8) . reduce 8 state 14 expr : expr . '*' expr (4) expr : expr . '+' expr (5) expr : expr '+' expr . (5) expr : expr . '/' expr (6) expr : expr . '-' expr (7) '*' shift 11 '/' shift 12 $end reduce 5 '+' reduce 5 '-' reduce 5 ')' reduce 5 state 15 expr : expr . '*' expr (4) expr : expr . '+' expr (5) expr : expr . '/' expr (6) expr : expr . '-' expr (7) expr : expr '-' expr . (7) '*' shift 11 '/' shift 12 $end reduce 7 '+' reduce 7 '-' reduce 7 ')' reduce 7 state 16 expr : expr . '*' expr (4) expr : expr '*' expr . (4) expr : expr . '+' expr (5) expr : expr . '/' expr (6) expr : expr . '-' expr (7) . reduce 4 state 17 expr : expr . '*' expr (4) expr : expr . '+' expr (5) expr : expr . '/' expr (6) expr : expr '/' expr . (6) expr : expr . '-' expr (7) '*' shift 11 $end reduce 6 '+' reduce 6 '-' reduce 6 '/' reduce 6 ')' reduce 6 10 terminals, 5 nonterminals 11 grammar rules, 18 states byacc-20221106/test/yacc/err_syntax26.tab.c0000644000000000000000000000067213726503203016713 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/big_l.output0000644000000000000000000000000013501466650015760 0ustar rootrootbyacc-20221106/test/yacc/err_syntax5.output0000644000000000000000000000000012313155325017161 0ustar rootrootbyacc-20221106/test/yacc/no_output.output0000644000000000000000000000000013501466650016740 0ustar rootrootbyacc-20221106/test/yacc/err_syntax13.error0000644000000000000000000000011112361053263017035 0ustar rootrootYACC: e - line 7 of "./err_syntax13.y", the start symbol text is a token byacc-20221106/test/yacc/err_syntax8a.tab.c0000644000000000000000000000067213726503203016774 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/nostdin.output0000644000000000000000000000000013501466650016362 0ustar rootrootbyacc-20221106/test/yacc/big_b.error0000644000000000000000000000243414102076731015547 0ustar rootrootYACC: w - -B flag unsupported, reconfigure with --enable-btyacc Usage: YACC [options] filename Options: -b file_prefix set filename prefix (default "y.") -B create a backtracking parser -d write definitions (.tab.h) -h print this help-message -H defines_file write definitions to defines_file -i write interface (y.tab.i) -g write a graphical description -l suppress #line directives -L enable position processing, e.g., "%locations" -o output_file (default ".tab.c") -p symbol_prefix set symbol prefix (default "yy") -P create a reentrant parser, e.g., "%pure-parser" -r produce separate code and table files (y.code.c) -s suppress #define's for quoted names in %token lines -t add debugging support -v write description (y.output) -V show version information and exit Long options: --defines -H --file-prefix -b --graph -g --help -h --name-prefix -p --no-lines -l --output -o --version -V byacc-20221106/test/yacc/pure_error.tab.h0000644000000000000000000000000011403310251016504 0ustar rootrootbyacc-20221106/test/yacc/quote_calc4.tab.h0000644000000000000000000000025211704143103016540 0ustar rootroot#define OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 byacc-20221106/test/yacc/defines2.output0000644000000000000000000000000013501473524016401 0ustar rootrootbyacc-20221106/test/yacc/calc2.tab.c0000644000000000000000000004434614104034777015345 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse calc2_parse #endif /* yyparse */ #ifndef yylex #define yylex calc2_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc2_error #endif /* yyerror */ #ifndef yychar #define yychar calc2_char #endif /* yychar */ #ifndef yyval #define yyval calc2_val #endif /* yyval */ #ifndef yylval #define yylval calc2_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc2_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc2_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc2_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc2_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc2_len #endif /* yylen */ #ifndef yydefred #define yydefred calc2_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto calc2_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc2_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc2_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc2_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc2_table #endif /* yytable */ #ifndef yycheck #define yycheck calc2_check #endif /* yycheck */ #ifndef yyname #define yyname calc2_name #endif /* yyname */ #ifndef yyrule #define yyrule calc2_rule #endif /* yyrule */ #define YYPREFIX "calc2_" #define YYPURE 0 #line 7 "calc2.y" # include # include #ifdef YYBISON #define YYLEX_PARAM base #define YYLEX_DECL() yylex(int *YYLEX_PARAM) #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) int YYLEX_DECL(); static void YYERROR_DECL(); #endif #line 113 "calc2.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(int regs[26], int *base) #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(int *base) # define YYLEX yylex(base) #endif /* Parameters sent to yyerror. */ #ifndef YYERROR_DECL #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) #endif #ifndef YYERROR_CALL #define YYERROR_CALL(msg) yyerror(regs, base, msg) #endif extern int YYPARSE_DECL(); #define DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc2_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc2_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc2_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; static const YYINT calc2_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc2_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc2_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; static const YYINT calc2_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc2_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc2_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc2_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", }; static const char *const calc2_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 73 "calc2.y" /* start of programs */ #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main (void) { int regs[26]; int base = 10; while(!feof(stdin)) { yyparse(regs, &base); } return 0; } #define UNUSED(x) ((void)(x)) static void YYERROR_DECL() { UNUSED(regs); /* %parse-param regs is not actually used here */ UNUSED(base); /* %parse-param base is not actually used here */ fprintf(stderr, "%s\n", s); } int YYLEX_DECL() { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = (c - '0') % (*base); return ( DIGIT ); } return( c ); } #line 369 "calc2.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 35 "calc2.y" { yyerrok ; } #line 571 "calc2.tab.c" break; case 4: #line 39 "calc2.y" { printf("%d\n",yystack.l_mark[0]);} #line 576 "calc2.tab.c" break; case 5: #line 41 "calc2.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 581 "calc2.tab.c" break; case 6: #line 45 "calc2.y" { yyval = yystack.l_mark[-1]; } #line 586 "calc2.tab.c" break; case 7: #line 47 "calc2.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 591 "calc2.tab.c" break; case 8: #line 49 "calc2.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 596 "calc2.tab.c" break; case 9: #line 51 "calc2.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 601 "calc2.tab.c" break; case 10: #line 53 "calc2.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 606 "calc2.tab.c" break; case 11: #line 55 "calc2.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 611 "calc2.tab.c" break; case 12: #line 57 "calc2.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 616 "calc2.tab.c" break; case 13: #line 59 "calc2.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 621 "calc2.tab.c" break; case 14: #line 61 "calc2.y" { yyval = - yystack.l_mark[0]; } #line 626 "calc2.tab.c" break; case 15: #line 63 "calc2.y" { yyval = regs[yystack.l_mark[0]]; } #line 631 "calc2.tab.c" break; case 17: #line 68 "calc2.y" { yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; } #line 636 "calc2.tab.c" break; case 18: #line 70 "calc2.y" { yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 641 "calc2.tab.c" break; #line 643 "calc2.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax2.output0000644000000000000000000000000012313152756017163 0ustar rootrootbyacc-20221106/test/yacc/err_syntax4.error0000644000000000000000000000007112361053263016762 0ustar rootrootYACC: e - line 1 of "./err_syntax4.y", unmatched %{ %{ ^ byacc-20221106/test/yacc/calc_code_top.tab.h0000644000000000000000000000007013564732111017122 0ustar rootroot#define DIGIT 257 #define LETTER 258 #define UMINUS 259 byacc-20221106/test/yacc/big_b.output0000644000000000000000000000000013501466650015746 0ustar rootrootbyacc-20221106/test/yacc/err_syntax14.output0000644000000000000000000000000012313421024017231 0ustar rootrootbyacc-20221106/test/yacc/no_opts.output0000644000000000000000000000000013501466650016365 0ustar rootrootbyacc-20221106/test/yacc/defines2.calc.c0000644000000000000000000004064214104034777016207 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #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 2 "calc.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 31 "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 #if !(defined(yylex) || defined(YYSTATE)) int YYLEX_DECL(); #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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT yylhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT yylen[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT yydefred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; static const YYINT yydgoto[] = { 1, 7, 8, 9, }; static const YYINT yysindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT yyrindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; static const YYINT yygindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT yytable[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT yycheck[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #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,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", }; static const char *const yyrule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 66 "calc.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 280 "y.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 28 "calc.y" { yyerrok ; } #line 482 "y.tab.c" break; case 4: #line 32 "calc.y" { printf("%d\n",yystack.l_mark[0]);} #line 487 "y.tab.c" break; case 5: #line 34 "calc.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 492 "y.tab.c" break; case 6: #line 38 "calc.y" { yyval = yystack.l_mark[-1]; } #line 497 "y.tab.c" break; case 7: #line 40 "calc.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 502 "y.tab.c" break; case 8: #line 42 "calc.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 507 "y.tab.c" break; case 9: #line 44 "calc.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 512 "y.tab.c" break; case 10: #line 46 "calc.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 517 "y.tab.c" break; case 11: #line 48 "calc.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 522 "y.tab.c" break; case 12: #line 50 "calc.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 527 "y.tab.c" break; case 13: #line 52 "calc.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 532 "y.tab.c" break; case 14: #line 54 "calc.y" { yyval = - yystack.l_mark[0]; } #line 537 "y.tab.c" break; case 15: #line 56 "calc.y" { yyval = regs[yystack.l_mark[0]]; } #line 542 "y.tab.c" break; case 17: #line 61 "calc.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 547 "y.tab.c" break; case 18: #line 63 "calc.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 552 "y.tab.c" break; #line 554 "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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax14.error0000644000000000000000000000017312361053263017046 0ustar rootrootYACC: w - line 7 of "./err_syntax14.y", the start symbol has been redeclared YACC: e - the start symbol text2 is undefined byacc-20221106/test/yacc/err_syntax5.tab.c0000644000000000000000000000067213726503203016630 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/quote_calc4.error0000644000000000000000000000004112313150003016663 0ustar rootrootYACC: 54 shift/reduce conflicts. byacc-20221106/test/yacc/pure_calc.error0000644000000000000000000000000012313150003016410 0ustar rootrootbyacc-20221106/test/yacc/calc_code_default.output0000644000000000000000000001536013564732111020320 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states byacc-20221106/test/yacc/pure_calc.output0000644000000000000000000001536011403310251016640 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states byacc-20221106/test/yacc/quote_calc2-s.output0000644000000000000000000002560511704267405017367 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr "ADD" expr 8 | expr "SUB" expr 9 | expr "MUL" expr 10 | expr "DIV" expr 11 | expr "MOD" expr 12 | expr "AND" expr 13 | expr '|' expr 14 | "SUB" expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 "SUB" shift 3 DIGIT shift 4 LETTER shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 expr : "SUB" . expr (14) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 12 number goto 9 state 4 number : DIGIT . (17) . reduce 17 state 5 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 13 "ADD" reduce 15 "SUB" reduce 15 "MUL" reduce 15 "DIV" reduce 15 "MOD" reduce 15 "AND" reduce 15 '|' reduce 15 '\n' reduce 15 state 6 expr : '(' . expr ')' (6) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 "ADD" reduce 16 "SUB" reduce 16 "MUL" reduce 16 "DIV" reduce 16 "MOD" reduce 16 "AND" reduce 16 '|' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 expr : LETTER . (15) . reduce 15 12: shift/reduce conflict (shift 16, reduce 14) on "ADD" 12: shift/reduce conflict (shift 17, reduce 14) on "SUB" 12: shift/reduce conflict (shift 18, reduce 14) on "MUL" 12: shift/reduce conflict (shift 19, reduce 14) on "DIV" 12: shift/reduce conflict (shift 20, reduce 14) on "MOD" 12: shift/reduce conflict (shift 21, reduce 14) on "AND" state 12 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) expr : "SUB" expr . (14) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' reduce 14 '\n' reduce 14 ')' reduce 14 state 13 stat : LETTER '=' . expr (5) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 24 number goto 9 state 14 expr : '(' expr . ')' (6) expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr "ADD" . expr (7) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr "SUB" . expr (8) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr "MUL" . expr (9) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr "DIV" . expr (10) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr "MOD" . expr (11) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr "AND" . expr (12) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '|' . expr (13) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 26: shift/reduce conflict (shift 16, reduce 7) on "ADD" 26: shift/reduce conflict (shift 17, reduce 7) on "SUB" 26: shift/reduce conflict (shift 18, reduce 7) on "MUL" 26: shift/reduce conflict (shift 19, reduce 7) on "DIV" 26: shift/reduce conflict (shift 20, reduce 7) on "MOD" 26: shift/reduce conflict (shift 21, reduce 7) on "AND" 26: shift/reduce conflict (shift 22, reduce 7) on '|' state 26 expr : expr . "ADD" expr (7) expr : expr "ADD" expr . (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 7 ')' reduce 7 27: shift/reduce conflict (shift 16, reduce 8) on "ADD" 27: shift/reduce conflict (shift 17, reduce 8) on "SUB" 27: shift/reduce conflict (shift 18, reduce 8) on "MUL" 27: shift/reduce conflict (shift 19, reduce 8) on "DIV" 27: shift/reduce conflict (shift 20, reduce 8) on "MOD" 27: shift/reduce conflict (shift 21, reduce 8) on "AND" 27: shift/reduce conflict (shift 22, reduce 8) on '|' state 27 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr "SUB" expr . (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 8 ')' reduce 8 28: shift/reduce conflict (shift 16, reduce 9) on "ADD" 28: shift/reduce conflict (shift 17, reduce 9) on "SUB" 28: shift/reduce conflict (shift 18, reduce 9) on "MUL" 28: shift/reduce conflict (shift 19, reduce 9) on "DIV" 28: shift/reduce conflict (shift 20, reduce 9) on "MOD" 28: shift/reduce conflict (shift 21, reduce 9) on "AND" 28: shift/reduce conflict (shift 22, reduce 9) on '|' state 28 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr "MUL" expr . (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 9 ')' reduce 9 29: shift/reduce conflict (shift 16, reduce 10) on "ADD" 29: shift/reduce conflict (shift 17, reduce 10) on "SUB" 29: shift/reduce conflict (shift 18, reduce 10) on "MUL" 29: shift/reduce conflict (shift 19, reduce 10) on "DIV" 29: shift/reduce conflict (shift 20, reduce 10) on "MOD" 29: shift/reduce conflict (shift 21, reduce 10) on "AND" 29: shift/reduce conflict (shift 22, reduce 10) on '|' state 29 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr "DIV" expr . (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 10 ')' reduce 10 30: shift/reduce conflict (shift 16, reduce 11) on "ADD" 30: shift/reduce conflict (shift 17, reduce 11) on "SUB" 30: shift/reduce conflict (shift 18, reduce 11) on "MUL" 30: shift/reduce conflict (shift 19, reduce 11) on "DIV" 30: shift/reduce conflict (shift 20, reduce 11) on "MOD" 30: shift/reduce conflict (shift 21, reduce 11) on "AND" 30: shift/reduce conflict (shift 22, reduce 11) on '|' state 30 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr "MOD" expr . (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 11 ')' reduce 11 31: shift/reduce conflict (shift 16, reduce 12) on "ADD" 31: shift/reduce conflict (shift 17, reduce 12) on "SUB" 31: shift/reduce conflict (shift 18, reduce 12) on "MUL" 31: shift/reduce conflict (shift 19, reduce 12) on "DIV" 31: shift/reduce conflict (shift 20, reduce 12) on "MOD" 31: shift/reduce conflict (shift 21, reduce 12) on "AND" 31: shift/reduce conflict (shift 22, reduce 12) on '|' state 31 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr "AND" expr . (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 12 ')' reduce 12 32: shift/reduce conflict (shift 16, reduce 13) on "ADD" 32: shift/reduce conflict (shift 17, reduce 13) on "SUB" 32: shift/reduce conflict (shift 18, reduce 13) on "MUL" 32: shift/reduce conflict (shift 19, reduce 13) on "DIV" 32: shift/reduce conflict (shift 20, reduce 13) on "MOD" 32: shift/reduce conflict (shift 21, reduce 13) on "AND" state 32 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' reduce 13 '\n' reduce 13 ')' reduce 13 State 12 contains 6 shift/reduce conflicts. State 26 contains 7 shift/reduce conflicts. State 27 contains 7 shift/reduce conflicts. State 28 contains 7 shift/reduce conflicts. State 29 contains 7 shift/reduce conflicts. State 30 contains 7 shift/reduce conflicts. State 31 contains 7 shift/reduce conflicts. State 32 contains 6 shift/reduce conflicts. 28 terminals, 5 nonterminals 19 grammar rules, 33 states byacc-20221106/test/yacc/quote_calc2.error0000644000000000000000000000004112313150003016661 0ustar rootrootYACC: 54 shift/reduce conflicts. byacc-20221106/test/yacc/pure_calc.tab.c0000644000000000000000000004451714104034777016316 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse calc_parse #endif /* yyparse */ #ifndef yylex #define yylex calc_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc_error #endif /* yyerror */ #ifndef yychar #define yychar calc_char #endif /* yychar */ #ifndef yyval #define yyval calc_val #endif /* yyval */ #ifndef yylval #define yylval calc_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc_len #endif /* yylen */ #ifndef yydefred #define yydefred calc_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto calc_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc_table #endif /* yytable */ #ifndef yycheck #define yycheck calc_check #endif /* yycheck */ #ifndef yyname #define yyname calc_name #endif /* yyname */ #ifndef yyrule #define yyrule calc_rule #endif /* yyrule */ #define YYPREFIX "calc_" #define YYPURE 1 #line 2 "pure_calc.y" # include # include int regs[26]; int base; #ifdef YYBISON #define YYSTYPE int #define YYLEX_PARAM &yylval #define YYLEX_DECL() yylex(YYSTYPE *yylval) #define YYERROR_DECL() yyerror(const char *s) int YYLEX_DECL(); static void YYERROR_DECL(); #endif #line 117 "pure_calc.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 # ifdef YYLEX_PARAM_TYPE # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM) # else # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM) # endif # define YYLEX yylex(&yylval, YYLEX_PARAM) #else # define YYLEX_DECL() yylex(YYSTYPE *yylval) # define YYLEX yylex(&yylval) #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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; static const YYINT calc_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; static const YYINT calc_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", }; static const char *const calc_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif /* 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; #line 72 "pure_calc.y" /* start of programs */ #ifdef YYBYACC static int YYLEX_DECL(); #endif int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void YYERROR_DECL() { fprintf(stderr, "%s\n", s); } int YYLEX_DECL() { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { *yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { *yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 362 "pure_calc.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* variables for the parser stack */ YYSTACKDATA yystack; 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 memset(&yyval, 0, sizeof(yyval)); memset(&yylval, 0, sizeof(yylval)); /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 34 "pure_calc.y" { yyerrok ; } #line 575 "pure_calc.tab.c" break; case 4: #line 38 "pure_calc.y" { printf("%d\n",yystack.l_mark[0]);} #line 580 "pure_calc.tab.c" break; case 5: #line 40 "pure_calc.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 585 "pure_calc.tab.c" break; case 6: #line 44 "pure_calc.y" { yyval = yystack.l_mark[-1]; } #line 590 "pure_calc.tab.c" break; case 7: #line 46 "pure_calc.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 595 "pure_calc.tab.c" break; case 8: #line 48 "pure_calc.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 600 "pure_calc.tab.c" break; case 9: #line 50 "pure_calc.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 605 "pure_calc.tab.c" break; case 10: #line 52 "pure_calc.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 610 "pure_calc.tab.c" break; case 11: #line 54 "pure_calc.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 615 "pure_calc.tab.c" break; case 12: #line 56 "pure_calc.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 620 "pure_calc.tab.c" break; case 13: #line 58 "pure_calc.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 625 "pure_calc.tab.c" break; case 14: #line 60 "pure_calc.y" { yyval = - yystack.l_mark[0]; } #line 630 "pure_calc.tab.c" break; case 15: #line 62 "pure_calc.y" { yyval = regs[yystack.l_mark[0]]; } #line 635 "pure_calc.tab.c" break; case 17: #line 67 "pure_calc.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 640 "pure_calc.tab.c" break; case 18: #line 69 "pure_calc.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 645 "pure_calc.tab.c" break; #line 647 "pure_calc.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/no_verbose.error0000644000000000000000000000005213501466650016645 0ustar rootrootYACC: f - cannot open "nosuchfile.output" byacc-20221106/test/yacc/error.error0000644000000000000000000000000012313150003015604 0ustar rootrootbyacc-20221106/test/yacc/err_syntax19.error0000644000000000000000000000015412361053263017052 0ustar rootrootYACC: e - line 9 of "./err_syntax19.y", illegal $-name { $$ = $; } ^ byacc-20221106/test/yacc/calc_code_imports.tab.c0000644000000000000000000004471614104034777020033 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse calc_code_imports_parse #endif /* yyparse */ #ifndef yylex #define yylex calc_code_imports_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc_code_imports_error #endif /* yyerror */ #ifndef yychar #define yychar calc_code_imports_char #endif /* yychar */ #ifndef yyval #define yyval calc_code_imports_val #endif /* yyval */ #ifndef yylval #define yylval calc_code_imports_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc_code_imports_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc_code_imports_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc_code_imports_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc_code_imports_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc_code_imports_len #endif /* yylen */ #ifndef yydefred #define yydefred calc_code_imports_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto calc_code_imports_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc_code_imports_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc_code_imports_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc_code_imports_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc_code_imports_table #endif /* yytable */ #ifndef yycheck #define yycheck calc_code_imports_check #endif /* yycheck */ #ifndef yyname #define yyname calc_code_imports_name #endif /* yyname */ #ifndef yyrule #define yyrule calc_code_imports_rule #endif /* yyrule */ #define YYPREFIX "calc_code_imports_" #define YYPURE 0 #line 5 "calc_code_imports.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 111 "calc_code_imports.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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc_code_imports_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc_code_imports_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc_code_imports_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; static const YYINT calc_code_imports_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc_code_imports_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc_code_imports_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; static const YYINT calc_code_imports_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc_code_imports_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc_code_imports_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc_code_imports_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", }; static const char *const calc_code_imports_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 69 "calc_code_imports.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 356 "calc_code_imports.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 31 "calc_code_imports.y" { yyerrok ; } #line 558 "calc_code_imports.tab.c" break; case 4: #line 35 "calc_code_imports.y" { printf("%d\n",yystack.l_mark[0]);} #line 563 "calc_code_imports.tab.c" break; case 5: #line 37 "calc_code_imports.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 568 "calc_code_imports.tab.c" break; case 6: #line 41 "calc_code_imports.y" { yyval = yystack.l_mark[-1]; } #line 573 "calc_code_imports.tab.c" break; case 7: #line 43 "calc_code_imports.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 578 "calc_code_imports.tab.c" break; case 8: #line 45 "calc_code_imports.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 583 "calc_code_imports.tab.c" break; case 9: #line 47 "calc_code_imports.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 588 "calc_code_imports.tab.c" break; case 10: #line 49 "calc_code_imports.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 593 "calc_code_imports.tab.c" break; case 11: #line 51 "calc_code_imports.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 598 "calc_code_imports.tab.c" break; case 12: #line 53 "calc_code_imports.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 603 "calc_code_imports.tab.c" break; case 13: #line 55 "calc_code_imports.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 608 "calc_code_imports.tab.c" break; case 14: #line 57 "calc_code_imports.y" { yyval = - yystack.l_mark[0]; } #line 613 "calc_code_imports.tab.c" break; case 15: #line 59 "calc_code_imports.y" { yyval = regs[yystack.l_mark[0]]; } #line 618 "calc_code_imports.tab.c" break; case 17: #line 64 "calc_code_imports.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 623 "calc_code_imports.tab.c" break; case 18: #line 66 "calc_code_imports.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 628 "calc_code_imports.tab.c" break; #line 630 "calc_code_imports.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax27.tab.h0000644000000000000000000000000012320624426016702 0ustar rootrootbyacc-20221106/test/yacc/no_output2.output0000644000000000000000000000000013501466650017022 0ustar rootrootbyacc-20221106/test/yacc/err_syntax7a.tab.c0000644000000000000000000000067213726503203016773 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/quote_calc4-s.output0000644000000000000000000003154511704267405017371 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr "ADD-operator" expr 8 | expr "SUB-operator" expr 9 | expr "MUL-operator" expr 10 | expr "DIV-operator" expr 11 | expr "MOD-operator" expr 12 | expr "AND-operator" expr 13 | expr '|' expr 14 | "SUB-operator" expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 expr : "SUB-operator" . expr (14) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 12 number goto 9 state 4 number : DIGIT . (17) . reduce 17 state 5 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 13 "ADD-operator" reduce 15 "SUB-operator" reduce 15 "MUL-operator" reduce 15 "DIV-operator" reduce 15 "MOD-operator" reduce 15 "AND-operator" reduce 15 '|' reduce 15 '\n' reduce 15 state 6 expr : '(' . expr ')' (6) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 "ADD-operator" reduce 16 "SUB-operator" reduce 16 "MUL-operator" reduce 16 "DIV-operator" reduce 16 "MOD-operator" reduce 16 "AND-operator" reduce 16 '|' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 expr : LETTER . (15) . reduce 15 12: shift/reduce conflict (shift 16, reduce 14) on "ADD-operator" 12: shift/reduce conflict (shift 17, reduce 14) on "SUB-operator" 12: shift/reduce conflict (shift 18, reduce 14) on "MUL-operator" 12: shift/reduce conflict (shift 19, reduce 14) on "DIV-operator" 12: shift/reduce conflict (shift 20, reduce 14) on "MOD-operator" 12: shift/reduce conflict (shift 21, reduce 14) on "AND-operator" state 12 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) expr : "SUB-operator" expr . (14) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' reduce 14 '\n' reduce 14 ')' reduce 14 state 13 stat : LETTER '=' . expr (5) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 24 number goto 9 state 14 expr : '(' expr . ')' (6) expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr "ADD-operator" . expr (7) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr "SUB-operator" . expr (8) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr "MUL-operator" . expr (9) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr "DIV-operator" . expr (10) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr "MOD-operator" . expr (11) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr "AND-operator" . expr (12) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '|' . expr (13) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 26: shift/reduce conflict (shift 16, reduce 7) on "ADD-operator" 26: shift/reduce conflict (shift 17, reduce 7) on "SUB-operator" 26: shift/reduce conflict (shift 18, reduce 7) on "MUL-operator" 26: shift/reduce conflict (shift 19, reduce 7) on "DIV-operator" 26: shift/reduce conflict (shift 20, reduce 7) on "MOD-operator" 26: shift/reduce conflict (shift 21, reduce 7) on "AND-operator" 26: shift/reduce conflict (shift 22, reduce 7) on '|' state 26 expr : expr . "ADD-operator" expr (7) expr : expr "ADD-operator" expr . (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 7 ')' reduce 7 27: shift/reduce conflict (shift 16, reduce 8) on "ADD-operator" 27: shift/reduce conflict (shift 17, reduce 8) on "SUB-operator" 27: shift/reduce conflict (shift 18, reduce 8) on "MUL-operator" 27: shift/reduce conflict (shift 19, reduce 8) on "DIV-operator" 27: shift/reduce conflict (shift 20, reduce 8) on "MOD-operator" 27: shift/reduce conflict (shift 21, reduce 8) on "AND-operator" 27: shift/reduce conflict (shift 22, reduce 8) on '|' state 27 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr "SUB-operator" expr . (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 8 ')' reduce 8 28: shift/reduce conflict (shift 16, reduce 9) on "ADD-operator" 28: shift/reduce conflict (shift 17, reduce 9) on "SUB-operator" 28: shift/reduce conflict (shift 18, reduce 9) on "MUL-operator" 28: shift/reduce conflict (shift 19, reduce 9) on "DIV-operator" 28: shift/reduce conflict (shift 20, reduce 9) on "MOD-operator" 28: shift/reduce conflict (shift 21, reduce 9) on "AND-operator" 28: shift/reduce conflict (shift 22, reduce 9) on '|' state 28 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr "MUL-operator" expr . (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 9 ')' reduce 9 29: shift/reduce conflict (shift 16, reduce 10) on "ADD-operator" 29: shift/reduce conflict (shift 17, reduce 10) on "SUB-operator" 29: shift/reduce conflict (shift 18, reduce 10) on "MUL-operator" 29: shift/reduce conflict (shift 19, reduce 10) on "DIV-operator" 29: shift/reduce conflict (shift 20, reduce 10) on "MOD-operator" 29: shift/reduce conflict (shift 21, reduce 10) on "AND-operator" 29: shift/reduce conflict (shift 22, reduce 10) on '|' state 29 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr "DIV-operator" expr . (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 10 ')' reduce 10 30: shift/reduce conflict (shift 16, reduce 11) on "ADD-operator" 30: shift/reduce conflict (shift 17, reduce 11) on "SUB-operator" 30: shift/reduce conflict (shift 18, reduce 11) on "MUL-operator" 30: shift/reduce conflict (shift 19, reduce 11) on "DIV-operator" 30: shift/reduce conflict (shift 20, reduce 11) on "MOD-operator" 30: shift/reduce conflict (shift 21, reduce 11) on "AND-operator" 30: shift/reduce conflict (shift 22, reduce 11) on '|' state 30 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr "MOD-operator" expr . (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 11 ')' reduce 11 31: shift/reduce conflict (shift 16, reduce 12) on "ADD-operator" 31: shift/reduce conflict (shift 17, reduce 12) on "SUB-operator" 31: shift/reduce conflict (shift 18, reduce 12) on "MUL-operator" 31: shift/reduce conflict (shift 19, reduce 12) on "DIV-operator" 31: shift/reduce conflict (shift 20, reduce 12) on "MOD-operator" 31: shift/reduce conflict (shift 21, reduce 12) on "AND-operator" 31: shift/reduce conflict (shift 22, reduce 12) on '|' state 31 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr "AND-operator" expr . (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 12 ')' reduce 12 32: shift/reduce conflict (shift 16, reduce 13) on "ADD-operator" 32: shift/reduce conflict (shift 17, reduce 13) on "SUB-operator" 32: shift/reduce conflict (shift 18, reduce 13) on "MUL-operator" 32: shift/reduce conflict (shift 19, reduce 13) on "DIV-operator" 32: shift/reduce conflict (shift 20, reduce 13) on "MOD-operator" 32: shift/reduce conflict (shift 21, reduce 13) on "AND-operator" state 32 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' reduce 13 '\n' reduce 13 ')' reduce 13 State 12 contains 6 shift/reduce conflicts. State 26 contains 7 shift/reduce conflicts. State 27 contains 7 shift/reduce conflicts. State 28 contains 7 shift/reduce conflicts. State 29 contains 7 shift/reduce conflicts. State 30 contains 7 shift/reduce conflicts. State 31 contains 7 shift/reduce conflicts. State 32 contains 6 shift/reduce conflicts. 28 terminals, 5 nonterminals 19 grammar rules, 33 states byacc-20221106/test/yacc/ok_syntax1.error0000644000000000000000000000000012321102502016553 0ustar rootrootbyacc-20221106/test/yacc/err_syntax13.output0000644000000000000000000000000012313420551017234 0ustar rootrootbyacc-20221106/test/yacc/quote_calc4.output0000644000000000000000000003154511704143103017115 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr "ADD-operator" expr 8 | expr "SUB-operator" expr 9 | expr "MUL-operator" expr 10 | expr "DIV-operator" expr 11 | expr "MOD-operator" expr 12 | expr "AND-operator" expr 13 | expr '|' expr 14 | "SUB-operator" expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 expr : "SUB-operator" . expr (14) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 12 number goto 9 state 4 number : DIGIT . (17) . reduce 17 state 5 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 13 "ADD-operator" reduce 15 "SUB-operator" reduce 15 "MUL-operator" reduce 15 "DIV-operator" reduce 15 "MOD-operator" reduce 15 "AND-operator" reduce 15 '|' reduce 15 '\n' reduce 15 state 6 expr : '(' . expr ')' (6) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 "ADD-operator" reduce 16 "SUB-operator" reduce 16 "MUL-operator" reduce 16 "DIV-operator" reduce 16 "MOD-operator" reduce 16 "AND-operator" reduce 16 '|' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 expr : LETTER . (15) . reduce 15 12: shift/reduce conflict (shift 16, reduce 14) on "ADD-operator" 12: shift/reduce conflict (shift 17, reduce 14) on "SUB-operator" 12: shift/reduce conflict (shift 18, reduce 14) on "MUL-operator" 12: shift/reduce conflict (shift 19, reduce 14) on "DIV-operator" 12: shift/reduce conflict (shift 20, reduce 14) on "MOD-operator" 12: shift/reduce conflict (shift 21, reduce 14) on "AND-operator" state 12 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) expr : "SUB-operator" expr . (14) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' reduce 14 '\n' reduce 14 ')' reduce 14 state 13 stat : LETTER '=' . expr (5) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 24 number goto 9 state 14 expr : '(' expr . ')' (6) expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr "ADD-operator" . expr (7) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr "SUB-operator" . expr (8) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr "MUL-operator" . expr (9) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr "DIV-operator" . expr (10) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr "MOD-operator" . expr (11) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr "AND-operator" . expr (12) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '|' . expr (13) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 26: shift/reduce conflict (shift 16, reduce 7) on "ADD-operator" 26: shift/reduce conflict (shift 17, reduce 7) on "SUB-operator" 26: shift/reduce conflict (shift 18, reduce 7) on "MUL-operator" 26: shift/reduce conflict (shift 19, reduce 7) on "DIV-operator" 26: shift/reduce conflict (shift 20, reduce 7) on "MOD-operator" 26: shift/reduce conflict (shift 21, reduce 7) on "AND-operator" 26: shift/reduce conflict (shift 22, reduce 7) on '|' state 26 expr : expr . "ADD-operator" expr (7) expr : expr "ADD-operator" expr . (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 7 ')' reduce 7 27: shift/reduce conflict (shift 16, reduce 8) on "ADD-operator" 27: shift/reduce conflict (shift 17, reduce 8) on "SUB-operator" 27: shift/reduce conflict (shift 18, reduce 8) on "MUL-operator" 27: shift/reduce conflict (shift 19, reduce 8) on "DIV-operator" 27: shift/reduce conflict (shift 20, reduce 8) on "MOD-operator" 27: shift/reduce conflict (shift 21, reduce 8) on "AND-operator" 27: shift/reduce conflict (shift 22, reduce 8) on '|' state 27 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr "SUB-operator" expr . (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 8 ')' reduce 8 28: shift/reduce conflict (shift 16, reduce 9) on "ADD-operator" 28: shift/reduce conflict (shift 17, reduce 9) on "SUB-operator" 28: shift/reduce conflict (shift 18, reduce 9) on "MUL-operator" 28: shift/reduce conflict (shift 19, reduce 9) on "DIV-operator" 28: shift/reduce conflict (shift 20, reduce 9) on "MOD-operator" 28: shift/reduce conflict (shift 21, reduce 9) on "AND-operator" 28: shift/reduce conflict (shift 22, reduce 9) on '|' state 28 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr "MUL-operator" expr . (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 9 ')' reduce 9 29: shift/reduce conflict (shift 16, reduce 10) on "ADD-operator" 29: shift/reduce conflict (shift 17, reduce 10) on "SUB-operator" 29: shift/reduce conflict (shift 18, reduce 10) on "MUL-operator" 29: shift/reduce conflict (shift 19, reduce 10) on "DIV-operator" 29: shift/reduce conflict (shift 20, reduce 10) on "MOD-operator" 29: shift/reduce conflict (shift 21, reduce 10) on "AND-operator" 29: shift/reduce conflict (shift 22, reduce 10) on '|' state 29 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr "DIV-operator" expr . (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 10 ')' reduce 10 30: shift/reduce conflict (shift 16, reduce 11) on "ADD-operator" 30: shift/reduce conflict (shift 17, reduce 11) on "SUB-operator" 30: shift/reduce conflict (shift 18, reduce 11) on "MUL-operator" 30: shift/reduce conflict (shift 19, reduce 11) on "DIV-operator" 30: shift/reduce conflict (shift 20, reduce 11) on "MOD-operator" 30: shift/reduce conflict (shift 21, reduce 11) on "AND-operator" 30: shift/reduce conflict (shift 22, reduce 11) on '|' state 30 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr "MOD-operator" expr . (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 11 ')' reduce 11 31: shift/reduce conflict (shift 16, reduce 12) on "ADD-operator" 31: shift/reduce conflict (shift 17, reduce 12) on "SUB-operator" 31: shift/reduce conflict (shift 18, reduce 12) on "MUL-operator" 31: shift/reduce conflict (shift 19, reduce 12) on "DIV-operator" 31: shift/reduce conflict (shift 20, reduce 12) on "MOD-operator" 31: shift/reduce conflict (shift 21, reduce 12) on "AND-operator" 31: shift/reduce conflict (shift 22, reduce 12) on '|' state 31 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr "AND-operator" expr . (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 12 ')' reduce 12 32: shift/reduce conflict (shift 16, reduce 13) on "ADD-operator" 32: shift/reduce conflict (shift 17, reduce 13) on "SUB-operator" 32: shift/reduce conflict (shift 18, reduce 13) on "MUL-operator" 32: shift/reduce conflict (shift 19, reduce 13) on "DIV-operator" 32: shift/reduce conflict (shift 20, reduce 13) on "MOD-operator" 32: shift/reduce conflict (shift 21, reduce 13) on "AND-operator" state 32 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' reduce 13 '\n' reduce 13 ')' reduce 13 State 12 contains 6 shift/reduce conflicts. State 26 contains 7 shift/reduce conflicts. State 27 contains 7 shift/reduce conflicts. State 28 contains 7 shift/reduce conflicts. State 29 contains 7 shift/reduce conflicts. State 30 contains 7 shift/reduce conflicts. State 31 contains 7 shift/reduce conflicts. State 32 contains 6 shift/reduce conflicts. 28 terminals, 5 nonterminals 19 grammar rules, 33 states byacc-20221106/test/yacc/err_syntax6.tab.c0000644000000000000000000000067213726503203016631 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/quote_calc3-s.output0000644000000000000000000002614511704267405017370 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr OP_ADD expr 8 | expr OP_SUB expr 9 | expr OP_MUL expr 10 | expr OP_DIV expr 11 | expr OP_MOD expr 12 | expr OP_AND expr 13 | expr '|' expr 14 | OP_SUB expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 OP_SUB shift 3 DIGIT shift 4 LETTER shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 expr : OP_SUB . expr (14) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 12 number goto 9 state 4 number : DIGIT . (17) . reduce 17 state 5 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 13 OP_ADD reduce 15 OP_SUB reduce 15 OP_MUL reduce 15 OP_DIV reduce 15 OP_MOD reduce 15 OP_AND reduce 15 '|' reduce 15 '\n' reduce 15 state 6 expr : '(' . expr ')' (6) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 OP_ADD reduce 16 OP_SUB reduce 16 OP_MUL reduce 16 OP_DIV reduce 16 OP_MOD reduce 16 OP_AND reduce 16 '|' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 expr : LETTER . (15) . reduce 15 12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD 12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB 12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL 12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV 12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD 12: shift/reduce conflict (shift 21, reduce 14) on OP_AND state 12 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) expr : OP_SUB expr . (14) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' reduce 14 '\n' reduce 14 ')' reduce 14 state 13 stat : LETTER '=' . expr (5) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 24 number goto 9 state 14 expr : '(' expr . ')' (6) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr OP_ADD . expr (7) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr OP_SUB . expr (8) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr OP_MUL . expr (9) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr OP_DIV . expr (10) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr OP_MOD . expr (11) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr OP_AND . expr (12) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '|' . expr (13) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD 26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB 26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL 26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV 26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD 26: shift/reduce conflict (shift 21, reduce 7) on OP_AND 26: shift/reduce conflict (shift 22, reduce 7) on '|' state 26 expr : expr . OP_ADD expr (7) expr : expr OP_ADD expr . (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 7 ')' reduce 7 27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD 27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB 27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL 27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV 27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD 27: shift/reduce conflict (shift 21, reduce 8) on OP_AND 27: shift/reduce conflict (shift 22, reduce 8) on '|' state 27 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr OP_SUB expr . (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 8 ')' reduce 8 28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD 28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB 28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL 28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV 28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD 28: shift/reduce conflict (shift 21, reduce 9) on OP_AND 28: shift/reduce conflict (shift 22, reduce 9) on '|' state 28 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr OP_MUL expr . (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 9 ')' reduce 9 29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD 29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB 29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL 29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV 29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD 29: shift/reduce conflict (shift 21, reduce 10) on OP_AND 29: shift/reduce conflict (shift 22, reduce 10) on '|' state 29 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr OP_DIV expr . (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 10 ')' reduce 10 30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD 30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB 30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL 30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV 30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD 30: shift/reduce conflict (shift 21, reduce 11) on OP_AND 30: shift/reduce conflict (shift 22, reduce 11) on '|' state 30 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr OP_MOD expr . (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 11 ')' reduce 11 31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD 31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB 31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL 31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV 31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD 31: shift/reduce conflict (shift 21, reduce 12) on OP_AND 31: shift/reduce conflict (shift 22, reduce 12) on '|' state 31 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr OP_AND expr . (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 12 ')' reduce 12 32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD 32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB 32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL 32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV 32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD 32: shift/reduce conflict (shift 21, reduce 13) on OP_AND state 32 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' reduce 13 '\n' reduce 13 ')' reduce 13 State 12 contains 6 shift/reduce conflicts. State 26 contains 7 shift/reduce conflicts. State 27 contains 7 shift/reduce conflicts. State 28 contains 7 shift/reduce conflicts. State 29 contains 7 shift/reduce conflicts. State 30 contains 7 shift/reduce conflicts. State 31 contains 7 shift/reduce conflicts. State 32 contains 6 shift/reduce conflicts. 28 terminals, 5 nonterminals 19 grammar rules, 33 states byacc-20221106/test/yacc/code_calc.output0000644000000000000000000001536011403310250016576 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states byacc-20221106/test/yacc/no_graph.error0000644000000000000000000000004713501466650016305 0ustar rootrootYACC: f - cannot open "nosuchfile.dot" byacc-20221106/test/yacc/err_syntax7a.tab.h0000644000000000000000000000000012313161123016751 0ustar rootrootbyacc-20221106/test/yacc/err_syntax11.output0000644000000000000000000000040612313417751017254 0ustar rootroot 0 $accept : S $end 1 S : error state 0 $accept : . S $end (0) error shift 1 . error S goto 2 state 1 S : error . (1) . reduce 1 state 2 $accept : S . $end (0) $end accept 3 terminals, 2 nonterminals 2 grammar rules, 3 states byacc-20221106/test/yacc/err_syntax10.tab.h0000644000000000000000000000000012313416277016677 0ustar rootrootbyacc-20221106/test/yacc/ok_syntax1.tab.c0000644000000000000000000004676114104034777016464 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse ok_syntax1_parse #endif /* yyparse */ #ifndef yylex #define yylex ok_syntax1_lex #endif /* yylex */ #ifndef yyerror #define yyerror ok_syntax1_error #endif /* yyerror */ #ifndef yychar #define yychar ok_syntax1_char #endif /* yychar */ #ifndef yyval #define yyval ok_syntax1_val #endif /* yyval */ #ifndef yylval #define yylval ok_syntax1_lval #endif /* yylval */ #ifndef yydebug #define yydebug ok_syntax1_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs ok_syntax1_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag ok_syntax1_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs ok_syntax1_lhs #endif /* yylhs */ #ifndef yylen #define yylen ok_syntax1_len #endif /* yylen */ #ifndef yydefred #define yydefred ok_syntax1_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto ok_syntax1_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex ok_syntax1_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex ok_syntax1_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex ok_syntax1_gindex #endif /* yygindex */ #ifndef yytable #define yytable ok_syntax1_table #endif /* yytable */ #ifndef yycheck #define yycheck ok_syntax1_check #endif /* yycheck */ #ifndef yyname #define yyname ok_syntax1_name #endif /* yyname */ #ifndef yyrule #define yyrule ok_syntax1_rule #endif /* yyrule */ #define YYPREFIX "ok_syntax1_" #define YYPURE 1 #line 9 "ok_syntax1.y" # include # include #ifdef YYBISON #define YYSTYPE int #define YYLEX_PARAM base #define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM) #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) int YYLEX_DECL(); static void YYERROR_DECL(); #endif #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #line 43 "ok_syntax1.y" typedef union YYSTYPE { char * cval; int ival; double dval; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 128 "ok_syntax1.tab.c" /* 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(int regs[26], int *base) #endif /* Parameters sent to lex. */ #ifdef YYLEX_PARAM # ifdef YYLEX_PARAM_TYPE # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM) # else # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM) # endif # define YYLEX yylex(&yylval, YYLEX_PARAM) #else # define YYLEX_DECL() yylex(YYSTYPE *yylval, int *base) # define YYLEX yylex(&yylval, base) #endif /* Parameters sent to yyerror. */ #ifndef YYERROR_DECL #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) #endif #ifndef YYERROR_CALL #define YYERROR_CALL(msg) yyerror(regs, base, msg) #endif extern int YYPARSE_DECL(); #define DIGIT 257 #define LETTER 258 #define OCT1 259 #define HEX1 260 #define HEX2 261 #define HEX3 262 #define STR1 263 #define STR2 265 #define BELL 266 #define BS 267 #define NL 268 #define LF 269 #define CR 270 #define TAB 271 #define VT 272 #define UMINUS 273 #define YYERRCODE 256 typedef int YYINT; static const YYINT ok_syntax1_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT ok_syntax1_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT ok_syntax1_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; static const YYINT ok_syntax1_dgoto[] = { 1, 7, 8, 9, }; static const YYINT ok_syntax1_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT ok_syntax1_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; static const YYINT ok_syntax1_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT ok_syntax1_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT ok_syntax1_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 273 #define YYUNDFTOKEN 279 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const ok_syntax1_name[] = { "end-of-file",0,0,0,0,0,0,"'\\a'","'\\b'","'\\t'","'\\n'","'\\v'","'\\f'", "'\\r'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'#'",0,"'%'","'&'",0,"'('", "')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0,0,"'='",0,0,"'@'",0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'^'",0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,"'~'","'\\177'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, "'\\377'",0,"DIGIT","LETTER","OCT1","HEX1","HEX2","HEX3","STR1", "\"\\177\\177\\\\\\n\"","STR2","BELL","BS","NL","LF","CR","TAB","VT","UMINUS",0, 0,0,0,0,"illegal-symbol", }; static const char *const ok_syntax1_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif /* 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; #line 104 "ok_syntax1.y" /* start of programs */ #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main (void) { int regs[26]; int base = 10; while(!feof(stdin)) { yyparse(regs, &base); } return 0; } #define UNUSED(x) ((void)(x)) static void YYERROR_DECL() { UNUSED(regs); /* %parse-param regs is not actually used here */ UNUSED(base); /* %parse-param base is not actually used here */ fprintf(stderr, "%s\n", s); } int YYLEX_DECL() { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval->ival = (c - 'a'); return ( LETTER ); } if( isdigit( c )) { yylval->ival = (c - '0') % (*base); return ( DIGIT ); } return( c ); } #line 390 "ok_syntax1.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* variables for the parser stack */ YYSTACKDATA yystack; 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 memset(&yyval, 0, sizeof(yyval)); memset(&yylval, 0, sizeof(yylval)); /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 66 "ok_syntax1.y" { yyerrok ; } #line 603 "ok_syntax1.tab.c" break; case 4: #line 70 "ok_syntax1.y" { printf("%d\n",yystack.l_mark[0].ival);} #line 608 "ok_syntax1.tab.c" break; case 5: #line 72 "ok_syntax1.y" { regs[yystack.l_mark[-2].ival] = yystack.l_mark[0].ival; } #line 613 "ok_syntax1.tab.c" break; case 6: #line 76 "ok_syntax1.y" { yyval.ival = yystack.l_mark[-1].ival; } #line 618 "ok_syntax1.tab.c" break; case 7: #line 78 "ok_syntax1.y" { yyval.ival = yystack.l_mark[-2].ival + yystack.l_mark[0].ival; } #line 623 "ok_syntax1.tab.c" break; case 8: #line 80 "ok_syntax1.y" { yyval.ival = yystack.l_mark[-2].ival - yystack.l_mark[0].ival; } #line 628 "ok_syntax1.tab.c" break; case 9: #line 82 "ok_syntax1.y" { yyval.ival = yystack.l_mark[-2].ival * yystack.l_mark[0].ival; } #line 633 "ok_syntax1.tab.c" break; case 10: #line 84 "ok_syntax1.y" { yyval.ival = yystack.l_mark[-2].ival / yystack.l_mark[0].ival; } #line 638 "ok_syntax1.tab.c" break; case 11: #line 86 "ok_syntax1.y" { yyval.ival = yystack.l_mark[-2].ival % yystack.l_mark[0].ival; } #line 643 "ok_syntax1.tab.c" break; case 12: #line 88 "ok_syntax1.y" { yyval.ival = yystack.l_mark[-2].ival & yystack.l_mark[0].ival; } #line 648 "ok_syntax1.tab.c" break; case 13: #line 90 "ok_syntax1.y" { yyval.ival = yystack.l_mark[-2].ival | yystack.l_mark[0].ival; } #line 653 "ok_syntax1.tab.c" break; case 14: #line 92 "ok_syntax1.y" { yyval.ival = - yystack.l_mark[0].ival; } #line 658 "ok_syntax1.tab.c" break; case 15: #line 94 "ok_syntax1.y" { yyval.ival = regs[yystack.l_mark[0].ival]; } #line 663 "ok_syntax1.tab.c" break; case 17: #line 99 "ok_syntax1.y" { yyval.ival = yystack.l_mark[0].ival; (*base) = (yystack.l_mark[0].ival==0) ? 8 : 10; } #line 668 "ok_syntax1.tab.c" break; case 18: #line 101 "ok_syntax1.y" { yyval.ival = (*base) * yystack.l_mark[-1].ival + yystack.l_mark[0].ival; } #line 673 "ok_syntax1.tab.c" break; #line 675 "ok_syntax1.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/calc_code_requires.tab.h0000644000000000000000000000034513565107367020176 0ustar rootroot/* %code "requires" block start */ #line 1 "calc_code_requires.y" /* CODE-REQUIRES */ #line 2 "calc_code_requires.y" /* CODE-REQUIRES2 */ /* %code "requires" block end */ #define DIGIT 257 #define LETTER 258 #define UMINUS 259 byacc-20221106/test/yacc/calc_code_requires.output0000644000000000000000000001536013564732111020533 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states byacc-20221106/test/yacc/empty.output0000644000000000000000000000035512315405303016045 0ustar rootroot 0 $accept : start $end 1 start : state 0 $accept : . start $end (0) start : . (1) . reduce 1 start goto 1 state 1 $accept : start . $end (0) $end accept 2 terminals, 2 nonterminals 2 grammar rules, 2 states byacc-20221106/test/yacc/calc1.error0000644000000000000000000000013112313150003015443 0ustar rootrootYACC: 2 rules never reduced YACC: 18 shift/reduce conflicts, 26 reduce/reduce conflicts. byacc-20221106/test/yacc/err_syntax4.tab.c0000644000000000000000000000067213726503203016627 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/calc_code_provides.tab.h0000644000000000000000000000034513565107367020172 0ustar rootroot#define DIGIT 257 #define LETTER 258 #define UMINUS 259 /* %code "provides" block start */ #line 1 "calc_code_provides.y" /* CODE-PROVIDES */ #line 2 "calc_code_provides.y" /* CODE-PROVIDES2 */ /* %code "provides" block end */ byacc-20221106/test/yacc/err_syntax18.tab.h0000644000000000000000000000000012313536361016704 0ustar rootrootbyacc-20221106/test/yacc/calc_code_default.tab.c0000644000000000000000000004521414104034777017754 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse calc_code_default_parse #endif /* yyparse */ #ifndef yylex #define yylex calc_code_default_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc_code_default_error #endif /* yyerror */ #ifndef yychar #define yychar calc_code_default_char #endif /* yychar */ #ifndef yyval #define yyval calc_code_default_val #endif /* yyval */ #ifndef yylval #define yylval calc_code_default_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc_code_default_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc_code_default_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc_code_default_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc_code_default_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc_code_default_len #endif /* yylen */ #ifndef yydefred #define yydefred calc_code_default_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto calc_code_default_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc_code_default_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc_code_default_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc_code_default_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc_code_default_table #endif /* yytable */ #ifndef yycheck #define yycheck calc_code_default_check #endif /* yycheck */ #ifndef yyname #define yyname calc_code_default_name #endif /* yyname */ #ifndef yyrule #define yyrule calc_code_default_rule #endif /* yyrule */ #define YYPREFIX "calc_code_default_" #define YYPURE 0 #line 5 "calc_code_default.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 111 "calc_code_default.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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc_code_default_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc_code_default_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc_code_default_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; static const YYINT calc_code_default_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc_code_default_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc_code_default_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; static const YYINT calc_code_default_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc_code_default_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc_code_default_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc_code_default_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", }; static const char *const calc_code_default_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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; /* %code "" block start */ #line 1 "calc_code_default.y" /* CODE-DEFAULT */ #line 2 "calc_code_default.y" /* CODE-DEFAULT2 */ /* %code "" block end */ #line 321 "calc_code_default.tab.c" #line 69 "calc_code_default.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 364 "calc_code_default.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 31 "calc_code_default.y" { yyerrok ; } #line 566 "calc_code_default.tab.c" break; case 4: #line 35 "calc_code_default.y" { printf("%d\n",yystack.l_mark[0]);} #line 571 "calc_code_default.tab.c" break; case 5: #line 37 "calc_code_default.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 576 "calc_code_default.tab.c" break; case 6: #line 41 "calc_code_default.y" { yyval = yystack.l_mark[-1]; } #line 581 "calc_code_default.tab.c" break; case 7: #line 43 "calc_code_default.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 586 "calc_code_default.tab.c" break; case 8: #line 45 "calc_code_default.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 591 "calc_code_default.tab.c" break; case 9: #line 47 "calc_code_default.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 596 "calc_code_default.tab.c" break; case 10: #line 49 "calc_code_default.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 601 "calc_code_default.tab.c" break; case 11: #line 51 "calc_code_default.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 606 "calc_code_default.tab.c" break; case 12: #line 53 "calc_code_default.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 611 "calc_code_default.tab.c" break; case 13: #line 55 "calc_code_default.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 616 "calc_code_default.tab.c" break; case 14: #line 57 "calc_code_default.y" { yyval = - yystack.l_mark[0]; } #line 621 "calc_code_default.tab.c" break; case 15: #line 59 "calc_code_default.y" { yyval = regs[yystack.l_mark[0]]; } #line 626 "calc_code_default.tab.c" break; case 17: #line 64 "calc_code_default.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 631 "calc_code_default.tab.c" break; case 18: #line 66 "calc_code_default.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 636 "calc_code_default.tab.c" break; #line 638 "calc_code_default.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax12.tab.c0000644000000000000000000003055314104034777016715 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse err_syntax12_parse #endif /* yyparse */ #ifndef yylex #define yylex err_syntax12_lex #endif /* yylex */ #ifndef yyerror #define yyerror err_syntax12_error #endif /* yyerror */ #ifndef yychar #define yychar err_syntax12_char #endif /* yychar */ #ifndef yyval #define yyval err_syntax12_val #endif /* yyval */ #ifndef yylval #define yylval err_syntax12_lval #endif /* yylval */ #ifndef yydebug #define yydebug err_syntax12_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs err_syntax12_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag err_syntax12_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs err_syntax12_lhs #endif /* yylhs */ #ifndef yylen #define yylen err_syntax12_len #endif /* yylen */ #ifndef yydefred #define yydefred err_syntax12_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto err_syntax12_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex err_syntax12_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex err_syntax12_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex err_syntax12_gindex #endif /* yygindex */ #ifndef yytable #define yytable err_syntax12_table #endif /* yytable */ #ifndef yycheck #define yycheck err_syntax12_check #endif /* yycheck */ #ifndef yyname #define yyname err_syntax12_name #endif /* yyname */ #ifndef yyrule #define yyrule err_syntax12_rule #endif /* yyrule */ #define YYPREFIX "err_syntax12_" #define YYPURE 0 #line 2 "err_syntax12.y" int yylex(void); static void yyerror(const char *); #line 104 "err_syntax12.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 text 456 #define YYERRCODE 256 typedef int YYINT; static const YYINT err_syntax12_lhs[] = { -1, 0, }; static const YYINT err_syntax12_len[] = { 2, 1, }; static const YYINT err_syntax12_defred[] = { 0, 1, 0, }; static const YYINT err_syntax12_dgoto[] = { 2, }; static const YYINT err_syntax12_sindex[] = { -256, 0, 0, }; static const YYINT err_syntax12_rindex[] = { 0, 0, 0, }; static const YYINT err_syntax12_gindex[] = { 0, }; #define YYTABLESIZE 0 static const YYINT err_syntax12_table[] = { 1, }; static const YYINT err_syntax12_check[] = { 256, }; #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 456 #define YYUNDFTOKEN 459 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const err_syntax12_name[] = { "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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"text",0,0,"illegal-symbol", }; static const char *const err_syntax12_rule[] = { "$accept : S", "S : error", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 12 "err_syntax12.y" #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } #line 257 "err_syntax12.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { } 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax6.output0000644000000000000000000000000012313157616017167 0ustar rootrootbyacc-20221106/test/yacc/calc3.error0000644000000000000000000000000012313150003015440 0ustar rootrootbyacc-20221106/test/yacc/varsyntax_calc1.error0000644000000000000000000000013112315405305017574 0ustar rootrootYACC: 2 rules never reduced YACC: 18 shift/reduce conflicts, 26 reduce/reduce conflicts. byacc-20221106/test/yacc/err_syntax25.error0000644000000000000000000000012112361053263017041 0ustar rootrootYACC: e - line 11 of "./err_syntax25.y", too many %union declarations %union { ^ byacc-20221106/test/yacc/err_syntax7.output0000644000000000000000000000000012313161123017154 0ustar rootrootbyacc-20221106/test/yacc/err_syntax2.tab.h0000644000000000000000000000000012313152756016617 0ustar rootrootbyacc-20221106/test/yacc/code_calc.error0000644000000000000000000000000012313150003016347 0ustar rootrootbyacc-20221106/test/yacc/err_syntax11.error0000644000000000000000000000012212361053263017035 0ustar rootrootYACC: w - line 7 of "./err_syntax11.y", the precedence of '|' has been redeclared byacc-20221106/test/yacc/err_syntax25.tab.h0000644000000000000000000000000012313700645016700 0ustar rootrootbyacc-20221106/test/yacc/defines1.calc.h0000644000000000000000000000007013501473645016203 0ustar rootroot#define DIGIT 257 #define LETTER 258 #define UMINUS 259 byacc-20221106/test/yacc/err_syntax5.tab.h0000644000000000000000000000000012313155325016615 0ustar rootrootbyacc-20221106/test/yacc/err_syntax19.tab.c0000644000000000000000000000067213726503203016715 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/code_error.code.c0000644000000000000000000002557014104034777016646 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse error_parse #endif /* yyparse */ #ifndef yylex #define yylex error_lex #endif /* yylex */ #ifndef yyerror #define yyerror error_error #endif /* yyerror */ #ifndef yychar #define yychar error_char #endif /* yychar */ #ifndef yyval #define yyval error_val #endif /* yyval */ #ifndef yylval #define yylval error_lval #endif /* yylval */ #ifndef yydebug #define yydebug error_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs error_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag error_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs error_lhs #endif /* yylhs */ #ifndef yylen #define yylen error_len #endif /* yylen */ #ifndef yydefred #define yydefred error_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto error_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex error_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex error_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex error_gindex #endif /* yygindex */ #ifndef yytable #define yytable error_table #endif /* yytable */ #ifndef yycheck #define yycheck error_check #endif /* yycheck */ #ifndef yyname #define yyname error_name #endif /* yyname */ #ifndef yyrule #define yyrule error_rule #endif /* yyrule */ #define YYPREFIX "error_" #define YYPURE 0 #line 2 "code_error.y" #ifdef YYBISON int yylex(void); static void yyerror(const char *); #endif #line 108 "code_error.code.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 #define YYERRCODE 256 #define YYTABLESIZE 0 #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 256 #define YYUNDFTOKEN 259 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) extern int YYPARSE_DECL(); typedef int YYINT; extern YYINT yylhs[]; extern YYINT yylen[]; extern YYINT yydefred[]; extern YYINT yydgoto[]; extern YYINT yysindex[]; extern YYINT yyrindex[]; extern YYINT yygindex[]; extern YYINT yytable[]; extern YYINT yycheck[]; #if YYDEBUG || defined(yytname) extern char *yyname[]; #endif #if YYDEBUG extern char *yyrule[]; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 12 "code_error.y" #include #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } #line 235 "code_error.code.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { } 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax22.tab.c0000644000000000000000000000067213726503203016707 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/err_syntax27.output0000644000000000000000000000000012320624426017246 0ustar rootrootbyacc-20221106/test/yacc/err_syntax25.output0000644000000000000000000000000012313700645017244 0ustar rootrootbyacc-20221106/test/yacc/err_syntax12.tab.h0000644000000000000000000000002112313420260016667 0ustar rootroot#define text 456 byacc-20221106/test/yacc/err_syntax26.error0000644000000000000000000000007712361053263017054 0ustar rootrootYACC: e - line 6 of "./err_syntax26.y", unexpected end-of-file byacc-20221106/test/yacc/code_calc.code.c0000644000000000000000000003227214104034777016414 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse calc_parse #endif /* yyparse */ #ifndef yylex #define yylex calc_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc_error #endif /* yyerror */ #ifndef yychar #define yychar calc_char #endif /* yychar */ #ifndef yyval #define yyval calc_val #endif /* yyval */ #ifndef yylval #define yylval calc_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc_len #endif /* yylen */ #ifndef yydefred #define yydefred calc_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto calc_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc_table #endif /* yytable */ #ifndef yycheck #define yycheck calc_check #endif /* yycheck */ #ifndef yyname #define yyname calc_name #endif /* yyname */ #ifndef yyrule #define yyrule calc_rule #endif /* yyrule */ #define YYPREFIX "calc_" #define YYPURE 0 #line 4 "code_calc.y" # include # include int regs[26]; int base; #ifdef YYBISON int yylex(void); static void yyerror(const char *s); #endif #line 113 "code_calc.code.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 #define DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 #undef yytname #define yytname yyname #define YYTABLESIZE 220 #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) extern int YYPARSE_DECL(); typedef int YYINT; extern YYINT yylhs[]; extern YYINT yylen[]; extern YYINT yydefred[]; extern YYINT yydgoto[]; extern YYINT yysindex[]; extern YYINT yyrindex[]; extern YYINT yygindex[]; extern YYINT yytable[]; extern YYINT yycheck[]; #if YYDEBUG || defined(yytname) extern char *yyname[]; #endif #if YYDEBUG extern char *yyrule[]; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 70 "code_calc.y" /* start of programs */ #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 265 "code_calc.code.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 32 "code_calc.y" { yyerrok ; } #line 467 "code_calc.code.c" break; case 4: #line 36 "code_calc.y" { printf("%d\n",yystack.l_mark[0]);} #line 472 "code_calc.code.c" break; case 5: #line 38 "code_calc.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 477 "code_calc.code.c" break; case 6: #line 42 "code_calc.y" { yyval = yystack.l_mark[-1]; } #line 482 "code_calc.code.c" break; case 7: #line 44 "code_calc.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 487 "code_calc.code.c" break; case 8: #line 46 "code_calc.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 492 "code_calc.code.c" break; case 9: #line 48 "code_calc.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 497 "code_calc.code.c" break; case 10: #line 50 "code_calc.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 502 "code_calc.code.c" break; case 11: #line 52 "code_calc.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 507 "code_calc.code.c" break; case 12: #line 54 "code_calc.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 512 "code_calc.code.c" break; case 13: #line 56 "code_calc.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 517 "code_calc.code.c" break; case 14: #line 58 "code_calc.y" { yyval = - yystack.l_mark[0]; } #line 522 "code_calc.code.c" break; case 15: #line 60 "code_calc.y" { yyval = regs[yystack.l_mark[0]]; } #line 527 "code_calc.code.c" break; case 17: #line 65 "code_calc.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 532 "code_calc.code.c" break; case 18: #line 67 "code_calc.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 537 "code_calc.code.c" break; #line 539 "code_calc.code.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax13.tab.h0000644000000000000000000000000012313420551016670 0ustar rootrootbyacc-20221106/test/yacc/err_syntax16.tab.c0000644000000000000000000000067213726503203016712 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/err_syntax3.error0000644000000000000000000000015412361053263016763 0ustar rootrootYACC: e - line 6 of "./err_syntax3.y", unterminated string %token '(' '*' '& ^ byacc-20221106/test/yacc/rename_debug.i0000644000000000000000000000241413275005701016216 0ustar rootroot#define YYPREFIX "yy" #define YYPURE 0 #line 2 "code_debug.y" #ifdef YYBISON int yylex(void); static void yyerror(const char *); #endif #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 #if !(defined(yylex) || defined(YYSTATE)) int YYLEX_DECL(); #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(); #ifndef YYDEBUG #define YYDEBUG 1 #endif #if YYDEBUG extern int yydebug; #endif extern int yyerrflag; extern int yychar; extern YYSTYPE yyval; extern YYSTYPE yylval; extern int yynerrs; byacc-20221106/test/yacc/quote_calc4-s.error0000644000000000000000000000004112313150003017123 0ustar rootrootYACC: 54 shift/reduce conflicts. byacc-20221106/test/yacc/err_syntax21.tab.c0000644000000000000000000000067213726503203016706 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/grammar.output0000644000000000000000000012646710031624574016360 0ustar rootroot 0 $accept : program $end 1 program : 2 | translation_unit 3 translation_unit : external_declaration 4 | translation_unit external_declaration 5 external_declaration : declaration 6 | function_definition 7 | ';' 8 | linkage_specification 9 | T_ASM T_ASMARG ';' 10 | error T_MATCHRBRACE 11 | error ';' 12 braces : T_LBRACE T_MATCHRBRACE 13 linkage_specification : T_EXTERN T_STRING_LITERAL braces 14 | T_EXTERN T_STRING_LITERAL declaration 15 declaration : decl_specifiers ';' 16 | decl_specifiers init_declarator_list ';' 17 $$1 : 18 declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';' 19 any_typedef : T_EXTENSION T_TYPEDEF 20 | T_TYPEDEF 21 opt_declarator_list : 22 | declarator_list 23 declarator_list : declarator 24 | declarator_list ',' declarator 25 $$2 : 26 $$3 : 27 function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE 28 $$4 : 29 function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE 30 opt_declaration_list : 31 | T_VA_DCL 32 | declaration_list 33 declaration_list : declaration 34 | declaration_list declaration 35 decl_specifiers : decl_specifier 36 | decl_specifiers decl_specifier 37 decl_specifier : storage_class 38 | type_specifier 39 | type_qualifier 40 storage_class : T_AUTO 41 | T_EXTERN 42 | T_REGISTER 43 | T_STATIC 44 | T_INLINE 45 | T_EXTENSION 46 type_specifier : T_CHAR 47 | T_DOUBLE 48 | T_FLOAT 49 | T_INT 50 | T_LONG 51 | T_SHORT 52 | T_SIGNED 53 | T_UNSIGNED 54 | T_VOID 55 | T_Bool 56 | T_Complex 57 | T_Imaginary 58 | T_TYPEDEF_NAME 59 | struct_or_union_specifier 60 | enum_specifier 61 type_qualifier : T_TYPE_QUALIFIER 62 | T_DEFINE_NAME 63 struct_or_union_specifier : struct_or_union any_id braces 64 | struct_or_union braces 65 | struct_or_union any_id 66 struct_or_union : T_STRUCT 67 | T_UNION 68 init_declarator_list : init_declarator 69 | init_declarator_list ',' init_declarator 70 init_declarator : declarator 71 $$5 : 72 init_declarator : declarator '=' $$5 T_INITIALIZER 73 enum_specifier : enumeration any_id braces 74 | enumeration braces 75 | enumeration any_id 76 enumeration : T_ENUM 77 any_id : T_IDENTIFIER 78 | T_TYPEDEF_NAME 79 declarator : pointer direct_declarator 80 | direct_declarator 81 direct_declarator : identifier_or_ref 82 | '(' declarator ')' 83 | direct_declarator T_BRACKETS 84 | direct_declarator '(' parameter_type_list ')' 85 | direct_declarator '(' opt_identifier_list ')' 86 pointer : '*' opt_type_qualifiers 87 | '*' opt_type_qualifiers pointer 88 opt_type_qualifiers : 89 | type_qualifier_list 90 type_qualifier_list : type_qualifier 91 | type_qualifier_list type_qualifier 92 parameter_type_list : parameter_list 93 | parameter_list ',' T_ELLIPSIS 94 parameter_list : parameter_declaration 95 | parameter_list ',' parameter_declaration 96 parameter_declaration : decl_specifiers declarator 97 | decl_specifiers abs_declarator 98 | decl_specifiers 99 opt_identifier_list : 100 | identifier_list 101 identifier_list : any_id 102 | identifier_list ',' any_id 103 identifier_or_ref : any_id 104 | '&' any_id 105 abs_declarator : pointer 106 | pointer direct_abs_declarator 107 | direct_abs_declarator 108 direct_abs_declarator : '(' abs_declarator ')' 109 | direct_abs_declarator T_BRACKETS 110 | T_BRACKETS 111 | direct_abs_declarator '(' parameter_type_list ')' 112 | direct_abs_declarator '(' ')' 113 | '(' parameter_type_list ')' 114 | '(' ')' state 0 $accept : . program $end (0) program : . (1) error shift 1 '(' shift 2 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 6 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 9 T_REGISTER shift 10 T_STATIC shift 11 T_TYPEDEF shift 12 T_INLINE shift 13 T_EXTENSION shift 14 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 T_ASM shift 31 ';' shift 32 $end reduce 1 program goto 33 decl_specifiers goto 34 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 declarator goto 41 direct_declarator goto 42 struct_or_union goto 43 pointer goto 44 any_id goto 45 identifier_or_ref goto 46 enumeration goto 47 translation_unit goto 48 external_declaration goto 49 declaration goto 50 function_definition goto 51 linkage_specification goto 52 any_typedef goto 53 state 1 external_declaration : error . T_MATCHRBRACE (10) external_declaration : error . ';' (11) T_MATCHRBRACE shift 54 ';' shift 55 . error state 2 direct_declarator : '(' . declarator ')' (82) '(' shift 2 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 . error declarator goto 57 direct_declarator goto 42 pointer goto 44 any_id goto 45 identifier_or_ref goto 46 state 3 pointer : '*' . opt_type_qualifiers (86) pointer : '*' . opt_type_qualifiers pointer (87) opt_type_qualifiers : . (88) T_DEFINE_NAME shift 7 T_TYPE_QUALIFIER shift 30 '(' reduce 88 '*' reduce 88 '&' reduce 88 T_IDENTIFIER reduce 88 T_TYPEDEF_NAME reduce 88 T_BRACKETS reduce 88 ',' reduce 88 ')' reduce 88 type_qualifier goto 58 opt_type_qualifiers goto 59 type_qualifier_list goto 60 state 4 identifier_or_ref : '&' . any_id (104) T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 . error any_id goto 61 state 5 any_id : T_IDENTIFIER . (77) . reduce 77 6: reduce/reduce conflict (reduce 58, reduce 78) on '(' 6: reduce/reduce conflict (reduce 58, reduce 78) on T_TYPEDEF_NAME 6: reduce/reduce conflict (reduce 58, reduce 78) on T_DEFINE_NAME 6: reduce/reduce conflict (reduce 58, reduce 78) on T_AUTO 6: reduce/reduce conflict (reduce 58, reduce 78) on T_EXTERN 6: reduce/reduce conflict (reduce 58, reduce 78) on T_REGISTER 6: reduce/reduce conflict (reduce 58, reduce 78) on T_STATIC 6: reduce/reduce conflict (reduce 58, reduce 78) on T_INLINE 6: reduce/reduce conflict (reduce 58, reduce 78) on T_EXTENSION 6: reduce/reduce conflict (reduce 58, reduce 78) on T_CHAR 6: reduce/reduce conflict (reduce 58, reduce 78) on T_DOUBLE 6: reduce/reduce conflict (reduce 58, reduce 78) on T_FLOAT 6: reduce/reduce conflict (reduce 58, reduce 78) on T_INT 6: reduce/reduce conflict (reduce 58, reduce 78) on T_VOID 6: reduce/reduce conflict (reduce 58, reduce 78) on T_LONG 6: reduce/reduce conflict (reduce 58, reduce 78) on T_SHORT 6: reduce/reduce conflict (reduce 58, reduce 78) on T_SIGNED 6: reduce/reduce conflict (reduce 58, reduce 78) on T_UNSIGNED 6: reduce/reduce conflict (reduce 58, reduce 78) on T_ENUM 6: reduce/reduce conflict (reduce 58, reduce 78) on T_STRUCT 6: reduce/reduce conflict (reduce 58, reduce 78) on T_UNION 6: reduce/reduce conflict (reduce 58, reduce 78) on T_Bool 6: reduce/reduce conflict (reduce 58, reduce 78) on T_Complex 6: reduce/reduce conflict (reduce 58, reduce 78) on T_Imaginary 6: reduce/reduce conflict (reduce 58, reduce 78) on T_TYPE_QUALIFIER 6: reduce/reduce conflict (reduce 58, reduce 78) on T_BRACKETS 6: reduce/reduce conflict (reduce 58, reduce 78) on ';' 6: reduce/reduce conflict (reduce 58, reduce 78) on ',' 6: reduce/reduce conflict (reduce 58, reduce 78) on ')' state 6 type_specifier : T_TYPEDEF_NAME . (58) any_id : T_TYPEDEF_NAME . (78) '(' reduce 58 '*' reduce 58 '&' reduce 58 T_IDENTIFIER reduce 58 T_TYPEDEF_NAME reduce 58 T_DEFINE_NAME reduce 58 T_AUTO reduce 58 T_EXTERN reduce 58 T_REGISTER reduce 58 T_STATIC reduce 58 T_TYPEDEF reduce 78 T_INLINE reduce 58 T_EXTENSION reduce 58 T_CHAR reduce 58 T_DOUBLE reduce 58 T_FLOAT reduce 58 T_INT reduce 58 T_VOID reduce 58 T_LONG reduce 58 T_SHORT reduce 58 T_SIGNED reduce 58 T_UNSIGNED reduce 58 T_ENUM reduce 58 T_STRUCT reduce 58 T_UNION reduce 58 T_Bool reduce 58 T_Complex reduce 58 T_Imaginary reduce 58 T_TYPE_QUALIFIER reduce 58 T_BRACKETS reduce 58 T_LBRACE reduce 78 T_VA_DCL reduce 78 ';' reduce 58 ',' reduce 58 '=' reduce 78 ')' reduce 58 state 7 type_qualifier : T_DEFINE_NAME . (62) . reduce 62 state 8 storage_class : T_AUTO . (40) . reduce 40 state 9 linkage_specification : T_EXTERN . T_STRING_LITERAL braces (13) linkage_specification : T_EXTERN . T_STRING_LITERAL declaration (14) storage_class : T_EXTERN . (41) T_STRING_LITERAL shift 62 '(' reduce 41 '*' reduce 41 '&' reduce 41 T_IDENTIFIER reduce 41 T_TYPEDEF_NAME reduce 41 T_DEFINE_NAME reduce 41 T_AUTO reduce 41 T_EXTERN reduce 41 T_REGISTER reduce 41 T_STATIC reduce 41 T_INLINE reduce 41 T_EXTENSION reduce 41 T_CHAR reduce 41 T_DOUBLE reduce 41 T_FLOAT reduce 41 T_INT reduce 41 T_VOID reduce 41 T_LONG reduce 41 T_SHORT reduce 41 T_SIGNED reduce 41 T_UNSIGNED reduce 41 T_ENUM reduce 41 T_STRUCT reduce 41 T_UNION reduce 41 T_Bool reduce 41 T_Complex reduce 41 T_Imaginary reduce 41 T_TYPE_QUALIFIER reduce 41 ';' reduce 41 state 10 storage_class : T_REGISTER . (42) . reduce 42 state 11 storage_class : T_STATIC . (43) . reduce 43 state 12 any_typedef : T_TYPEDEF . (20) . reduce 20 state 13 storage_class : T_INLINE . (44) . reduce 44 state 14 any_typedef : T_EXTENSION . T_TYPEDEF (19) storage_class : T_EXTENSION . (45) T_TYPEDEF shift 63 '(' reduce 45 '*' reduce 45 '&' reduce 45 T_IDENTIFIER reduce 45 T_TYPEDEF_NAME reduce 45 T_DEFINE_NAME reduce 45 T_AUTO reduce 45 T_EXTERN reduce 45 T_REGISTER reduce 45 T_STATIC reduce 45 T_INLINE reduce 45 T_EXTENSION reduce 45 T_CHAR reduce 45 T_DOUBLE reduce 45 T_FLOAT reduce 45 T_INT reduce 45 T_VOID reduce 45 T_LONG reduce 45 T_SHORT reduce 45 T_SIGNED reduce 45 T_UNSIGNED reduce 45 T_ENUM reduce 45 T_STRUCT reduce 45 T_UNION reduce 45 T_Bool reduce 45 T_Complex reduce 45 T_Imaginary reduce 45 T_TYPE_QUALIFIER reduce 45 ';' reduce 45 state 15 type_specifier : T_CHAR . (46) . reduce 46 state 16 type_specifier : T_DOUBLE . (47) . reduce 47 state 17 type_specifier : T_FLOAT . (48) . reduce 48 state 18 type_specifier : T_INT . (49) . reduce 49 state 19 type_specifier : T_VOID . (54) . reduce 54 state 20 type_specifier : T_LONG . (50) . reduce 50 state 21 type_specifier : T_SHORT . (51) . reduce 51 state 22 type_specifier : T_SIGNED . (52) . reduce 52 state 23 type_specifier : T_UNSIGNED . (53) . reduce 53 state 24 enumeration : T_ENUM . (76) . reduce 76 state 25 struct_or_union : T_STRUCT . (66) . reduce 66 state 26 struct_or_union : T_UNION . (67) . reduce 67 state 27 type_specifier : T_Bool . (55) . reduce 55 state 28 type_specifier : T_Complex . (56) . reduce 56 state 29 type_specifier : T_Imaginary . (57) . reduce 57 state 30 type_qualifier : T_TYPE_QUALIFIER . (61) . reduce 61 state 31 external_declaration : T_ASM . T_ASMARG ';' (9) T_ASMARG shift 64 . error state 32 external_declaration : ';' . (7) . reduce 7 state 33 $accept : program . $end (0) $end accept state 34 declaration : decl_specifiers . ';' (15) declaration : decl_specifiers . init_declarator_list ';' (16) function_definition : decl_specifiers . declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE (27) decl_specifiers : decl_specifiers . decl_specifier (36) '(' shift 2 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 6 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_INLINE shift 13 T_EXTENSION shift 66 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 ';' shift 67 . error decl_specifier goto 68 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 init_declarator_list goto 69 init_declarator goto 70 declarator goto 71 direct_declarator goto 42 struct_or_union goto 43 pointer goto 44 any_id goto 45 identifier_or_ref goto 46 enumeration goto 47 state 35 decl_specifiers : decl_specifier . (35) . reduce 35 state 36 decl_specifier : storage_class . (37) . reduce 37 state 37 decl_specifier : type_specifier . (38) . reduce 38 state 38 decl_specifier : type_qualifier . (39) . reduce 39 state 39 type_specifier : struct_or_union_specifier . (59) . reduce 59 state 40 type_specifier : enum_specifier . (60) . reduce 60 state 41 function_definition : declarator . $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE (29) $$4 : . (28) . reduce 28 $$4 goto 72 state 42 declarator : direct_declarator . (80) direct_declarator : direct_declarator . T_BRACKETS (83) direct_declarator : direct_declarator . '(' parameter_type_list ')' (84) direct_declarator : direct_declarator . '(' opt_identifier_list ')' (85) '(' shift 73 T_BRACKETS shift 74 T_TYPEDEF_NAME reduce 80 T_DEFINE_NAME reduce 80 T_AUTO reduce 80 T_EXTERN reduce 80 T_REGISTER reduce 80 T_STATIC reduce 80 T_TYPEDEF reduce 80 T_INLINE reduce 80 T_EXTENSION reduce 80 T_CHAR reduce 80 T_DOUBLE reduce 80 T_FLOAT reduce 80 T_INT reduce 80 T_VOID reduce 80 T_LONG reduce 80 T_SHORT reduce 80 T_SIGNED reduce 80 T_UNSIGNED reduce 80 T_ENUM reduce 80 T_STRUCT reduce 80 T_UNION reduce 80 T_Bool reduce 80 T_Complex reduce 80 T_Imaginary reduce 80 T_TYPE_QUALIFIER reduce 80 T_LBRACE reduce 80 T_VA_DCL reduce 80 ';' reduce 80 ',' reduce 80 '=' reduce 80 ')' reduce 80 state 43 struct_or_union_specifier : struct_or_union . any_id braces (63) struct_or_union_specifier : struct_or_union . braces (64) struct_or_union_specifier : struct_or_union . any_id (65) T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 T_LBRACE shift 75 . error any_id goto 76 braces goto 77 state 44 declarator : pointer . direct_declarator (79) '(' shift 2 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 . error direct_declarator goto 78 any_id goto 45 identifier_or_ref goto 46 state 45 identifier_or_ref : any_id . (103) . reduce 103 state 46 direct_declarator : identifier_or_ref . (81) . reduce 81 state 47 enum_specifier : enumeration . any_id braces (73) enum_specifier : enumeration . braces (74) enum_specifier : enumeration . any_id (75) T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 T_LBRACE shift 75 . error any_id goto 79 braces goto 80 state 48 program : translation_unit . (2) translation_unit : translation_unit . external_declaration (4) error shift 1 '(' shift 2 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 6 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 9 T_REGISTER shift 10 T_STATIC shift 11 T_TYPEDEF shift 12 T_INLINE shift 13 T_EXTENSION shift 14 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 T_ASM shift 31 ';' shift 32 $end reduce 2 decl_specifiers goto 34 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 declarator goto 41 direct_declarator goto 42 struct_or_union goto 43 pointer goto 44 any_id goto 45 identifier_or_ref goto 46 enumeration goto 47 external_declaration goto 81 declaration goto 50 function_definition goto 51 linkage_specification goto 52 any_typedef goto 53 state 49 translation_unit : external_declaration . (3) . reduce 3 state 50 external_declaration : declaration . (5) . reduce 5 state 51 external_declaration : function_definition . (6) . reduce 6 state 52 external_declaration : linkage_specification . (8) . reduce 8 state 53 declaration : any_typedef . decl_specifiers $$1 opt_declarator_list ';' (18) T_TYPEDEF_NAME shift 82 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_INLINE shift 13 T_EXTENSION shift 66 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 . error decl_specifiers goto 83 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 struct_or_union goto 43 enumeration goto 47 state 54 external_declaration : error T_MATCHRBRACE . (10) . reduce 10 state 55 external_declaration : error ';' . (11) . reduce 11 state 56 any_id : T_TYPEDEF_NAME . (78) . reduce 78 state 57 direct_declarator : '(' declarator . ')' (82) ')' shift 84 . error state 58 type_qualifier_list : type_qualifier . (90) . reduce 90 state 59 pointer : '*' opt_type_qualifiers . (86) pointer : '*' opt_type_qualifiers . pointer (87) '*' shift 3 '(' reduce 86 '&' reduce 86 T_IDENTIFIER reduce 86 T_TYPEDEF_NAME reduce 86 T_BRACKETS reduce 86 ',' reduce 86 ')' reduce 86 pointer goto 85 state 60 opt_type_qualifiers : type_qualifier_list . (89) type_qualifier_list : type_qualifier_list . type_qualifier (91) T_DEFINE_NAME shift 7 T_TYPE_QUALIFIER shift 30 '(' reduce 89 '*' reduce 89 '&' reduce 89 T_IDENTIFIER reduce 89 T_TYPEDEF_NAME reduce 89 T_BRACKETS reduce 89 ',' reduce 89 ')' reduce 89 type_qualifier goto 86 state 61 identifier_or_ref : '&' any_id . (104) . reduce 104 state 62 linkage_specification : T_EXTERN T_STRING_LITERAL . braces (13) linkage_specification : T_EXTERN T_STRING_LITERAL . declaration (14) T_TYPEDEF_NAME shift 82 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_TYPEDEF shift 12 T_INLINE shift 13 T_EXTENSION shift 14 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 T_LBRACE shift 75 . error decl_specifiers goto 87 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 struct_or_union goto 43 enumeration goto 47 declaration goto 88 braces goto 89 any_typedef goto 53 state 63 any_typedef : T_EXTENSION T_TYPEDEF . (19) . reduce 19 state 64 external_declaration : T_ASM T_ASMARG . ';' (9) ';' shift 90 . error state 65 storage_class : T_EXTERN . (41) . reduce 41 state 66 storage_class : T_EXTENSION . (45) . reduce 45 state 67 declaration : decl_specifiers ';' . (15) . reduce 15 state 68 decl_specifiers : decl_specifiers decl_specifier . (36) . reduce 36 state 69 declaration : decl_specifiers init_declarator_list . ';' (16) init_declarator_list : init_declarator_list . ',' init_declarator (69) ';' shift 91 ',' shift 92 . error state 70 init_declarator_list : init_declarator . (68) . reduce 68 state 71 function_definition : decl_specifiers declarator . $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE (27) init_declarator : declarator . (70) init_declarator : declarator . '=' $$5 T_INITIALIZER (72) $$2 : . (25) '=' shift 93 T_TYPEDEF_NAME reduce 25 T_DEFINE_NAME reduce 25 T_AUTO reduce 25 T_EXTERN reduce 25 T_REGISTER reduce 25 T_STATIC reduce 25 T_TYPEDEF reduce 25 T_INLINE reduce 25 T_EXTENSION reduce 25 T_CHAR reduce 25 T_DOUBLE reduce 25 T_FLOAT reduce 25 T_INT reduce 25 T_VOID reduce 25 T_LONG reduce 25 T_SHORT reduce 25 T_SIGNED reduce 25 T_UNSIGNED reduce 25 T_ENUM reduce 25 T_STRUCT reduce 25 T_UNION reduce 25 T_Bool reduce 25 T_Complex reduce 25 T_Imaginary reduce 25 T_TYPE_QUALIFIER reduce 25 T_LBRACE reduce 25 T_VA_DCL reduce 25 ';' reduce 70 ',' reduce 70 $$2 goto 94 state 72 function_definition : declarator $$4 . opt_declaration_list T_LBRACE T_MATCHRBRACE (29) opt_declaration_list : . (30) T_TYPEDEF_NAME shift 82 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_TYPEDEF shift 12 T_INLINE shift 13 T_EXTENSION shift 14 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 T_VA_DCL shift 95 T_LBRACE reduce 30 decl_specifiers goto 87 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 struct_or_union goto 43 enumeration goto 47 declaration goto 96 any_typedef goto 53 opt_declaration_list goto 97 declaration_list goto 98 state 73 direct_declarator : direct_declarator '(' . parameter_type_list ')' (84) direct_declarator : direct_declarator '(' . opt_identifier_list ')' (85) opt_identifier_list : . (99) T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 6 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_INLINE shift 13 T_EXTENSION shift 66 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 ')' reduce 99 decl_specifiers goto 99 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 parameter_type_list goto 100 parameter_list goto 101 parameter_declaration goto 102 opt_identifier_list goto 103 identifier_list goto 104 struct_or_union goto 43 any_id goto 105 enumeration goto 47 state 74 direct_declarator : direct_declarator T_BRACKETS . (83) . reduce 83 state 75 braces : T_LBRACE . T_MATCHRBRACE (12) T_MATCHRBRACE shift 106 . error state 76 struct_or_union_specifier : struct_or_union any_id . braces (63) struct_or_union_specifier : struct_or_union any_id . (65) T_LBRACE shift 75 '(' reduce 65 '*' reduce 65 '&' reduce 65 T_IDENTIFIER reduce 65 T_TYPEDEF_NAME reduce 65 T_DEFINE_NAME reduce 65 T_AUTO reduce 65 T_EXTERN reduce 65 T_REGISTER reduce 65 T_STATIC reduce 65 T_INLINE reduce 65 T_EXTENSION reduce 65 T_CHAR reduce 65 T_DOUBLE reduce 65 T_FLOAT reduce 65 T_INT reduce 65 T_VOID reduce 65 T_LONG reduce 65 T_SHORT reduce 65 T_SIGNED reduce 65 T_UNSIGNED reduce 65 T_ENUM reduce 65 T_STRUCT reduce 65 T_UNION reduce 65 T_Bool reduce 65 T_Complex reduce 65 T_Imaginary reduce 65 T_TYPE_QUALIFIER reduce 65 T_BRACKETS reduce 65 ';' reduce 65 ',' reduce 65 ')' reduce 65 braces goto 107 state 77 struct_or_union_specifier : struct_or_union braces . (64) . reduce 64 state 78 declarator : pointer direct_declarator . (79) direct_declarator : direct_declarator . T_BRACKETS (83) direct_declarator : direct_declarator . '(' parameter_type_list ')' (84) direct_declarator : direct_declarator . '(' opt_identifier_list ')' (85) '(' shift 73 T_BRACKETS shift 74 T_TYPEDEF_NAME reduce 79 T_DEFINE_NAME reduce 79 T_AUTO reduce 79 T_EXTERN reduce 79 T_REGISTER reduce 79 T_STATIC reduce 79 T_TYPEDEF reduce 79 T_INLINE reduce 79 T_EXTENSION reduce 79 T_CHAR reduce 79 T_DOUBLE reduce 79 T_FLOAT reduce 79 T_INT reduce 79 T_VOID reduce 79 T_LONG reduce 79 T_SHORT reduce 79 T_SIGNED reduce 79 T_UNSIGNED reduce 79 T_ENUM reduce 79 T_STRUCT reduce 79 T_UNION reduce 79 T_Bool reduce 79 T_Complex reduce 79 T_Imaginary reduce 79 T_TYPE_QUALIFIER reduce 79 T_LBRACE reduce 79 T_VA_DCL reduce 79 ';' reduce 79 ',' reduce 79 '=' reduce 79 ')' reduce 79 state 79 enum_specifier : enumeration any_id . braces (73) enum_specifier : enumeration any_id . (75) T_LBRACE shift 75 '(' reduce 75 '*' reduce 75 '&' reduce 75 T_IDENTIFIER reduce 75 T_TYPEDEF_NAME reduce 75 T_DEFINE_NAME reduce 75 T_AUTO reduce 75 T_EXTERN reduce 75 T_REGISTER reduce 75 T_STATIC reduce 75 T_INLINE reduce 75 T_EXTENSION reduce 75 T_CHAR reduce 75 T_DOUBLE reduce 75 T_FLOAT reduce 75 T_INT reduce 75 T_VOID reduce 75 T_LONG reduce 75 T_SHORT reduce 75 T_SIGNED reduce 75 T_UNSIGNED reduce 75 T_ENUM reduce 75 T_STRUCT reduce 75 T_UNION reduce 75 T_Bool reduce 75 T_Complex reduce 75 T_Imaginary reduce 75 T_TYPE_QUALIFIER reduce 75 T_BRACKETS reduce 75 ';' reduce 75 ',' reduce 75 ')' reduce 75 braces goto 108 state 80 enum_specifier : enumeration braces . (74) . reduce 74 state 81 translation_unit : translation_unit external_declaration . (4) . reduce 4 state 82 type_specifier : T_TYPEDEF_NAME . (58) . reduce 58 83: shift/reduce conflict (shift 82, reduce 17) on T_TYPEDEF_NAME state 83 declaration : any_typedef decl_specifiers . $$1 opt_declarator_list ';' (18) decl_specifiers : decl_specifiers . decl_specifier (36) $$1 : . (17) T_TYPEDEF_NAME shift 82 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_INLINE shift 13 T_EXTENSION shift 66 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 '(' reduce 17 '*' reduce 17 '&' reduce 17 T_IDENTIFIER reduce 17 ';' reduce 17 decl_specifier goto 68 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 struct_or_union goto 43 enumeration goto 47 $$1 goto 109 state 84 direct_declarator : '(' declarator ')' . (82) . reduce 82 state 85 pointer : '*' opt_type_qualifiers pointer . (87) . reduce 87 state 86 type_qualifier_list : type_qualifier_list type_qualifier . (91) . reduce 91 state 87 declaration : decl_specifiers . ';' (15) declaration : decl_specifiers . init_declarator_list ';' (16) decl_specifiers : decl_specifiers . decl_specifier (36) '(' shift 2 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 6 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_INLINE shift 13 T_EXTENSION shift 66 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 ';' shift 67 . error decl_specifier goto 68 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 init_declarator_list goto 69 init_declarator goto 70 declarator goto 110 direct_declarator goto 42 struct_or_union goto 43 pointer goto 44 any_id goto 45 identifier_or_ref goto 46 enumeration goto 47 state 88 linkage_specification : T_EXTERN T_STRING_LITERAL declaration . (14) . reduce 14 state 89 linkage_specification : T_EXTERN T_STRING_LITERAL braces . (13) . reduce 13 state 90 external_declaration : T_ASM T_ASMARG ';' . (9) . reduce 9 state 91 declaration : decl_specifiers init_declarator_list ';' . (16) . reduce 16 state 92 init_declarator_list : init_declarator_list ',' . init_declarator (69) '(' shift 2 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 . error init_declarator goto 111 declarator goto 110 direct_declarator goto 42 pointer goto 44 any_id goto 45 identifier_or_ref goto 46 state 93 init_declarator : declarator '=' . $$5 T_INITIALIZER (72) $$5 : . (71) . reduce 71 $$5 goto 112 state 94 function_definition : decl_specifiers declarator $$2 . opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE (27) opt_declaration_list : . (30) T_TYPEDEF_NAME shift 82 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_TYPEDEF shift 12 T_INLINE shift 13 T_EXTENSION shift 14 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 T_VA_DCL shift 95 T_LBRACE reduce 30 decl_specifiers goto 87 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 struct_or_union goto 43 enumeration goto 47 declaration goto 96 any_typedef goto 53 opt_declaration_list goto 113 declaration_list goto 98 state 95 opt_declaration_list : T_VA_DCL . (31) . reduce 31 state 96 declaration_list : declaration . (33) . reduce 33 state 97 function_definition : declarator $$4 opt_declaration_list . T_LBRACE T_MATCHRBRACE (29) T_LBRACE shift 114 . error state 98 opt_declaration_list : declaration_list . (32) declaration_list : declaration_list . declaration (34) T_TYPEDEF_NAME shift 82 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_TYPEDEF shift 12 T_INLINE shift 13 T_EXTENSION shift 14 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 T_LBRACE reduce 32 decl_specifiers goto 87 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 struct_or_union goto 43 enumeration goto 47 declaration goto 115 any_typedef goto 53 state 99 decl_specifiers : decl_specifiers . decl_specifier (36) parameter_declaration : decl_specifiers . declarator (96) parameter_declaration : decl_specifiers . abs_declarator (97) parameter_declaration : decl_specifiers . (98) '(' shift 116 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 6 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_INLINE shift 13 T_EXTENSION shift 66 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 T_BRACKETS shift 117 ',' reduce 98 ')' reduce 98 decl_specifier goto 68 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 declarator goto 118 direct_declarator goto 42 abs_declarator goto 119 direct_abs_declarator goto 120 struct_or_union goto 43 pointer goto 121 any_id goto 45 identifier_or_ref goto 46 enumeration goto 47 state 100 direct_declarator : direct_declarator '(' parameter_type_list . ')' (84) ')' shift 122 . error state 101 parameter_type_list : parameter_list . (92) parameter_type_list : parameter_list . ',' T_ELLIPSIS (93) parameter_list : parameter_list . ',' parameter_declaration (95) ',' shift 123 ')' reduce 92 state 102 parameter_list : parameter_declaration . (94) . reduce 94 state 103 direct_declarator : direct_declarator '(' opt_identifier_list . ')' (85) ')' shift 124 . error state 104 opt_identifier_list : identifier_list . (100) identifier_list : identifier_list . ',' any_id (102) ',' shift 125 ')' reduce 100 state 105 identifier_list : any_id . (101) . reduce 101 state 106 braces : T_LBRACE T_MATCHRBRACE . (12) . reduce 12 state 107 struct_or_union_specifier : struct_or_union any_id braces . (63) . reduce 63 state 108 enum_specifier : enumeration any_id braces . (73) . reduce 73 state 109 declaration : any_typedef decl_specifiers $$1 . opt_declarator_list ';' (18) opt_declarator_list : . (21) '(' shift 2 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 ';' reduce 21 declarator goto 126 direct_declarator goto 42 pointer goto 44 any_id goto 45 identifier_or_ref goto 46 opt_declarator_list goto 127 declarator_list goto 128 state 110 init_declarator : declarator . (70) init_declarator : declarator . '=' $$5 T_INITIALIZER (72) '=' shift 93 ';' reduce 70 ',' reduce 70 state 111 init_declarator_list : init_declarator_list ',' init_declarator . (69) . reduce 69 state 112 init_declarator : declarator '=' $$5 . T_INITIALIZER (72) T_INITIALIZER shift 129 . error state 113 function_definition : decl_specifiers declarator $$2 opt_declaration_list . T_LBRACE $$3 T_MATCHRBRACE (27) T_LBRACE shift 130 . error state 114 function_definition : declarator $$4 opt_declaration_list T_LBRACE . T_MATCHRBRACE (29) T_MATCHRBRACE shift 131 . error state 115 declaration_list : declaration_list declaration . (34) . reduce 34 state 116 direct_declarator : '(' . declarator ')' (82) direct_abs_declarator : '(' . abs_declarator ')' (108) direct_abs_declarator : '(' . parameter_type_list ')' (113) direct_abs_declarator : '(' . ')' (114) '(' shift 116 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 6 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_INLINE shift 13 T_EXTENSION shift 66 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 T_BRACKETS shift 117 ')' shift 132 . error decl_specifiers goto 99 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 declarator goto 57 direct_declarator goto 42 abs_declarator goto 133 direct_abs_declarator goto 120 parameter_type_list goto 134 parameter_list goto 101 parameter_declaration goto 102 struct_or_union goto 43 pointer goto 121 any_id goto 45 identifier_or_ref goto 46 enumeration goto 47 state 117 direct_abs_declarator : T_BRACKETS . (110) . reduce 110 state 118 parameter_declaration : decl_specifiers declarator . (96) . reduce 96 state 119 parameter_declaration : decl_specifiers abs_declarator . (97) . reduce 97 state 120 abs_declarator : direct_abs_declarator . (107) direct_abs_declarator : direct_abs_declarator . T_BRACKETS (109) direct_abs_declarator : direct_abs_declarator . '(' parameter_type_list ')' (111) direct_abs_declarator : direct_abs_declarator . '(' ')' (112) '(' shift 135 T_BRACKETS shift 136 ',' reduce 107 ')' reduce 107 state 121 declarator : pointer . direct_declarator (79) abs_declarator : pointer . (105) abs_declarator : pointer . direct_abs_declarator (106) '(' shift 116 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 T_BRACKETS shift 117 ',' reduce 105 ')' reduce 105 direct_declarator goto 78 direct_abs_declarator goto 137 any_id goto 45 identifier_or_ref goto 46 state 122 direct_declarator : direct_declarator '(' parameter_type_list ')' . (84) . reduce 84 state 123 parameter_type_list : parameter_list ',' . T_ELLIPSIS (93) parameter_list : parameter_list ',' . parameter_declaration (95) T_TYPEDEF_NAME shift 82 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_INLINE shift 13 T_EXTENSION shift 66 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 T_ELLIPSIS shift 138 . error decl_specifiers goto 99 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 parameter_declaration goto 139 struct_or_union goto 43 enumeration goto 47 state 124 direct_declarator : direct_declarator '(' opt_identifier_list ')' . (85) . reduce 85 state 125 identifier_list : identifier_list ',' . any_id (102) T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 . error any_id goto 140 state 126 declarator_list : declarator . (23) . reduce 23 state 127 declaration : any_typedef decl_specifiers $$1 opt_declarator_list . ';' (18) ';' shift 141 . error state 128 opt_declarator_list : declarator_list . (22) declarator_list : declarator_list . ',' declarator (24) ',' shift 142 ';' reduce 22 state 129 init_declarator : declarator '=' $$5 T_INITIALIZER . (72) . reduce 72 state 130 function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE . $$3 T_MATCHRBRACE (27) $$3 : . (26) . reduce 26 $$3 goto 143 state 131 function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE . (29) . reduce 29 state 132 direct_abs_declarator : '(' ')' . (114) . reduce 114 state 133 direct_abs_declarator : '(' abs_declarator . ')' (108) ')' shift 144 . error state 134 direct_abs_declarator : '(' parameter_type_list . ')' (113) ')' shift 145 . error state 135 direct_abs_declarator : direct_abs_declarator '(' . parameter_type_list ')' (111) direct_abs_declarator : direct_abs_declarator '(' . ')' (112) T_TYPEDEF_NAME shift 82 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_INLINE shift 13 T_EXTENSION shift 66 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 ')' shift 146 . error decl_specifiers goto 99 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 parameter_type_list goto 147 parameter_list goto 101 parameter_declaration goto 102 struct_or_union goto 43 enumeration goto 47 state 136 direct_abs_declarator : direct_abs_declarator T_BRACKETS . (109) . reduce 109 state 137 abs_declarator : pointer direct_abs_declarator . (106) direct_abs_declarator : direct_abs_declarator . T_BRACKETS (109) direct_abs_declarator : direct_abs_declarator . '(' parameter_type_list ')' (111) direct_abs_declarator : direct_abs_declarator . '(' ')' (112) '(' shift 135 T_BRACKETS shift 136 ',' reduce 106 ')' reduce 106 state 138 parameter_type_list : parameter_list ',' T_ELLIPSIS . (93) . reduce 93 state 139 parameter_list : parameter_list ',' parameter_declaration . (95) . reduce 95 state 140 identifier_list : identifier_list ',' any_id . (102) . reduce 102 state 141 declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';' . (18) . reduce 18 state 142 declarator_list : declarator_list ',' . declarator (24) '(' shift 2 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 . error declarator goto 148 direct_declarator goto 42 pointer goto 44 any_id goto 45 identifier_or_ref goto 46 state 143 function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 . T_MATCHRBRACE (27) T_MATCHRBRACE shift 149 . error state 144 direct_abs_declarator : '(' abs_declarator ')' . (108) . reduce 108 state 145 direct_abs_declarator : '(' parameter_type_list ')' . (113) . reduce 113 state 146 direct_abs_declarator : direct_abs_declarator '(' ')' . (112) . reduce 112 state 147 direct_abs_declarator : direct_abs_declarator '(' parameter_type_list . ')' (111) ')' shift 150 . error state 148 declarator_list : declarator_list ',' declarator . (24) . reduce 24 state 149 function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE . (27) . reduce 27 state 150 direct_abs_declarator : direct_abs_declarator '(' parameter_type_list ')' . (111) . reduce 111 State 6 contains 29 reduce/reduce conflicts. State 83 contains 1 shift/reduce conflict. 44 terminals, 43 nonterminals 115 grammar rules, 151 states byacc-20221106/test/yacc/quote_calc-s.tab.h0000644000000000000000000000025211704267405016730 0ustar rootroot#define OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 byacc-20221106/test/yacc/expr.oxout.tab.c0000644000000000000000000013203414164144476016510 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse expr_oxout_parse #endif /* yyparse */ #ifndef yylex #define yylex expr_oxout_lex #endif /* yylex */ #ifndef yyerror #define yyerror expr_oxout_error #endif /* yyerror */ #ifndef yychar #define yychar expr_oxout_char #endif /* yychar */ #ifndef yyval #define yyval expr_oxout_val #endif /* yyval */ #ifndef yylval #define yylval expr_oxout_lval #endif /* yylval */ #ifndef yydebug #define yydebug expr_oxout_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs expr_oxout_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag expr_oxout_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs expr_oxout_lhs #endif /* yylhs */ #ifndef yylen #define yylen expr_oxout_len #endif /* yylen */ #ifndef yydefred #define yydefred expr_oxout_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto expr_oxout_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex expr_oxout_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex expr_oxout_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex expr_oxout_gindex #endif /* yygindex */ #ifndef yytable #define yytable expr_oxout_table #endif /* yytable */ #ifndef yycheck #define yycheck expr_oxout_check #endif /* yycheck */ #ifndef yyname #define yyname expr_oxout_name #endif /* yyname */ #ifndef yyrule #define yyrule expr_oxout_rule #endif /* yyrule */ #define YYPREFIX "expr_oxout_" #define YYPURE 0 #line 5 "expr.oxout.y" #include #include #line 8 "expr.Y" #include "expr.oxout.h" #include extern int yylex(void); extern void yyerror(const char *); #line 27 "expr.oxout.y" #include #define yyyR USHRT_MAX #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #line 31 "expr.oxout.y" typedef union YYSTYPE { struct yyyOxAttrbs { struct yyyStackItem *yyyOxStackItem; } yyyOxAttrbs; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 38 "expr.oxout.y" #include #include static int yyyYok = 1; extern yyyFT yyyRCIL[]; void yyyExecuteRRsection(yyyGNT *rootNode); void yyyYoxInit(void); void yyyDecorate(void); struct yyyOxAttrbs; /* hack required to compensate for 'msta' behavior */ void yyyGenIntNode(long yyyProdNum, int yyyRHSlength, int yyyNattrbs, struct yyyOxAttrbs *yyval_OxAttrbs, ...); void yyyAdjustINRC(long yyyProdNum, int yyyRHSlength, long startP, long stopP, struct yyyOxAttrbs *yyval_OxAttrbs, ...); void yyyCheckUnsolvedInstTrav(yyyGNT *rootNode,long *nNZrc,long *cycleSum); void yyyUnsolvedInstSearchTrav(yyyGNT *pNode); void yyyUnsolvedInstSearchTravAux(yyyGNT *pNode); void yyyabort(void); #line 146 "expr.oxout.tab.c" /* 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 ID 257 #define CONST 258 #define YYERRCODE 256 typedef int YYINT; static const YYINT expr_oxout_lhs[] = { -1, 2, 0, 1, 3, 3, 3, 3, 3, 3, 3, }; static const YYINT expr_oxout_len[] = { 2, 0, 2, 1, 3, 3, 3, 3, 3, 1, 1, }; static const YYINT expr_oxout_defred[] = { 1, 0, 0, 9, 10, 0, 2, 0, 0, 0, 0, 0, 0, 8, 0, 0, 4, 0, }; static const YYINT expr_oxout_dgoto[] = { 1, 6, 2, 7, }; static const YYINT expr_oxout_sindex[] = { 0, 0, -40, 0, 0, -40, 0, -18, -24, -40, -40, -40, -40, 0, -37, -37, 0, -39, }; static const YYINT expr_oxout_rindex[] = { 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 2, 8, 0, 1, }; static const YYINT expr_oxout_gindex[] = { 0, 0, 0, 4, }; #define YYTABLESIZE 218 static const YYINT expr_oxout_table[] = { 5, 6, 5, 11, 0, 11, 3, 0, 7, 8, 12, 0, 0, 14, 15, 16, 17, 13, 11, 9, 0, 10, 0, 12, 11, 9, 0, 10, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 5, 6, 5, 6, 5, 6, 7, 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, }; static const YYINT expr_oxout_check[] = { 40, 0, 0, 42, -1, 42, 0, -1, 0, 5, 47, -1, -1, 9, 10, 11, 12, 41, 42, 43, -1, 45, -1, 47, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, 41, 43, 43, 45, 45, 47, 41, -1, 43, -1, 45, -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, -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, -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, -1, 257, 258, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 258 #define YYUNDFTOKEN 264 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const expr_oxout_name[] = { "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,0,0,0,0,0,0,0,0,0,0,0,"ID", "CONST",0,0,0,0,0,"illegal-symbol", }; static const char *const expr_oxout_rule[] = { "$accept : yyyAugNonterm", "$$1 :", "yyyAugNonterm : $$1 s", "s : expr", "expr : expr '*' expr", "expr : expr '+' expr", "expr : expr '/' expr", "expr : expr '-' expr", "expr : '(' expr ')'", "expr : ID", "expr : CONST", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 53 "expr.Y" int yyparse(void); int main() {yyparse(); } #line 138 "expr.oxout.y" long yyySSALspaceSize = 20000; long yyyRSmaxSize = 1000; long yyyTravStackMaxSize = 2000; struct yyySolvedSAlistCell {yyyWAT attrbNum; long next; }; #define yyyLambdaSSAL 0 long yyySSALCfreeList = yyyLambdaSSAL; long yyyNewSSALC = 1; struct yyySolvedSAlistCell *yyySSALspace; long yyyNbytesStackStg; yyyFT yyyRCIL[1]; short yyyIIIEL[] = {0, 0,2,6,10,14,18,22,24, }; long yyyIIEL[] = { 0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0, 1,1, }; long yyyIEL[] = { 0,0,0, }; yyyFT yyyEntL[1]; void yyyfatal(char *msg) {fputs(msg,stderr);exit(-1);} #define yyySSALof 'S' #define yyyRSof 'q' #define yyyTSof 't' void yyyHandleOverflow(char which) {char *msg1 = "?", *msg2; long oldSize = 0, newSize; switch(which) { case yyySSALof : msg1 = "SSAL overflow: "; oldSize = yyySSALspaceSize; break; case yyyRSof : msg1 = "ready set overflow: "; oldSize = yyyRSmaxSize; break; case yyyTSof : msg1 = "traversal stack overflow: "; oldSize = yyyTravStackMaxSize; break; default :; } newSize = (3*oldSize)/2; if (newSize < 100) newSize = 100; fputs(msg1,stderr); fprintf(stderr,"size was %ld.\n",oldSize); msg2 = " Have to modify evaluator: -Y%c%ld.\n"; fprintf(stderr,msg2,which,newSize); exit(-1); } void yyySignalEnts(yyyGNT *node,long startP,long stopP) {yyyGNT *dumNode; while (startP < stopP) { if (!yyyEntL[startP]) dumNode = node; else dumNode = (node->cL)[yyyEntL[startP]-1]; if (!(--((dumNode->refCountList)[yyyEntL[startP+1]] ) ) ) { if (++yyyRSTop == yyyAfterRS) {yyyHandleOverflow(yyyRSof); break; } yyyRSTop->node = dumNode; yyyRSTop->whichSym = yyyEntL[startP]; yyyRSTop->wa = yyyEntL[startP+1]; } startP += 2; } } void yyySolveAndSignal() { long yyyiDum,*yyypL; int yyyws,yyywa; yyyGNT *yyyRSTopN,*yyyRefN; yyyParent yyyRSTopNp; yyyRSTopNp = (yyyRSTopN = yyyRSTop->node)->parent; yyyRefN= (yyyws = (yyyRSTop->whichSym))?yyyRSTopNp.noderef:yyyRSTopN; yyywa = yyyRSTop->wa; yyyRSTop--; switch(yyyRefN->prodNum) { case 1: /***yacc rule 1***/ switch (yyyws) { } break; case 2: /***yacc rule 2***/ switch (yyyws) { } break; case 3: /***yacc rule 3***/ switch (yyyws) { } break; case 4: /***yacc rule 4***/ switch (yyyws) { } break; case 5: /***yacc rule 5***/ switch (yyyws) { } break; case 6: /***yacc rule 6***/ switch (yyyws) { } break; case 7: /***yacc rule 7***/ switch (yyyws) { case 1: /**/ switch (yyywa) { } break; } break; case 8: /***yacc rule 8***/ switch (yyyws) { case 1: /**/ switch (yyywa) { } break; } break; } /* switch */ if (yyyws) /* the just-solved instance was inherited. */ {if (yyyRSTopN->prodNum) {yyyiDum = yyyIIEL[yyyIIIEL[yyyRSTopN->prodNum]] + yyywa; yyySignalEnts(yyyRSTopN,yyyIEL[yyyiDum], yyyIEL[yyyiDum+1] ); } } else /* the just-solved instance was synthesized. */ {if (!(yyyRSTopN->parentIsStack)) /* node has a parent. */ {yyyiDum = yyyIIEL[yyyIIIEL[yyyRSTopNp.noderef->prodNum] + yyyRSTopN->whichSym ] + yyywa; yyySignalEnts(yyyRSTopNp.noderef, yyyIEL[yyyiDum], yyyIEL[yyyiDum+1] ); } else /* node is still on the stack--it has no parent yet. */ {yyypL = &(yyyRSTopNp.stackref->solvedSAlist); if (yyySSALCfreeList == yyyLambdaSSAL) {yyySSALspace[yyyNewSSALC].next = *yyypL; if ((*yyypL = yyyNewSSALC++) == yyySSALspaceSize) yyyHandleOverflow(yyySSALof); } else {yyyiDum = yyySSALCfreeList; yyySSALCfreeList = yyySSALspace[yyySSALCfreeList].next; yyySSALspace[yyyiDum].next = *yyypL; *yyypL = yyyiDum; } yyySSALspace[*yyypL].attrbNum = yyywa; } } } /* yyySolveAndSignal */ #define condStg unsigned int conds; #define yyyClearConds {yyyTST->conds = 0;} #define yyySetCond(n) {yyyTST->conds += (1<<(n));} #define yyyCond(n) ((yyyTST->conds & (1<<(n)))?1:0) struct yyyTravStackItem {yyyGNT *node; char isReady; condStg }; void yyyDoTraversals(yyyGNT *rootNode) {struct yyyTravStackItem *yyyTravStack,*yyyTST,*yyyAfterTravStack; yyyGNT *yyyTSTn,**yyyCLptr2; int yyyi,yyyRL,yyyPass; int i; if (!yyyYok) return; if ((yyyTravStack = ((struct yyyTravStackItem *) calloc((size_t)yyyTravStackMaxSize, (size_t)sizeof(struct yyyTravStackItem) ) ) ) == (struct yyyTravStackItem *)NULL ) {fputs("malloc error in traversal stack allocation\n",stderr); exit(-1); } yyyAfterTravStack = yyyTravStack + yyyTravStackMaxSize; yyyTravStack++; for (yyyi=0; yyyi<2; yyyi++) { yyyTST = yyyTravStack; yyyTST->node = rootNode; yyyTST->isReady = 0; yyyClearConds while(yyyTST >= yyyTravStack) {yyyTSTn = yyyTST->node; if (yyyTST->isReady) {yyyPass = 1; goto yyyTravSwitch; yyyTpop: yyyTST--; } else {yyyPass = 0; goto yyyTravSwitch; yyyTpush: yyyTST->isReady = 1; if (yyyTSTn->prodNum) {if (yyyRL) {yyyCLptr2 = yyyTSTn->cL; i = yyyTSTn->cLlen; while (i--) {if (++yyyTST == yyyAfterTravStack) yyyHandleOverflow(yyyTSof); else {yyyTST->node = *yyyCLptr2; yyyTST->isReady = 0; yyyClearConds } yyyCLptr2++; } } /* right to left */ else /* left to right */ {i = yyyTSTn->cLlen; yyyCLptr2 = yyyTSTn->cL + i; while (i--) {yyyCLptr2--; if (++yyyTST == yyyAfterTravStack) yyyHandleOverflow(yyyTSof); else {yyyTST->node = *yyyCLptr2; yyyTST->isReady = 0; yyyClearConds } } } /* left to right */ } } /* else */ continue; yyyTravSwitch: switch(yyyTSTn->prodNum) { case 1: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) if (! #line 24 "expr.Y" (1) #line 444 "expr.oxout.y" ) yyySetCond(1) yyySetCond(2) case 1: if (yyyCond(0) != yyyPass) { #line 24 "expr.Y" #line 453 "expr.oxout.y" } if (yyyCond(1) != yyyPass) { #line 24 "expr.Y" printf("\n"); #line 459 "expr.oxout.y" } if (yyyCond(2) != yyyPass) { #line 25 "expr.Y" printf("prefix: "); #line 465 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; if ( #line 23 "expr.Y" (1) #line 477 "expr.oxout.y" ) yyySetCond(2) case 1: if (yyyCond(0) != yyyPass) { #line 22 "expr.Y" printf("\n"); #line 486 "expr.oxout.y" } if (yyyCond(1) != yyyPass) { #line 23 "expr.Y" #line 491 "expr.oxout.y" } if (yyyCond(2) != yyyPass) { #line 23 "expr.Y" printf("postfix: "); #line 497 "expr.oxout.y" } break; } break; } break; case 2: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) case 1: if (yyyCond(0) != yyyPass) { #line 29 "expr.Y" printf(" * "); #line 518 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: if (yyyCond(0) != yyyPass) { #line 28 "expr.Y" printf(" * "); #line 533 "expr.oxout.y" } break; } break; } break; case 3: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) case 1: if (yyyCond(0) != yyyPass) { #line 32 "expr.Y" printf(" + "); #line 554 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: if (yyyCond(0) != yyyPass) { #line 33 "expr.Y" printf(" + "); #line 569 "expr.oxout.y" } break; } break; } break; case 4: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) case 1: if (yyyCond(0) != yyyPass) { #line 37 "expr.Y" printf(" / "); #line 590 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: if (yyyCond(0) != yyyPass) { #line 36 "expr.Y" printf(" / "); #line 605 "expr.oxout.y" } break; } break; } break; case 5: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) case 1: if (yyyCond(0) != yyyPass) { #line 41 "expr.Y" printf(" - "); #line 626 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: if (yyyCond(0) != yyyPass) { #line 40 "expr.Y" printf(" - "); #line 641 "expr.oxout.y" } break; } break; } break; case 6: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0; case 1: break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: break; } break; } break; case 7: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) case 1: if (yyyCond(0) != yyyPass) { #line 46 "expr.Y" printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); #line 685 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: if (yyyCond(0) != yyyPass) { #line 45 "expr.Y" printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); #line 700 "expr.oxout.y" } break; } break; } break; case 8: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) case 1: if (yyyCond(0) != yyyPass) { #line 50 "expr.Y" printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); #line 721 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: if (yyyCond(0) != yyyPass) { #line 49 "expr.Y" printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); #line 736 "expr.oxout.y" } break; } break; } break; } /* switch */ if (yyyPass) goto yyyTpop; else goto yyyTpush; } /* while */ } /* for */ } /* yyyDoTraversals */ void yyyExecuteRRsection(yyyGNT *rootNode) { int yyyi; long cycleSum = 0; long nNZrc = 0; if (!yyyYok) return; yyyCheckUnsolvedInstTrav(rootNode,&nNZrc,&cycleSum); if (nNZrc) { fputs("\n\n\n**********\n",stderr); fputs("cycle detected in completed parse tree",stderr); fputs(" after decoration.\n",stderr); #if CYCLE_VERBOSE fprintf(stderr, "number of unsolved attribute instances == %ld.\n", nNZrc ); fprintf(stderr, "total number of remaining dependencies == %ld.\n", cycleSum ); fputs("average number of remaining dependencies\n",stderr); fprintf(stderr," per unsolved instance == %f.\n", ((float)(cycleSum)/(float)(nNZrc)) ); #endif fprintf(stderr, "searching parse tree for %ld unsolved instances:\n", nNZrc ); yyyUnsolvedInstSearchTravAux(rootNode); } yyyDoTraversals(rootNode); } /* yyyExecuteRRsection */ yyyWAT yyyLRCIL[2] = {0,0, }; void yyyYoxInit(void) { static int yyyInitDone = 0; if (yyyInitDone) return; if ((yyyRS = (yyyRSitem *) calloc((size_t)(yyyRSmaxSize+1), (size_t)sizeof(yyyRSitem)) ) == ((yyyRSitem *) NULL) ) yyyfatal("malloc error in ox ready set space allocation\n"); yyyRS++; yyyAfterRS = yyyRS + yyyRSmaxSize; if ((yyySSALspace = (struct yyySolvedSAlistCell *) calloc((size_t)(yyySSALspaceSize+1), (size_t)sizeof(struct yyySolvedSAlistCell)) ) == ((struct yyySolvedSAlistCell *) NULL) ) yyyfatal("malloc error in stack solved list space allocation\n"); yyyInitDone = 1; yyyRSTop = yyyRS - 1; } /* yyyYoxInit */ void yyyDecorate(void) { while (yyyRSTop >= yyyRS) yyySolveAndSignal(); } void yyyGenIntNode(long yyyProdNum, int yyyRHSlength, int yyyNattrbs, struct yyyOxAttrbs *yyval_OxAttrbs, ...) {yyyWST i; yyySIT **yyyOxStackItem = &yyval_OxAttrbs->yyyOxStackItem; yyyGNT *gnpDum; va_list ap; *yyyOxStackItem = (yyySIT *) malloc((size_t)sizeof(yyySIT)); if (*yyyOxStackItem == (yyySIT *) NULL) yyyfatal("malloc error in ox yacc semantic stack space allocation\n"); (*yyyOxStackItem)->node = (yyyGNT *) malloc((size_t)sizeof(yyyGNT)); if ((*yyyOxStackItem)->node == (yyyGNT *) NULL) yyyfatal("malloc error in ox node space allocation\n"); (*yyyOxStackItem)->solvedSAlist = yyyLambdaSSAL; (*yyyOxStackItem)->node->parent.stackref = *yyyOxStackItem; (*yyyOxStackItem)->node->parentIsStack = 1; (*yyyOxStackItem)->node->cLlen = yyyRHSlength; (*yyyOxStackItem)->node->cL = (yyyGNT **) calloc((size_t)yyyRHSlength, (size_t)sizeof(yyyGNT *)); if ((*yyyOxStackItem)->node->cL == (yyyGNT **) NULL) yyyfatal("malloc error in ox child list space allocation\n"); (*yyyOxStackItem)->node->refCountListLen = yyyNattrbs; (*yyyOxStackItem)->node->refCountList = (yyyRCT *) calloc((size_t)yyyNattrbs, (size_t)sizeof(yyyRCT)); if ((*yyyOxStackItem)->node->refCountList == (yyyRCT *) NULL) yyyfatal("malloc error in ox reference count list space allocation\n"); (*yyyOxStackItem)->node->prodNum = (int) yyyProdNum; va_start(ap, yyval_OxAttrbs); for (i=1;i<=yyyRHSlength;i++) {yyySIT *yaccStDum = va_arg(ap,struct yyyOxAttrbs *)->yyyOxStackItem; gnpDum = (*yyyOxStackItem)->node->cL[i-1] = yaccStDum->node; gnpDum->whichSym = i; gnpDum->parent.noderef = (*yyyOxStackItem)->node; gnpDum->parentIsStack = 0; } va_end(ap); } #define yyyDECORfREQ 50 void yyyAdjustINRC(long yyyProdNum, int yyyRHSlength, long startP, long stopP, struct yyyOxAttrbs *yyval_OxAttrbs, ...) {yyyWST i; yyySIT *yyyOxStackItem = yyval_OxAttrbs->yyyOxStackItem; long SSALptr,SSALptrHead,*cPtrPtr; long *pL; yyyGNT *gnpDum; long iTemp; long nextP; static unsigned short intNodeCount = yyyDECORfREQ; va_list ap; nextP = startP; while (nextP < stopP) {if (yyyRCIL[nextP] == yyyR) {(yyyOxStackItem->node->refCountList)[yyyRCIL[nextP+1]] = yyyRCIL[nextP+2]; } else {(((yyyOxStackItem->node->cL)[yyyRCIL[nextP]])->refCountList)[yyyRCIL[nextP+1]] = yyyRCIL[nextP+2]; } nextP += 3; } pL = yyyIIEL + yyyIIIEL[yyyProdNum]; va_start(ap, yyval_OxAttrbs); for (i=1;i<=yyyRHSlength;i++) {yyySIT *yaccStDum = va_arg(ap,struct yyyOxAttrbs *)->yyyOxStackItem; pL++; SSALptrHead = SSALptr = *(cPtrPtr = &(yaccStDum->solvedSAlist)); if (SSALptr != yyyLambdaSSAL) {*cPtrPtr = yyyLambdaSSAL; do { iTemp = (*pL+yyySSALspace[SSALptr].attrbNum); yyySignalEnts(yyyOxStackItem->node, yyyIEL[iTemp], yyyIEL[iTemp+1] ); SSALptr = *(cPtrPtr = &(yyySSALspace[SSALptr].next)); } while (SSALptr != yyyLambdaSSAL); *cPtrPtr = yyySSALCfreeList; yyySSALCfreeList = SSALptrHead; } } va_end(ap); nextP = startP + 2; while (nextP < stopP) {if (!yyyRCIL[nextP]) {if (yyyRCIL[nextP-2] == yyyR) {pL = &(yyyOxStackItem->solvedSAlist); if (yyySSALCfreeList == yyyLambdaSSAL) {yyySSALspace[yyyNewSSALC].next = *pL; if ((*pL = yyyNewSSALC++) == yyySSALspaceSize) yyyHandleOverflow(yyySSALof); } else {iTemp = yyySSALCfreeList; yyySSALCfreeList = yyySSALspace[yyySSALCfreeList].next; yyySSALspace[iTemp].next = *pL; *pL = iTemp; } yyySSALspace[*pL].attrbNum = yyyRCIL[nextP-1]; } else {if ((gnpDum = (yyyOxStackItem->node->cL)[yyyRCIL[nextP-2]])->prodNum != 0) { iTemp = yyyIIEL[yyyIIIEL[gnpDum->prodNum]] + yyyRCIL[nextP-1]; yyySignalEnts(gnpDum, yyyIEL[iTemp], yyyIEL[iTemp+1] ); } } } nextP += 3; } if (!--intNodeCount) {intNodeCount = yyyDECORfREQ; yyyDecorate(); } } void yyyGenLeaf(int nAttrbs,int typeNum,long startP,long stopP,YYSTYPE *mylval) {yyyRCT *rcPdum; yyySIT **yyyOxStackItem = &mylval->yyyOxAttrbs.yyyOxStackItem; (*yyyOxStackItem) = (yyySIT *) malloc((size_t)sizeof(yyySIT)); if ((*yyyOxStackItem) == (yyySIT *) NULL) yyyfatal("malloc error in ox yacc semantic stack space allocation\n"); (*yyyOxStackItem)->node = (yyyGNT *) malloc((size_t)sizeof(yyyGNT)) ; if ((*yyyOxStackItem)->node == (yyyGNT *) NULL) yyyfatal("malloc error in ox node space allocation\n"); (*yyyOxStackItem)->solvedSAlist = yyyLambdaSSAL; (*yyyOxStackItem)->node->parent.stackref = *yyyOxStackItem; (*yyyOxStackItem)->node->parentIsStack = 1; (*yyyOxStackItem)->node->cLlen = 0; (*yyyOxStackItem)->node->cL = (yyyGNT **)NULL; (*yyyOxStackItem)->node->refCountListLen = nAttrbs; rcPdum = (*yyyOxStackItem)->node->refCountList = (yyyRCT *) calloc((size_t)nAttrbs, (size_t)sizeof(yyyRCT)); if (rcPdum == (yyyRCT *) NULL) yyyfatal("malloc error in ox reference count list space allocation\n"); while (startP < stopP) rcPdum[yyyLRCIL[startP++]] = 0; (*yyyOxStackItem)->node->prodNum = 0; (*yyyOxStackItem)->node->whichSym = 0; } void yyyabort(void) {yyyYok = 0; } #define yyyLastProdNum 8 #define yyyNsorts 1 int yyyProdsInd[] = { 0, 0, 2, 6, 10, 14, 18, 22, 24, 26, }; int yyyProds[][2] = { { 116, 0},{ 462, 0},{ 462, 0},{ 462, 0},{ 412, 0}, { 462, 0},{ 462, 0},{ 462, 0},{ 420, 0},{ 462, 0}, { 462, 0},{ 462, 0},{ 452, 0},{ 462, 0},{ 462, 0}, { 462, 0},{ 436, 0},{ 462, 0},{ 462, 0},{ 396, 0}, { 462, 0},{ 404, 0},{ 462, 0},{ 619, 1},{ 462, 0}, { 567, 1}, }; int yyySortsInd[] = { 0, 0, 1, }; int yyySorts[] = { 413, }; char *yyyStringTab[] = { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,"s",0,0,0, 0,0,"y",0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,"LRpre",0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,"'('",0,0,0, 0,0,0,0,"')'", 0,0,0,0,0, 0,0,"'*'","lexeme",0, 0,0,0,0,0, "'+'",0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,"'-'",0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,"'/'",0,0, 0,0,0,0,0, 0,0,"expr",0,0, 0,0,0,0,0, 0,0,0,0,0, 0,"printf",0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,"CONST","LRpost",0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,"ID", 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0, }; #define yyySizeofProd(num) (yyyProdsInd[(num)+1] - yyyProdsInd[(num)]) #define yyyGSoccurStr(prodNum,symPos) \ (yyyStringTab[yyyProds[yyyProdsInd[(prodNum)] + (symPos)][0]]) #define yyySizeofSort(num) (yyySortsInd[(num)+1] - yyySortsInd[(num)]) #define yyySortOf(prodNum,symPos) \ (yyyProds[yyyProdsInd[(prodNum)] + (symPos)][1]) #define yyyAttrbStr(prodNum,symPos,attrbNum) \ (yyyStringTab[yyySorts[yyySortsInd[yyySortOf(prodNum,symPos)] + \ (attrbNum) \ ] \ ] \ ) void yyyShowProd(int i) {int j,nSyms; nSyms = yyySizeofProd(i); for (j=0; j\n",stderr); else putc('\n',stderr); } } } void yyyCheckNodeInstancesSolved(yyyGNT *np) {int mysort,sortSize,i,prodNum,symPos,inTerminalNode; int nUnsolvedInsts = 0; if (np->prodNum != 0) {inTerminalNode = 0; prodNum = np->prodNum; symPos = 0; } else {inTerminalNode = 1; prodNum = np->parent.noderef->prodNum; symPos = np->whichSym; } mysort = yyySortOf(prodNum,symPos); sortSize = yyySizeofSort(mysort); for (i=0; irefCountList)[i] != 0) nUnsolvedInsts += 1; if (nUnsolvedInsts) {fprintf(stderr, "\nFound node that has %d unsolved attribute instance(s).\n", nUnsolvedInsts ); fprintf(stderr,"Node is labeled \"%s\".\n", yyyGSoccurStr(prodNum,symPos)); if (inTerminalNode) {fputs("Node is terminal. Its parent production is:\n ",stderr); yyyShowProd(prodNum); } else {fputs("Node is nonterminal. ",stderr); if (!(np->parentIsStack)) {fprintf(stderr, "Node is %dth child in its parent production:\n ", np->whichSym ); yyyShowProd(np->parent.noderef->prodNum); } fputs("Node is on left hand side of this production:\n ",stderr); yyyShowProd(np->prodNum); } fputs("The following instances are unsolved:\n",stderr); for (i=0; irefCountList)[i] != 0) fprintf(stderr," %-16s still has %1d dependencies.\n", yyyAttrbStr(prodNum,symPos,i),(np->refCountList)[i]); } } void yyyCheckUnsolvedInstTrav(yyyGNT *pNode,long *nNZrc,long *cycleSum) {yyyGNT **yyyCLpdum; yyyRCT *rcp; int i; /* visit the refCountList of each node in the tree, and sum the non-zero refCounts */ rcp = pNode->refCountList; i = pNode->refCountListLen; while (i--) if (*rcp++) {*cycleSum += *(rcp - 1); (*nNZrc)++;} yyyCLpdum = pNode->cL; i = pNode->cLlen; while (i--) { yyyCheckUnsolvedInstTrav(*yyyCLpdum,nNZrc,cycleSum); yyyCLpdum++; } } void yyyUnsolvedInstSearchTravAux(yyyGNT *pNode) {yyyGNT **yyyCLpdum; int i; yyyCheckNodeInstancesSolved(pNode); yyyCLpdum = pNode->cL; i = pNode->cLlen; while (i--) { yyyUnsolvedInstSearchTravAux(*yyyCLpdum); yyyCLpdum++; } } void yyyUnsolvedInstSearchTrav(yyyGNT *pNode) {yyyGNT **yyyCLpdum; int i; yyyCLpdum = pNode->cL; i = pNode->cLlen; while (i--) { yyyUnsolvedInstSearchTravAux(*yyyCLpdum); yyyCLpdum++; } } #line 1647 "expr.oxout.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 1: #line 64 "expr.oxout.y" {yyyYoxInit();} #line 1849 "expr.oxout.tab.c" break; case 2: #line 66 "expr.oxout.y" { yyyDecorate(); yyyExecuteRRsection(yystack.l_mark[0].yyyOxAttrbs.yyyOxStackItem->node); } #line 1856 "expr.oxout.tab.c" break; case 3: #line 73 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(1,1,0,&yyval.yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); yyyAdjustINRC(1,1,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} #line 1863 "expr.oxout.tab.c" break; case 4: #line 80 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(2,3,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); yyyAdjustINRC(2,3,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} #line 1870 "expr.oxout.tab.c" break; case 5: #line 87 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(3,3,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); yyyAdjustINRC(3,3,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} #line 1877 "expr.oxout.tab.c" break; case 6: #line 94 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(4,3,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); yyyAdjustINRC(4,3,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} #line 1884 "expr.oxout.tab.c" break; case 7: #line 101 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(5,3,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); yyyAdjustINRC(5,3,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} #line 1891 "expr.oxout.tab.c" break; case 8: #line 108 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(6,3,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); yyyAdjustINRC(6,3,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} #line 1898 "expr.oxout.tab.c" break; case 9: #line 114 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(7,1,0,&yyval.yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); yyyAdjustINRC(7,1,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} #line 1905 "expr.oxout.tab.c" break; case 10: #line 121 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(8,1,0,&yyval.yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); yyyAdjustINRC(8,1,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} #line 1912 "expr.oxout.tab.c" break; #line 1914 "expr.oxout.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax3.output0000644000000000000000000000000012313153567017165 0ustar rootrootbyacc-20221106/test/yacc/grammar.tab.c0000644000000000000000000020315214104034777015777 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse grammar_parse #endif /* yyparse */ #ifndef yylex #define yylex grammar_lex #endif /* yylex */ #ifndef yyerror #define yyerror grammar_error #endif /* yyerror */ #ifndef yychar #define yychar grammar_char #endif /* yychar */ #ifndef yyval #define yyval grammar_val #endif /* yyval */ #ifndef yylval #define yylval grammar_lval #endif /* yylval */ #ifndef yydebug #define yydebug grammar_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs grammar_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag grammar_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs grammar_lhs #endif /* yylhs */ #ifndef yylen #define yylen grammar_len #endif /* yylen */ #ifndef yydefred #define yydefred grammar_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto grammar_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex grammar_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex grammar_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex grammar_gindex #endif /* yygindex */ #ifndef yytable #define yytable grammar_table #endif /* yytable */ #ifndef yycheck #define yycheck grammar_check #endif /* yycheck */ #ifndef yyname #define yyname grammar_name #endif /* yyname */ #ifndef yyrule #define yyrule grammar_rule #endif /* yyrule */ #define YYPREFIX "grammar_" #define YYPURE 0 #line 9 "grammar.y" #ifdef YYBISON #include #define YYSTYPE_IS_DECLARED #define yyerror yaccError #endif #if defined(YYBISON) || !defined(YYBYACC) static void yyerror(const char *s); #endif #line 81 "grammar.y" #include #include #include #define OPT_LINTLIBRARY 1 #ifndef TRUE #define TRUE (1) #endif #ifndef FALSE #define FALSE (0) #endif /* #include "cproto.h" */ #define MAX_TEXT_SIZE 1024 #define TEXT_LEN (MAX_TEXT_SIZE / 2 - 3) /* Prototype styles */ #if OPT_LINTLIBRARY #define PROTO_ANSI_LLIB -2 /* form ANSI lint-library source */ #define PROTO_LINTLIBRARY -1 /* form lint-library source */ #endif #define PROTO_NONE 0 /* do not output any prototypes */ #define PROTO_TRADITIONAL 1 /* comment out parameters */ #define PROTO_ABSTRACT 2 /* comment out parameter names */ #define PROTO_ANSI 3 /* ANSI C prototype */ typedef int PrototypeStyle; typedef char boolean; extern boolean types_out; extern PrototypeStyle proto_style; #define ansiLintLibrary() (proto_style == PROTO_ANSI_LLIB) #define knrLintLibrary() (proto_style == PROTO_LINTLIBRARY) #define lintLibrary() (knrLintLibrary() || ansiLintLibrary()) #if OPT_LINTLIBRARY #define FUNC_UNKNOWN -1 /* unspecified */ #else #define FUNC_UNKNOWN 0 /* unspecified (same as FUNC_NONE) */ #endif #define FUNC_NONE 0 /* not a function definition */ #define FUNC_TRADITIONAL 1 /* traditional style */ #define FUNC_ANSI 2 /* ANSI style */ #define FUNC_BOTH 3 /* both styles */ typedef int FuncDefStyle; /* Source file text */ typedef struct text { char text[MAX_TEXT_SIZE]; /* source text */ long begin; /* offset in temporary file */ } Text; /* Declaration specifier flags */ #define DS_NONE 0 /* default */ #define DS_EXTERN 1 /* contains "extern" specifier */ #define DS_STATIC 2 /* contains "static" specifier */ #define DS_CHAR 4 /* contains "char" type specifier */ #define DS_SHORT 8 /* contains "short" type specifier */ #define DS_FLOAT 16 /* contains "float" type specifier */ #define DS_INLINE 32 /* contains "inline" specifier */ #define DS_JUNK 64 /* we're not interested in this declaration */ /* This structure stores information about a declaration specifier. */ typedef struct decl_spec { unsigned short flags; /* flags defined above */ char *text; /* source text */ long begin; /* offset in temporary file */ } DeclSpec; /* This is a list of function parameters. */ typedef struct _ParameterList { struct parameter *first; /* pointer to first parameter in list */ struct parameter *last; /* pointer to last parameter in list */ long begin_comment; /* begin offset of comment */ long end_comment; /* end offset of comment */ char *comment; /* comment at start of parameter list */ } ParameterList; /* This structure stores information about a declarator. */ typedef struct _Declarator { char *name; /* name of variable or function */ char *text; /* source text */ long begin; /* offset in temporary file */ long begin_comment; /* begin offset of comment */ long end_comment; /* end offset of comment */ FuncDefStyle func_def; /* style of function definition */ ParameterList params; /* function parameters */ boolean pointer; /* TRUE if it declares a pointer */ struct _Declarator *head; /* head function declarator */ struct _Declarator *func_stack; /* stack of function declarators */ struct _Declarator *next; /* next declarator in list */ } Declarator; /* This structure stores information about a function parameter. */ typedef struct parameter { struct parameter *next; /* next parameter in list */ DeclSpec decl_spec; Declarator *declarator; char *comment; /* comment following the parameter */ } Parameter; /* This is a list of declarators. */ typedef struct declarator_list { Declarator *first; /* pointer to first declarator in list */ Declarator *last; /* pointer to last declarator in list */ } DeclaratorList; /* #include "symbol.h" */ typedef struct symbol { struct symbol *next; /* next symbol in list */ char *name; /* name of symbol */ char *value; /* value of symbol (for defines) */ short flags; /* symbol attributes */ } Symbol; /* parser stack entry type */ typedef union { Text text; DeclSpec decl_spec; Parameter *parameter; ParameterList param_list; Declarator *declarator; DeclaratorList decl_list; } YYSTYPE; /* The hash table length should be a prime number. */ #define SYM_MAX_HASH 251 typedef struct symbol_table { Symbol *bucket[SYM_MAX_HASH]; /* hash buckets */ } SymbolTable; extern SymbolTable *new_symbol_table /* Create symbol table */ (void); extern void free_symbol_table /* Destroy symbol table */ (SymbolTable *s); extern Symbol *find_symbol /* Lookup symbol name */ (SymbolTable *s, const char *n); extern Symbol *new_symbol /* Define new symbol */ (SymbolTable *s, const char *n, const char *v, int f); /* #include "semantic.h" */ extern void new_decl_spec (DeclSpec *, const char *, long, int); extern void free_decl_spec (DeclSpec *); extern void join_decl_specs (DeclSpec *, DeclSpec *, DeclSpec *); extern void check_untagged (DeclSpec *); extern Declarator *new_declarator (const char *, const char *, long); extern void free_declarator (Declarator *); extern void new_decl_list (DeclaratorList *, Declarator *); extern void free_decl_list (DeclaratorList *); extern void add_decl_list (DeclaratorList *, DeclaratorList *, Declarator *); extern Parameter *new_parameter (DeclSpec *, Declarator *); extern void free_parameter (Parameter *); extern void new_param_list (ParameterList *, Parameter *); extern void free_param_list (ParameterList *); extern void add_param_list (ParameterList *, ParameterList *, Parameter *); extern void new_ident_list (ParameterList *); extern void add_ident_list (ParameterList *, ParameterList *, const char *); extern void set_param_types (ParameterList *, DeclSpec *, DeclaratorList *); extern void gen_declarations (DeclSpec *, DeclaratorList *); extern void gen_prototype (DeclSpec *, Declarator *); extern void gen_func_declarator (Declarator *); extern void gen_func_definition (DeclSpec *, Declarator *); extern void init_parser (void); extern void process_file (FILE *infile, char *name); extern char *cur_text (void); extern char *cur_file_name (void); extern char *implied_typedef (void); extern void include_file (char *name, int convert); extern char *supply_parm (int count); extern char *xstrdup (const char *); extern int already_declared (char *name); extern int is_actual_func (Declarator *d); extern int lint_ellipsis (Parameter *p); extern int want_typedef (void); extern void begin_tracking (void); extern void begin_typedef (void); extern void copy_typedef (char *s); extern void ellipsis_varargs (Declarator *d); extern void end_typedef (void); extern void flush_varargs (void); extern void fmt_library (int code); extern void imply_typedef (const char *s); extern void indent (FILE *outf); extern void put_blankline (FILE *outf); extern void put_body (FILE *outf, DeclSpec *decl_spec, Declarator *declarator); extern void put_char (FILE *outf, int c); extern void put_error (void); extern void put_newline (FILE *outf); extern void put_padded (FILE *outf, const char *s); extern void put_string (FILE *outf, const char *s); extern void track_in (void); extern boolean file_comments; extern FuncDefStyle func_style; extern char base_file[]; extern int yylex (void); /* declaration specifier attributes for the typedef statement currently being * scanned */ static int cur_decl_spec_flags; /* pointer to parameter list for the current function definition */ static ParameterList *func_params; /* A parser semantic action sets this pointer to the current declarator in * a function parameter declaration in order to catch any comments following * the parameter declaration on the same line. If the lexer scans a comment * and is not NULL, then the comment is attached to the * declarator. To ignore subsequent comments, the lexer sets this to NULL * after scanning a comment or end of line. */ static Declarator *cur_declarator; /* temporary string buffer */ static char buf[MAX_TEXT_SIZE]; /* table of typedef names */ static SymbolTable *typedef_names; /* table of define names */ static SymbolTable *define_names; /* table of type qualifiers */ static SymbolTable *type_qualifiers; /* information about the current input file */ typedef struct { char *base_name; /* base input file name */ char *file_name; /* current file name */ FILE *file; /* input file */ unsigned line_num; /* current line number in input file */ FILE *tmp_file; /* temporary file */ long begin_comment; /* tmp file offset after last written ) or ; */ long end_comment; /* tmp file offset after last comment */ boolean convert; /* if TRUE, convert function definitions */ boolean changed; /* TRUE if conversion done in this file */ } IncludeStack; static IncludeStack *cur_file; /* current input file */ /* #include "yyerror.c" */ static int haveAnsiParam (void); /* Flags to enable us to find if a procedure returns a value. */ static int return_val; /* nonzero on BRACES iff return-expression found */ static const char * dft_decl_spec (void) { return (lintLibrary() && !return_val) ? "void" : "int"; } static int haveAnsiParam (void) { Parameter *p; if (func_params != 0) { for (p = func_params->first; p != 0; p = p->next) { if (p->declarator->func_def == FUNC_ANSI) { return TRUE; } } } return FALSE; } #line 389 "grammar.tab.c" /* 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 T_IDENTIFIER 257 #define T_TYPEDEF_NAME 258 #define T_DEFINE_NAME 259 #define T_AUTO 260 #define T_EXTERN 261 #define T_REGISTER 262 #define T_STATIC 263 #define T_TYPEDEF 264 #define T_INLINE 265 #define T_EXTENSION 266 #define T_CHAR 267 #define T_DOUBLE 268 #define T_FLOAT 269 #define T_INT 270 #define T_VOID 271 #define T_LONG 272 #define T_SHORT 273 #define T_SIGNED 274 #define T_UNSIGNED 275 #define T_ENUM 276 #define T_STRUCT 277 #define T_UNION 278 #define T_Bool 279 #define T_Complex 280 #define T_Imaginary 281 #define T_TYPE_QUALIFIER 282 #define T_BRACKETS 283 #define T_LBRACE 284 #define T_MATCHRBRACE 285 #define T_ELLIPSIS 286 #define T_INITIALIZER 287 #define T_STRING_LITERAL 288 #define T_ASM 289 #define T_ASMARG 290 #define T_VA_DCL 291 #define YYERRCODE 256 typedef int YYINT; static const YYINT grammar_lhs[] = { -1, 0, 0, 26, 26, 27, 27, 27, 27, 27, 27, 27, 31, 30, 30, 28, 28, 34, 28, 32, 32, 33, 33, 35, 35, 37, 38, 29, 39, 29, 36, 36, 36, 40, 40, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6, 19, 19, 8, 8, 9, 41, 9, 7, 7, 7, 25, 23, 23, 10, 10, 11, 11, 11, 11, 11, 20, 20, 21, 21, 22, 22, 14, 14, 15, 15, 16, 16, 16, 17, 17, 18, 18, 24, 24, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, }; static const YYINT grammar_len[] = { 2, 0, 1, 1, 2, 1, 1, 1, 1, 3, 2, 2, 2, 3, 3, 2, 3, 0, 5, 2, 1, 0, 1, 1, 3, 0, 0, 7, 0, 5, 0, 1, 1, 1, 2, 1, 2, 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, 2, 2, 1, 1, 1, 3, 1, 0, 4, 3, 2, 2, 1, 1, 1, 2, 1, 1, 3, 2, 4, 4, 2, 3, 0, 1, 1, 2, 1, 3, 1, 3, 2, 2, 1, 0, 1, 1, 3, 1, 2, 1, 2, 1, 3, 2, 1, 4, 3, 3, 2, }; static const YYINT grammar_defred[] = { 0, 0, 0, 0, 0, 77, 0, 62, 40, 0, 42, 43, 20, 44, 0, 46, 47, 48, 49, 54, 50, 51, 52, 53, 76, 66, 67, 55, 56, 57, 61, 0, 7, 0, 0, 35, 37, 38, 39, 59, 60, 28, 0, 0, 0, 103, 81, 0, 0, 3, 5, 6, 8, 0, 10, 11, 78, 0, 90, 0, 0, 104, 0, 19, 0, 41, 45, 15, 36, 0, 68, 0, 0, 0, 83, 0, 0, 64, 0, 0, 74, 4, 58, 0, 82, 87, 91, 0, 14, 13, 9, 16, 0, 71, 0, 31, 33, 0, 0, 0, 0, 0, 94, 0, 0, 101, 12, 63, 73, 0, 0, 69, 0, 0, 0, 34, 0, 110, 96, 97, 0, 0, 84, 0, 85, 0, 23, 0, 0, 72, 26, 29, 114, 0, 0, 0, 109, 0, 93, 95, 102, 18, 0, 0, 108, 113, 112, 0, 24, 27, 111, }; static const YYINT grammar_dgoto[] = { 33, 87, 35, 36, 37, 38, 39, 40, 69, 70, 41, 42, 119, 120, 100, 101, 102, 103, 104, 43, 44, 59, 60, 45, 46, 47, 48, 49, 50, 51, 52, 77, 53, 127, 109, 128, 97, 94, 143, 72, 98, 112, }; static const YYINT grammar_sindex[] = { -2, -3, 27, -239, -177, 0, 0, 0, 0, -274, 0, 0, 0, 0, -246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -266, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, -35, -245, 128, 0, 0, -245, -2, 0, 0, 0, 0, 642, 0, 0, 0, -15, 0, -12, -239, 0, 590, 0, -27, 0, 0, 0, 0, -10, 0, -11, 534, -72, 0, -237, -232, 0, -35, -232, 0, 0, 0, 642, 0, 0, 0, 455, 0, 0, 0, 0, 27, 0, 534, 0, 0, -222, 617, 209, 34, 39, 0, 44, 42, 0, 0, 0, 0, 27, -11, 0, -200, -196, -195, 0, 174, 0, 0, 0, -33, 243, 0, 561, 0, -177, 0, 33, 49, 0, 0, 0, 0, 53, 55, 417, 0, -33, 0, 0, 0, 0, 27, -188, 0, 0, 0, 57, 0, 0, 0, }; static const YYINT grammar_rindex[] = { 99, 0, 0, 275, 0, 0, -38, 0, 0, 481, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, -182, 62, 0, 0, 133, 0, 64, 379, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, -180, -19, 0, 65, 0, 0, 68, 0, 0, 0, 0, 51, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, -13, 19, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; static const YYINT grammar_gindex[] = { 0, 11, -17, 0, 0, 13, 0, 0, 0, 20, 8, -43, -1, -8, -89, 0, -9, 0, 0, 0, -44, 0, 0, 4, 0, 0, 0, 70, -53, 0, 0, -18, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, }; #define YYTABLESIZE 924 static const YYINT grammar_table[] = { 58, 78, 58, 58, 58, 73, 58, 135, 61, 88, 57, 34, 5, 56, 62, 85, 58, 68, 63, 96, 7, 58, 98, 78, 64, 98, 84, 134, 107, 80, 3, 107, 90, 17, 92, 17, 4, 17, 2, 75, 3, 96, 71, 30, 89, 115, 147, 76, 106, 91, 93, 79, 75, 70, 17, 121, 55, 32, 107, 34, 105, 108, 114, 105, 83, 4, 68, 2, 70, 3, 68, 80, 121, 86, 80, 122, 106, 105, 78, 106, 5, 56, 68, 123, 99, 124, 125, 129, 130, 80, 131, 80, 141, 142, 144, 110, 145, 149, 150, 1, 110, 2, 30, 99, 32, 79, 92, 118, 79, 100, 21, 22, 111, 137, 139, 133, 113, 126, 81, 0, 0, 0, 0, 79, 57, 79, 0, 99, 0, 140, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 99, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 2, 0, 0, 65, 0, 65, 65, 65, 0, 65, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 65, 10, 11, 65, 13, 66, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 0, 4, 0, 116, 132, 3, 0, 0, 58, 58, 58, 58, 58, 58, 58, 78, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 78, 4, 74, 116, 136, 3, 17, 78, 1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 4, 54, 116, 5, 56, 0, 31, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 88, 80, 88, 88, 88, 0, 88, 0, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 89, 79, 89, 89, 89, 0, 89, 0, 79, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 86, 25, 86, 86, 5, 56, 86, 0, 25, 65, 65, 65, 65, 65, 65, 65, 0, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 75, 0, 75, 75, 75, 0, 75, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 65, 10, 11, 75, 13, 66, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 117, 146, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 65, 10, 11, 0, 13, 66, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 117, 4, 0, 2, 0, 3, 0, 0, 5, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 41, 0, 41, 0, 41, 0, 0, 117, 0, 0, 0, 0, 0, 88, 88, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 45, 0, 45, 0, 45, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 89, 89, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 75, 75, 75, 75, 75, 75, 0, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 7, 8, 65, 10, 11, 0, 13, 66, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 65, 10, 11, 0, 13, 66, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 41, 41, 41, 41, 41, 41, 41, 0, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0, 45, 45, 45, 45, 45, 45, 45, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 82, 7, 8, 65, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 0, 0, 82, 7, 8, 65, 10, 11, 95, 13, 66, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 0, 0, 0, 138, 82, 7, 8, 65, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 0, 75, 82, 7, 8, 65, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 82, 7, 8, 65, 10, 11, 0, 13, 66, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, }; static const YYINT grammar_check[] = { 38, 44, 40, 41, 42, 40, 44, 40, 4, 62, 2, 0, 257, 258, 288, 59, 3, 34, 264, 72, 259, 59, 41, 61, 290, 44, 41, 116, 41, 47, 42, 44, 59, 38, 44, 40, 38, 42, 40, 284, 42, 94, 34, 282, 62, 98, 135, 43, 285, 59, 61, 47, 284, 44, 59, 99, 59, 59, 76, 48, 41, 79, 284, 44, 53, 38, 83, 40, 59, 42, 87, 41, 116, 60, 44, 41, 41, 73, 121, 44, 257, 258, 99, 44, 73, 41, 44, 287, 284, 59, 285, 61, 59, 44, 41, 87, 41, 285, 41, 0, 92, 0, 284, 41, 284, 41, 41, 99, 44, 41, 59, 59, 92, 121, 123, 116, 94, 109, 48, -1, -1, -1, -1, 59, 116, 61, -1, 116, -1, 125, -1, -1, -1, -1, 123, -1, -1, -1, -1, -1, -1, -1, 44, -1, -1, -1, 135, -1, -1, -1, 142, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, 38, -1, 40, -1, -1, 38, -1, 40, 41, 42, -1, 44, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, 263, 59, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, -1, 38, -1, 40, 41, 42, -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 38, 283, 40, 283, 42, 257, 291, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 38, 285, 40, 257, 258, -1, 289, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 38, 284, 40, 41, 42, -1, 44, -1, 291, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 38, 284, 40, 41, 42, -1, 44, -1, 291, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 38, 284, 40, 41, 257, 258, 44, -1, 291, 257, 258, 259, 260, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 38, -1, 40, 41, 42, -1, 44, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, 263, 59, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 41, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 38, -1, 40, -1, 42, -1, -1, 257, 258, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, 38, -1, 40, -1, 42, -1, -1, 283, -1, -1, -1, -1, -1, 257, 258, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, 38, -1, 40, -1, 42, -1, -1, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, -1, -1, 257, 258, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, -1, -1, 257, 258, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 258, 259, 260, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 257, 258, 259, 260, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, -1, -1, 257, 258, 259, 260, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, -1, -1, 258, 259, 260, 261, 262, 263, 291, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, -1, -1, -1, 286, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, -1, 284, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 258, 259, 260, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, }; #define YYFINAL 33 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 291 #define YYUNDFTOKEN 335 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const grammar_name[] = { "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,0,0,0,0,0,0,0,0,0,0, "T_IDENTIFIER","T_TYPEDEF_NAME","T_DEFINE_NAME","T_AUTO","T_EXTERN", "T_REGISTER","T_STATIC","T_TYPEDEF","T_INLINE","T_EXTENSION","T_CHAR", "T_DOUBLE","T_FLOAT","T_INT","T_VOID","T_LONG","T_SHORT","T_SIGNED", "T_UNSIGNED","T_ENUM","T_STRUCT","T_UNION","T_Bool","T_Complex","T_Imaginary", "T_TYPE_QUALIFIER","T_BRACKETS","T_LBRACE","T_MATCHRBRACE","T_ELLIPSIS", "T_INITIALIZER","T_STRING_LITERAL","T_ASM","T_ASMARG","T_VA_DCL",0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,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 grammar_rule[] = { "$accept : program", "program :", "program : translation_unit", "translation_unit : external_declaration", "translation_unit : translation_unit external_declaration", "external_declaration : declaration", "external_declaration : function_definition", "external_declaration : ';'", "external_declaration : linkage_specification", "external_declaration : T_ASM T_ASMARG ';'", "external_declaration : error T_MATCHRBRACE", "external_declaration : error ';'", "braces : T_LBRACE T_MATCHRBRACE", "linkage_specification : T_EXTERN T_STRING_LITERAL braces", "linkage_specification : T_EXTERN T_STRING_LITERAL declaration", "declaration : decl_specifiers ';'", "declaration : decl_specifiers init_declarator_list ';'", "$$1 :", "declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';'", "any_typedef : T_EXTENSION T_TYPEDEF", "any_typedef : T_TYPEDEF", "opt_declarator_list :", "opt_declarator_list : declarator_list", "declarator_list : declarator", "declarator_list : declarator_list ',' declarator", "$$2 :", "$$3 :", "function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE", "$$4 :", "function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE", "opt_declaration_list :", "opt_declaration_list : T_VA_DCL", "opt_declaration_list : declaration_list", "declaration_list : declaration", "declaration_list : declaration_list declaration", "decl_specifiers : decl_specifier", "decl_specifiers : decl_specifiers decl_specifier", "decl_specifier : storage_class", "decl_specifier : type_specifier", "decl_specifier : type_qualifier", "storage_class : T_AUTO", "storage_class : T_EXTERN", "storage_class : T_REGISTER", "storage_class : T_STATIC", "storage_class : T_INLINE", "storage_class : T_EXTENSION", "type_specifier : T_CHAR", "type_specifier : T_DOUBLE", "type_specifier : T_FLOAT", "type_specifier : T_INT", "type_specifier : T_LONG", "type_specifier : T_SHORT", "type_specifier : T_SIGNED", "type_specifier : T_UNSIGNED", "type_specifier : T_VOID", "type_specifier : T_Bool", "type_specifier : T_Complex", "type_specifier : T_Imaginary", "type_specifier : T_TYPEDEF_NAME", "type_specifier : struct_or_union_specifier", "type_specifier : enum_specifier", "type_qualifier : T_TYPE_QUALIFIER", "type_qualifier : T_DEFINE_NAME", "struct_or_union_specifier : struct_or_union any_id braces", "struct_or_union_specifier : struct_or_union braces", "struct_or_union_specifier : struct_or_union any_id", "struct_or_union : T_STRUCT", "struct_or_union : T_UNION", "init_declarator_list : init_declarator", "init_declarator_list : init_declarator_list ',' init_declarator", "init_declarator : declarator", "$$5 :", "init_declarator : declarator '=' $$5 T_INITIALIZER", "enum_specifier : enumeration any_id braces", "enum_specifier : enumeration braces", "enum_specifier : enumeration any_id", "enumeration : T_ENUM", "any_id : T_IDENTIFIER", "any_id : T_TYPEDEF_NAME", "declarator : pointer direct_declarator", "declarator : direct_declarator", "direct_declarator : identifier_or_ref", "direct_declarator : '(' declarator ')'", "direct_declarator : direct_declarator T_BRACKETS", "direct_declarator : direct_declarator '(' parameter_type_list ')'", "direct_declarator : direct_declarator '(' opt_identifier_list ')'", "pointer : '*' opt_type_qualifiers", "pointer : '*' opt_type_qualifiers pointer", "opt_type_qualifiers :", "opt_type_qualifiers : type_qualifier_list", "type_qualifier_list : type_qualifier", "type_qualifier_list : type_qualifier_list type_qualifier", "parameter_type_list : parameter_list", "parameter_type_list : parameter_list ',' T_ELLIPSIS", "parameter_list : parameter_declaration", "parameter_list : parameter_list ',' parameter_declaration", "parameter_declaration : decl_specifiers declarator", "parameter_declaration : decl_specifiers abs_declarator", "parameter_declaration : decl_specifiers", "opt_identifier_list :", "opt_identifier_list : identifier_list", "identifier_list : any_id", "identifier_list : identifier_list ',' any_id", "identifier_or_ref : any_id", "identifier_or_ref : '&' any_id", "abs_declarator : pointer", "abs_declarator : pointer direct_abs_declarator", "abs_declarator : direct_abs_declarator", "direct_abs_declarator : '(' abs_declarator ')'", "direct_abs_declarator : direct_abs_declarator T_BRACKETS", "direct_abs_declarator : T_BRACKETS", "direct_abs_declarator : direct_abs_declarator '(' parameter_type_list ')'", "direct_abs_declarator : direct_abs_declarator '(' ')'", "direct_abs_declarator : '(' parameter_type_list ')'", "direct_abs_declarator : '(' ')'", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 1015 "grammar.y" /* lex.yy.c */ #define BEGIN yy_start = 1 + 2 * #define CPP1 1 #define INIT1 2 #define INIT2 3 #define CURLY 4 #define LEXYACC 5 #define ASM 6 #define CPP_INLINE 7 extern char *yytext; extern FILE *yyin, *yyout; static int curly; /* number of curly brace nesting levels */ static int ly_count; /* number of occurrences of %% */ static int inc_depth; /* include nesting level */ static SymbolTable *included_files; /* files already included */ static int yy_start = 0; /* start state number */ #define grammar_error(s) yaccError(s) static void yaccError (const char *msg) { func_params = NULL; put_error(); /* tell what line we're on, and what file */ fprintf(stderr, "%s at token '%s'\n", msg, yytext); } /* Initialize the table of type qualifier keywords recognized by the lexical * analyzer. */ void init_parser (void) { static const char *keywords[] = { "const", "restrict", "volatile", "interrupt", #ifdef vms "noshare", "readonly", #endif #if defined(MSDOS) || defined(OS2) "__cdecl", "__export", "__far", "__fastcall", "__fortran", "__huge", "__inline", "__interrupt", "__loadds", "__near", "__pascal", "__saveregs", "__segment", "__stdcall", "__syscall", "_cdecl", "_cs", "_ds", "_es", "_export", "_far", "_fastcall", "_fortran", "_huge", "_interrupt", "_loadds", "_near", "_pascal", "_saveregs", "_seg", "_segment", "_ss", "cdecl", "far", "huge", "near", "pascal", #ifdef OS2 "__far16", #endif #endif #ifdef __GNUC__ /* gcc aliases */ "__builtin_va_arg", "__builtin_va_list", "__const", "__const__", "__inline", "__inline__", "__restrict", "__restrict__", "__volatile", "__volatile__", #endif }; unsigned i; /* Initialize type qualifier table. */ type_qualifiers = new_symbol_table(); for (i = 0; i < sizeof(keywords)/sizeof(keywords[0]); ++i) { new_symbol(type_qualifiers, keywords[i], NULL, DS_NONE); } } /* Process the C source file. Write function prototypes to the standard * output. Convert function definitions and write the converted source * code to a temporary file. */ void process_file (FILE *infile, char *name) { char *s; if (strlen(name) > 2) { s = name + strlen(name) - 2; if (*s == '.') { ++s; if (*s == 'l' || *s == 'y') BEGIN LEXYACC; #if defined(MSDOS) || defined(OS2) if (*s == 'L' || *s == 'Y') BEGIN LEXYACC; #endif } } included_files = new_symbol_table(); typedef_names = new_symbol_table(); define_names = new_symbol_table(); inc_depth = -1; curly = 0; ly_count = 0; func_params = NULL; yyin = infile; include_file(strcpy(base_file, name), func_style != FUNC_NONE); if (file_comments) { #if OPT_LINTLIBRARY if (lintLibrary()) { put_blankline(stdout); begin_tracking(); } #endif put_string(stdout, "/* "); put_string(stdout, cur_file_name()); put_string(stdout, " */\n"); } yyparse(); free_symbol_table(define_names); free_symbol_table(typedef_names); free_symbol_table(included_files); } #ifdef NO_LEAKS void free_parser(void) { free_symbol_table (type_qualifiers); #ifdef FLEX_SCANNER if (yy_current_buffer != 0) yy_delete_buffer(yy_current_buffer); #endif } #endif #line 1095 "grammar.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 10: #line 378 "grammar.y" { yyerrok; } #line 1299 "grammar.tab.c" break; case 11: #line 382 "grammar.y" { yyerrok; } #line 1306 "grammar.tab.c" break; case 13: #line 393 "grammar.y" { /* Provide an empty action here so bison will not complain about * incompatible types in the default action it normally would * have generated. */ } #line 1316 "grammar.tab.c" break; case 14: #line 400 "grammar.y" { /* empty */ } #line 1323 "grammar.tab.c" break; case 15: #line 407 "grammar.y" { #if OPT_LINTLIBRARY if (types_out && want_typedef()) { gen_declarations(&yystack.l_mark[-1].decl_spec, (DeclaratorList *)0); flush_varargs(); } #endif free_decl_spec(&yystack.l_mark[-1].decl_spec); end_typedef(); } #line 1337 "grammar.tab.c" break; case 16: #line 418 "grammar.y" { if (func_params != NULL) { set_param_types(func_params, &yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list); } else { gen_declarations(&yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list); #if OPT_LINTLIBRARY flush_varargs(); #endif free_decl_list(&yystack.l_mark[-1].decl_list); } free_decl_spec(&yystack.l_mark[-2].decl_spec); end_typedef(); } #line 1354 "grammar.tab.c" break; case 17: #line 432 "grammar.y" { cur_decl_spec_flags = yystack.l_mark[0].decl_spec.flags; free_decl_spec(&yystack.l_mark[0].decl_spec); } #line 1362 "grammar.tab.c" break; case 18: #line 437 "grammar.y" { end_typedef(); } #line 1369 "grammar.tab.c" break; case 19: #line 444 "grammar.y" { begin_typedef(); } #line 1376 "grammar.tab.c" break; case 20: #line 448 "grammar.y" { begin_typedef(); } #line 1383 "grammar.tab.c" break; case 23: #line 460 "grammar.y" { int flags = cur_decl_spec_flags; /* If the typedef is a pointer type, then reset the short type * flags so it does not get promoted. */ if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0) flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT); new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags); free_declarator(yystack.l_mark[0].declarator); } #line 1398 "grammar.tab.c" break; case 24: #line 472 "grammar.y" { int flags = cur_decl_spec_flags; if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0) flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT); new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags); free_declarator(yystack.l_mark[0].declarator); } #line 1410 "grammar.tab.c" break; case 25: #line 484 "grammar.y" { check_untagged(&yystack.l_mark[-1].decl_spec); if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) { yyerror("syntax error"); YYERROR; } func_params = &(yystack.l_mark[0].declarator->head->params); func_params->begin_comment = cur_file->begin_comment; func_params->end_comment = cur_file->end_comment; } #line 1424 "grammar.tab.c" break; case 26: #line 495 "grammar.y" { /* If we're converting to K&R and we've got a nominally K&R * function which has a parameter which is ANSI (i.e., a prototyped * function pointer), then we must override the deciphered value of * 'func_def' so that the parameter will be converted. */ if (func_style == FUNC_TRADITIONAL && haveAnsiParam() && yystack.l_mark[-3].declarator->head->func_def == func_style) { yystack.l_mark[-3].declarator->head->func_def = FUNC_BOTH; } func_params = NULL; if (cur_file->convert) gen_func_definition(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator); gen_prototype(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator); #if OPT_LINTLIBRARY flush_varargs(); #endif free_decl_spec(&yystack.l_mark[-4].decl_spec); free_declarator(yystack.l_mark[-3].declarator); } #line 1451 "grammar.tab.c" break; case 28: #line 520 "grammar.y" { if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) { yyerror("syntax error"); YYERROR; } func_params = &(yystack.l_mark[0].declarator->head->params); func_params->begin_comment = cur_file->begin_comment; func_params->end_comment = cur_file->end_comment; } #line 1464 "grammar.tab.c" break; case 29: #line 530 "grammar.y" { DeclSpec decl_spec; func_params = NULL; new_decl_spec(&decl_spec, dft_decl_spec(), yystack.l_mark[-4].declarator->begin, DS_NONE); if (cur_file->convert) gen_func_definition(&decl_spec, yystack.l_mark[-4].declarator); gen_prototype(&decl_spec, yystack.l_mark[-4].declarator); #if OPT_LINTLIBRARY flush_varargs(); #endif free_decl_spec(&decl_spec); free_declarator(yystack.l_mark[-4].declarator); } #line 1483 "grammar.tab.c" break; case 36: #line 561 "grammar.y" { join_decl_specs(&yyval.decl_spec, &yystack.l_mark[-1].decl_spec, &yystack.l_mark[0].decl_spec); free(yystack.l_mark[-1].decl_spec.text); free(yystack.l_mark[0].decl_spec.text); } #line 1492 "grammar.tab.c" break; case 40: #line 576 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 1499 "grammar.tab.c" break; case 41: #line 580 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_EXTERN); } #line 1506 "grammar.tab.c" break; case 42: #line 584 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 1513 "grammar.tab.c" break; case 43: #line 588 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_STATIC); } #line 1520 "grammar.tab.c" break; case 44: #line 592 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_INLINE); } #line 1527 "grammar.tab.c" break; case 45: #line 596 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_JUNK); } #line 1534 "grammar.tab.c" break; case 46: #line 603 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR); } #line 1541 "grammar.tab.c" break; case 47: #line 607 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 1548 "grammar.tab.c" break; case 48: #line 611 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_FLOAT); } #line 1555 "grammar.tab.c" break; case 49: #line 615 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 1562 "grammar.tab.c" break; case 50: #line 619 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 1569 "grammar.tab.c" break; case 51: #line 623 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_SHORT); } #line 1576 "grammar.tab.c" break; case 52: #line 627 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 1583 "grammar.tab.c" break; case 53: #line 631 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 1590 "grammar.tab.c" break; case 54: #line 635 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 1597 "grammar.tab.c" break; case 55: #line 639 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR); } #line 1604 "grammar.tab.c" break; case 56: #line 643 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 1611 "grammar.tab.c" break; case 57: #line 647 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 1618 "grammar.tab.c" break; case 58: #line 651 "grammar.y" { Symbol *s; s = find_symbol(typedef_names, yystack.l_mark[0].text.text); if (s != NULL) new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags); } #line 1628 "grammar.tab.c" break; case 61: #line 663 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 1635 "grammar.tab.c" break; case 62: #line 667 "grammar.y" { /* This rule allows the nonterminal to scan #define * names as if they were type modifiers. */ Symbol *s; s = find_symbol(define_names, yystack.l_mark[0].text.text); if (s != NULL) new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags); } #line 1648 "grammar.tab.c" break; case 63: #line 680 "grammar.y" { char *s; if ((s = implied_typedef()) == 0) (void)sprintf(s = buf, "%.*s %.*s", TEXT_LEN, yystack.l_mark[-2].text.text, TEXT_LEN, yystack.l_mark[-1].text.text); new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE); } #line 1658 "grammar.tab.c" break; case 64: #line 687 "grammar.y" { char *s; if ((s = implied_typedef()) == 0) (void)sprintf(s = buf, "%.*s {}", TEXT_LEN, yystack.l_mark[-1].text.text); new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE); } #line 1668 "grammar.tab.c" break; case 65: #line 694 "grammar.y" { (void)sprintf(buf, "%.*s %.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yystack.l_mark[0].text.text); new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE); } #line 1676 "grammar.tab.c" break; case 66: #line 702 "grammar.y" { imply_typedef(yyval.text.text); } #line 1683 "grammar.tab.c" break; case 67: #line 706 "grammar.y" { imply_typedef(yyval.text.text); } #line 1690 "grammar.tab.c" break; case 68: #line 713 "grammar.y" { new_decl_list(&yyval.decl_list, yystack.l_mark[0].declarator); } #line 1697 "grammar.tab.c" break; case 69: #line 717 "grammar.y" { add_decl_list(&yyval.decl_list, &yystack.l_mark[-2].decl_list, yystack.l_mark[0].declarator); } #line 1704 "grammar.tab.c" break; case 70: #line 724 "grammar.y" { if (yystack.l_mark[0].declarator->func_def != FUNC_NONE && func_params == NULL && func_style == FUNC_TRADITIONAL && cur_file->convert) { gen_func_declarator(yystack.l_mark[0].declarator); fputs(cur_text(), cur_file->tmp_file); } cur_declarator = yyval.declarator; } #line 1716 "grammar.tab.c" break; case 71: #line 733 "grammar.y" { if (yystack.l_mark[-1].declarator->func_def != FUNC_NONE && func_params == NULL && func_style == FUNC_TRADITIONAL && cur_file->convert) { gen_func_declarator(yystack.l_mark[-1].declarator); fputs(" =", cur_file->tmp_file); } } #line 1727 "grammar.tab.c" break; case 73: #line 745 "grammar.y" { char *s; if ((s = implied_typedef()) == 0) (void)sprintf(s = buf, "enum %.*s", TEXT_LEN, yystack.l_mark[-1].text.text); new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE); } #line 1737 "grammar.tab.c" break; case 74: #line 752 "grammar.y" { char *s; if ((s = implied_typedef()) == 0) (void)sprintf(s = buf, "%.*s {}", TEXT_LEN, yystack.l_mark[-1].text.text); new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE); } #line 1747 "grammar.tab.c" break; case 75: #line 759 "grammar.y" { (void)sprintf(buf, "enum %.*s", TEXT_LEN, yystack.l_mark[0].text.text); new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE); } #line 1755 "grammar.tab.c" break; case 76: #line 767 "grammar.y" { imply_typedef("enum"); yyval.text = yystack.l_mark[0].text; } #line 1763 "grammar.tab.c" break; case 79: #line 780 "grammar.y" { yyval.declarator = yystack.l_mark[0].declarator; (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yyval.declarator->text); free(yyval.declarator->text); yyval.declarator->text = xstrdup(buf); yyval.declarator->begin = yystack.l_mark[-1].text.begin; yyval.declarator->pointer = TRUE; } #line 1775 "grammar.tab.c" break; case 81: #line 793 "grammar.y" { yyval.declarator = new_declarator(yystack.l_mark[0].text.text, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin); } #line 1782 "grammar.tab.c" break; case 82: #line 797 "grammar.y" { yyval.declarator = yystack.l_mark[-1].declarator; (void)sprintf(buf, "(%.*s)", TEXT_LEN, yyval.declarator->text); free(yyval.declarator->text); yyval.declarator->text = xstrdup(buf); yyval.declarator->begin = yystack.l_mark[-2].text.begin; } #line 1793 "grammar.tab.c" break; case 83: #line 805 "grammar.y" { yyval.declarator = yystack.l_mark[-1].declarator; (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yyval.declarator->text, TEXT_LEN, yystack.l_mark[0].text.text); free(yyval.declarator->text); yyval.declarator->text = xstrdup(buf); } #line 1803 "grammar.tab.c" break; case 84: #line 812 "grammar.y" { yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin); yyval.declarator->params = yystack.l_mark[-1].param_list; yyval.declarator->func_stack = yystack.l_mark[-3].declarator; yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head; yyval.declarator->func_def = FUNC_ANSI; } #line 1814 "grammar.tab.c" break; case 85: #line 820 "grammar.y" { yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin); yyval.declarator->params = yystack.l_mark[-1].param_list; yyval.declarator->func_stack = yystack.l_mark[-3].declarator; yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head; yyval.declarator->func_def = FUNC_TRADITIONAL; } #line 1825 "grammar.tab.c" break; case 86: #line 831 "grammar.y" { (void)sprintf(yyval.text.text, "*%.*s", TEXT_LEN, yystack.l_mark[0].text.text); yyval.text.begin = yystack.l_mark[-1].text.begin; } #line 1833 "grammar.tab.c" break; case 87: #line 836 "grammar.y" { (void)sprintf(yyval.text.text, "*%.*s%.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yystack.l_mark[0].text.text); yyval.text.begin = yystack.l_mark[-2].text.begin; } #line 1841 "grammar.tab.c" break; case 88: #line 844 "grammar.y" { strcpy(yyval.text.text, ""); yyval.text.begin = 0L; } #line 1849 "grammar.tab.c" break; case 90: #line 853 "grammar.y" { (void)sprintf(yyval.text.text, "%s ", yystack.l_mark[0].decl_spec.text); yyval.text.begin = yystack.l_mark[0].decl_spec.begin; free(yystack.l_mark[0].decl_spec.text); } #line 1858 "grammar.tab.c" break; case 91: #line 859 "grammar.y" { (void)sprintf(yyval.text.text, "%.*s%.*s ", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yystack.l_mark[0].decl_spec.text); yyval.text.begin = yystack.l_mark[-1].text.begin; free(yystack.l_mark[0].decl_spec.text); } #line 1867 "grammar.tab.c" break; case 93: #line 869 "grammar.y" { add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, "..."); } #line 1874 "grammar.tab.c" break; case 94: #line 876 "grammar.y" { new_param_list(&yyval.param_list, yystack.l_mark[0].parameter); } #line 1881 "grammar.tab.c" break; case 95: #line 880 "grammar.y" { add_param_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].parameter); } #line 1888 "grammar.tab.c" break; case 96: #line 887 "grammar.y" { check_untagged(&yystack.l_mark[-1].decl_spec); yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator); } #line 1896 "grammar.tab.c" break; case 97: #line 892 "grammar.y" { check_untagged(&yystack.l_mark[-1].decl_spec); yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator); } #line 1904 "grammar.tab.c" break; case 98: #line 897 "grammar.y" { check_untagged(&yystack.l_mark[0].decl_spec); yyval.parameter = new_parameter(&yystack.l_mark[0].decl_spec, (Declarator *)0); } #line 1912 "grammar.tab.c" break; case 99: #line 905 "grammar.y" { new_ident_list(&yyval.param_list); } #line 1919 "grammar.tab.c" break; case 101: #line 913 "grammar.y" { new_ident_list(&yyval.param_list); add_ident_list(&yyval.param_list, &yyval.param_list, yystack.l_mark[0].text.text); } #line 1927 "grammar.tab.c" break; case 102: #line 918 "grammar.y" { add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].text.text); } #line 1934 "grammar.tab.c" break; case 103: #line 925 "grammar.y" { yyval.text = yystack.l_mark[0].text; } #line 1941 "grammar.tab.c" break; case 104: #line 929 "grammar.y" { #if OPT_LINTLIBRARY if (lintLibrary()) { /* Lint doesn't grok C++ ref variables */ yyval.text = yystack.l_mark[0].text; } else #endif (void)sprintf(yyval.text.text, "&%.*s", TEXT_LEN, yystack.l_mark[0].text.text); yyval.text.begin = yystack.l_mark[-1].text.begin; } #line 1954 "grammar.tab.c" break; case 105: #line 942 "grammar.y" { yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin); } #line 1961 "grammar.tab.c" break; case 106: #line 946 "grammar.y" { yyval.declarator = yystack.l_mark[0].declarator; (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yyval.declarator->text); free(yyval.declarator->text); yyval.declarator->text = xstrdup(buf); yyval.declarator->begin = yystack.l_mark[-1].text.begin; } #line 1972 "grammar.tab.c" break; case 108: #line 958 "grammar.y" { yyval.declarator = yystack.l_mark[-1].declarator; (void)sprintf(buf, "(%.*s)", TEXT_LEN, yyval.declarator->text); free(yyval.declarator->text); yyval.declarator->text = xstrdup(buf); yyval.declarator->begin = yystack.l_mark[-2].text.begin; } #line 1983 "grammar.tab.c" break; case 109: #line 966 "grammar.y" { yyval.declarator = yystack.l_mark[-1].declarator; (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yyval.declarator->text, TEXT_LEN, yystack.l_mark[0].text.text); free(yyval.declarator->text); yyval.declarator->text = xstrdup(buf); } #line 1993 "grammar.tab.c" break; case 110: #line 973 "grammar.y" { yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin); } #line 2000 "grammar.tab.c" break; case 111: #line 977 "grammar.y" { yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-3].declarator->begin); yyval.declarator->params = yystack.l_mark[-1].param_list; yyval.declarator->func_stack = yystack.l_mark[-3].declarator; yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head; yyval.declarator->func_def = FUNC_ANSI; } #line 2011 "grammar.tab.c" break; case 112: #line 985 "grammar.y" { yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].declarator->begin); yyval.declarator->func_stack = yystack.l_mark[-2].declarator; yyval.declarator->head = (yystack.l_mark[-2].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-2].declarator->head; yyval.declarator->func_def = FUNC_ANSI; } #line 2021 "grammar.tab.c" break; case 113: #line 992 "grammar.y" { Declarator *d; d = new_declarator("", "", yystack.l_mark[-2].text.begin); yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].text.begin); yyval.declarator->params = yystack.l_mark[-1].param_list; yyval.declarator->func_stack = d; yyval.declarator->head = yyval.declarator; yyval.declarator->func_def = FUNC_ANSI; } #line 2035 "grammar.tab.c" break; case 114: #line 1003 "grammar.y" { Declarator *d; d = new_declarator("", "", yystack.l_mark[-1].text.begin); yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-1].text.begin); yyval.declarator->func_stack = d; yyval.declarator->head = yyval.declarator; yyval.declarator->func_def = FUNC_ANSI; } #line 2048 "grammar.tab.c" break; #line 2050 "grammar.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax7.tab.h0000644000000000000000000000000012313161123016610 0ustar rootrootbyacc-20221106/test/yacc/err_syntax14.tab.h0000644000000000000000000000000012313421024016665 0ustar rootrootbyacc-20221106/test/yacc/calc_code_requires.tab.c0000644000000000000000000004533314104034777020171 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse calc_code_requires_parse #endif /* yyparse */ #ifndef yylex #define yylex calc_code_requires_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc_code_requires_error #endif /* yyerror */ #ifndef yychar #define yychar calc_code_requires_char #endif /* yychar */ #ifndef yyval #define yyval calc_code_requires_val #endif /* yyval */ #ifndef yylval #define yylval calc_code_requires_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc_code_requires_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc_code_requires_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc_code_requires_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc_code_requires_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc_code_requires_len #endif /* yylen */ #ifndef yydefred #define yydefred calc_code_requires_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto calc_code_requires_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc_code_requires_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc_code_requires_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc_code_requires_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc_code_requires_table #endif /* yytable */ #ifndef yycheck #define yycheck calc_code_requires_check #endif /* yycheck */ #ifndef yyname #define yyname calc_code_requires_name #endif /* yyname */ #ifndef yyrule #define yyrule calc_code_requires_rule #endif /* yyrule */ #define YYPREFIX "calc_code_requires_" #define YYPURE 0 #line 5 "calc_code_requires.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 111 "calc_code_requires.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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc_code_requires_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc_code_requires_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc_code_requires_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; static const YYINT calc_code_requires_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc_code_requires_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc_code_requires_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; static const YYINT calc_code_requires_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc_code_requires_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc_code_requires_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc_code_requires_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", }; static const char *const calc_code_requires_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* %code "requires" block start */ #line 1 "calc_code_requires.y" /* CODE-REQUIRES */ #line 2 "calc_code_requires.y" /* CODE-REQUIRES2 */ /* %code "requires" block end */ #line 295 "calc_code_requires.tab.c" /* 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 69 "calc_code_requires.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 364 "calc_code_requires.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 31 "calc_code_requires.y" { yyerrok ; } #line 566 "calc_code_requires.tab.c" break; case 4: #line 35 "calc_code_requires.y" { printf("%d\n",yystack.l_mark[0]);} #line 571 "calc_code_requires.tab.c" break; case 5: #line 37 "calc_code_requires.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 576 "calc_code_requires.tab.c" break; case 6: #line 41 "calc_code_requires.y" { yyval = yystack.l_mark[-1]; } #line 581 "calc_code_requires.tab.c" break; case 7: #line 43 "calc_code_requires.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 586 "calc_code_requires.tab.c" break; case 8: #line 45 "calc_code_requires.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 591 "calc_code_requires.tab.c" break; case 9: #line 47 "calc_code_requires.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 596 "calc_code_requires.tab.c" break; case 10: #line 49 "calc_code_requires.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 601 "calc_code_requires.tab.c" break; case 11: #line 51 "calc_code_requires.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 606 "calc_code_requires.tab.c" break; case 12: #line 53 "calc_code_requires.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 611 "calc_code_requires.tab.c" break; case 13: #line 55 "calc_code_requires.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 616 "calc_code_requires.tab.c" break; case 14: #line 57 "calc_code_requires.y" { yyval = - yystack.l_mark[0]; } #line 621 "calc_code_requires.tab.c" break; case 15: #line 59 "calc_code_requires.y" { yyval = regs[yystack.l_mark[0]]; } #line 626 "calc_code_requires.tab.c" break; case 17: #line 64 "calc_code_requires.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 631 "calc_code_requires.tab.c" break; case 18: #line 66 "calc_code_requires.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 636 "calc_code_requires.tab.c" break; #line 638 "calc_code_requires.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax27.tab.c0000644000000000000000000000067213726503203016714 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/defines1.error0000644000000000000000000000000013501473524016171 0ustar rootrootbyacc-20221106/test/yacc/calc3.tab.c0000644000000000000000000004503614104034777015343 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse calc3_parse #endif /* yyparse */ #ifndef yylex #define yylex calc3_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc3_error #endif /* yyerror */ #ifndef yychar #define yychar calc3_char #endif /* yychar */ #ifndef yyval #define yyval calc3_val #endif /* yyval */ #ifndef yylval #define yylval calc3_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc3_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc3_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc3_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc3_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc3_len #endif /* yylen */ #ifndef yydefred #define yydefred calc3_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto calc3_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc3_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc3_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc3_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc3_table #endif /* yytable */ #ifndef yycheck #define yycheck calc3_check #endif /* yycheck */ #ifndef yyname #define yyname calc3_name #endif /* yyname */ #ifndef yyrule #define yyrule calc3_rule #endif /* yyrule */ #define YYPREFIX "calc3_" #define YYPURE 1 #line 9 "calc3.y" # include # include #ifdef YYBISON #define YYSTYPE int #define YYLEX_PARAM base #define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM) #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) int YYLEX_DECL(); static void YYERROR_DECL(); #endif #line 114 "calc3.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(int regs[26], int *base) #endif /* Parameters sent to lex. */ #ifdef YYLEX_PARAM # ifdef YYLEX_PARAM_TYPE # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM) # else # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM) # endif # define YYLEX yylex(&yylval, YYLEX_PARAM) #else # define YYLEX_DECL() yylex(YYSTYPE *yylval, int *base) # define YYLEX yylex(&yylval, base) #endif /* Parameters sent to yyerror. */ #ifndef YYERROR_DECL #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) #endif #ifndef YYERROR_CALL #define YYERROR_CALL(msg) yyerror(regs, base, msg) #endif extern int YYPARSE_DECL(); #define DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc3_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc3_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc3_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; static const YYINT calc3_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc3_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc3_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; static const YYINT calc3_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc3_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc3_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc3_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", }; static const char *const calc3_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif /* 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; #line 76 "calc3.y" /* start of programs */ #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main (void) { int regs[26]; int base = 10; while(!feof(stdin)) { yyparse(regs, &base); } return 0; } #define UNUSED(x) ((void)(x)) static void YYERROR_DECL() { UNUSED(regs); /* %parse-param regs is not actually used here */ UNUSED(base); /* %parse-param base is not actually used here */ fprintf(stderr, "%s\n", s); } int YYLEX_DECL() { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { *yylval = (c - 'a'); return ( LETTER ); } if( isdigit( c )) { *yylval = (c - '0') % (*base); return ( DIGIT ); } return( c ); } #line 366 "calc3.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* variables for the parser stack */ YYSTACKDATA yystack; 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 memset(&yyval, 0, sizeof(yyval)); memset(&yylval, 0, sizeof(yylval)); /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 38 "calc3.y" { yyerrok ; } #line 579 "calc3.tab.c" break; case 4: #line 42 "calc3.y" { printf("%d\n",yystack.l_mark[0]);} #line 584 "calc3.tab.c" break; case 5: #line 44 "calc3.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 589 "calc3.tab.c" break; case 6: #line 48 "calc3.y" { yyval = yystack.l_mark[-1]; } #line 594 "calc3.tab.c" break; case 7: #line 50 "calc3.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 599 "calc3.tab.c" break; case 8: #line 52 "calc3.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 604 "calc3.tab.c" break; case 9: #line 54 "calc3.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 609 "calc3.tab.c" break; case 10: #line 56 "calc3.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 614 "calc3.tab.c" break; case 11: #line 58 "calc3.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 619 "calc3.tab.c" break; case 12: #line 60 "calc3.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 624 "calc3.tab.c" break; case 13: #line 62 "calc3.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 629 "calc3.tab.c" break; case 14: #line 64 "calc3.y" { yyval = - yystack.l_mark[0]; } #line 634 "calc3.tab.c" break; case 15: #line 66 "calc3.y" { yyval = regs[yystack.l_mark[0]]; } #line 639 "calc3.tab.c" break; case 17: #line 71 "calc3.y" { yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; } #line 644 "calc3.tab.c" break; case 18: #line 73 "calc3.y" { yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 649 "calc3.tab.c" break; #line 651 "calc3.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/grammar.error0000644000000000000000000000007312313150003016113 0ustar rootrootYACC: 1 shift/reduce conflict, 29 reduce/reduce conflicts. byacc-20221106/test/yacc/quote_calc2.tab.h0000644000000000000000000000041211704127477016554 0ustar rootroot#define OP_ADD 257 #define ADD 258 #define OP_SUB 259 #define SUB 260 #define OP_MUL 261 #define MUL 262 #define OP_DIV 263 #define DIV 264 #define OP_MOD 265 #define MOD 266 #define OP_AND 267 #define AND 268 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 byacc-20221106/test/yacc/err_syntax8a.error0000644000000000000000000000011512361053263017126 0ustar rootrootYACC: e - line 6 of "./err_syntax8a.y", illegal use of reserved symbol $$123 byacc-20221106/test/yacc/err_syntax9.error0000644000000000000000000000013612361053263016771 0ustar rootrootYACC: e - line 7 of "./err_syntax9.y", the start symbol text cannot be declared to be a token byacc-20221106/test/yacc/defines3.calc.c0000644000000000000000000004077414104034777016216 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #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 2 "calc.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 31 "prefix.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 #if !(defined(yylex) || defined(YYSTATE)) int YYLEX_DECL(); #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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT yylhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT yylen[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT yydefred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; static const YYINT yydgoto[] = { 1, 7, 8, 9, }; static const YYINT yysindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT yyrindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; static const YYINT yygindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT yytable[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT yycheck[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #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,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", }; static const char *const yyrule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 66 "calc.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 280 "prefix.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 28 "calc.y" { yyerrok ; } #line 482 "prefix.tab.c" break; case 4: #line 32 "calc.y" { printf("%d\n",yystack.l_mark[0]);} #line 487 "prefix.tab.c" break; case 5: #line 34 "calc.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 492 "prefix.tab.c" break; case 6: #line 38 "calc.y" { yyval = yystack.l_mark[-1]; } #line 497 "prefix.tab.c" break; case 7: #line 40 "calc.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 502 "prefix.tab.c" break; case 8: #line 42 "calc.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 507 "prefix.tab.c" break; case 9: #line 44 "calc.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 512 "prefix.tab.c" break; case 10: #line 46 "calc.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 517 "prefix.tab.c" break; case 11: #line 48 "calc.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 522 "prefix.tab.c" break; case 12: #line 50 "calc.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 527 "prefix.tab.c" break; case 13: #line 52 "calc.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 532 "prefix.tab.c" break; case 14: #line 54 "calc.y" { yyval = - yystack.l_mark[0]; } #line 537 "prefix.tab.c" break; case 15: #line 56 "calc.y" { yyval = regs[yystack.l_mark[0]]; } #line 542 "prefix.tab.c" break; case 17: #line 61 "calc.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 547 "prefix.tab.c" break; case 18: #line 63 "calc.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 552 "prefix.tab.c" break; #line 554 "prefix.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax18.output0000644000000000000000000000066112313536361017265 0ustar rootroot 0 $accept : expr $end 1 expr : '(' expr ')' state 0 $accept : . expr $end (0) '(' shift 1 . error expr goto 2 state 1 expr : '(' . expr ')' (1) '(' shift 1 . error expr goto 3 state 2 $accept : expr . $end (0) $end accept state 3 expr : '(' expr . ')' (1) ')' shift 4 . error state 4 expr : '(' expr ')' . (1) . reduce 1 4 terminals, 2 nonterminals 2 grammar rules, 5 states byacc-20221106/test/yacc/err_syntax19.tab.h0000644000000000000000000000000012313654176016712 0ustar rootrootbyacc-20221106/test/yacc/err_syntax8a.tab.h0000644000000000000000000000000012313161625016761 0ustar rootrootbyacc-20221106/test/yacc/err_syntax1.tab.h0000644000000000000000000000000012313147311016605 0ustar rootrootbyacc-20221106/test/yacc/quote_calc.error0000644000000000000000000000004112313150003016577 0ustar rootrootYACC: 54 shift/reduce conflicts. byacc-20221106/test/yacc/quote_calc3.tab.c0000644000000000000000000004555514104034777016566 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse quote_calc3_parse #endif /* yyparse */ #ifndef yylex #define yylex quote_calc3_lex #endif /* yylex */ #ifndef yyerror #define yyerror quote_calc3_error #endif /* yyerror */ #ifndef yychar #define yychar quote_calc3_char #endif /* yychar */ #ifndef yyval #define yyval quote_calc3_val #endif /* yyval */ #ifndef yylval #define yylval quote_calc3_lval #endif /* yylval */ #ifndef yydebug #define yydebug quote_calc3_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs quote_calc3_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag quote_calc3_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs quote_calc3_lhs #endif /* yylhs */ #ifndef yylen #define yylen quote_calc3_len #endif /* yylen */ #ifndef yydefred #define yydefred quote_calc3_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto quote_calc3_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex quote_calc3_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex quote_calc3_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex quote_calc3_gindex #endif /* yygindex */ #ifndef yytable #define yytable quote_calc3_table #endif /* yytable */ #ifndef yycheck #define yycheck quote_calc3_check #endif /* yycheck */ #ifndef yyname #define yyname quote_calc3_name #endif /* yyname */ #ifndef yyrule #define yyrule quote_calc3_rule #endif /* yyrule */ #define YYPREFIX "quote_calc3_" #define YYPURE 0 #line 2 "quote_calc3.y" # include # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); #line 111 "quote_calc3.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 OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #define YYERRCODE 256 typedef int YYINT; static const YYINT quote_calc3_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT quote_calc3_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT quote_calc3_defred[] = { 1, 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, 0, 0, }; static const YYINT quote_calc3_dgoto[] = { 1, 7, 8, 9, }; static const YYINT quote_calc3_sindex[] = { 0, -38, 5, -36, 0, -51, -36, 7, -121, -248, 0, 0, -243, -36, -22, 0, -36, -36, -36, -36, -36, -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, -121, -243, }; static const YYINT quote_calc3_rindex[] = { 0, 0, 0, 0, 0, -9, 0, 0, 13, -10, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, -3, -2, -1, 1, 2, 3, -4, }; static const YYINT quote_calc3_gindex[] = { 0, 0, 42, 0, }; #define YYTABLESIZE 258 static const YYINT quote_calc3_table[] = { 16, 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, 10, 11, 12, 16, 10, 17, 15, 18, 25, 19, 23, 20, 4, 21, 5, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, }; static const YYINT quote_calc3_check[] = { 10, 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, 10, 10, 10, 257, 10, 259, 10, 261, 41, 263, 269, 265, 10, 267, 10, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, 19, 20, 21, 22, -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, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, -1, 259, -1, 261, -1, 263, -1, 265, -1, 267, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, 259, -1, 259, -1, -1, -1, -1, -1, -1, -1, 269, 270, 269, 270, 257, -1, 259, -1, 261, -1, 263, -1, 265, -1, 267, -1, 257, 257, 259, 259, 261, 261, 263, 263, 265, 265, 267, 267, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 271 #define YYUNDFTOKEN 277 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const quote_calc3_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL", "\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"", "OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",0,0,0,0,0, "illegal-symbol", }; static const char *const quote_calc3_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr OP_ADD expr", "expr : expr OP_SUB expr", "expr : expr OP_MUL expr", "expr : expr OP_DIV expr", "expr : expr OP_MOD expr", "expr : expr OP_AND expr", "expr : expr '|' expr", "expr : OP_SUB expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 73 "quote_calc3.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 372 "quote_calc3.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 35 "quote_calc3.y" { yyerrok ; } #line 574 "quote_calc3.tab.c" break; case 4: #line 39 "quote_calc3.y" { printf("%d\n",yystack.l_mark[0]);} #line 579 "quote_calc3.tab.c" break; case 5: #line 41 "quote_calc3.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 584 "quote_calc3.tab.c" break; case 6: #line 45 "quote_calc3.y" { yyval = yystack.l_mark[-1]; } #line 589 "quote_calc3.tab.c" break; case 7: #line 47 "quote_calc3.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 594 "quote_calc3.tab.c" break; case 8: #line 49 "quote_calc3.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 599 "quote_calc3.tab.c" break; case 9: #line 51 "quote_calc3.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 604 "quote_calc3.tab.c" break; case 10: #line 53 "quote_calc3.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 609 "quote_calc3.tab.c" break; case 11: #line 55 "quote_calc3.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 614 "quote_calc3.tab.c" break; case 12: #line 57 "quote_calc3.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 619 "quote_calc3.tab.c" break; case 13: #line 59 "quote_calc3.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 624 "quote_calc3.tab.c" break; case 14: #line 61 "quote_calc3.y" { yyval = - yystack.l_mark[0]; } #line 629 "quote_calc3.tab.c" break; case 15: #line 63 "quote_calc3.y" { yyval = regs[yystack.l_mark[0]]; } #line 634 "quote_calc3.tab.c" break; case 17: #line 68 "quote_calc3.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 639 "quote_calc3.tab.c" break; case 18: #line 70 "quote_calc3.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 644 "quote_calc3.tab.c" break; #line 646 "quote_calc3.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/calc_code_top.tab.c0000644000000000000000000004462514104034777017137 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 /* %code "top" block start */ #line 1 "calc_code_top.y" /* CODE-TOP */ #line 2 "calc_code_top.y" /* CODE-TOP2 */ /* %code "top" block end */ #line 24 "calc_code_top.tab.c" #ifndef yyparse #define yyparse calc_code_top_parse #endif /* yyparse */ #ifndef yylex #define yylex calc_code_top_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc_code_top_error #endif /* yyerror */ #ifndef yychar #define yychar calc_code_top_char #endif /* yychar */ #ifndef yyval #define yyval calc_code_top_val #endif /* yyval */ #ifndef yylval #define yylval calc_code_top_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc_code_top_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc_code_top_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc_code_top_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc_code_top_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc_code_top_len #endif /* yylen */ #ifndef yydefred #define yydefred calc_code_top_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto calc_code_top_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc_code_top_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc_code_top_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc_code_top_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc_code_top_table #endif /* yytable */ #ifndef yycheck #define yycheck calc_code_top_check #endif /* yycheck */ #ifndef yyname #define yyname calc_code_top_name #endif /* yyname */ #ifndef yyrule #define yyrule calc_code_top_rule #endif /* yyrule */ #define YYPREFIX "calc_code_top_" #define YYPURE 0 #line 5 "calc_code_top.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 119 "calc_code_top.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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc_code_top_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc_code_top_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc_code_top_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; static const YYINT calc_code_top_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc_code_top_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc_code_top_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; static const YYINT calc_code_top_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc_code_top_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc_code_top_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc_code_top_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", }; static const char *const calc_code_top_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 69 "calc_code_top.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 364 "calc_code_top.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 31 "calc_code_top.y" { yyerrok ; } #line 566 "calc_code_top.tab.c" break; case 4: #line 35 "calc_code_top.y" { printf("%d\n",yystack.l_mark[0]);} #line 571 "calc_code_top.tab.c" break; case 5: #line 37 "calc_code_top.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 576 "calc_code_top.tab.c" break; case 6: #line 41 "calc_code_top.y" { yyval = yystack.l_mark[-1]; } #line 581 "calc_code_top.tab.c" break; case 7: #line 43 "calc_code_top.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 586 "calc_code_top.tab.c" break; case 8: #line 45 "calc_code_top.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 591 "calc_code_top.tab.c" break; case 9: #line 47 "calc_code_top.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 596 "calc_code_top.tab.c" break; case 10: #line 49 "calc_code_top.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 601 "calc_code_top.tab.c" break; case 11: #line 51 "calc_code_top.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 606 "calc_code_top.tab.c" break; case 12: #line 53 "calc_code_top.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 611 "calc_code_top.tab.c" break; case 13: #line 55 "calc_code_top.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 616 "calc_code_top.tab.c" break; case 14: #line 57 "calc_code_top.y" { yyval = - yystack.l_mark[0]; } #line 621 "calc_code_top.tab.c" break; case 15: #line 59 "calc_code_top.y" { yyval = regs[yystack.l_mark[0]]; } #line 626 "calc_code_top.tab.c" break; case 17: #line 64 "calc_code_top.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 631 "calc_code_top.tab.c" break; case 18: #line 66 "calc_code_top.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 636 "calc_code_top.tab.c" break; #line 638 "calc_code_top.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax2.tab.c0000644000000000000000000000067213726503203016625 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/no_include.output0000644000000000000000000000000013501466650017023 0ustar rootrootbyacc-20221106/test/yacc/no_graph.output0000644000000000000000000000000013501466650016501 0ustar rootrootbyacc-20221106/test/yacc/stdin2.calc.c0000644000000000000000000004101614104034777015707 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #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 2 "calc.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 31 "stdin2.calc.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 #if !(defined(yylex) || defined(YYSTATE)) int YYLEX_DECL(); #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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT yylhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT yylen[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT yydefred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; static const YYINT yydgoto[] = { 1, 7, 8, 9, }; static const YYINT yysindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT yyrindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; static const YYINT yygindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT yytable[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT yycheck[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #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,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", }; static const char *const yyrule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 66 "calc.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 280 "stdin2.calc.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 28 "calc.y" { yyerrok ; } #line 482 "stdin2.calc.c" break; case 4: #line 32 "calc.y" { printf("%d\n",yystack.l_mark[0]);} #line 487 "stdin2.calc.c" break; case 5: #line 34 "calc.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 492 "stdin2.calc.c" break; case 6: #line 38 "calc.y" { yyval = yystack.l_mark[-1]; } #line 497 "stdin2.calc.c" break; case 7: #line 40 "calc.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 502 "stdin2.calc.c" break; case 8: #line 42 "calc.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 507 "stdin2.calc.c" break; case 9: #line 44 "calc.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 512 "stdin2.calc.c" break; case 10: #line 46 "calc.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 517 "stdin2.calc.c" break; case 11: #line 48 "calc.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 522 "stdin2.calc.c" break; case 12: #line 50 "calc.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 527 "stdin2.calc.c" break; case 13: #line 52 "calc.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 532 "stdin2.calc.c" break; case 14: #line 54 "calc.y" { yyval = - yystack.l_mark[0]; } #line 537 "stdin2.calc.c" break; case 15: #line 56 "calc.y" { yyval = regs[yystack.l_mark[0]]; } #line 542 "stdin2.calc.c" break; case 17: #line 61 "calc.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 547 "stdin2.calc.c" break; case 18: #line 63 "calc.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 552 "stdin2.calc.c" break; #line 554 "stdin2.calc.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/calc2.tab.h0000644000000000000000000000007011404014140015312 0ustar rootroot#define DIGIT 257 #define LETTER 258 #define UMINUS 259 byacc-20221106/test/yacc/err_syntax16.tab.h0000644000000000000000000000000012313423040016667 0ustar rootrootbyacc-20221106/test/yacc/calc_code_all.tab.h0000644000000000000000000000051613565107367017107 0ustar rootroot/* %code "requires" block start */ #line 3 "calc_code_all.y" /* CODE-REQUIRES */ /* %code "requires" block end */ #define DIGIT 257 #define LETTER 258 #define UMINUS 259 /* %code "provides" block start */ #line 4 "calc_code_all.y" /* CODE-PROVIDES */ #line 6 "calc_code_all.y" /* CODE-PROVIDES2 */ /* %code "provides" block end */ byacc-20221106/test/yacc/err_syntax15.tab.c0000644000000000000000000000067213726503203016711 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/quote_calc-s.output0000644000000000000000000002614511704267405017305 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr OP_ADD expr 8 | expr OP_SUB expr 9 | expr OP_MUL expr 10 | expr OP_DIV expr 11 | expr OP_MOD expr 12 | expr OP_AND expr 13 | expr '|' expr 14 | OP_SUB expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 OP_SUB shift 3 DIGIT shift 4 LETTER shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 expr : OP_SUB . expr (14) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 12 number goto 9 state 4 number : DIGIT . (17) . reduce 17 state 5 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 13 OP_ADD reduce 15 OP_SUB reduce 15 OP_MUL reduce 15 OP_DIV reduce 15 OP_MOD reduce 15 OP_AND reduce 15 '|' reduce 15 '\n' reduce 15 state 6 expr : '(' . expr ')' (6) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 OP_ADD reduce 16 OP_SUB reduce 16 OP_MUL reduce 16 OP_DIV reduce 16 OP_MOD reduce 16 OP_AND reduce 16 '|' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 expr : LETTER . (15) . reduce 15 12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD 12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB 12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL 12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV 12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD 12: shift/reduce conflict (shift 21, reduce 14) on OP_AND state 12 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) expr : OP_SUB expr . (14) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' reduce 14 '\n' reduce 14 ')' reduce 14 state 13 stat : LETTER '=' . expr (5) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 24 number goto 9 state 14 expr : '(' expr . ')' (6) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr OP_ADD . expr (7) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr OP_SUB . expr (8) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr OP_MUL . expr (9) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr OP_DIV . expr (10) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr OP_MOD . expr (11) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr OP_AND . expr (12) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '|' . expr (13) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD 26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB 26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL 26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV 26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD 26: shift/reduce conflict (shift 21, reduce 7) on OP_AND 26: shift/reduce conflict (shift 22, reduce 7) on '|' state 26 expr : expr . OP_ADD expr (7) expr : expr OP_ADD expr . (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 7 ')' reduce 7 27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD 27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB 27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL 27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV 27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD 27: shift/reduce conflict (shift 21, reduce 8) on OP_AND 27: shift/reduce conflict (shift 22, reduce 8) on '|' state 27 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr OP_SUB expr . (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 8 ')' reduce 8 28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD 28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB 28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL 28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV 28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD 28: shift/reduce conflict (shift 21, reduce 9) on OP_AND 28: shift/reduce conflict (shift 22, reduce 9) on '|' state 28 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr OP_MUL expr . (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 9 ')' reduce 9 29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD 29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB 29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL 29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV 29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD 29: shift/reduce conflict (shift 21, reduce 10) on OP_AND 29: shift/reduce conflict (shift 22, reduce 10) on '|' state 29 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr OP_DIV expr . (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 10 ')' reduce 10 30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD 30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB 30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL 30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV 30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD 30: shift/reduce conflict (shift 21, reduce 11) on OP_AND 30: shift/reduce conflict (shift 22, reduce 11) on '|' state 30 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr OP_MOD expr . (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 11 ')' reduce 11 31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD 31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB 31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL 31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV 31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD 31: shift/reduce conflict (shift 21, reduce 12) on OP_AND 31: shift/reduce conflict (shift 22, reduce 12) on '|' state 31 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr OP_AND expr . (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 12 ')' reduce 12 32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD 32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB 32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL 32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV 32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD 32: shift/reduce conflict (shift 21, reduce 13) on OP_AND state 32 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' reduce 13 '\n' reduce 13 ')' reduce 13 State 12 contains 6 shift/reduce conflicts. State 26 contains 7 shift/reduce conflicts. State 27 contains 7 shift/reduce conflicts. State 28 contains 7 shift/reduce conflicts. State 29 contains 7 shift/reduce conflicts. State 30 contains 7 shift/reduce conflicts. State 31 contains 7 shift/reduce conflicts. State 32 contains 6 shift/reduce conflicts. 28 terminals, 5 nonterminals 19 grammar rules, 33 states byacc-20221106/test/yacc/calc.error0000644000000000000000000000000012313150003015355 0ustar rootrootbyacc-20221106/test/yacc/err_syntax8.output0000644000000000000000000000000012313161625017164 0ustar rootrootbyacc-20221106/test/yacc/code_calc.tab.c0000644000000000000000000001217014051574134016240 0ustar rootroottypedef int YYINT; const YYINT calc_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; const YYINT calc_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; const YYINT calc_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; const YYINT calc_dgoto[] = { 1, 7, 8, 9, }; const YYINT calc_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; const YYINT calc_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; const YYINT calc_gindex[] = { 0, 0, 65, 0, }; const YYINT calc_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; const YYINT calc_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #ifndef YYDEBUG #define YYDEBUG 0 #endif const char *const calc_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", }; #if YYDEBUG const char *const calc_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif byacc-20221106/test/yacc/calc3.output0000644000000000000000000001536011404023270015673 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states byacc-20221106/test/yacc/calc_code_imports.output0000644000000000000000000001536013564732111020371 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states byacc-20221106/test/yacc/error.output0000644000000000000000000000040605342077626016054 0ustar rootroot 0 $accept : S $end 1 S : error state 0 $accept : . S $end (0) error shift 1 . error S goto 2 state 1 S : error . (1) . reduce 1 state 2 $accept : S . $end (0) $end accept 2 terminals, 2 nonterminals 2 grammar rules, 3 states byacc-20221106/test/yacc/err_syntax15.error0000644000000000000000000000010612361053263017043 0ustar rootrootYACC: e - line 9 of "./err_syntax15.y", no grammar has been specified byacc-20221106/test/yacc/err_syntax24.error0000644000000000000000000000023512723666307017061 0ustar rootrootYACC: w - line 21 of "./err_syntax24.y", the default action for expr assigns an undefined value to $$ YACC: e - line 22 of "./err_syntax24.y", $$ is untyped byacc-20221106/test/yacc/err_syntax23.tab.h0000644000000000000000000000000012313677755016715 0ustar rootrootbyacc-20221106/test/yacc/no_p_opt1.output0000644000000000000000000000000013501466650016602 0ustar rootrootbyacc-20221106/test/yacc/err_syntax5.error0000644000000000000000000000012212361053263016760 0ustar rootrootYACC: e - line 6 of "./err_syntax5.y", unterminated %union declaration %union { ^ byacc-20221106/test/yacc/calc1.tab.h0000644000000000000000000000053214030125276015327 0ustar rootroot#define DREG 257 #define VREG 258 #define CONST 259 #define UMINUS 260 #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 typedef union YYSTYPE { int ival; double dval; INTERVAL vval; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ extern YYSTYPE calc1_lval; byacc-20221106/test/yacc/big_l.error0000644000000000000000000000243414102076731015561 0ustar rootrootYACC: w - -L flag unsupported, reconfigure with --enable-btyacc Usage: YACC [options] filename Options: -b file_prefix set filename prefix (default "y.") -B create a backtracking parser -d write definitions (.tab.h) -h print this help-message -H defines_file write definitions to defines_file -i write interface (y.tab.i) -g write a graphical description -l suppress #line directives -L enable position processing, e.g., "%locations" -o output_file (default ".tab.c") -p symbol_prefix set symbol prefix (default "yy") -P create a reentrant parser, e.g., "%pure-parser" -r produce separate code and table files (y.code.c) -s suppress #define's for quoted names in %token lines -t add debugging support -v write description (y.output) -V show version information and exit Long options: --defines -H --file-prefix -b --graph -g --help -h --name-prefix -p --no-lines -l --output -o --version -V byacc-20221106/test/yacc/err_syntax2.error0000644000000000000000000000007712361053263016766 0ustar rootrootYACC: e - line 1 of "./err_syntax2.y", unmatched /* %{ /* ^ byacc-20221106/test/yacc/err_syntax11.tab.c0000644000000000000000000002770414104034777016720 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse err_syntax11_parse #endif /* yyparse */ #ifndef yylex #define yylex err_syntax11_lex #endif /* yylex */ #ifndef yyerror #define yyerror err_syntax11_error #endif /* yyerror */ #ifndef yychar #define yychar err_syntax11_char #endif /* yychar */ #ifndef yyval #define yyval err_syntax11_val #endif /* yyval */ #ifndef yylval #define yylval err_syntax11_lval #endif /* yylval */ #ifndef yydebug #define yydebug err_syntax11_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs err_syntax11_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag err_syntax11_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs err_syntax11_lhs #endif /* yylhs */ #ifndef yylen #define yylen err_syntax11_len #endif /* yylen */ #ifndef yydefred #define yydefred err_syntax11_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto err_syntax11_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex err_syntax11_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex err_syntax11_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex err_syntax11_gindex #endif /* yygindex */ #ifndef yytable #define yytable err_syntax11_table #endif /* yytable */ #ifndef yycheck #define yycheck err_syntax11_check #endif /* yycheck */ #ifndef yyname #define yyname err_syntax11_name #endif /* yyname */ #ifndef yyrule #define yyrule err_syntax11_rule #endif /* yyrule */ #define YYPREFIX "err_syntax11_" #define YYPURE 0 #line 2 "err_syntax11.y" int yylex(void); static void yyerror(const char *); #line 104 "err_syntax11.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 YYERRCODE 256 typedef int YYINT; static const YYINT err_syntax11_lhs[] = { -1, 0, }; static const YYINT err_syntax11_len[] = { 2, 1, }; static const YYINT err_syntax11_defred[] = { 0, 1, 0, }; static const YYINT err_syntax11_dgoto[] = { 2, }; static const YYINT err_syntax11_sindex[] = { -256, 0, 0, }; static const YYINT err_syntax11_rindex[] = { 0, 0, 0, }; static const YYINT err_syntax11_gindex[] = { 0, }; #define YYTABLESIZE 0 static const YYINT err_syntax11_table[] = { 1, }; static const YYINT err_syntax11_check[] = { 256, }; #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 256 #define YYUNDFTOKEN 259 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const err_syntax11_name[] = { "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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol", }; static const char *const err_syntax11_rule[] = { "$accept : S", "S : error", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 12 "err_syntax11.y" #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } #line 251 "err_syntax11.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { } 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/no_include.error0000644000000000000000000000004513501466650016625 0ustar rootrootYACC: f - cannot open "nosuchfile.i" byacc-20221106/test/yacc/varsyntax_calc1.tab.h0000644000000000000000000000067014030125301017436 0ustar rootroot#define DREG 257 #define VREG 258 #define CONST 259 #define UMINUS 260 #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 typedef union YYSTYPE { int ival; /* dreg & vreg array index values*/ double dval; /* floating point values*/ INTERVAL vval; /* interval values*/ } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ extern YYSTYPE varsyntax_calc1_lval; byacc-20221106/test/yacc/err_syntax7.error0000644000000000000000000000013712361053263016770 0ustar rootrootYACC: e - line 6 of "./err_syntax7.y", illegal character %token '\777' ^ byacc-20221106/test/yacc/quote_calc2-s.tab.c0000644000000000000000000004555514104034777017025 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse quote_calc2_parse #endif /* yyparse */ #ifndef yylex #define yylex quote_calc2_lex #endif /* yylex */ #ifndef yyerror #define yyerror quote_calc2_error #endif /* yyerror */ #ifndef yychar #define yychar quote_calc2_char #endif /* yychar */ #ifndef yyval #define yyval quote_calc2_val #endif /* yyval */ #ifndef yylval #define yylval quote_calc2_lval #endif /* yylval */ #ifndef yydebug #define yydebug quote_calc2_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs quote_calc2_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag quote_calc2_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs quote_calc2_lhs #endif /* yylhs */ #ifndef yylen #define yylen quote_calc2_len #endif /* yylen */ #ifndef yydefred #define yydefred quote_calc2_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto quote_calc2_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex quote_calc2_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex quote_calc2_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex quote_calc2_gindex #endif /* yygindex */ #ifndef yytable #define yytable quote_calc2_table #endif /* yytable */ #ifndef yycheck #define yycheck quote_calc2_check #endif /* yycheck */ #ifndef yyname #define yyname quote_calc2_name #endif /* yyname */ #ifndef yyrule #define yyrule quote_calc2_rule #endif /* yyrule */ #define YYPREFIX "quote_calc2_" #define YYPURE 0 #line 2 "quote_calc2.y" # include # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); #line 111 "quote_calc2-s.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 OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #define YYERRCODE 256 typedef int YYINT; static const YYINT quote_calc2_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT quote_calc2_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT quote_calc2_defred[] = { 1, 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, 0, 0, }; static const YYINT quote_calc2_dgoto[] = { 1, 7, 8, 9, }; static const YYINT quote_calc2_sindex[] = { 0, -38, 4, -36, 0, -51, -36, 6, -121, -249, 0, 0, -243, -36, -23, 0, -36, -36, -36, -36, -36, -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, -121, -243, }; static const YYINT quote_calc2_rindex[] = { 0, 0, 0, 0, 0, -9, 0, 0, 12, -10, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, -3, -2, -1, 1, 2, 3, -4, }; static const YYINT quote_calc2_gindex[] = { 0, 0, 42, 0, }; #define YYTABLESIZE 259 static const YYINT quote_calc2_table[] = { 16, 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, 10, 11, 12, 10, 16, 15, 17, 25, 18, 23, 19, 4, 20, 5, 21, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, }; static const YYINT quote_calc2_check[] = { 10, 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, 10, 10, 10, 10, 258, 10, 260, 41, 262, 269, 264, 10, 266, 10, 268, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, 19, 20, 21, 22, -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, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 258, -1, 260, -1, 262, -1, 264, -1, 266, -1, 268, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 260, -1, 260, -1, -1, -1, -1, -1, -1, 269, 270, 269, 270, 258, -1, 260, -1, 262, -1, 264, -1, 266, -1, 268, -1, -1, 258, 258, 260, 260, 262, 262, 264, 264, 266, 266, 268, 268, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 271 #define YYUNDFTOKEN 277 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const quote_calc2_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV", "\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",0,0,0, 0,0,"illegal-symbol", }; static const char *const quote_calc2_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr \"ADD\" expr", "expr : expr \"SUB\" expr", "expr : expr \"MUL\" expr", "expr : expr \"DIV\" expr", "expr : expr \"MOD\" expr", "expr : expr \"AND\" expr", "expr : expr '|' expr", "expr : \"SUB\" expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 73 "quote_calc2.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 371 "quote_calc2-s.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 35 "quote_calc2.y" { yyerrok ; } #line 573 "quote_calc2-s.tab.c" break; case 4: #line 39 "quote_calc2.y" { printf("%d\n",yystack.l_mark[0]);} #line 578 "quote_calc2-s.tab.c" break; case 5: #line 41 "quote_calc2.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 583 "quote_calc2-s.tab.c" break; case 6: #line 45 "quote_calc2.y" { yyval = yystack.l_mark[-1]; } #line 588 "quote_calc2-s.tab.c" break; case 7: #line 47 "quote_calc2.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 593 "quote_calc2-s.tab.c" break; case 8: #line 49 "quote_calc2.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 598 "quote_calc2-s.tab.c" break; case 9: #line 51 "quote_calc2.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 603 "quote_calc2-s.tab.c" break; case 10: #line 53 "quote_calc2.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 608 "quote_calc2-s.tab.c" break; case 11: #line 55 "quote_calc2.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 613 "quote_calc2-s.tab.c" break; case 12: #line 57 "quote_calc2.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 618 "quote_calc2-s.tab.c" break; case 13: #line 59 "quote_calc2.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 623 "quote_calc2-s.tab.c" break; case 14: #line 61 "quote_calc2.y" { yyval = - yystack.l_mark[0]; } #line 628 "quote_calc2-s.tab.c" break; case 15: #line 63 "quote_calc2.y" { yyval = regs[yystack.l_mark[0]]; } #line 633 "quote_calc2-s.tab.c" break; case 17: #line 68 "quote_calc2.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 638 "quote_calc2-s.tab.c" break; case 18: #line 70 "quote_calc2.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 643 "quote_calc2-s.tab.c" break; #line 645 "quote_calc2-s.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/error.tab.c0000644000000000000000000002740214104034777015504 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse error_parse #endif /* yyparse */ #ifndef yylex #define yylex error_lex #endif /* yylex */ #ifndef yyerror #define yyerror error_error #endif /* yyerror */ #ifndef yychar #define yychar error_char #endif /* yychar */ #ifndef yyval #define yyval error_val #endif /* yyval */ #ifndef yylval #define yylval error_lval #endif /* yylval */ #ifndef yydebug #define yydebug error_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs error_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag error_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs error_lhs #endif /* yylhs */ #ifndef yylen #define yylen error_len #endif /* yylen */ #ifndef yydefred #define yydefred error_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto error_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex error_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex error_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex error_gindex #endif /* yygindex */ #ifndef yytable #define yytable error_table #endif /* yytable */ #ifndef yycheck #define yycheck error_check #endif /* yycheck */ #ifndef yyname #define yyname error_name #endif /* yyname */ #ifndef yyrule #define yyrule error_rule #endif /* yyrule */ #define YYPREFIX "error_" #define YYPURE 0 #line 2 "error.y" int yylex(void); static void yyerror(const char *); #line 104 "error.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 YYERRCODE 256 typedef int YYINT; static const YYINT error_lhs[] = { -1, 0, }; static const YYINT error_len[] = { 2, 1, }; static const YYINT error_defred[] = { 0, 1, 0, }; static const YYINT error_dgoto[] = { 2, }; static const YYINT error_sindex[] = { -256, 0, 0, }; static const YYINT error_rindex[] = { 0, 0, 0, }; static const YYINT error_gindex[] = { 0, }; #define YYTABLESIZE 0 static const YYINT error_table[] = { 1, }; static const YYINT error_check[] = { 256, }; #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 256 #define YYUNDFTOKEN 259 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const error_name[] = { "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,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 error_rule[] = { "$accept : S", "S : error", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 8 "error.y" #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } #line 251 "error.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { } 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/quote_calc4.tab.c0000644000000000000000000004567714104034777016574 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse quote_calc4_parse #endif /* yyparse */ #ifndef yylex #define yylex quote_calc4_lex #endif /* yylex */ #ifndef yyerror #define yyerror quote_calc4_error #endif /* yyerror */ #ifndef yychar #define yychar quote_calc4_char #endif /* yychar */ #ifndef yyval #define yyval quote_calc4_val #endif /* yyval */ #ifndef yylval #define yylval quote_calc4_lval #endif /* yylval */ #ifndef yydebug #define yydebug quote_calc4_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs quote_calc4_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag quote_calc4_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs quote_calc4_lhs #endif /* yylhs */ #ifndef yylen #define yylen quote_calc4_len #endif /* yylen */ #ifndef yydefred #define yydefred quote_calc4_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto quote_calc4_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex quote_calc4_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex quote_calc4_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex quote_calc4_gindex #endif /* yygindex */ #ifndef yytable #define yytable quote_calc4_table #endif /* yytable */ #ifndef yycheck #define yycheck quote_calc4_check #endif /* yycheck */ #ifndef yyname #define yyname quote_calc4_name #endif /* yyname */ #ifndef yyrule #define yyrule quote_calc4_rule #endif /* yyrule */ #define YYPREFIX "quote_calc4_" #define YYPURE 0 #line 2 "quote_calc4.y" # include # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); #line 111 "quote_calc4.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 OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #define YYERRCODE 256 typedef int YYINT; static const YYINT quote_calc4_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT quote_calc4_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT quote_calc4_defred[] = { 1, 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, 0, 0, }; static const YYINT quote_calc4_dgoto[] = { 1, 7, 8, 9, }; static const YYINT quote_calc4_sindex[] = { 0, -38, 4, -36, 0, -51, -36, 6, -121, -249, 0, 0, -243, -36, -23, 0, -36, -36, -36, -36, -36, -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, -121, -243, }; static const YYINT quote_calc4_rindex[] = { 0, 0, 0, 0, 0, -9, 0, 0, 12, -10, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, -3, -2, -1, 1, 2, 3, -4, }; static const YYINT quote_calc4_gindex[] = { 0, 0, 42, 0, }; #define YYTABLESIZE 259 static const YYINT quote_calc4_table[] = { 16, 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, 10, 11, 12, 10, 16, 15, 17, 25, 18, 23, 19, 4, 20, 5, 21, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, }; static const YYINT quote_calc4_check[] = { 10, 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, 10, 10, 10, 10, 258, 10, 260, 41, 262, 269, 264, 10, 266, 10, 268, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, 19, 20, 21, 22, -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, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 258, -1, 260, -1, 262, -1, 264, -1, 266, -1, 268, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 260, -1, 260, -1, -1, -1, -1, -1, -1, 269, 270, 269, 270, 258, -1, 260, -1, 262, -1, 264, -1, 266, -1, 268, -1, -1, 258, 258, 260, 260, 262, 262, 264, 264, 266, 266, 268, 268, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 271 #define YYUNDFTOKEN 277 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const quote_calc4_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL", "\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"", "OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",0,0,0,0,0, "illegal-symbol", }; static const char *const quote_calc4_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr \"ADD-operator\" expr", "expr : expr \"SUB-operator\" expr", "expr : expr \"MUL-operator\" expr", "expr : expr \"DIV-operator\" expr", "expr : expr \"MOD-operator\" expr", "expr : expr \"AND-operator\" expr", "expr : expr '|' expr", "expr : \"SUB-operator\" expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 73 "quote_calc4.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 372 "quote_calc4.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 35 "quote_calc4.y" { yyerrok ; } #line 574 "quote_calc4.tab.c" break; case 4: #line 39 "quote_calc4.y" { printf("%d\n",yystack.l_mark[0]);} #line 579 "quote_calc4.tab.c" break; case 5: #line 41 "quote_calc4.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 584 "quote_calc4.tab.c" break; case 6: #line 45 "quote_calc4.y" { yyval = yystack.l_mark[-1]; } #line 589 "quote_calc4.tab.c" break; case 7: #line 47 "quote_calc4.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 594 "quote_calc4.tab.c" break; case 8: #line 49 "quote_calc4.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 599 "quote_calc4.tab.c" break; case 9: #line 51 "quote_calc4.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 604 "quote_calc4.tab.c" break; case 10: #line 53 "quote_calc4.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 609 "quote_calc4.tab.c" break; case 11: #line 55 "quote_calc4.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 614 "quote_calc4.tab.c" break; case 12: #line 57 "quote_calc4.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 619 "quote_calc4.tab.c" break; case 13: #line 59 "quote_calc4.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 624 "quote_calc4.tab.c" break; case 14: #line 61 "quote_calc4.y" { yyval = - yystack.l_mark[0]; } #line 629 "quote_calc4.tab.c" break; case 15: #line 63 "quote_calc4.y" { yyval = regs[yystack.l_mark[0]]; } #line 634 "quote_calc4.tab.c" break; case 17: #line 68 "quote_calc4.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 639 "quote_calc4.tab.c" break; case 18: #line 70 "quote_calc4.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 644 "quote_calc4.tab.c" break; #line 646 "quote_calc4.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/empty.tab.h0000644000000000000000000000000012315405303015464 0ustar rootrootbyacc-20221106/test/yacc/err_syntax4.tab.h0000644000000000000000000000000012313154514016613 0ustar rootrootbyacc-20221106/test/yacc/err_syntax22.error0000644000000000000000000000007712361053263017050 0ustar rootrootYACC: e - line 17 of "./err_syntax22.y", $2 (recur) is untyped byacc-20221106/test/yacc/calc_code_imports.error0000644000000000000000000000000013564732111020143 0ustar rootrootbyacc-20221106/test/yacc/err_syntax17.error0000644000000000000000000000011412361053263017044 0ustar rootrootYACC: e - line 8 of "./err_syntax17.y", unterminated action S: { error ^ byacc-20221106/test/yacc/stdin1.output0000644000000000000000000000000013501464601016100 0ustar rootrootbyacc-20221106/test/yacc/err_syntax17.output0000644000000000000000000000000012313535512017244 0ustar rootrootbyacc-20221106/test/yacc/err_syntax14.tab.c0000644000000000000000000000067213726503203016710 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/expr.oxout.tab.h0000644000000000000000000000053114164140215016474 0ustar rootroot#define ID 257 #define CONST 258 #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 typedef union YYSTYPE { struct yyyOxAttrbs { struct yyyStackItem *yyyOxStackItem; } yyyOxAttrbs; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ extern YYSTYPE expr_oxout_lval; byacc-20221106/test/yacc/err_syntax7b.tab.c0000644000000000000000000000067213726503203016774 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/calc3.tab.h0000644000000000000000000000007011404023270015317 0ustar rootroot#define DIGIT 257 #define LETTER 258 #define UMINUS 259 byacc-20221106/test/yacc/err_syntax15.output0000644000000000000000000000000012313421446017242 0ustar rootrootbyacc-20221106/test/yacc/err_syntax21.output0000644000000000000000000000000012313666267017253 0ustar rootrootbyacc-20221106/test/yacc/quote_calc2.output0000644000000000000000000002560511704127477017133 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr "ADD" expr 8 | expr "SUB" expr 9 | expr "MUL" expr 10 | expr "DIV" expr 11 | expr "MOD" expr 12 | expr "AND" expr 13 | expr '|' expr 14 | "SUB" expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 "SUB" shift 3 DIGIT shift 4 LETTER shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 expr : "SUB" . expr (14) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 12 number goto 9 state 4 number : DIGIT . (17) . reduce 17 state 5 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 13 "ADD" reduce 15 "SUB" reduce 15 "MUL" reduce 15 "DIV" reduce 15 "MOD" reduce 15 "AND" reduce 15 '|' reduce 15 '\n' reduce 15 state 6 expr : '(' . expr ')' (6) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 "ADD" reduce 16 "SUB" reduce 16 "MUL" reduce 16 "DIV" reduce 16 "MOD" reduce 16 "AND" reduce 16 '|' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 expr : LETTER . (15) . reduce 15 12: shift/reduce conflict (shift 16, reduce 14) on "ADD" 12: shift/reduce conflict (shift 17, reduce 14) on "SUB" 12: shift/reduce conflict (shift 18, reduce 14) on "MUL" 12: shift/reduce conflict (shift 19, reduce 14) on "DIV" 12: shift/reduce conflict (shift 20, reduce 14) on "MOD" 12: shift/reduce conflict (shift 21, reduce 14) on "AND" state 12 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) expr : "SUB" expr . (14) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' reduce 14 '\n' reduce 14 ')' reduce 14 state 13 stat : LETTER '=' . expr (5) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 24 number goto 9 state 14 expr : '(' expr . ')' (6) expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr "ADD" . expr (7) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr "SUB" . expr (8) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr "MUL" . expr (9) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr "DIV" . expr (10) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr "MOD" . expr (11) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr "AND" . expr (12) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '|' . expr (13) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 26: shift/reduce conflict (shift 16, reduce 7) on "ADD" 26: shift/reduce conflict (shift 17, reduce 7) on "SUB" 26: shift/reduce conflict (shift 18, reduce 7) on "MUL" 26: shift/reduce conflict (shift 19, reduce 7) on "DIV" 26: shift/reduce conflict (shift 20, reduce 7) on "MOD" 26: shift/reduce conflict (shift 21, reduce 7) on "AND" 26: shift/reduce conflict (shift 22, reduce 7) on '|' state 26 expr : expr . "ADD" expr (7) expr : expr "ADD" expr . (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 7 ')' reduce 7 27: shift/reduce conflict (shift 16, reduce 8) on "ADD" 27: shift/reduce conflict (shift 17, reduce 8) on "SUB" 27: shift/reduce conflict (shift 18, reduce 8) on "MUL" 27: shift/reduce conflict (shift 19, reduce 8) on "DIV" 27: shift/reduce conflict (shift 20, reduce 8) on "MOD" 27: shift/reduce conflict (shift 21, reduce 8) on "AND" 27: shift/reduce conflict (shift 22, reduce 8) on '|' state 27 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr "SUB" expr . (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 8 ')' reduce 8 28: shift/reduce conflict (shift 16, reduce 9) on "ADD" 28: shift/reduce conflict (shift 17, reduce 9) on "SUB" 28: shift/reduce conflict (shift 18, reduce 9) on "MUL" 28: shift/reduce conflict (shift 19, reduce 9) on "DIV" 28: shift/reduce conflict (shift 20, reduce 9) on "MOD" 28: shift/reduce conflict (shift 21, reduce 9) on "AND" 28: shift/reduce conflict (shift 22, reduce 9) on '|' state 28 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr "MUL" expr . (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 9 ')' reduce 9 29: shift/reduce conflict (shift 16, reduce 10) on "ADD" 29: shift/reduce conflict (shift 17, reduce 10) on "SUB" 29: shift/reduce conflict (shift 18, reduce 10) on "MUL" 29: shift/reduce conflict (shift 19, reduce 10) on "DIV" 29: shift/reduce conflict (shift 20, reduce 10) on "MOD" 29: shift/reduce conflict (shift 21, reduce 10) on "AND" 29: shift/reduce conflict (shift 22, reduce 10) on '|' state 29 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr "DIV" expr . (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 10 ')' reduce 10 30: shift/reduce conflict (shift 16, reduce 11) on "ADD" 30: shift/reduce conflict (shift 17, reduce 11) on "SUB" 30: shift/reduce conflict (shift 18, reduce 11) on "MUL" 30: shift/reduce conflict (shift 19, reduce 11) on "DIV" 30: shift/reduce conflict (shift 20, reduce 11) on "MOD" 30: shift/reduce conflict (shift 21, reduce 11) on "AND" 30: shift/reduce conflict (shift 22, reduce 11) on '|' state 30 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr "MOD" expr . (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 11 ')' reduce 11 31: shift/reduce conflict (shift 16, reduce 12) on "ADD" 31: shift/reduce conflict (shift 17, reduce 12) on "SUB" 31: shift/reduce conflict (shift 18, reduce 12) on "MUL" 31: shift/reduce conflict (shift 19, reduce 12) on "DIV" 31: shift/reduce conflict (shift 20, reduce 12) on "MOD" 31: shift/reduce conflict (shift 21, reduce 12) on "AND" 31: shift/reduce conflict (shift 22, reduce 12) on '|' state 31 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr "AND" expr . (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 12 ')' reduce 12 32: shift/reduce conflict (shift 16, reduce 13) on "ADD" 32: shift/reduce conflict (shift 17, reduce 13) on "SUB" 32: shift/reduce conflict (shift 18, reduce 13) on "MUL" 32: shift/reduce conflict (shift 19, reduce 13) on "DIV" 32: shift/reduce conflict (shift 20, reduce 13) on "MOD" 32: shift/reduce conflict (shift 21, reduce 13) on "AND" state 32 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' reduce 13 '\n' reduce 13 ')' reduce 13 State 12 contains 6 shift/reduce conflicts. State 26 contains 7 shift/reduce conflicts. State 27 contains 7 shift/reduce conflicts. State 28 contains 7 shift/reduce conflicts. State 29 contains 7 shift/reduce conflicts. State 30 contains 7 shift/reduce conflicts. State 31 contains 7 shift/reduce conflicts. State 32 contains 6 shift/reduce conflicts. 28 terminals, 5 nonterminals 19 grammar rules, 33 states byacc-20221106/test/yacc/calc_code_provides.tab.c0000644000000000000000000004533314104034777020165 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse calc_code_provides_parse #endif /* yyparse */ #ifndef yylex #define yylex calc_code_provides_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc_code_provides_error #endif /* yyerror */ #ifndef yychar #define yychar calc_code_provides_char #endif /* yychar */ #ifndef yyval #define yyval calc_code_provides_val #endif /* yyval */ #ifndef yylval #define yylval calc_code_provides_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc_code_provides_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc_code_provides_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc_code_provides_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc_code_provides_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc_code_provides_len #endif /* yylen */ #ifndef yydefred #define yydefred calc_code_provides_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto calc_code_provides_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc_code_provides_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc_code_provides_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc_code_provides_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc_code_provides_table #endif /* yytable */ #ifndef yycheck #define yycheck calc_code_provides_check #endif /* yycheck */ #ifndef yyname #define yyname calc_code_provides_name #endif /* yyname */ #ifndef yyrule #define yyrule calc_code_provides_rule #endif /* yyrule */ #define YYPREFIX "calc_code_provides_" #define YYPURE 0 #line 5 "calc_code_provides.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 111 "calc_code_provides.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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc_code_provides_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc_code_provides_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc_code_provides_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; static const YYINT calc_code_provides_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc_code_provides_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc_code_provides_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; static const YYINT calc_code_provides_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc_code_provides_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc_code_provides_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc_code_provides_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", }; static const char *const calc_code_provides_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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; /* %code "provides" block start */ #line 1 "calc_code_provides.y" /* CODE-PROVIDES */ #line 2 "calc_code_provides.y" /* CODE-PROVIDES2 */ /* %code "provides" block end */ #line 321 "calc_code_provides.tab.c" #line 69 "calc_code_provides.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 364 "calc_code_provides.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 31 "calc_code_provides.y" { yyerrok ; } #line 566 "calc_code_provides.tab.c" break; case 4: #line 35 "calc_code_provides.y" { printf("%d\n",yystack.l_mark[0]);} #line 571 "calc_code_provides.tab.c" break; case 5: #line 37 "calc_code_provides.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 576 "calc_code_provides.tab.c" break; case 6: #line 41 "calc_code_provides.y" { yyval = yystack.l_mark[-1]; } #line 581 "calc_code_provides.tab.c" break; case 7: #line 43 "calc_code_provides.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 586 "calc_code_provides.tab.c" break; case 8: #line 45 "calc_code_provides.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 591 "calc_code_provides.tab.c" break; case 9: #line 47 "calc_code_provides.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 596 "calc_code_provides.tab.c" break; case 10: #line 49 "calc_code_provides.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 601 "calc_code_provides.tab.c" break; case 11: #line 51 "calc_code_provides.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 606 "calc_code_provides.tab.c" break; case 12: #line 53 "calc_code_provides.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 611 "calc_code_provides.tab.c" break; case 13: #line 55 "calc_code_provides.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 616 "calc_code_provides.tab.c" break; case 14: #line 57 "calc_code_provides.y" { yyval = - yystack.l_mark[0]; } #line 621 "calc_code_provides.tab.c" break; case 15: #line 59 "calc_code_provides.y" { yyval = regs[yystack.l_mark[0]]; } #line 626 "calc_code_provides.tab.c" break; case 17: #line 64 "calc_code_provides.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 631 "calc_code_provides.tab.c" break; case 18: #line 66 "calc_code_provides.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 636 "calc_code_provides.tab.c" break; #line 638 "calc_code_provides.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/help.error0000644000000000000000000000236014102076731015433 0ustar rootrootYACC: error message Usage: YACC [options] filename Options: -b file_prefix set filename prefix (default "y.") -B create a backtracking parser -d write definitions (.tab.h) -h print this help-message -H defines_file write definitions to defines_file -i write interface (y.tab.i) -g write a graphical description -l suppress #line directives -L enable position processing, e.g., "%locations" -o output_file (default ".tab.c") -p symbol_prefix set symbol prefix (default "yy") -P create a reentrant parser, e.g., "%pure-parser" -r produce separate code and table files (y.code.c) -s suppress #define's for quoted names in %token lines -t add debugging support -v write description (y.output) -V show version information and exit Long options: --defines -H --file-prefix -b --graph -g --help -h --name-prefix -p --no-lines -l --output -o --version -V byacc-20221106/test/yacc/rename_debug.h0000644000000000000000000000002612321224045016205 0ustar rootroot#define YYERRCODE 256 byacc-20221106/test/yacc/defines1.calc.c0000644000000000000000000004064214104034777016206 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #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 2 "calc.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 31 "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 #if !(defined(yylex) || defined(YYSTATE)) int YYLEX_DECL(); #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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT yylhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT yylen[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT yydefred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; static const YYINT yydgoto[] = { 1, 7, 8, 9, }; static const YYINT yysindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT yyrindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; static const YYINT yygindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT yytable[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT yycheck[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #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,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol", }; static const char *const yyrule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 66 "calc.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 280 "y.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 28 "calc.y" { yyerrok ; } #line 482 "y.tab.c" break; case 4: #line 32 "calc.y" { printf("%d\n",yystack.l_mark[0]);} #line 487 "y.tab.c" break; case 5: #line 34 "calc.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 492 "y.tab.c" break; case 6: #line 38 "calc.y" { yyval = yystack.l_mark[-1]; } #line 497 "y.tab.c" break; case 7: #line 40 "calc.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 502 "y.tab.c" break; case 8: #line 42 "calc.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 507 "y.tab.c" break; case 9: #line 44 "calc.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 512 "y.tab.c" break; case 10: #line 46 "calc.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 517 "y.tab.c" break; case 11: #line 48 "calc.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 522 "y.tab.c" break; case 12: #line 50 "calc.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 527 "y.tab.c" break; case 13: #line 52 "calc.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 532 "y.tab.c" break; case 14: #line 54 "calc.y" { yyval = - yystack.l_mark[0]; } #line 537 "y.tab.c" break; case 15: #line 56 "calc.y" { yyval = regs[yystack.l_mark[0]]; } #line 542 "y.tab.c" break; case 17: #line 61 "calc.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 547 "y.tab.c" break; case 18: #line 63 "calc.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 552 "y.tab.c" break; #line 554 "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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/grammar.dot0000644000000000000000000027343212313146316015577 0ustar rootrootdigraph test-grammar { edge [fontsize=10]; node [shape=box,fontsize=10]; orientation=landscape; rankdir=LR; /* margin=0.2; page="8.27,11.69"; // for A4 printing ratio=auto; */ q0 [label="0:\l $accept -> . program $end\l program -> . { $end }\l program -> . translation_unit\l translation_unit -> . external_declaration\l translation_unit -> . translation_unit external_declaration\l external_declaration -> . declaration\l external_declaration -> . function_definition\l external_declaration -> . ';'\l external_declaration -> . linkage_specification\l external_declaration -> . T_ASM T_ASMARG ';'\l external_declaration -> . error T_MATCHRBRACE\l external_declaration -> . error ';'\l linkage_specification -> . T_EXTERN T_STRING_LITERAL braces\l linkage_specification -> . T_EXTERN T_STRING_LITERAL declaration\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l function_definition -> . decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l function_definition -> . declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; q1 [label="1:\l external_declaration -> error . T_MATCHRBRACE\l external_declaration -> error . ';'\l"]; q2 [label="2:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> '(' . declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; q3 [label="3:\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l pointer -> '*' . opt_type_qualifiers\l pointer -> '*' . opt_type_qualifiers pointer\l opt_type_qualifiers -> . { ')' ',' T_BRACKETS T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l opt_type_qualifiers -> . type_qualifier_list\l type_qualifier_list -> . type_qualifier\l type_qualifier_list -> . type_qualifier_list type_qualifier\l"]; q4 [label="4:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l identifier_or_ref -> '&' . any_id\l"]; q5 [label="5:\l any_id -> T_IDENTIFIER . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q6 [label="6:\l type_specifier -> T_TYPEDEF_NAME . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l any_id -> T_TYPEDEF_NAME . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; q7 [label="7:\l type_qualifier -> T_DEFINE_NAME . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q8 [label="8:\l storage_class -> T_AUTO . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q9 [label="9:\l linkage_specification -> T_EXTERN . T_STRING_LITERAL braces\l linkage_specification -> T_EXTERN . T_STRING_LITERAL declaration\l storage_class -> T_EXTERN . { ';' T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q10 [label="10:\l storage_class -> T_REGISTER . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q11 [label="11:\l storage_class -> T_STATIC . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q12 [label="12:\l any_typedef -> T_TYPEDEF . { T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l"]; q13 [label="13:\l storage_class -> T_INLINE . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q14 [label="14:\l any_typedef -> T_EXTENSION . T_TYPEDEF\l storage_class -> T_EXTENSION . { ';' T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q15 [label="15:\l type_specifier -> T_CHAR . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q16 [label="16:\l type_specifier -> T_DOUBLE . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q17 [label="17:\l type_specifier -> T_FLOAT . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q18 [label="18:\l type_specifier -> T_INT . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q19 [label="19:\l type_specifier -> T_VOID . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q20 [label="20:\l type_specifier -> T_LONG . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q21 [label="21:\l type_specifier -> T_SHORT . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q22 [label="22:\l type_specifier -> T_SIGNED . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q23 [label="23:\l type_specifier -> T_UNSIGNED . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q24 [label="24:\l enumeration -> T_ENUM . { T_LBRACE T_TYPEDEF_NAME T_IDENTIFIER }\l"]; q25 [label="25:\l struct_or_union -> T_STRUCT . { T_LBRACE T_TYPEDEF_NAME T_IDENTIFIER }\l"]; q26 [label="26:\l struct_or_union -> T_UNION . { T_LBRACE T_TYPEDEF_NAME T_IDENTIFIER }\l"]; q27 [label="27:\l type_specifier -> T_Bool . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q28 [label="28:\l type_specifier -> T_Complex . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q29 [label="29:\l type_specifier -> T_Imaginary . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q30 [label="30:\l type_qualifier -> T_TYPE_QUALIFIER . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q31 [label="31:\l external_declaration -> T_ASM . T_ASMARG ';'\l"]; q32 [label="32:\l external_declaration -> ';' . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q33 [label="33:\l $accept -> program . $end\l"]; q34 [label="34:\l declaration -> decl_specifiers . ';'\l declaration -> decl_specifiers . init_declarator_list ';'\l function_definition -> decl_specifiers . declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l decl_specifiers -> decl_specifiers . decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l init_declarator_list -> . init_declarator\l init_declarator_list -> . init_declarator_list ',' init_declarator\l init_declarator -> . declarator\l init_declarator -> . declarator '=' $$5 T_INITIALIZER\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; q35 [label="35:\l decl_specifiers -> decl_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q36 [label="36:\l decl_specifier -> storage_class . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q37 [label="37:\l decl_specifier -> type_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q38 [label="38:\l decl_specifier -> type_qualifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q39 [label="39:\l type_specifier -> struct_or_union_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q40 [label="40:\l type_specifier -> enum_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q41 [label="41:\l $$4 -> . { T_VA_DCL T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l function_definition -> declarator . $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE\l"]; q42 [label="42:\l declarator -> direct_declarator . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l direct_declarator -> direct_declarator . T_BRACKETS\l direct_declarator -> direct_declarator . '(' parameter_type_list ')'\l direct_declarator -> direct_declarator . '(' opt_identifier_list ')'\l"]; q43 [label="43:\l braces -> . T_LBRACE T_MATCHRBRACE\l struct_or_union_specifier -> struct_or_union . any_id braces\l struct_or_union_specifier -> struct_or_union . braces\l struct_or_union_specifier -> struct_or_union . any_id\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l"]; q44 [label="44:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> pointer . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; q45 [label="45:\l identifier_or_ref -> any_id . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; q46 [label="46:\l direct_declarator -> identifier_or_ref . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; q47 [label="47:\l braces -> . T_LBRACE T_MATCHRBRACE\l enum_specifier -> enumeration . any_id braces\l enum_specifier -> enumeration . braces\l enum_specifier -> enumeration . any_id\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l"]; q48 [label="48:\l program -> translation_unit . { $end }\l translation_unit -> translation_unit . external_declaration\l external_declaration -> . declaration\l external_declaration -> . function_definition\l external_declaration -> . ';'\l external_declaration -> . linkage_specification\l external_declaration -> . T_ASM T_ASMARG ';'\l external_declaration -> . error T_MATCHRBRACE\l external_declaration -> . error ';'\l linkage_specification -> . T_EXTERN T_STRING_LITERAL braces\l linkage_specification -> . T_EXTERN T_STRING_LITERAL declaration\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l function_definition -> . decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l function_definition -> . declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; q49 [label="49:\l translation_unit -> external_declaration . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q50 [label="50:\l external_declaration -> declaration . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q51 [label="51:\l external_declaration -> function_definition . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q52 [label="52:\l external_declaration -> linkage_specification . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q53 [label="53:\l declaration -> any_typedef . decl_specifiers $$1 opt_declarator_list ';'\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"]; q54 [label="54:\l external_declaration -> error T_MATCHRBRACE . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q55 [label="55:\l external_declaration -> error ';' . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q56 [label="56:\l any_id -> T_TYPEDEF_NAME . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q57 [label="57:\l direct_declarator -> '(' declarator . ')'\l"]; q58 [label="58:\l type_qualifier_list -> type_qualifier . { ')' ',' T_BRACKETS T_TYPE_QUALIFIER T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q59 [label="59:\l pointer -> . '*' opt_type_qualifiers\l pointer -> '*' opt_type_qualifiers . { ')' ',' T_BRACKETS T_TYPEDEF_NAME T_IDENTIFIER '&' '(' }\l pointer -> . '*' opt_type_qualifiers pointer\l pointer -> '*' opt_type_qualifiers . pointer\l"]; q60 [label="60:\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l opt_type_qualifiers -> type_qualifier_list . { ')' ',' T_BRACKETS T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l type_qualifier_list -> type_qualifier_list . type_qualifier\l"]; q61 [label="61:\l identifier_or_ref -> '&' any_id . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; q62 [label="62:\l braces -> . T_LBRACE T_MATCHRBRACE\l linkage_specification -> T_EXTERN T_STRING_LITERAL . braces\l linkage_specification -> T_EXTERN T_STRING_LITERAL . declaration\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"]; q63 [label="63:\l any_typedef -> T_EXTENSION T_TYPEDEF . { T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l"]; q64 [label="64:\l external_declaration -> T_ASM T_ASMARG . ';'\l"]; q65 [label="65:\l storage_class -> T_EXTERN . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q66 [label="66:\l storage_class -> T_EXTENSION . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q67 [label="67:\l declaration -> decl_specifiers ';' . { ';' T_ASM T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q68 [label="68:\l decl_specifiers -> decl_specifiers decl_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q69 [label="69:\l declaration -> decl_specifiers init_declarator_list . ';'\l init_declarator_list -> init_declarator_list . ',' init_declarator\l"]; q70 [label="70:\l init_declarator_list -> init_declarator . { ',' ';' }\l"]; q71 [label="71:\l $$2 -> . { T_VA_DCL T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l function_definition -> decl_specifiers declarator . $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l init_declarator -> declarator . { ',' ';' }\l init_declarator -> declarator . '=' $$5 T_INITIALIZER\l"]; q72 [label="72:\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l function_definition -> declarator $$4 . opt_declaration_list T_LBRACE T_MATCHRBRACE\l opt_declaration_list -> . { T_LBRACE }\l opt_declaration_list -> . T_VA_DCL\l opt_declaration_list -> . declaration_list\l declaration_list -> . declaration\l declaration_list -> . declaration_list declaration\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"]; q73 [label="73:\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l direct_declarator -> direct_declarator '(' . parameter_type_list ')'\l direct_declarator -> direct_declarator '(' . opt_identifier_list ')'\l parameter_type_list -> . parameter_list\l parameter_type_list -> . parameter_list ',' T_ELLIPSIS\l parameter_list -> . parameter_declaration\l parameter_list -> . parameter_list ',' parameter_declaration\l parameter_declaration -> . decl_specifiers declarator\l parameter_declaration -> . decl_specifiers abs_declarator\l parameter_declaration -> . decl_specifiers\l opt_identifier_list -> . { ')' }\l opt_identifier_list -> . identifier_list\l identifier_list -> . any_id\l identifier_list -> . identifier_list ',' any_id\l"]; q74 [label="74:\l direct_declarator -> direct_declarator T_BRACKETS . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; q75 [label="75:\l braces -> T_LBRACE . T_MATCHRBRACE\l"]; q76 [label="76:\l braces -> . T_LBRACE T_MATCHRBRACE\l struct_or_union_specifier -> struct_or_union any_id . braces\l struct_or_union_specifier -> struct_or_union any_id . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q77 [label="77:\l struct_or_union_specifier -> struct_or_union braces . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q78 [label="78:\l declarator -> pointer direct_declarator . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l direct_declarator -> direct_declarator . T_BRACKETS\l direct_declarator -> direct_declarator . '(' parameter_type_list ')'\l direct_declarator -> direct_declarator . '(' opt_identifier_list ')'\l"]; q79 [label="79:\l braces -> . T_LBRACE T_MATCHRBRACE\l enum_specifier -> enumeration any_id . braces\l enum_specifier -> enumeration any_id . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q80 [label="80:\l enum_specifier -> enumeration braces . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q81 [label="81:\l translation_unit -> translation_unit external_declaration . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q82 [label="82:\l type_specifier -> T_TYPEDEF_NAME . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q83 [label="83:\l $$1 -> . { ';' T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l declaration -> any_typedef decl_specifiers . $$1 opt_declarator_list ';'\l decl_specifiers -> decl_specifiers . decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"]; q84 [label="84:\l direct_declarator -> '(' declarator ')' . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; q85 [label="85:\l pointer -> '*' opt_type_qualifiers pointer . { ')' ',' T_BRACKETS T_TYPEDEF_NAME T_IDENTIFIER '&' '(' }\l"]; q86 [label="86:\l type_qualifier_list -> type_qualifier_list type_qualifier . { ')' ',' T_BRACKETS T_TYPE_QUALIFIER T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q87 [label="87:\l declaration -> decl_specifiers . ';'\l declaration -> decl_specifiers . init_declarator_list ';'\l decl_specifiers -> decl_specifiers . decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l init_declarator_list -> . init_declarator\l init_declarator_list -> . init_declarator_list ',' init_declarator\l init_declarator -> . declarator\l init_declarator -> . declarator '=' $$5 T_INITIALIZER\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; q88 [label="88:\l linkage_specification -> T_EXTERN T_STRING_LITERAL declaration . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q89 [label="89:\l linkage_specification -> T_EXTERN T_STRING_LITERAL braces . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q90 [label="90:\l external_declaration -> T_ASM T_ASMARG ';' . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q91 [label="91:\l declaration -> decl_specifiers init_declarator_list ';' . { ';' T_ASM T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q92 [label="92:\l init_declarator_list -> init_declarator_list ',' . init_declarator\l init_declarator -> . declarator\l init_declarator -> . declarator '=' $$5 T_INITIALIZER\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; q93 [label="93:\l $$5 -> . { T_INITIALIZER }\l init_declarator -> declarator '=' . $$5 T_INITIALIZER\l"]; q94 [label="94:\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l function_definition -> decl_specifiers declarator $$2 . opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l opt_declaration_list -> . { T_LBRACE }\l opt_declaration_list -> . T_VA_DCL\l opt_declaration_list -> . declaration_list\l declaration_list -> . declaration\l declaration_list -> . declaration_list declaration\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"]; q95 [label="95:\l opt_declaration_list -> T_VA_DCL . { T_LBRACE }\l"]; q96 [label="96:\l declaration_list -> declaration . { T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l"]; q97 [label="97:\l function_definition -> declarator $$4 opt_declaration_list . T_LBRACE T_MATCHRBRACE\l"]; q98 [label="98:\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l opt_declaration_list -> declaration_list . { T_LBRACE }\l declaration_list -> declaration_list . declaration\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"]; q99 [label="99:\l decl_specifiers -> decl_specifiers . decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l parameter_declaration -> decl_specifiers . declarator\l parameter_declaration -> decl_specifiers . abs_declarator\l parameter_declaration -> decl_specifiers . { ')' ',' }\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l abs_declarator -> . pointer\l abs_declarator -> . pointer direct_abs_declarator\l abs_declarator -> . direct_abs_declarator\l direct_abs_declarator -> . '(' abs_declarator ')'\l direct_abs_declarator -> . direct_abs_declarator T_BRACKETS\l direct_abs_declarator -> . T_BRACKETS\l direct_abs_declarator -> . direct_abs_declarator '(' parameter_type_list ')'\l direct_abs_declarator -> . direct_abs_declarator '(' ')'\l direct_abs_declarator -> . '(' parameter_type_list ')'\l direct_abs_declarator -> . '(' ')'\l"]; q100 [label="100:\l direct_declarator -> direct_declarator '(' parameter_type_list . ')'\l"]; q101 [label="101:\l parameter_type_list -> parameter_list . { ')' }\l parameter_type_list -> parameter_list . ',' T_ELLIPSIS\l parameter_list -> parameter_list . ',' parameter_declaration\l"]; q102 [label="102:\l parameter_list -> parameter_declaration . { ')' ',' }\l"]; q103 [label="103:\l direct_declarator -> direct_declarator '(' opt_identifier_list . ')'\l"]; q104 [label="104:\l opt_identifier_list -> identifier_list . { ')' }\l identifier_list -> identifier_list . ',' any_id\l"]; q105 [label="105:\l identifier_list -> any_id . { ')' ',' }\l"]; q106 [label="106:\l braces -> T_LBRACE T_MATCHRBRACE . { ')' ',' ';' T_ASM T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q107 [label="107:\l struct_or_union_specifier -> struct_or_union any_id braces . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q108 [label="108:\l enum_specifier -> enumeration any_id braces . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q109 [label="109:\l declaration -> any_typedef decl_specifiers $$1 . opt_declarator_list ';'\l opt_declarator_list -> . { ';' }\l opt_declarator_list -> . declarator_list\l declarator_list -> . declarator\l declarator_list -> . declarator_list ',' declarator\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; q110 [label="110:\l init_declarator -> declarator . { ',' ';' }\l init_declarator -> declarator . '=' $$5 T_INITIALIZER\l"]; q111 [label="111:\l init_declarator_list -> init_declarator_list ',' init_declarator . { ',' ';' }\l"]; q112 [label="112:\l init_declarator -> declarator '=' $$5 . T_INITIALIZER\l"]; q113 [label="113:\l function_definition -> decl_specifiers declarator $$2 opt_declaration_list . T_LBRACE $$3 T_MATCHRBRACE\l"]; q114 [label="114:\l function_definition -> declarator $$4 opt_declaration_list T_LBRACE . T_MATCHRBRACE\l"]; q115 [label="115:\l declaration_list -> declaration_list declaration . { T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l"]; q116 [label="116:\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> '(' . declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l parameter_type_list -> . parameter_list\l parameter_type_list -> . parameter_list ',' T_ELLIPSIS\l parameter_list -> . parameter_declaration\l parameter_list -> . parameter_list ',' parameter_declaration\l parameter_declaration -> . decl_specifiers declarator\l parameter_declaration -> . decl_specifiers abs_declarator\l parameter_declaration -> . decl_specifiers\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l abs_declarator -> . pointer\l abs_declarator -> . pointer direct_abs_declarator\l abs_declarator -> . direct_abs_declarator\l direct_abs_declarator -> . '(' abs_declarator ')'\l direct_abs_declarator -> '(' . abs_declarator ')'\l direct_abs_declarator -> . direct_abs_declarator T_BRACKETS\l direct_abs_declarator -> . T_BRACKETS\l direct_abs_declarator -> . direct_abs_declarator '(' parameter_type_list ')'\l direct_abs_declarator -> . direct_abs_declarator '(' ')'\l direct_abs_declarator -> . '(' parameter_type_list ')'\l direct_abs_declarator -> '(' . parameter_type_list ')'\l direct_abs_declarator -> . '(' ')'\l direct_abs_declarator -> '(' . ')'\l"]; q117 [label="117:\l direct_abs_declarator -> T_BRACKETS . { ')' ',' T_BRACKETS '(' }\l"]; q118 [label="118:\l parameter_declaration -> decl_specifiers declarator . { ')' ',' }\l"]; q119 [label="119:\l parameter_declaration -> decl_specifiers abs_declarator . { ')' ',' }\l"]; q120 [label="120:\l abs_declarator -> direct_abs_declarator . { ')' ',' }\l direct_abs_declarator -> direct_abs_declarator . T_BRACKETS\l direct_abs_declarator -> direct_abs_declarator . '(' parameter_type_list ')'\l direct_abs_declarator -> direct_abs_declarator . '(' ')'\l"]; q121 [label="121:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> pointer . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l abs_declarator -> pointer . { ')' ',' }\l abs_declarator -> pointer . direct_abs_declarator\l direct_abs_declarator -> . '(' abs_declarator ')'\l direct_abs_declarator -> . direct_abs_declarator T_BRACKETS\l direct_abs_declarator -> . T_BRACKETS\l direct_abs_declarator -> . direct_abs_declarator '(' parameter_type_list ')'\l direct_abs_declarator -> . direct_abs_declarator '(' ')'\l direct_abs_declarator -> . '(' parameter_type_list ')'\l direct_abs_declarator -> . '(' ')'\l"]; q122 [label="122:\l direct_declarator -> direct_declarator '(' parameter_type_list ')' . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; q123 [label="123:\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l parameter_type_list -> parameter_list ',' . T_ELLIPSIS\l parameter_list -> parameter_list ',' . parameter_declaration\l parameter_declaration -> . decl_specifiers declarator\l parameter_declaration -> . decl_specifiers abs_declarator\l parameter_declaration -> . decl_specifiers\l"]; q124 [label="124:\l direct_declarator -> direct_declarator '(' opt_identifier_list ')' . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; q125 [label="125:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l identifier_list -> identifier_list ',' . any_id\l"]; q126 [label="126:\l declarator_list -> declarator . { ',' ';' }\l"]; q127 [label="127:\l declaration -> any_typedef decl_specifiers $$1 opt_declarator_list . ';'\l"]; q128 [label="128:\l opt_declarator_list -> declarator_list . { ';' }\l declarator_list -> declarator_list . ',' declarator\l"]; q129 [label="129:\l init_declarator -> declarator '=' $$5 T_INITIALIZER . { ',' ';' }\l"]; q130 [label="130:\l $$3 -> . { T_MATCHRBRACE }\l function_definition -> decl_specifiers declarator $$2 opt_declaration_list T_LBRACE . $$3 T_MATCHRBRACE\l"]; q131 [label="131:\l function_definition -> declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q132 [label="132:\l direct_abs_declarator -> '(' ')' . { ')' ',' T_BRACKETS '(' }\l"]; q133 [label="133:\l direct_abs_declarator -> '(' abs_declarator . ')'\l"]; q134 [label="134:\l direct_abs_declarator -> '(' parameter_type_list . ')'\l"]; q135 [label="135:\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l parameter_type_list -> . parameter_list\l parameter_type_list -> . parameter_list ',' T_ELLIPSIS\l parameter_list -> . parameter_declaration\l parameter_list -> . parameter_list ',' parameter_declaration\l parameter_declaration -> . decl_specifiers declarator\l parameter_declaration -> . decl_specifiers abs_declarator\l parameter_declaration -> . decl_specifiers\l direct_abs_declarator -> direct_abs_declarator '(' . parameter_type_list ')'\l direct_abs_declarator -> direct_abs_declarator '(' . ')'\l"]; q136 [label="136:\l direct_abs_declarator -> direct_abs_declarator T_BRACKETS . { ')' ',' T_BRACKETS '(' }\l"]; q137 [label="137:\l abs_declarator -> pointer direct_abs_declarator . { ')' ',' }\l direct_abs_declarator -> direct_abs_declarator . T_BRACKETS\l direct_abs_declarator -> direct_abs_declarator . '(' parameter_type_list ')'\l direct_abs_declarator -> direct_abs_declarator . '(' ')'\l"]; q138 [label="138:\l parameter_type_list -> parameter_list ',' T_ELLIPSIS . { ')' }\l"]; q139 [label="139:\l parameter_list -> parameter_list ',' parameter_declaration . { ')' ',' }\l"]; q140 [label="140:\l identifier_list -> identifier_list ',' any_id . { ')' ',' }\l"]; q141 [label="141:\l declaration -> any_typedef decl_specifiers $$1 opt_declarator_list ';' . { ';' T_ASM T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q142 [label="142:\l declarator_list -> declarator_list ',' . declarator\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; q143 [label="143:\l function_definition -> decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 . T_MATCHRBRACE\l"]; q144 [label="144:\l direct_abs_declarator -> '(' abs_declarator ')' . { ')' ',' T_BRACKETS '(' }\l"]; q145 [label="145:\l direct_abs_declarator -> '(' parameter_type_list ')' . { ')' ',' T_BRACKETS '(' }\l"]; q146 [label="146:\l direct_abs_declarator -> direct_abs_declarator '(' ')' . { ')' ',' T_BRACKETS '(' }\l"]; q147 [label="147:\l direct_abs_declarator -> direct_abs_declarator '(' parameter_type_list . ')'\l"]; q148 [label="148:\l declarator_list -> declarator_list ',' declarator . { ',' ';' }\l"]; q149 [label="149:\l function_definition -> decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q150 [label="150:\l direct_abs_declarator -> direct_abs_declarator '(' parameter_type_list ')' . { ')' ',' T_BRACKETS '(' }\l"]; q0 -> q1 [label="error"]; q0 -> q2 [label="'('"]; q0 -> q3 [label="'*'"]; q0 -> q4 [label="'&'"]; q0 -> q5 [label="T_IDENTIFIER"]; q0 -> q6 [label="T_TYPEDEF_NAME"]; q0 -> q7 [label="T_DEFINE_NAME"]; q0 -> q8 [label="T_AUTO"]; q0 -> q9 [label="T_EXTERN"]; q0 -> q10 [label="T_REGISTER"]; q0 -> q11 [label="T_STATIC"]; q0 -> q12 [label="T_TYPEDEF"]; q0 -> q13 [label="T_INLINE"]; q0 -> q14 [label="T_EXTENSION"]; q0 -> q15 [label="T_CHAR"]; q0 -> q16 [label="T_DOUBLE"]; q0 -> q17 [label="T_FLOAT"]; q0 -> q18 [label="T_INT"]; q0 -> q19 [label="T_VOID"]; q0 -> q20 [label="T_LONG"]; q0 -> q21 [label="T_SHORT"]; q0 -> q22 [label="T_SIGNED"]; q0 -> q23 [label="T_UNSIGNED"]; q0 -> q24 [label="T_ENUM"]; q0 -> q25 [label="T_STRUCT"]; q0 -> q26 [label="T_UNION"]; q0 -> q27 [label="T_Bool"]; q0 -> q28 [label="T_Complex"]; q0 -> q29 [label="T_Imaginary"]; q0 -> q30 [label="T_TYPE_QUALIFIER"]; q0 -> q31 [label="T_ASM"]; q0 -> q32 [label="';'"]; q0 -> q33 [label="program"]; q0 -> q34 [label="decl_specifiers"]; q0 -> q35 [label="decl_specifier"]; q0 -> q36 [label="storage_class"]; q0 -> q37 [label="type_specifier"]; q0 -> q38 [label="type_qualifier"]; q0 -> q39 [label="struct_or_union_specifier"]; q0 -> q40 [label="enum_specifier"]; q0 -> q41 [label="declarator"]; q0 -> q42 [label="direct_declarator"]; q0 -> q43 [label="struct_or_union"]; q0 -> q44 [label="pointer"]; q0 -> q45 [label="any_id"]; q0 -> q46 [label="identifier_or_ref"]; q0 -> q47 [label="enumeration"]; q0 -> q48 [label="translation_unit"]; q0 -> q49 [label="external_declaration"]; q0 -> q50 [label="declaration"]; q0 -> q51 [label="function_definition"]; q0 -> q52 [label="linkage_specification"]; q0 -> q53 [label="any_typedef"]; q1 -> q54 [label="T_MATCHRBRACE"]; q1 -> q55 [label="';'"]; q2 -> q2 [label="'('"]; q2 -> q3 [label="'*'"]; q2 -> q4 [label="'&'"]; q2 -> q5 [label="T_IDENTIFIER"]; q2 -> q56 [label="T_TYPEDEF_NAME"]; q2 -> q57 [label="declarator"]; q2 -> q42 [label="direct_declarator"]; q2 -> q44 [label="pointer"]; q2 -> q45 [label="any_id"]; q2 -> q46 [label="identifier_or_ref"]; q3 -> q7 [label="T_DEFINE_NAME"]; q3 -> q30 [label="T_TYPE_QUALIFIER"]; q3 -> q58 [label="type_qualifier"]; q3 -> q59 [label="opt_type_qualifiers"]; q3 -> q60 [label="type_qualifier_list"]; q4 -> q5 [label="T_IDENTIFIER"]; q4 -> q56 [label="T_TYPEDEF_NAME"]; q4 -> q61 [label="any_id"]; q9 -> q62 [label="T_STRING_LITERAL"]; q14 -> q63 [label="T_TYPEDEF"]; q31 -> q64 [label="T_ASMARG"]; q34 -> q2 [label="'('"]; q34 -> q3 [label="'*'"]; q34 -> q4 [label="'&'"]; q34 -> q5 [label="T_IDENTIFIER"]; q34 -> q6 [label="T_TYPEDEF_NAME"]; q34 -> q7 [label="T_DEFINE_NAME"]; q34 -> q8 [label="T_AUTO"]; q34 -> q65 [label="T_EXTERN"]; q34 -> q10 [label="T_REGISTER"]; q34 -> q11 [label="T_STATIC"]; q34 -> q13 [label="T_INLINE"]; q34 -> q66 [label="T_EXTENSION"]; q34 -> q15 [label="T_CHAR"]; q34 -> q16 [label="T_DOUBLE"]; q34 -> q17 [label="T_FLOAT"]; q34 -> q18 [label="T_INT"]; q34 -> q19 [label="T_VOID"]; q34 -> q20 [label="T_LONG"]; q34 -> q21 [label="T_SHORT"]; q34 -> q22 [label="T_SIGNED"]; q34 -> q23 [label="T_UNSIGNED"]; q34 -> q24 [label="T_ENUM"]; q34 -> q25 [label="T_STRUCT"]; q34 -> q26 [label="T_UNION"]; q34 -> q27 [label="T_Bool"]; q34 -> q28 [label="T_Complex"]; q34 -> q29 [label="T_Imaginary"]; q34 -> q30 [label="T_TYPE_QUALIFIER"]; q34 -> q67 [label="';'"]; q34 -> q68 [label="decl_specifier"]; q34 -> q36 [label="storage_class"]; q34 -> q37 [label="type_specifier"]; q34 -> q38 [label="type_qualifier"]; q34 -> q39 [label="struct_or_union_specifier"]; q34 -> q40 [label="enum_specifier"]; q34 -> q69 [label="init_declarator_list"]; q34 -> q70 [label="init_declarator"]; q34 -> q71 [label="declarator"]; q34 -> q42 [label="direct_declarator"]; q34 -> q43 [label="struct_or_union"]; q34 -> q44 [label="pointer"]; q34 -> q45 [label="any_id"]; q34 -> q46 [label="identifier_or_ref"]; q34 -> q47 [label="enumeration"]; q41 -> q72 [label="$$4"]; q42 -> q73 [label="'('"]; q42 -> q74 [label="T_BRACKETS"]; q43 -> q5 [label="T_IDENTIFIER"]; q43 -> q56 [label="T_TYPEDEF_NAME"]; q43 -> q75 [label="T_LBRACE"]; q43 -> q76 [label="any_id"]; q43 -> q77 [label="braces"]; q44 -> q2 [label="'('"]; q44 -> q4 [label="'&'"]; q44 -> q5 [label="T_IDENTIFIER"]; q44 -> q56 [label="T_TYPEDEF_NAME"]; q44 -> q78 [label="direct_declarator"]; q44 -> q45 [label="any_id"]; q44 -> q46 [label="identifier_or_ref"]; q47 -> q5 [label="T_IDENTIFIER"]; q47 -> q56 [label="T_TYPEDEF_NAME"]; q47 -> q75 [label="T_LBRACE"]; q47 -> q79 [label="any_id"]; q47 -> q80 [label="braces"]; q48 -> q1 [label="error"]; q48 -> q2 [label="'('"]; q48 -> q3 [label="'*'"]; q48 -> q4 [label="'&'"]; q48 -> q5 [label="T_IDENTIFIER"]; q48 -> q6 [label="T_TYPEDEF_NAME"]; q48 -> q7 [label="T_DEFINE_NAME"]; q48 -> q8 [label="T_AUTO"]; q48 -> q9 [label="T_EXTERN"]; q48 -> q10 [label="T_REGISTER"]; q48 -> q11 [label="T_STATIC"]; q48 -> q12 [label="T_TYPEDEF"]; q48 -> q13 [label="T_INLINE"]; q48 -> q14 [label="T_EXTENSION"]; q48 -> q15 [label="T_CHAR"]; q48 -> q16 [label="T_DOUBLE"]; q48 -> q17 [label="T_FLOAT"]; q48 -> q18 [label="T_INT"]; q48 -> q19 [label="T_VOID"]; q48 -> q20 [label="T_LONG"]; q48 -> q21 [label="T_SHORT"]; q48 -> q22 [label="T_SIGNED"]; q48 -> q23 [label="T_UNSIGNED"]; q48 -> q24 [label="T_ENUM"]; q48 -> q25 [label="T_STRUCT"]; q48 -> q26 [label="T_UNION"]; q48 -> q27 [label="T_Bool"]; q48 -> q28 [label="T_Complex"]; q48 -> q29 [label="T_Imaginary"]; q48 -> q30 [label="T_TYPE_QUALIFIER"]; q48 -> q31 [label="T_ASM"]; q48 -> q32 [label="';'"]; q48 -> q34 [label="decl_specifiers"]; q48 -> q35 [label="decl_specifier"]; q48 -> q36 [label="storage_class"]; q48 -> q37 [label="type_specifier"]; q48 -> q38 [label="type_qualifier"]; q48 -> q39 [label="struct_or_union_specifier"]; q48 -> q40 [label="enum_specifier"]; q48 -> q41 [label="declarator"]; q48 -> q42 [label="direct_declarator"]; q48 -> q43 [label="struct_or_union"]; q48 -> q44 [label="pointer"]; q48 -> q45 [label="any_id"]; q48 -> q46 [label="identifier_or_ref"]; q48 -> q47 [label="enumeration"]; q48 -> q81 [label="external_declaration"]; q48 -> q50 [label="declaration"]; q48 -> q51 [label="function_definition"]; q48 -> q52 [label="linkage_specification"]; q48 -> q53 [label="any_typedef"]; q53 -> q82 [label="T_TYPEDEF_NAME"]; q53 -> q7 [label="T_DEFINE_NAME"]; q53 -> q8 [label="T_AUTO"]; q53 -> q65 [label="T_EXTERN"]; q53 -> q10 [label="T_REGISTER"]; q53 -> q11 [label="T_STATIC"]; q53 -> q13 [label="T_INLINE"]; q53 -> q66 [label="T_EXTENSION"]; q53 -> q15 [label="T_CHAR"]; q53 -> q16 [label="T_DOUBLE"]; q53 -> q17 [label="T_FLOAT"]; q53 -> q18 [label="T_INT"]; q53 -> q19 [label="T_VOID"]; q53 -> q20 [label="T_LONG"]; q53 -> q21 [label="T_SHORT"]; q53 -> q22 [label="T_SIGNED"]; q53 -> q23 [label="T_UNSIGNED"]; q53 -> q24 [label="T_ENUM"]; q53 -> q25 [label="T_STRUCT"]; q53 -> q26 [label="T_UNION"]; q53 -> q27 [label="T_Bool"]; q53 -> q28 [label="T_Complex"]; q53 -> q29 [label="T_Imaginary"]; q53 -> q30 [label="T_TYPE_QUALIFIER"]; q53 -> q83 [label="decl_specifiers"]; q53 -> q35 [label="decl_specifier"]; q53 -> q36 [label="storage_class"]; q53 -> q37 [label="type_specifier"]; q53 -> q38 [label="type_qualifier"]; q53 -> q39 [label="struct_or_union_specifier"]; q53 -> q40 [label="enum_specifier"]; q53 -> q43 [label="struct_or_union"]; q53 -> q47 [label="enumeration"]; q57 -> q84 [label="')'"]; q59 -> q3 [label="'*'"]; q59 -> q85 [label="pointer"]; q60 -> q7 [label="T_DEFINE_NAME"]; q60 -> q30 [label="T_TYPE_QUALIFIER"]; q60 -> q86 [label="type_qualifier"]; q62 -> q82 [label="T_TYPEDEF_NAME"]; q62 -> q7 [label="T_DEFINE_NAME"]; q62 -> q8 [label="T_AUTO"]; q62 -> q65 [label="T_EXTERN"]; q62 -> q10 [label="T_REGISTER"]; q62 -> q11 [label="T_STATIC"]; q62 -> q12 [label="T_TYPEDEF"]; q62 -> q13 [label="T_INLINE"]; q62 -> q14 [label="T_EXTENSION"]; q62 -> q15 [label="T_CHAR"]; q62 -> q16 [label="T_DOUBLE"]; q62 -> q17 [label="T_FLOAT"]; q62 -> q18 [label="T_INT"]; q62 -> q19 [label="T_VOID"]; q62 -> q20 [label="T_LONG"]; q62 -> q21 [label="T_SHORT"]; q62 -> q22 [label="T_SIGNED"]; q62 -> q23 [label="T_UNSIGNED"]; q62 -> q24 [label="T_ENUM"]; q62 -> q25 [label="T_STRUCT"]; q62 -> q26 [label="T_UNION"]; q62 -> q27 [label="T_Bool"]; q62 -> q28 [label="T_Complex"]; q62 -> q29 [label="T_Imaginary"]; q62 -> q30 [label="T_TYPE_QUALIFIER"]; q62 -> q75 [label="T_LBRACE"]; q62 -> q87 [label="decl_specifiers"]; q62 -> q35 [label="decl_specifier"]; q62 -> q36 [label="storage_class"]; q62 -> q37 [label="type_specifier"]; q62 -> q38 [label="type_qualifier"]; q62 -> q39 [label="struct_or_union_specifier"]; q62 -> q40 [label="enum_specifier"]; q62 -> q43 [label="struct_or_union"]; q62 -> q47 [label="enumeration"]; q62 -> q88 [label="declaration"]; q62 -> q89 [label="braces"]; q62 -> q53 [label="any_typedef"]; q64 -> q90 [label="';'"]; q69 -> q91 [label="';'"]; q69 -> q92 [label="','"]; q71 -> q93 [label="'='"]; q71 -> q94 [label="$$2"]; q72 -> q82 [label="T_TYPEDEF_NAME"]; q72 -> q7 [label="T_DEFINE_NAME"]; q72 -> q8 [label="T_AUTO"]; q72 -> q65 [label="T_EXTERN"]; q72 -> q10 [label="T_REGISTER"]; q72 -> q11 [label="T_STATIC"]; q72 -> q12 [label="T_TYPEDEF"]; q72 -> q13 [label="T_INLINE"]; q72 -> q14 [label="T_EXTENSION"]; q72 -> q15 [label="T_CHAR"]; q72 -> q16 [label="T_DOUBLE"]; q72 -> q17 [label="T_FLOAT"]; q72 -> q18 [label="T_INT"]; q72 -> q19 [label="T_VOID"]; q72 -> q20 [label="T_LONG"]; q72 -> q21 [label="T_SHORT"]; q72 -> q22 [label="T_SIGNED"]; q72 -> q23 [label="T_UNSIGNED"]; q72 -> q24 [label="T_ENUM"]; q72 -> q25 [label="T_STRUCT"]; q72 -> q26 [label="T_UNION"]; q72 -> q27 [label="T_Bool"]; q72 -> q28 [label="T_Complex"]; q72 -> q29 [label="T_Imaginary"]; q72 -> q30 [label="T_TYPE_QUALIFIER"]; q72 -> q95 [label="T_VA_DCL"]; q72 -> q87 [label="decl_specifiers"]; q72 -> q35 [label="decl_specifier"]; q72 -> q36 [label="storage_class"]; q72 -> q37 [label="type_specifier"]; q72 -> q38 [label="type_qualifier"]; q72 -> q39 [label="struct_or_union_specifier"]; q72 -> q40 [label="enum_specifier"]; q72 -> q43 [label="struct_or_union"]; q72 -> q47 [label="enumeration"]; q72 -> q96 [label="declaration"]; q72 -> q53 [label="any_typedef"]; q72 -> q97 [label="opt_declaration_list"]; q72 -> q98 [label="declaration_list"]; q73 -> q5 [label="T_IDENTIFIER"]; q73 -> q6 [label="T_TYPEDEF_NAME"]; q73 -> q7 [label="T_DEFINE_NAME"]; q73 -> q8 [label="T_AUTO"]; q73 -> q65 [label="T_EXTERN"]; q73 -> q10 [label="T_REGISTER"]; q73 -> q11 [label="T_STATIC"]; q73 -> q13 [label="T_INLINE"]; q73 -> q66 [label="T_EXTENSION"]; q73 -> q15 [label="T_CHAR"]; q73 -> q16 [label="T_DOUBLE"]; q73 -> q17 [label="T_FLOAT"]; q73 -> q18 [label="T_INT"]; q73 -> q19 [label="T_VOID"]; q73 -> q20 [label="T_LONG"]; q73 -> q21 [label="T_SHORT"]; q73 -> q22 [label="T_SIGNED"]; q73 -> q23 [label="T_UNSIGNED"]; q73 -> q24 [label="T_ENUM"]; q73 -> q25 [label="T_STRUCT"]; q73 -> q26 [label="T_UNION"]; q73 -> q27 [label="T_Bool"]; q73 -> q28 [label="T_Complex"]; q73 -> q29 [label="T_Imaginary"]; q73 -> q30 [label="T_TYPE_QUALIFIER"]; q73 -> q99 [label="decl_specifiers"]; q73 -> q35 [label="decl_specifier"]; q73 -> q36 [label="storage_class"]; q73 -> q37 [label="type_specifier"]; q73 -> q38 [label="type_qualifier"]; q73 -> q39 [label="struct_or_union_specifier"]; q73 -> q40 [label="enum_specifier"]; q73 -> q100 [label="parameter_type_list"]; q73 -> q101 [label="parameter_list"]; q73 -> q102 [label="parameter_declaration"]; q73 -> q103 [label="opt_identifier_list"]; q73 -> q104 [label="identifier_list"]; q73 -> q43 [label="struct_or_union"]; q73 -> q105 [label="any_id"]; q73 -> q47 [label="enumeration"]; q75 -> q106 [label="T_MATCHRBRACE"]; q76 -> q75 [label="T_LBRACE"]; q76 -> q107 [label="braces"]; q78 -> q73 [label="'('"]; q78 -> q74 [label="T_BRACKETS"]; q79 -> q75 [label="T_LBRACE"]; q79 -> q108 [label="braces"]; q83 -> q82 [label="T_TYPEDEF_NAME"]; q83 -> q7 [label="T_DEFINE_NAME"]; q83 -> q8 [label="T_AUTO"]; q83 -> q65 [label="T_EXTERN"]; q83 -> q10 [label="T_REGISTER"]; q83 -> q11 [label="T_STATIC"]; q83 -> q13 [label="T_INLINE"]; q83 -> q66 [label="T_EXTENSION"]; q83 -> q15 [label="T_CHAR"]; q83 -> q16 [label="T_DOUBLE"]; q83 -> q17 [label="T_FLOAT"]; q83 -> q18 [label="T_INT"]; q83 -> q19 [label="T_VOID"]; q83 -> q20 [label="T_LONG"]; q83 -> q21 [label="T_SHORT"]; q83 -> q22 [label="T_SIGNED"]; q83 -> q23 [label="T_UNSIGNED"]; q83 -> q24 [label="T_ENUM"]; q83 -> q25 [label="T_STRUCT"]; q83 -> q26 [label="T_UNION"]; q83 -> q27 [label="T_Bool"]; q83 -> q28 [label="T_Complex"]; q83 -> q29 [label="T_Imaginary"]; q83 -> q30 [label="T_TYPE_QUALIFIER"]; q83 -> q68 [label="decl_specifier"]; q83 -> q36 [label="storage_class"]; q83 -> q37 [label="type_specifier"]; q83 -> q38 [label="type_qualifier"]; q83 -> q39 [label="struct_or_union_specifier"]; q83 -> q40 [label="enum_specifier"]; q83 -> q43 [label="struct_or_union"]; q83 -> q47 [label="enumeration"]; q83 -> q109 [label="$$1"]; q87 -> q2 [label="'('"]; q87 -> q3 [label="'*'"]; q87 -> q4 [label="'&'"]; q87 -> q5 [label="T_IDENTIFIER"]; q87 -> q6 [label="T_TYPEDEF_NAME"]; q87 -> q7 [label="T_DEFINE_NAME"]; q87 -> q8 [label="T_AUTO"]; q87 -> q65 [label="T_EXTERN"]; q87 -> q10 [label="T_REGISTER"]; q87 -> q11 [label="T_STATIC"]; q87 -> q13 [label="T_INLINE"]; q87 -> q66 [label="T_EXTENSION"]; q87 -> q15 [label="T_CHAR"]; q87 -> q16 [label="T_DOUBLE"]; q87 -> q17 [label="T_FLOAT"]; q87 -> q18 [label="T_INT"]; q87 -> q19 [label="T_VOID"]; q87 -> q20 [label="T_LONG"]; q87 -> q21 [label="T_SHORT"]; q87 -> q22 [label="T_SIGNED"]; q87 -> q23 [label="T_UNSIGNED"]; q87 -> q24 [label="T_ENUM"]; q87 -> q25 [label="T_STRUCT"]; q87 -> q26 [label="T_UNION"]; q87 -> q27 [label="T_Bool"]; q87 -> q28 [label="T_Complex"]; q87 -> q29 [label="T_Imaginary"]; q87 -> q30 [label="T_TYPE_QUALIFIER"]; q87 -> q67 [label="';'"]; q87 -> q68 [label="decl_specifier"]; q87 -> q36 [label="storage_class"]; q87 -> q37 [label="type_specifier"]; q87 -> q38 [label="type_qualifier"]; q87 -> q39 [label="struct_or_union_specifier"]; q87 -> q40 [label="enum_specifier"]; q87 -> q69 [label="init_declarator_list"]; q87 -> q70 [label="init_declarator"]; q87 -> q110 [label="declarator"]; q87 -> q42 [label="direct_declarator"]; q87 -> q43 [label="struct_or_union"]; q87 -> q44 [label="pointer"]; q87 -> q45 [label="any_id"]; q87 -> q46 [label="identifier_or_ref"]; q87 -> q47 [label="enumeration"]; q92 -> q2 [label="'('"]; q92 -> q3 [label="'*'"]; q92 -> q4 [label="'&'"]; q92 -> q5 [label="T_IDENTIFIER"]; q92 -> q56 [label="T_TYPEDEF_NAME"]; q92 -> q111 [label="init_declarator"]; q92 -> q110 [label="declarator"]; q92 -> q42 [label="direct_declarator"]; q92 -> q44 [label="pointer"]; q92 -> q45 [label="any_id"]; q92 -> q46 [label="identifier_or_ref"]; q93 -> q112 [label="$$5"]; q94 -> q82 [label="T_TYPEDEF_NAME"]; q94 -> q7 [label="T_DEFINE_NAME"]; q94 -> q8 [label="T_AUTO"]; q94 -> q65 [label="T_EXTERN"]; q94 -> q10 [label="T_REGISTER"]; q94 -> q11 [label="T_STATIC"]; q94 -> q12 [label="T_TYPEDEF"]; q94 -> q13 [label="T_INLINE"]; q94 -> q14 [label="T_EXTENSION"]; q94 -> q15 [label="T_CHAR"]; q94 -> q16 [label="T_DOUBLE"]; q94 -> q17 [label="T_FLOAT"]; q94 -> q18 [label="T_INT"]; q94 -> q19 [label="T_VOID"]; q94 -> q20 [label="T_LONG"]; q94 -> q21 [label="T_SHORT"]; q94 -> q22 [label="T_SIGNED"]; q94 -> q23 [label="T_UNSIGNED"]; q94 -> q24 [label="T_ENUM"]; q94 -> q25 [label="T_STRUCT"]; q94 -> q26 [label="T_UNION"]; q94 -> q27 [label="T_Bool"]; q94 -> q28 [label="T_Complex"]; q94 -> q29 [label="T_Imaginary"]; q94 -> q30 [label="T_TYPE_QUALIFIER"]; q94 -> q95 [label="T_VA_DCL"]; q94 -> q87 [label="decl_specifiers"]; q94 -> q35 [label="decl_specifier"]; q94 -> q36 [label="storage_class"]; q94 -> q37 [label="type_specifier"]; q94 -> q38 [label="type_qualifier"]; q94 -> q39 [label="struct_or_union_specifier"]; q94 -> q40 [label="enum_specifier"]; q94 -> q43 [label="struct_or_union"]; q94 -> q47 [label="enumeration"]; q94 -> q96 [label="declaration"]; q94 -> q53 [label="any_typedef"]; q94 -> q113 [label="opt_declaration_list"]; q94 -> q98 [label="declaration_list"]; q97 -> q114 [label="T_LBRACE"]; q98 -> q82 [label="T_TYPEDEF_NAME"]; q98 -> q7 [label="T_DEFINE_NAME"]; q98 -> q8 [label="T_AUTO"]; q98 -> q65 [label="T_EXTERN"]; q98 -> q10 [label="T_REGISTER"]; q98 -> q11 [label="T_STATIC"]; q98 -> q12 [label="T_TYPEDEF"]; q98 -> q13 [label="T_INLINE"]; q98 -> q14 [label="T_EXTENSION"]; q98 -> q15 [label="T_CHAR"]; q98 -> q16 [label="T_DOUBLE"]; q98 -> q17 [label="T_FLOAT"]; q98 -> q18 [label="T_INT"]; q98 -> q19 [label="T_VOID"]; q98 -> q20 [label="T_LONG"]; q98 -> q21 [label="T_SHORT"]; q98 -> q22 [label="T_SIGNED"]; q98 -> q23 [label="T_UNSIGNED"]; q98 -> q24 [label="T_ENUM"]; q98 -> q25 [label="T_STRUCT"]; q98 -> q26 [label="T_UNION"]; q98 -> q27 [label="T_Bool"]; q98 -> q28 [label="T_Complex"]; q98 -> q29 [label="T_Imaginary"]; q98 -> q30 [label="T_TYPE_QUALIFIER"]; q98 -> q87 [label="decl_specifiers"]; q98 -> q35 [label="decl_specifier"]; q98 -> q36 [label="storage_class"]; q98 -> q37 [label="type_specifier"]; q98 -> q38 [label="type_qualifier"]; q98 -> q39 [label="struct_or_union_specifier"]; q98 -> q40 [label="enum_specifier"]; q98 -> q43 [label="struct_or_union"]; q98 -> q47 [label="enumeration"]; q98 -> q115 [label="declaration"]; q98 -> q53 [label="any_typedef"]; q99 -> q116 [label="'('"]; q99 -> q3 [label="'*'"]; q99 -> q4 [label="'&'"]; q99 -> q5 [label="T_IDENTIFIER"]; q99 -> q6 [label="T_TYPEDEF_NAME"]; q99 -> q7 [label="T_DEFINE_NAME"]; q99 -> q8 [label="T_AUTO"]; q99 -> q65 [label="T_EXTERN"]; q99 -> q10 [label="T_REGISTER"]; q99 -> q11 [label="T_STATIC"]; q99 -> q13 [label="T_INLINE"]; q99 -> q66 [label="T_EXTENSION"]; q99 -> q15 [label="T_CHAR"]; q99 -> q16 [label="T_DOUBLE"]; q99 -> q17 [label="T_FLOAT"]; q99 -> q18 [label="T_INT"]; q99 -> q19 [label="T_VOID"]; q99 -> q20 [label="T_LONG"]; q99 -> q21 [label="T_SHORT"]; q99 -> q22 [label="T_SIGNED"]; q99 -> q23 [label="T_UNSIGNED"]; q99 -> q24 [label="T_ENUM"]; q99 -> q25 [label="T_STRUCT"]; q99 -> q26 [label="T_UNION"]; q99 -> q27 [label="T_Bool"]; q99 -> q28 [label="T_Complex"]; q99 -> q29 [label="T_Imaginary"]; q99 -> q30 [label="T_TYPE_QUALIFIER"]; q99 -> q117 [label="T_BRACKETS"]; q99 -> q68 [label="decl_specifier"]; q99 -> q36 [label="storage_class"]; q99 -> q37 [label="type_specifier"]; q99 -> q38 [label="type_qualifier"]; q99 -> q39 [label="struct_or_union_specifier"]; q99 -> q40 [label="enum_specifier"]; q99 -> q118 [label="declarator"]; q99 -> q42 [label="direct_declarator"]; q99 -> q119 [label="abs_declarator"]; q99 -> q120 [label="direct_abs_declarator"]; q99 -> q43 [label="struct_or_union"]; q99 -> q121 [label="pointer"]; q99 -> q45 [label="any_id"]; q99 -> q46 [label="identifier_or_ref"]; q99 -> q47 [label="enumeration"]; q100 -> q122 [label="')'"]; q101 -> q123 [label="','"]; q103 -> q124 [label="')'"]; q104 -> q125 [label="','"]; q109 -> q2 [label="'('"]; q109 -> q3 [label="'*'"]; q109 -> q4 [label="'&'"]; q109 -> q5 [label="T_IDENTIFIER"]; q109 -> q56 [label="T_TYPEDEF_NAME"]; q109 -> q126 [label="declarator"]; q109 -> q42 [label="direct_declarator"]; q109 -> q44 [label="pointer"]; q109 -> q45 [label="any_id"]; q109 -> q46 [label="identifier_or_ref"]; q109 -> q127 [label="opt_declarator_list"]; q109 -> q128 [label="declarator_list"]; q110 -> q93 [label="'='"]; q112 -> q129 [label="T_INITIALIZER"]; q113 -> q130 [label="T_LBRACE"]; q114 -> q131 [label="T_MATCHRBRACE"]; q116 -> q116 [label="'('"]; q116 -> q3 [label="'*'"]; q116 -> q4 [label="'&'"]; q116 -> q5 [label="T_IDENTIFIER"]; q116 -> q6 [label="T_TYPEDEF_NAME"]; q116 -> q7 [label="T_DEFINE_NAME"]; q116 -> q8 [label="T_AUTO"]; q116 -> q65 [label="T_EXTERN"]; q116 -> q10 [label="T_REGISTER"]; q116 -> q11 [label="T_STATIC"]; q116 -> q13 [label="T_INLINE"]; q116 -> q66 [label="T_EXTENSION"]; q116 -> q15 [label="T_CHAR"]; q116 -> q16 [label="T_DOUBLE"]; q116 -> q17 [label="T_FLOAT"]; q116 -> q18 [label="T_INT"]; q116 -> q19 [label="T_VOID"]; q116 -> q20 [label="T_LONG"]; q116 -> q21 [label="T_SHORT"]; q116 -> q22 [label="T_SIGNED"]; q116 -> q23 [label="T_UNSIGNED"]; q116 -> q24 [label="T_ENUM"]; q116 -> q25 [label="T_STRUCT"]; q116 -> q26 [label="T_UNION"]; q116 -> q27 [label="T_Bool"]; q116 -> q28 [label="T_Complex"]; q116 -> q29 [label="T_Imaginary"]; q116 -> q30 [label="T_TYPE_QUALIFIER"]; q116 -> q117 [label="T_BRACKETS"]; q116 -> q132 [label="')'"]; q116 -> q99 [label="decl_specifiers"]; q116 -> q35 [label="decl_specifier"]; q116 -> q36 [label="storage_class"]; q116 -> q37 [label="type_specifier"]; q116 -> q38 [label="type_qualifier"]; q116 -> q39 [label="struct_or_union_specifier"]; q116 -> q40 [label="enum_specifier"]; q116 -> q57 [label="declarator"]; q116 -> q42 [label="direct_declarator"]; q116 -> q133 [label="abs_declarator"]; q116 -> q120 [label="direct_abs_declarator"]; q116 -> q134 [label="parameter_type_list"]; q116 -> q101 [label="parameter_list"]; q116 -> q102 [label="parameter_declaration"]; q116 -> q43 [label="struct_or_union"]; q116 -> q121 [label="pointer"]; q116 -> q45 [label="any_id"]; q116 -> q46 [label="identifier_or_ref"]; q116 -> q47 [label="enumeration"]; q120 -> q135 [label="'('"]; q120 -> q136 [label="T_BRACKETS"]; q121 -> q116 [label="'('"]; q121 -> q4 [label="'&'"]; q121 -> q5 [label="T_IDENTIFIER"]; q121 -> q56 [label="T_TYPEDEF_NAME"]; q121 -> q117 [label="T_BRACKETS"]; q121 -> q78 [label="direct_declarator"]; q121 -> q137 [label="direct_abs_declarator"]; q121 -> q45 [label="any_id"]; q121 -> q46 [label="identifier_or_ref"]; q123 -> q82 [label="T_TYPEDEF_NAME"]; q123 -> q7 [label="T_DEFINE_NAME"]; q123 -> q8 [label="T_AUTO"]; q123 -> q65 [label="T_EXTERN"]; q123 -> q10 [label="T_REGISTER"]; q123 -> q11 [label="T_STATIC"]; q123 -> q13 [label="T_INLINE"]; q123 -> q66 [label="T_EXTENSION"]; q123 -> q15 [label="T_CHAR"]; q123 -> q16 [label="T_DOUBLE"]; q123 -> q17 [label="T_FLOAT"]; q123 -> q18 [label="T_INT"]; q123 -> q19 [label="T_VOID"]; q123 -> q20 [label="T_LONG"]; q123 -> q21 [label="T_SHORT"]; q123 -> q22 [label="T_SIGNED"]; q123 -> q23 [label="T_UNSIGNED"]; q123 -> q24 [label="T_ENUM"]; q123 -> q25 [label="T_STRUCT"]; q123 -> q26 [label="T_UNION"]; q123 -> q27 [label="T_Bool"]; q123 -> q28 [label="T_Complex"]; q123 -> q29 [label="T_Imaginary"]; q123 -> q30 [label="T_TYPE_QUALIFIER"]; q123 -> q138 [label="T_ELLIPSIS"]; q123 -> q99 [label="decl_specifiers"]; q123 -> q35 [label="decl_specifier"]; q123 -> q36 [label="storage_class"]; q123 -> q37 [label="type_specifier"]; q123 -> q38 [label="type_qualifier"]; q123 -> q39 [label="struct_or_union_specifier"]; q123 -> q40 [label="enum_specifier"]; q123 -> q139 [label="parameter_declaration"]; q123 -> q43 [label="struct_or_union"]; q123 -> q47 [label="enumeration"]; q125 -> q5 [label="T_IDENTIFIER"]; q125 -> q56 [label="T_TYPEDEF_NAME"]; q125 -> q140 [label="any_id"]; q127 -> q141 [label="';'"]; q128 -> q142 [label="','"]; q130 -> q143 [label="$$3"]; q133 -> q144 [label="')'"]; q134 -> q145 [label="')'"]; q135 -> q82 [label="T_TYPEDEF_NAME"]; q135 -> q7 [label="T_DEFINE_NAME"]; q135 -> q8 [label="T_AUTO"]; q135 -> q65 [label="T_EXTERN"]; q135 -> q10 [label="T_REGISTER"]; q135 -> q11 [label="T_STATIC"]; q135 -> q13 [label="T_INLINE"]; q135 -> q66 [label="T_EXTENSION"]; q135 -> q15 [label="T_CHAR"]; q135 -> q16 [label="T_DOUBLE"]; q135 -> q17 [label="T_FLOAT"]; q135 -> q18 [label="T_INT"]; q135 -> q19 [label="T_VOID"]; q135 -> q20 [label="T_LONG"]; q135 -> q21 [label="T_SHORT"]; q135 -> q22 [label="T_SIGNED"]; q135 -> q23 [label="T_UNSIGNED"]; q135 -> q24 [label="T_ENUM"]; q135 -> q25 [label="T_STRUCT"]; q135 -> q26 [label="T_UNION"]; q135 -> q27 [label="T_Bool"]; q135 -> q28 [label="T_Complex"]; q135 -> q29 [label="T_Imaginary"]; q135 -> q30 [label="T_TYPE_QUALIFIER"]; q135 -> q146 [label="')'"]; q135 -> q99 [label="decl_specifiers"]; q135 -> q35 [label="decl_specifier"]; q135 -> q36 [label="storage_class"]; q135 -> q37 [label="type_specifier"]; q135 -> q38 [label="type_qualifier"]; q135 -> q39 [label="struct_or_union_specifier"]; q135 -> q40 [label="enum_specifier"]; q135 -> q147 [label="parameter_type_list"]; q135 -> q101 [label="parameter_list"]; q135 -> q102 [label="parameter_declaration"]; q135 -> q43 [label="struct_or_union"]; q135 -> q47 [label="enumeration"]; q137 -> q135 [label="'('"]; q137 -> q136 [label="T_BRACKETS"]; q142 -> q2 [label="'('"]; q142 -> q3 [label="'*'"]; q142 -> q4 [label="'&'"]; q142 -> q5 [label="T_IDENTIFIER"]; q142 -> q56 [label="T_TYPEDEF_NAME"]; q142 -> q148 [label="declarator"]; q142 -> q42 [label="direct_declarator"]; q142 -> q44 [label="pointer"]; q142 -> q45 [label="any_id"]; q142 -> q46 [label="identifier_or_ref"]; q143 -> q149 [label="T_MATCHRBRACE"]; q147 -> q150 [label="')'"]; } byacc-20221106/test/yacc/quote_calc3-s.tab.h0000644000000000000000000000025211704267405017013 0ustar rootroot#define OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 byacc-20221106/test/yacc/no_p_opt1.error0000644000000000000000000000004513501466650016404 0ustar rootrootYACC: f - cannot open "nosuchfile.c" byacc-20221106/test/yacc/err_syntax7b.output0000644000000000000000000000000012313161123017316 0ustar rootrootbyacc-20221106/test/yacc/no_p_opt.error0000644000000000000000000000236014102076731016320 0ustar rootrootYACC: error message Usage: YACC [options] filename Options: -b file_prefix set filename prefix (default "y.") -B create a backtracking parser -d write definitions (.tab.h) -h print this help-message -H defines_file write definitions to defines_file -i write interface (y.tab.i) -g write a graphical description -l suppress #line directives -L enable position processing, e.g., "%locations" -o output_file (default ".tab.c") -p symbol_prefix set symbol prefix (default "yy") -P create a reentrant parser, e.g., "%pure-parser" -r produce separate code and table files (y.code.c) -s suppress #define's for quoted names in %token lines -t add debugging support -v write description (y.output) -V show version information and exit Long options: --defines -H --file-prefix -b --graph -g --help -h --name-prefix -p --no-lines -l --output -o --version -V byacc-20221106/test/yacc/err_syntax21.tab.h0000644000000000000000000000000012313666267016707 0ustar rootrootbyacc-20221106/test/yacc/stdin2.error0000644000000000000000000000000013501464601015672 0ustar rootrootbyacc-20221106/test/yacc/err_syntax8a.output0000644000000000000000000000000012313161625017325 0ustar rootrootbyacc-20221106/test/yacc/varsyntax_calc1.tab.c0000644000000000000000000005677614104034777017475 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ident "check variant syntax features" #ifndef yyparse #define yyparse varsyntax_calc1_parse #endif /* yyparse */ #ifndef yylex #define yylex varsyntax_calc1_lex #endif /* yylex */ #ifndef yyerror #define yyerror varsyntax_calc1_error #endif /* yyerror */ #ifndef yychar #define yychar varsyntax_calc1_char #endif /* yychar */ #ifndef yyval #define yyval varsyntax_calc1_val #endif /* yyval */ #ifndef yylval #define yylval varsyntax_calc1_lval #endif /* yylval */ #ifndef yydebug #define yydebug varsyntax_calc1_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs varsyntax_calc1_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag varsyntax_calc1_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs varsyntax_calc1_lhs #endif /* yylhs */ #ifndef yylen #define yylen varsyntax_calc1_len #endif /* yylen */ #ifndef yydefred #define yydefred varsyntax_calc1_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto varsyntax_calc1_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex varsyntax_calc1_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex varsyntax_calc1_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex varsyntax_calc1_gindex #endif /* yygindex */ #ifndef yytable #define yytable varsyntax_calc1_table #endif /* yytable */ #ifndef yycheck #define yycheck varsyntax_calc1_check #endif /* yycheck */ #ifndef yyname #define yyname varsyntax_calc1_name #endif /* yyname */ #ifndef yyrule #define yyrule varsyntax_calc1_rule #endif /* yyrule */ #define YYPREFIX "varsyntax_calc1_" #define YYPURE 0 #line 3 "varsyntax_calc1.y" /* http://dinosaur.compilertools.net/yacc/index.html * /*/ #include #include #include #include typedef struct interval { double lo, hi; } INTERVAL; INTERVAL vmul(double, double, INTERVAL); INTERVAL vdiv(double, double, INTERVAL); extern int yylex(void); static void yyerror(const char *s); int dcheck(INTERVAL); double dreg[26]; INTERVAL vreg[26]; #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #line 32 "varsyntax_calc1.y" typedef union YYSTYPE { int ival; /* dreg & vreg array index values*/ double dval; /* floating point values*/ INTERVAL vval; /* interval values*/ } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 142 "varsyntax_calc1.tab.c" /* 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 DREG 257 #define VREG 258 #define CONST 259 #define UMINUS 260 #define YYERRCODE 256 typedef int YYINT; static const YYINT varsyntax_calc1_lhs[] = { -1, 3, 3, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; static const YYINT varsyntax_calc1_len[] = { 2, 0, 2, 2, 2, 4, 4, 2, 1, 1, 3, 3, 3, 3, 2, 3, 1, 5, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, }; static const YYINT varsyntax_calc1_defred[] = { 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 7, 0, 0, 9, 18, 14, 27, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 15, 0, 28, 0, 0, 0, 0, 12, 24, 13, 26, 0, 0, 23, 25, 14, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, 12, 13, 17, }; static const YYINT varsyntax_calc1_dgoto[] = { 7, 32, 9, 0, }; static const YYINT varsyntax_calc1_sindex[] = { -40, -8, -48, -47, 0, -37, -37, 0, 2, 17, 0, -34, -37, 0, 0, 0, 0, -25, 90, -37, -37, -37, -37, 0, -37, -37, -37, -37, 0, -34, -34, 25, 125, 31, 0, -34, 0, -11, 37, -11, 37, 0, 0, 0, 0, 37, 37, 0, 0, 0, 111, -34, -34, -34, -34, 0, 0, 118, 69, 69, 0, 0, 0, }; static const YYINT varsyntax_calc1_rindex[] = { 0, 0, 38, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9, 0, 0, 0, 0, 51, -3, 56, 61, 0, 0, 0, 0, 67, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 83, 0, 0, 0, }; static const YYINT varsyntax_calc1_gindex[] = { 0, 4, 124, 0, }; #define YYTABLESIZE 225 static const YYINT varsyntax_calc1_table[] = { 6, 16, 10, 6, 8, 5, 30, 20, 5, 15, 17, 29, 23, 11, 12, 31, 34, 21, 19, 35, 20, 0, 22, 37, 39, 41, 43, 28, 0, 0, 0, 21, 16, 49, 50, 55, 22, 0, 20, 57, 20, 56, 20, 0, 21, 19, 0, 20, 9, 22, 0, 0, 0, 0, 18, 58, 59, 60, 61, 26, 24, 10, 25, 0, 27, 0, 11, 53, 51, 0, 52, 22, 54, 26, 24, 0, 25, 19, 27, 26, 9, 9, 21, 9, 27, 9, 18, 18, 10, 18, 0, 18, 10, 11, 10, 10, 10, 11, 0, 11, 11, 11, 22, 0, 22, 0, 22, 0, 19, 0, 19, 53, 19, 21, 0, 21, 54, 21, 0, 10, 0, 10, 0, 10, 11, 0, 11, 0, 11, 16, 18, 36, 26, 24, 0, 25, 33, 27, 0, 0, 0, 0, 0, 38, 40, 42, 44, 0, 45, 46, 47, 48, 34, 53, 51, 0, 52, 0, 54, 62, 53, 51, 0, 52, 0, 54, 0, 21, 19, 0, 20, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 13, 14, 4, 13, 0, 4, }; static const YYINT varsyntax_calc1_check[] = { 40, 10, 10, 40, 0, 45, 40, 10, 45, 5, 6, 45, 10, 61, 61, 11, 41, 42, 43, 44, 45, -1, 47, 19, 20, 21, 22, 10, -1, -1, -1, 42, 41, 29, 30, 10, 47, -1, 41, 35, 43, 10, 45, -1, 42, 43, -1, 45, 10, 47, -1, -1, -1, -1, 10, 51, 52, 53, 54, 42, 43, 10, 45, -1, 47, -1, 10, 42, 43, -1, 45, 10, 47, 42, 43, -1, 45, 10, 47, 42, 42, 43, 10, 45, 47, 47, 42, 43, 10, 45, -1, 47, 41, 10, 43, 44, 45, 41, -1, 43, 44, 45, 41, -1, 43, -1, 45, -1, 41, -1, 43, 42, 45, 41, -1, 43, 47, 45, -1, 41, -1, 43, -1, 45, 41, -1, 43, -1, 45, 5, 6, 41, 42, 43, -1, 45, 12, 47, -1, -1, -1, -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, 41, 42, 43, -1, 45, -1, 47, 41, 42, 43, -1, 45, -1, 47, -1, 42, 43, -1, 45, -1, 47, -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, 256, 257, 258, 259, 257, 258, 259, 257, -1, 259, }; #define YYFINAL 7 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 260 #define YYUNDFTOKEN 266 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const varsyntax_calc1_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0, 0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"DREG","VREG","CONST","UMINUS",0,0,0,0,0,"illegal-symbol", }; static const char *const varsyntax_calc1_rule[] = { "$accept : line", "lines :", "lines : lines line", "line : dexp '\\n'", "line : vexp '\\n'", "line : DREG '=' dexp '\\n'", "line : VREG '=' vexp '\\n'", "line : error '\\n'", "dexp : CONST", "dexp : DREG", "dexp : dexp '+' dexp", "dexp : dexp '-' dexp", "dexp : dexp '*' dexp", "dexp : dexp '/' dexp", "dexp : '-' dexp", "dexp : '(' dexp ')'", "vexp : dexp", "vexp : '(' dexp ',' dexp ')'", "vexp : VREG", "vexp : vexp '+' vexp", "vexp : dexp '+' vexp", "vexp : vexp '-' vexp", "vexp : dexp '-' vexp", "vexp : vexp '*' vexp", "vexp : dexp '*' vexp", "vexp : vexp '/' vexp", "vexp : dexp '/' vexp", "vexp : '-' vexp", "vexp : '(' vexp ')'", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 178 "varsyntax_calc1.y" /* beginning of subroutines section */ #define BSZ 50 /* buffer size for floating point numbers */ /* lexical analysis */ static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { int c; while ((c = getchar()) == ' ') { /* skip over blanks */ } if (isupper(c)) { yylval.ival = c - 'A'; return (VREG); } if (islower(c)) { yylval.ival = c - 'a'; return (DREG); } if (isdigit(c) || c == '.') { /* gobble up digits, points, exponents */ char buf[BSZ + 1], *cp = buf; int dot = 0, expr = 0; for (; (cp - buf) < BSZ; ++cp, c = getchar()) { *cp = (char) c; if (isdigit(c)) continue; if (c == '.') { if (dot++ || expr) return ('.'); /* will cause syntax error */ continue; } if (c == 'e') { if (expr++) return ('e'); /* will cause syntax error */ continue; } /* end of number */ break; } *cp = '\0'; if ((cp - buf) >= BSZ) printf("constant too long: truncated\n"); else ungetc(c, stdin); /* push back last char read */ yylval.dval = atof(buf); return (CONST); } return (c); } static INTERVAL hilo(double a, double b, double c, double d) { /* returns the smallest interval containing a, b, c, and d */ /* used by *, / routines */ INTERVAL v; if (a > b) { v.hi = a; v.lo = b; } else { v.hi = b; v.lo = a; } if (c > d) { if (c > v.hi) v.hi = c; if (d < v.lo) v.lo = d; } else { if (d > v.hi) v.hi = d; if (c < v.lo) v.lo = c; } return (v); } INTERVAL vmul(double a, double b, INTERVAL v) { return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo)); } int dcheck(INTERVAL v) { if (v.hi >= 0. && v.lo <= 0.) { printf("divisor interval contains 0.\n"); return (1); } return (0); } INTERVAL vdiv(double a, double b, INTERVAL v) { return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo)); } #line 494 "varsyntax_calc1.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 59 "varsyntax_calc1.y" { (void) printf("%15.8f\n", yystack.l_mark[-1].dval); } #line 698 "varsyntax_calc1.tab.c" break; case 4: #line 63 "varsyntax_calc1.y" { (void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi); } #line 705 "varsyntax_calc1.tab.c" break; case 5: #line 67 "varsyntax_calc1.y" { dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval; } #line 712 "varsyntax_calc1.tab.c" break; case 6: #line 71 "varsyntax_calc1.y" { vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval; } #line 719 "varsyntax_calc1.tab.c" break; case 7: #line 75 "varsyntax_calc1.y" { yyerrok; } #line 726 "varsyntax_calc1.tab.c" break; case 9: #line 82 "varsyntax_calc1.y" { yyval.dval = dreg[yystack.l_mark[0].ival]; /* $$ & $1 are sufficient here*/ } #line 733 "varsyntax_calc1.tab.c" break; case 10: #line 86 "varsyntax_calc1.y" { yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval; } #line 740 "varsyntax_calc1.tab.c" break; case 11: #line 90 "varsyntax_calc1.y" { yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval; } #line 747 "varsyntax_calc1.tab.c" break; case 12: #line 94 "varsyntax_calc1.y" { yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval; } #line 754 "varsyntax_calc1.tab.c" break; case 13: #line 98 "varsyntax_calc1.y" { yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval; } #line 761 "varsyntax_calc1.tab.c" break; case 14: #line 102 "varsyntax_calc1.y" { yyval.dval = -yystack.l_mark[0].dval; } #line 768 "varsyntax_calc1.tab.c" break; case 15: #line 106 "varsyntax_calc1.y" { yyval.dval = yystack.l_mark[-1].dval; } #line 775 "varsyntax_calc1.tab.c" break; case 16: #line 112 "varsyntax_calc1.y" { yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval; } #line 782 "varsyntax_calc1.tab.c" break; case 17: #line 116 "varsyntax_calc1.y" { yyval.vval.lo = yystack.l_mark[-3].dval; yyval.vval.hi = yystack.l_mark[-1].dval; if ( yyval.vval.lo > yyval.vval.hi ) { (void) printf("interval out of order\n"); YYERROR; } } #line 795 "varsyntax_calc1.tab.c" break; case 18: #line 126 "varsyntax_calc1.y" { yyval.vval = vreg[yystack.l_mark[0].ival]; } #line 802 "varsyntax_calc1.tab.c" break; case 19: #line 130 "varsyntax_calc1.y" { yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi; yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo; } #line 810 "varsyntax_calc1.tab.c" break; case 20: #line 135 "varsyntax_calc1.y" { yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi; yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo; } #line 818 "varsyntax_calc1.tab.c" break; case 21: #line 140 "varsyntax_calc1.y" { yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo; yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi; } #line 826 "varsyntax_calc1.tab.c" break; case 22: #line 145 "varsyntax_calc1.y" { yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo; yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi; } #line 834 "varsyntax_calc1.tab.c" break; case 23: #line 150 "varsyntax_calc1.y" { yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); } #line 841 "varsyntax_calc1.tab.c" break; case 24: #line 154 "varsyntax_calc1.y" { yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); } #line 848 "varsyntax_calc1.tab.c" break; case 25: #line 158 "varsyntax_calc1.y" { if (dcheck(yystack.l_mark[0].vval)) YYERROR; yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); } #line 856 "varsyntax_calc1.tab.c" break; case 26: #line 163 "varsyntax_calc1.y" { if (dcheck ( yystack.l_mark[0].vval )) YYERROR; yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); } #line 864 "varsyntax_calc1.tab.c" break; case 27: #line 168 "varsyntax_calc1.y" { yyval.vval.hi = -yystack.l_mark[0].vval.lo; yyval.vval.lo = -yystack.l_mark[0].vval.hi; } #line 872 "varsyntax_calc1.tab.c" break; case 28: #line 173 "varsyntax_calc1.y" { yyval.vval = yystack.l_mark[-1].vval; } #line 879 "varsyntax_calc1.tab.c" break; #line 881 "varsyntax_calc1.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/varsyntax_calc1.output0000644000000000000000000003571612315405305020024 0ustar rootroot 0 $accept : line $end 1 lines : 2 | lines line 3 line : dexp '\n' 4 | vexp '\n' 5 | DREG '=' dexp '\n' 6 | VREG '=' vexp '\n' 7 | error '\n' 8 dexp : CONST 9 | DREG 10 | dexp '+' dexp 11 | dexp '-' dexp 12 | dexp '*' dexp 13 | dexp '/' dexp 14 | '-' dexp 15 | '(' dexp ')' 16 vexp : dexp 17 | '(' dexp ',' dexp ')' 18 | VREG 19 | vexp '+' vexp 20 | dexp '+' vexp 21 | vexp '-' vexp 22 | dexp '-' vexp 23 | vexp '*' vexp 24 | dexp '*' vexp 25 | vexp '/' vexp 26 | dexp '/' vexp 27 | '-' vexp 28 | '(' vexp ')' state 0 $accept : . line $end (0) error shift 1 DREG shift 2 VREG shift 3 CONST shift 4 '-' shift 5 '(' shift 6 . error line goto 7 dexp goto 8 vexp goto 9 state 1 line : error . '\n' (7) '\n' shift 10 . error state 2 line : DREG . '=' dexp '\n' (5) dexp : DREG . (9) '=' shift 11 '+' reduce 9 '-' reduce 9 '*' reduce 9 '/' reduce 9 '\n' reduce 9 state 3 line : VREG . '=' vexp '\n' (6) vexp : VREG . (18) '=' shift 12 '+' reduce 18 '-' reduce 18 '*' reduce 18 '/' reduce 18 '\n' reduce 18 state 4 dexp : CONST . (8) . reduce 8 state 5 dexp : '-' . dexp (14) vexp : '-' . vexp (27) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 15 vexp goto 16 state 6 dexp : '(' . dexp ')' (15) vexp : '(' . dexp ',' dexp ')' (17) vexp : '(' . vexp ')' (28) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 17 vexp goto 18 state 7 $accept : line . $end (0) $end accept 8: shift/reduce conflict (shift 19, reduce 16) on '+' 8: shift/reduce conflict (shift 20, reduce 16) on '-' 8: shift/reduce conflict (shift 21, reduce 16) on '*' 8: shift/reduce conflict (shift 22, reduce 16) on '/' 8: shift/reduce conflict (shift 23, reduce 16) on '\n' state 8 line : dexp . '\n' (3) dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '+' shift 19 '-' shift 20 '*' shift 21 '/' shift 22 '\n' shift 23 state 9 line : vexp . '\n' (4) vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '+' shift 24 '-' shift 25 '*' shift 26 '/' shift 27 '\n' shift 28 . error state 10 line : error '\n' . (7) . reduce 7 state 11 line : DREG '=' . dexp '\n' (5) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 31 state 12 line : VREG '=' . vexp '\n' (6) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 33 state 13 dexp : DREG . (9) . reduce 9 state 14 vexp : VREG . (18) . reduce 18 15: reduce/reduce conflict (reduce 14, reduce 16) on '+' 15: reduce/reduce conflict (reduce 14, reduce 16) on '-' 15: reduce/reduce conflict (reduce 14, reduce 16) on '*' 15: reduce/reduce conflict (reduce 14, reduce 16) on '/' 15: reduce/reduce conflict (reduce 14, reduce 16) on '\n' 15: reduce/reduce conflict (reduce 14, reduce 16) on ')' state 15 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '-' dexp . (14) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) . reduce 14 state 16 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : '-' vexp . (27) . reduce 27 17: shift/reduce conflict (shift 19, reduce 16) on '+' 17: shift/reduce conflict (shift 20, reduce 16) on '-' 17: shift/reduce conflict (shift 21, reduce 16) on '*' 17: shift/reduce conflict (shift 22, reduce 16) on '/' 17: shift/reduce conflict (shift 34, reduce 16) on ')' state 17 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '(' dexp . ')' (15) vexp : dexp . (16) vexp : '(' dexp . ',' dexp ')' (17) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '+' shift 19 '-' shift 20 '*' shift 21 '/' shift 22 ')' shift 34 ',' shift 35 state 18 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : '(' vexp . ')' (28) '+' shift 24 '-' shift 25 '*' shift 26 '/' shift 27 ')' shift 36 . error state 19 dexp : dexp '+' . dexp (10) vexp : dexp '+' . vexp (20) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 37 vexp goto 38 state 20 dexp : dexp '-' . dexp (11) vexp : dexp '-' . vexp (22) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 39 vexp goto 40 state 21 dexp : dexp '*' . dexp (12) vexp : dexp '*' . vexp (24) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 41 vexp goto 42 state 22 dexp : dexp '/' . dexp (13) vexp : dexp '/' . vexp (26) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 43 vexp goto 44 state 23 line : dexp '\n' . (3) . reduce 3 state 24 vexp : vexp '+' . vexp (19) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 45 state 25 vexp : vexp '-' . vexp (21) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 46 state 26 vexp : vexp '*' . vexp (23) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 47 state 27 vexp : vexp '/' . vexp (25) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 48 state 28 line : vexp '\n' . (4) . reduce 4 state 29 dexp : '-' . dexp (14) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 49 state 30 dexp : '(' . dexp ')' (15) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 50 state 31 line : DREG '=' dexp . '\n' (5) dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) '+' shift 51 '-' shift 52 '*' shift 53 '/' shift 54 '\n' shift 55 . error 32: shift/reduce conflict (shift 19, reduce 16) on '+' 32: shift/reduce conflict (shift 20, reduce 16) on '-' 32: shift/reduce conflict (shift 21, reduce 16) on '*' 32: shift/reduce conflict (shift 22, reduce 16) on '/' state 32 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '+' shift 19 '-' shift 20 '*' shift 21 '/' shift 22 '\n' reduce 16 ')' reduce 16 state 33 line : VREG '=' vexp . '\n' (6) vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '+' shift 24 '-' shift 25 '*' shift 26 '/' shift 27 '\n' shift 56 . error state 34 dexp : '(' dexp ')' . (15) . reduce 15 state 35 vexp : '(' dexp ',' . dexp ')' (17) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 57 state 36 vexp : '(' vexp ')' . (28) . reduce 28 37: reduce/reduce conflict (reduce 10, reduce 16) on '+' 37: reduce/reduce conflict (reduce 10, reduce 16) on '-' 37: shift/reduce conflict (shift 21, reduce 16) on '*' 37: shift/reduce conflict (shift 22, reduce 16) on '/' 37: reduce/reduce conflict (reduce 10, reduce 16) on '\n' 37: reduce/reduce conflict (reduce 10, reduce 16) on ')' state 37 dexp : dexp . '+' dexp (10) dexp : dexp '+' dexp . (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '*' shift 21 '/' shift 22 '+' reduce 10 '-' reduce 10 '\n' reduce 10 ')' reduce 10 ',' reduce 10 state 38 vexp : vexp . '+' vexp (19) vexp : dexp '+' vexp . (20) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 20 '-' reduce 20 '\n' reduce 20 ')' reduce 20 39: reduce/reduce conflict (reduce 11, reduce 16) on '+' 39: reduce/reduce conflict (reduce 11, reduce 16) on '-' 39: shift/reduce conflict (shift 21, reduce 16) on '*' 39: shift/reduce conflict (shift 22, reduce 16) on '/' 39: reduce/reduce conflict (reduce 11, reduce 16) on '\n' 39: reduce/reduce conflict (reduce 11, reduce 16) on ')' state 39 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp '-' dexp . (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '*' shift 21 '/' shift 22 '+' reduce 11 '-' reduce 11 '\n' reduce 11 ')' reduce 11 ',' reduce 11 state 40 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : dexp '-' vexp . (22) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 22 '-' reduce 22 '\n' reduce 22 ')' reduce 22 41: reduce/reduce conflict (reduce 12, reduce 16) on '+' 41: reduce/reduce conflict (reduce 12, reduce 16) on '-' 41: reduce/reduce conflict (reduce 12, reduce 16) on '*' 41: reduce/reduce conflict (reduce 12, reduce 16) on '/' 41: reduce/reduce conflict (reduce 12, reduce 16) on '\n' 41: reduce/reduce conflict (reduce 12, reduce 16) on ')' state 41 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp '*' dexp . (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) . reduce 12 state 42 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : dexp '*' vexp . (24) vexp : vexp . '/' vexp (25) . reduce 24 43: reduce/reduce conflict (reduce 13, reduce 16) on '+' 43: reduce/reduce conflict (reduce 13, reduce 16) on '-' 43: reduce/reduce conflict (reduce 13, reduce 16) on '*' 43: reduce/reduce conflict (reduce 13, reduce 16) on '/' 43: reduce/reduce conflict (reduce 13, reduce 16) on '\n' 43: reduce/reduce conflict (reduce 13, reduce 16) on ')' state 43 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : dexp '/' dexp . (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) . reduce 13 state 44 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : dexp '/' vexp . (26) . reduce 26 state 45 vexp : vexp . '+' vexp (19) vexp : vexp '+' vexp . (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 19 '-' reduce 19 '\n' reduce 19 ')' reduce 19 state 46 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp '-' vexp . (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 21 '-' reduce 21 '\n' reduce 21 ')' reduce 21 state 47 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp '*' vexp . (23) vexp : vexp . '/' vexp (25) . reduce 23 state 48 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : vexp '/' vexp . (25) . reduce 25 state 49 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '-' dexp . (14) . reduce 14 state 50 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '(' dexp . ')' (15) '+' shift 51 '-' shift 52 '*' shift 53 '/' shift 54 ')' shift 34 . error state 51 dexp : dexp '+' . dexp (10) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 58 state 52 dexp : dexp '-' . dexp (11) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 59 state 53 dexp : dexp '*' . dexp (12) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 60 state 54 dexp : dexp '/' . dexp (13) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 61 state 55 line : DREG '=' dexp '\n' . (5) . reduce 5 state 56 line : VREG '=' vexp '\n' . (6) . reduce 6 state 57 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : '(' dexp ',' dexp . ')' (17) '+' shift 51 '-' shift 52 '*' shift 53 '/' shift 54 ')' shift 62 . error state 58 dexp : dexp . '+' dexp (10) dexp : dexp '+' dexp . (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) '*' shift 53 '/' shift 54 '+' reduce 10 '-' reduce 10 '\n' reduce 10 ')' reduce 10 state 59 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp '-' dexp . (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) '*' shift 53 '/' shift 54 '+' reduce 11 '-' reduce 11 '\n' reduce 11 ')' reduce 11 state 60 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp '*' dexp . (12) dexp : dexp . '/' dexp (13) . reduce 12 state 61 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : dexp '/' dexp . (13) . reduce 13 state 62 vexp : '(' dexp ',' dexp ')' . (17) . reduce 17 Rules never reduced: lines : (1) lines : lines line (2) State 8 contains 5 shift/reduce conflicts. State 15 contains 6 reduce/reduce conflicts. State 17 contains 5 shift/reduce conflicts. State 32 contains 4 shift/reduce conflicts. State 37 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts. State 39 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts. State 41 contains 6 reduce/reduce conflicts. State 43 contains 6 reduce/reduce conflicts. 15 terminals, 5 nonterminals 29 grammar rules, 63 states byacc-20221106/test/yacc/err_syntax27.error0000644000000000000000000000006412361053263017051 0ustar rootrootYACC: e - line 3 of "./err_syntax27.y", missing '}' byacc-20221106/test/yacc/err_syntax20.tab.h0000644000000000000000000000002212313666054016704 0ustar rootroot#define recur 257 byacc-20221106/test/yacc/err_syntax26.tab.h0000644000000000000000000000000012313701125016673 0ustar rootrootbyacc-20221106/test/yacc/quote_calc3-s.error0000644000000000000000000000004112313150003017122 0ustar rootrootYACC: 54 shift/reduce conflicts. byacc-20221106/test/yacc/no_verbose.output0000644000000000000000000000000013501466650017045 0ustar rootrootbyacc-20221106/test/yacc/quote_calc4-s.tab.h0000644000000000000000000000025211704267405017014 0ustar rootroot#define OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 byacc-20221106/test/yacc/calc2.error0000644000000000000000000000000012313150003015437 0ustar rootrootbyacc-20221106/test/yacc/calc_code_top.error0000644000000000000000000000000013564732111017250 0ustar rootrootbyacc-20221106/test/yacc/quote_calc.output0000644000000000000000000002614511704127477017051 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr OP_ADD expr 8 | expr OP_SUB expr 9 | expr OP_MUL expr 10 | expr OP_DIV expr 11 | expr OP_MOD expr 12 | expr OP_AND expr 13 | expr '|' expr 14 | OP_SUB expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 OP_SUB shift 3 DIGIT shift 4 LETTER shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 expr : OP_SUB . expr (14) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 12 number goto 9 state 4 number : DIGIT . (17) . reduce 17 state 5 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 13 OP_ADD reduce 15 OP_SUB reduce 15 OP_MUL reduce 15 OP_DIV reduce 15 OP_MOD reduce 15 OP_AND reduce 15 '|' reduce 15 '\n' reduce 15 state 6 expr : '(' . expr ')' (6) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 OP_ADD reduce 16 OP_SUB reduce 16 OP_MUL reduce 16 OP_DIV reduce 16 OP_MOD reduce 16 OP_AND reduce 16 '|' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 expr : LETTER . (15) . reduce 15 12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD 12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB 12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL 12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV 12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD 12: shift/reduce conflict (shift 21, reduce 14) on OP_AND state 12 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) expr : OP_SUB expr . (14) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' reduce 14 '\n' reduce 14 ')' reduce 14 state 13 stat : LETTER '=' . expr (5) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 24 number goto 9 state 14 expr : '(' expr . ')' (6) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr OP_ADD . expr (7) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr OP_SUB . expr (8) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr OP_MUL . expr (9) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr OP_DIV . expr (10) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr OP_MOD . expr (11) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr OP_AND . expr (12) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '|' . expr (13) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD 26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB 26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL 26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV 26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD 26: shift/reduce conflict (shift 21, reduce 7) on OP_AND 26: shift/reduce conflict (shift 22, reduce 7) on '|' state 26 expr : expr . OP_ADD expr (7) expr : expr OP_ADD expr . (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 7 ')' reduce 7 27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD 27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB 27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL 27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV 27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD 27: shift/reduce conflict (shift 21, reduce 8) on OP_AND 27: shift/reduce conflict (shift 22, reduce 8) on '|' state 27 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr OP_SUB expr . (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 8 ')' reduce 8 28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD 28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB 28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL 28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV 28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD 28: shift/reduce conflict (shift 21, reduce 9) on OP_AND 28: shift/reduce conflict (shift 22, reduce 9) on '|' state 28 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr OP_MUL expr . (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 9 ')' reduce 9 29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD 29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB 29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL 29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV 29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD 29: shift/reduce conflict (shift 21, reduce 10) on OP_AND 29: shift/reduce conflict (shift 22, reduce 10) on '|' state 29 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr OP_DIV expr . (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 10 ')' reduce 10 30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD 30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB 30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL 30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV 30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD 30: shift/reduce conflict (shift 21, reduce 11) on OP_AND 30: shift/reduce conflict (shift 22, reduce 11) on '|' state 30 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr OP_MOD expr . (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 11 ')' reduce 11 31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD 31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB 31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL 31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV 31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD 31: shift/reduce conflict (shift 21, reduce 12) on OP_AND 31: shift/reduce conflict (shift 22, reduce 12) on '|' state 31 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr OP_AND expr . (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 12 ')' reduce 12 32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD 32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB 32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL 32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV 32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD 32: shift/reduce conflict (shift 21, reduce 13) on OP_AND state 32 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' reduce 13 '\n' reduce 13 ')' reduce 13 State 12 contains 6 shift/reduce conflicts. State 26 contains 7 shift/reduce conflicts. State 27 contains 7 shift/reduce conflicts. State 28 contains 7 shift/reduce conflicts. State 29 contains 7 shift/reduce conflicts. State 30 contains 7 shift/reduce conflicts. State 31 contains 7 shift/reduce conflicts. State 32 contains 6 shift/reduce conflicts. 28 terminals, 5 nonterminals 19 grammar rules, 33 states byacc-20221106/test/yacc/no_code_c.error0000644000000000000000000000004513501466650016416 0ustar rootrootYACC: f - cannot open "nosuchfile.c" byacc-20221106/test/yacc/err_syntax8.tab.h0000644000000000000000000000000012313161625016620 0ustar rootrootbyacc-20221106/test/yacc/no_output1.error0000644000000000000000000000005213501466650016621 0ustar rootrootYACC: f - cannot open "nosuchfile.output" byacc-20221106/test/yacc/err_syntax1.tab.c0000644000000000000000000000067213726503203016624 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/err_syntax9.tab.c0000644000000000000000000000067213726503203016634 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/err_syntax6.error0000644000000000000000000000012512361053263016764 0ustar rootrootYACC: e - line 6 of "./err_syntax6.y", illegal tag %token # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); #line 111 "quote_calc4-s.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 OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #define YYERRCODE 256 typedef int YYINT; static const YYINT quote_calc4_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT quote_calc4_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT quote_calc4_defred[] = { 1, 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, 0, 0, }; static const YYINT quote_calc4_dgoto[] = { 1, 7, 8, 9, }; static const YYINT quote_calc4_sindex[] = { 0, -38, 4, -36, 0, -51, -36, 6, -121, -249, 0, 0, -243, -36, -23, 0, -36, -36, -36, -36, -36, -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, -121, -243, }; static const YYINT quote_calc4_rindex[] = { 0, 0, 0, 0, 0, -9, 0, 0, 12, -10, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, -3, -2, -1, 1, 2, 3, -4, }; static const YYINT quote_calc4_gindex[] = { 0, 0, 42, 0, }; #define YYTABLESIZE 259 static const YYINT quote_calc4_table[] = { 16, 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, 10, 11, 12, 10, 16, 15, 17, 25, 18, 23, 19, 4, 20, 5, 21, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, }; static const YYINT quote_calc4_check[] = { 10, 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, 10, 10, 10, 10, 258, 10, 260, 41, 262, 269, 264, 10, 266, 10, 268, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, 19, 20, 21, 22, -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, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 258, -1, 260, -1, 262, -1, 264, -1, 266, -1, 268, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 260, -1, 260, -1, -1, -1, -1, -1, -1, 269, 270, 269, 270, 258, -1, 260, -1, 262, -1, 264, -1, 266, -1, 268, -1, -1, 258, 258, 260, 260, 262, 262, 264, 264, 266, 266, 268, 268, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 271 #define YYUNDFTOKEN 277 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const quote_calc4_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL", "\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"", "OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",0,0,0,0,0, "illegal-symbol", }; static const char *const quote_calc4_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr \"ADD-operator\" expr", "expr : expr \"SUB-operator\" expr", "expr : expr \"MUL-operator\" expr", "expr : expr \"DIV-operator\" expr", "expr : expr \"MOD-operator\" expr", "expr : expr \"AND-operator\" expr", "expr : expr '|' expr", "expr : \"SUB-operator\" expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 73 "quote_calc4.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 372 "quote_calc4-s.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 35 "quote_calc4.y" { yyerrok ; } #line 574 "quote_calc4-s.tab.c" break; case 4: #line 39 "quote_calc4.y" { printf("%d\n",yystack.l_mark[0]);} #line 579 "quote_calc4-s.tab.c" break; case 5: #line 41 "quote_calc4.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 584 "quote_calc4-s.tab.c" break; case 6: #line 45 "quote_calc4.y" { yyval = yystack.l_mark[-1]; } #line 589 "quote_calc4-s.tab.c" break; case 7: #line 47 "quote_calc4.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 594 "quote_calc4-s.tab.c" break; case 8: #line 49 "quote_calc4.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 599 "quote_calc4-s.tab.c" break; case 9: #line 51 "quote_calc4.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 604 "quote_calc4-s.tab.c" break; case 10: #line 53 "quote_calc4.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 609 "quote_calc4-s.tab.c" break; case 11: #line 55 "quote_calc4.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 614 "quote_calc4-s.tab.c" break; case 12: #line 57 "quote_calc4.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 619 "quote_calc4-s.tab.c" break; case 13: #line 59 "quote_calc4.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 624 "quote_calc4-s.tab.c" break; case 14: #line 61 "quote_calc4.y" { yyval = - yystack.l_mark[0]; } #line 629 "quote_calc4-s.tab.c" break; case 15: #line 63 "quote_calc4.y" { yyval = regs[yystack.l_mark[0]]; } #line 634 "quote_calc4-s.tab.c" break; case 17: #line 68 "quote_calc4.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 639 "quote_calc4-s.tab.c" break; case 18: #line 70 "quote_calc4.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 644 "quote_calc4-s.tab.c" break; #line 646 "quote_calc4-s.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax16.output0000644000000000000000000000000012313423040017233 0ustar rootrootbyacc-20221106/test/yacc/no_b_opt1.error0000644000000000000000000000004513501466650016366 0ustar rootrootYACC: f - cannot open "nosuchfile.c" byacc-20221106/test/yacc/err_syntax23.output0000644000000000000000000000000012313677755017261 0ustar rootrootbyacc-20221106/test/yacc/defines2.calc.h0000644000000000000000000000007013501473524016200 0ustar rootroot#define DIGIT 257 #define LETTER 258 #define UMINUS 259 byacc-20221106/test/yacc/stdin2.output0000644000000000000000000000000013501466347016112 0ustar rootrootbyacc-20221106/test/yacc/err_syntax3.tab.h0000644000000000000000000000000012313153567016621 0ustar rootrootbyacc-20221106/test/yacc/expr.oxout.error0000644000000000000000000000011013044507216016626 0ustar rootrootYACC: w - line 6 of "expr.Y", the precedence of '*' has been redeclared byacc-20221106/test/yacc/err_syntax11.tab.h0000644000000000000000000000000012313417751016676 0ustar rootrootbyacc-20221106/test/yacc/err_syntax15.tab.h0000644000000000000000000000000012313421446016676 0ustar rootrootbyacc-20221106/test/yacc/err_syntax23.error0000644000000000000000000000006712361053263017050 0ustar rootrootYACC: e - line 18 of "./err_syntax23.y", $$ is untyped byacc-20221106/test/yacc/quote_calc2.tab.c0000644000000000000000000004565114104034777016562 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse quote_calc2_parse #endif /* yyparse */ #ifndef yylex #define yylex quote_calc2_lex #endif /* yylex */ #ifndef yyerror #define yyerror quote_calc2_error #endif /* yyerror */ #ifndef yychar #define yychar quote_calc2_char #endif /* yychar */ #ifndef yyval #define yyval quote_calc2_val #endif /* yyval */ #ifndef yylval #define yylval quote_calc2_lval #endif /* yylval */ #ifndef yydebug #define yydebug quote_calc2_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs quote_calc2_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag quote_calc2_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs quote_calc2_lhs #endif /* yylhs */ #ifndef yylen #define yylen quote_calc2_len #endif /* yylen */ #ifndef yydefred #define yydefred quote_calc2_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto quote_calc2_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex quote_calc2_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex quote_calc2_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex quote_calc2_gindex #endif /* yygindex */ #ifndef yytable #define yytable quote_calc2_table #endif /* yytable */ #ifndef yycheck #define yycheck quote_calc2_check #endif /* yycheck */ #ifndef yyname #define yyname quote_calc2_name #endif /* yyname */ #ifndef yyrule #define yyrule quote_calc2_rule #endif /* yyrule */ #define YYPREFIX "quote_calc2_" #define YYPURE 0 #line 2 "quote_calc2.y" # include # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); #line 111 "quote_calc2.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 OP_ADD 257 #define ADD 258 #define OP_SUB 259 #define SUB 260 #define OP_MUL 261 #define MUL 262 #define OP_DIV 263 #define DIV 264 #define OP_MOD 265 #define MOD 266 #define OP_AND 267 #define AND 268 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #define YYERRCODE 256 typedef int YYINT; static const YYINT quote_calc2_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT quote_calc2_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT quote_calc2_defred[] = { 1, 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, 0, 0, }; static const YYINT quote_calc2_dgoto[] = { 1, 7, 8, 9, }; static const YYINT quote_calc2_sindex[] = { 0, -38, 4, -36, 0, -51, -36, 6, -121, -249, 0, 0, -243, -36, -23, 0, -36, -36, -36, -36, -36, -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, -121, -243, }; static const YYINT quote_calc2_rindex[] = { 0, 0, 0, 0, 0, -9, 0, 0, 12, -10, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, -3, -2, -1, 1, 2, 3, -4, }; static const YYINT quote_calc2_gindex[] = { 0, 0, 42, 0, }; #define YYTABLESIZE 259 static const YYINT quote_calc2_table[] = { 16, 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, 10, 11, 12, 10, 16, 15, 17, 25, 18, 23, 19, 4, 20, 5, 21, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, }; static const YYINT quote_calc2_check[] = { 10, 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, 10, 10, 10, 10, 258, 10, 260, 41, 262, 269, 264, 10, 266, 10, 268, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, 19, 20, 21, 22, -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, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 258, -1, 260, -1, 262, -1, 264, -1, 266, -1, 268, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 260, -1, 260, -1, -1, -1, -1, -1, -1, 269, 270, 269, 270, 258, -1, 260, -1, 262, -1, 264, -1, 266, -1, 268, -1, -1, 258, 258, 260, 260, 262, 262, 264, 264, 266, 266, 268, 268, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 271 #define YYUNDFTOKEN 277 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const quote_calc2_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV", "\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",0,0,0, 0,0,"illegal-symbol", }; static const char *const quote_calc2_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr \"ADD\" expr", "expr : expr \"SUB\" expr", "expr : expr \"MUL\" expr", "expr : expr \"DIV\" expr", "expr : expr \"MOD\" expr", "expr : expr \"AND\" expr", "expr : expr '|' expr", "expr : \"SUB\" expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 73 "quote_calc2.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 377 "quote_calc2.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 35 "quote_calc2.y" { yyerrok ; } #line 579 "quote_calc2.tab.c" break; case 4: #line 39 "quote_calc2.y" { printf("%d\n",yystack.l_mark[0]);} #line 584 "quote_calc2.tab.c" break; case 5: #line 41 "quote_calc2.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 589 "quote_calc2.tab.c" break; case 6: #line 45 "quote_calc2.y" { yyval = yystack.l_mark[-1]; } #line 594 "quote_calc2.tab.c" break; case 7: #line 47 "quote_calc2.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 599 "quote_calc2.tab.c" break; case 8: #line 49 "quote_calc2.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 604 "quote_calc2.tab.c" break; case 9: #line 51 "quote_calc2.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 609 "quote_calc2.tab.c" break; case 10: #line 53 "quote_calc2.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 614 "quote_calc2.tab.c" break; case 11: #line 55 "quote_calc2.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 619 "quote_calc2.tab.c" break; case 12: #line 57 "quote_calc2.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 624 "quote_calc2.tab.c" break; case 13: #line 59 "quote_calc2.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 629 "quote_calc2.tab.c" break; case 14: #line 61 "quote_calc2.y" { yyval = - yystack.l_mark[0]; } #line 634 "quote_calc2.tab.c" break; case 15: #line 63 "quote_calc2.y" { yyval = regs[yystack.l_mark[0]]; } #line 639 "quote_calc2.tab.c" break; case 17: #line 68 "quote_calc2.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 644 "quote_calc2.tab.c" break; case 18: #line 70 "quote_calc2.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 649 "quote_calc2.tab.c" break; #line 651 "quote_calc2.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/quote_calc3-s.tab.c0000644000000000000000000004562114104034777017020 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse quote_calc3_parse #endif /* yyparse */ #ifndef yylex #define yylex quote_calc3_lex #endif /* yylex */ #ifndef yyerror #define yyerror quote_calc3_error #endif /* yyerror */ #ifndef yychar #define yychar quote_calc3_char #endif /* yychar */ #ifndef yyval #define yyval quote_calc3_val #endif /* yyval */ #ifndef yylval #define yylval quote_calc3_lval #endif /* yylval */ #ifndef yydebug #define yydebug quote_calc3_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs quote_calc3_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag quote_calc3_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs quote_calc3_lhs #endif /* yylhs */ #ifndef yylen #define yylen quote_calc3_len #endif /* yylen */ #ifndef yydefred #define yydefred quote_calc3_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto quote_calc3_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex quote_calc3_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex quote_calc3_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex quote_calc3_gindex #endif /* yygindex */ #ifndef yytable #define yytable quote_calc3_table #endif /* yytable */ #ifndef yycheck #define yycheck quote_calc3_check #endif /* yycheck */ #ifndef yyname #define yyname quote_calc3_name #endif /* yyname */ #ifndef yyrule #define yyrule quote_calc3_rule #endif /* yyrule */ #define YYPREFIX "quote_calc3_" #define YYPURE 0 #line 2 "quote_calc3.y" # include # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); #line 111 "quote_calc3-s.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 OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #define YYERRCODE 256 typedef int YYINT; static const YYINT quote_calc3_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT quote_calc3_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT quote_calc3_defred[] = { 1, 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, 0, 0, }; static const YYINT quote_calc3_dgoto[] = { 1, 7, 8, 9, }; static const YYINT quote_calc3_sindex[] = { 0, -38, 5, -36, 0, -51, -36, 7, -121, -248, 0, 0, -243, -36, -22, 0, -36, -36, -36, -36, -36, -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, -121, -243, }; static const YYINT quote_calc3_rindex[] = { 0, 0, 0, 0, 0, -9, 0, 0, 13, -10, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, -3, -2, -1, 1, 2, 3, -4, }; static const YYINT quote_calc3_gindex[] = { 0, 0, 42, 0, }; #define YYTABLESIZE 258 static const YYINT quote_calc3_table[] = { 16, 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, 10, 11, 12, 16, 10, 17, 15, 18, 25, 19, 23, 20, 4, 21, 5, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, }; static const YYINT quote_calc3_check[] = { 10, 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, 10, 10, 10, 257, 10, 259, 10, 261, 41, 263, 269, 265, 10, 267, 10, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, 19, 20, 21, 22, -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, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, -1, 259, -1, 261, -1, 263, -1, 265, -1, 267, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, 259, -1, 259, -1, -1, -1, -1, -1, -1, -1, 269, 270, 269, 270, 257, -1, 259, -1, 261, -1, 263, -1, 265, -1, 267, -1, 257, 257, 259, 259, 261, 261, 263, 263, 265, 265, 267, 267, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 271 #define YYUNDFTOKEN 277 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const quote_calc3_name[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0, 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL", "\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"", "OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",0,0,0,0,0, "illegal-symbol", }; static const char *const quote_calc3_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr OP_ADD expr", "expr : expr OP_SUB expr", "expr : expr OP_MUL expr", "expr : expr OP_DIV expr", "expr : expr OP_MOD expr", "expr : expr OP_AND expr", "expr : expr '|' expr", "expr : OP_SUB expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 73 "quote_calc3.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 372 "quote_calc3-s.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { case 3: #line 35 "quote_calc3.y" { yyerrok ; } #line 574 "quote_calc3-s.tab.c" break; case 4: #line 39 "quote_calc3.y" { printf("%d\n",yystack.l_mark[0]);} #line 579 "quote_calc3-s.tab.c" break; case 5: #line 41 "quote_calc3.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 584 "quote_calc3-s.tab.c" break; case 6: #line 45 "quote_calc3.y" { yyval = yystack.l_mark[-1]; } #line 589 "quote_calc3-s.tab.c" break; case 7: #line 47 "quote_calc3.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 594 "quote_calc3-s.tab.c" break; case 8: #line 49 "quote_calc3.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 599 "quote_calc3-s.tab.c" break; case 9: #line 51 "quote_calc3.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 604 "quote_calc3-s.tab.c" break; case 10: #line 53 "quote_calc3.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 609 "quote_calc3-s.tab.c" break; case 11: #line 55 "quote_calc3.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 614 "quote_calc3-s.tab.c" break; case 12: #line 57 "quote_calc3.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 619 "quote_calc3-s.tab.c" break; case 13: #line 59 "quote_calc3.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 624 "quote_calc3-s.tab.c" break; case 14: #line 61 "quote_calc3.y" { yyval = - yystack.l_mark[0]; } #line 629 "quote_calc3-s.tab.c" break; case 15: #line 63 "quote_calc3.y" { yyval = regs[yystack.l_mark[0]]; } #line 634 "quote_calc3-s.tab.c" break; case 17: #line 68 "quote_calc3.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 639 "quote_calc3-s.tab.c" break; case 18: #line 70 "quote_calc3.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 644 "quote_calc3-s.tab.c" break; #line 646 "quote_calc3-s.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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax19.output0000644000000000000000000000000012313654176017256 0ustar rootrootbyacc-20221106/test/yacc/no_defines.error0000644000000000000000000000004513501466650016617 0ustar rootrootYACC: f - cannot open "nosuchfile.h" byacc-20221106/test/yacc/err_syntax10.tab.c0000644000000000000000000002744414104034777016720 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse err_syntax10_parse #endif /* yyparse */ #ifndef yylex #define yylex err_syntax10_lex #endif /* yylex */ #ifndef yyerror #define yyerror err_syntax10_error #endif /* yyerror */ #ifndef yychar #define yychar err_syntax10_char #endif /* yychar */ #ifndef yyval #define yyval err_syntax10_val #endif /* yyval */ #ifndef yylval #define yylval err_syntax10_lval #endif /* yylval */ #ifndef yydebug #define yydebug err_syntax10_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs err_syntax10_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag err_syntax10_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs err_syntax10_lhs #endif /* yylhs */ #ifndef yylen #define yylen err_syntax10_len #endif /* yylen */ #ifndef yydefred #define yydefred err_syntax10_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto err_syntax10_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex err_syntax10_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex err_syntax10_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex err_syntax10_gindex #endif /* yygindex */ #ifndef yytable #define yytable err_syntax10_table #endif /* yytable */ #ifndef yycheck #define yycheck err_syntax10_check #endif /* yycheck */ #ifndef yyname #define yyname err_syntax10_name #endif /* yyname */ #ifndef yyrule #define yyrule err_syntax10_rule #endif /* yyrule */ #define YYPREFIX "err_syntax10_" #define YYPURE 0 #line 2 "err_syntax10.y" int yylex(void); static void yyerror(const char *); #line 104 "err_syntax10.tab.c" /* 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 YYERRCODE 256 typedef int YYINT; static const YYINT err_syntax10_lhs[] = { -1, 0, }; static const YYINT err_syntax10_len[] = { 2, 1, }; static const YYINT err_syntax10_defred[] = { 0, 1, 0, }; static const YYINT err_syntax10_dgoto[] = { 2, }; static const YYINT err_syntax10_sindex[] = { -256, 0, 0, }; static const YYINT err_syntax10_rindex[] = { 0, 0, 0, }; static const YYINT err_syntax10_gindex[] = { 0, }; #define YYTABLESIZE 0 static const YYINT err_syntax10_table[] = { 1, }; static const YYINT err_syntax10_check[] = { 256, }; #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 256 #define YYUNDFTOKEN 259 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const err_syntax10_name[] = { "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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol", }; static const char *const err_syntax10_rule[] = { "$accept : S", "S : error", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 12 "err_syntax10.y" #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } #line 245 "err_syntax10.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { } 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/defines3.output0000644000000000000000000000000013501473524016402 0ustar rootrootbyacc-20221106/test/yacc/pure_error.tab.c0000644000000000000000000003040014104034777016527 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse error_parse #endif /* yyparse */ #ifndef yylex #define yylex error_lex #endif /* yylex */ #ifndef yyerror #define yyerror error_error #endif /* yyerror */ #ifndef yychar #define yychar error_char #endif /* yychar */ #ifndef yyval #define yyval error_val #endif /* yyval */ #ifndef yylval #define yylval error_lval #endif /* yylval */ #ifndef yydebug #define yydebug error_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs error_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag error_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs error_lhs #endif /* yylhs */ #ifndef yylen #define yylen error_len #endif /* yylen */ #ifndef yydefred #define yydefred error_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto error_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex error_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex error_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex error_gindex #endif /* yygindex */ #ifndef yytable #define yytable error_table #endif /* yytable */ #ifndef yycheck #define yycheck error_check #endif /* yycheck */ #ifndef yyname #define yyname error_name #endif /* yyname */ #ifndef yyrule #define yyrule error_rule #endif /* yyrule */ #define YYPREFIX "error_" #define YYPURE 1 #line 2 "pure_error.y" #ifdef YYBISON #define YYSTYPE int #define YYLEX_PARAM &yylval #define YYLEX_DECL() yylex(YYSTYPE *yylval) #define YYERROR_DECL() yyerror(const char *s) int YYLEX_DECL(); static void YYERROR_DECL(); #endif #line 112 "pure_error.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 # ifdef YYLEX_PARAM_TYPE # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM) # else # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM) # endif # define YYLEX yylex(&yylval, YYLEX_PARAM) #else # define YYLEX_DECL() yylex(YYSTYPE *yylval) # define YYLEX yylex(&yylval) #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 YYERRCODE 256 typedef int YYINT; static const YYINT error_lhs[] = { -1, 0, }; static const YYINT error_len[] = { 2, 1, }; static const YYINT error_defred[] = { 0, 1, 0, }; static const YYINT error_dgoto[] = { 2, }; static const YYINT error_sindex[] = { -256, 0, 0, }; static const YYINT error_rindex[] = { 0, 0, 0, }; static const YYINT error_gindex[] = { 0, }; #define YYTABLESIZE 0 static const YYINT error_table[] = { 1, }; static const YYINT error_check[] = { 256, }; #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 256 #define YYUNDFTOKEN 259 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const error_name[] = { "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,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 error_rule[] = { "$accept : S", "S : error", }; #endif #if YYDEBUG int yydebug; #endif /* 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; #line 17 "pure_error.y" #include #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(YYSTYPE *value) { return value ? 0 : -1; } static void yyerror(const char* s) { printf("%s\n", s); } #line 259 "pure_error.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* variables for the parser stack */ YYSTACKDATA yystack; 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 memset(&yyval, 0, sizeof(yyval)); memset(&yylval, 0, sizeof(yylval)); /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { } 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/empty.tab.c0000644000000000000000000002740714104034777015516 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ifndef yyparse #define yyparse empty_parse #endif /* yyparse */ #ifndef yylex #define yylex empty_lex #endif /* yylex */ #ifndef yyerror #define yyerror empty_error #endif /* yyerror */ #ifndef yychar #define yychar empty_char #endif /* yychar */ #ifndef yyval #define yyval empty_val #endif /* yyval */ #ifndef yylval #define yylval empty_lval #endif /* yylval */ #ifndef yydebug #define yydebug empty_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs empty_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag empty_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs empty_lhs #endif /* yylhs */ #ifndef yylen #define yylen empty_len #endif /* yylen */ #ifndef yydefred #define yydefred empty_defred #endif /* yydefred */ #ifndef yydgoto #define yydgoto empty_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex empty_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex empty_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex empty_gindex #endif /* yygindex */ #ifndef yytable #define yytable empty_table #endif /* yytable */ #ifndef yycheck #define yycheck empty_check #endif /* yycheck */ #ifndef yyname #define yyname empty_name #endif /* yyname */ #ifndef yyrule #define yyrule empty_rule #endif /* yyrule */ #define YYPREFIX "empty_" #define YYPURE 0 #line 2 "empty.y" #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) static int YYLEX_DECL(); static void YYERROR_DECL(); #endif #line 108 "empty.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 YYERRCODE 256 typedef int YYINT; static const YYINT empty_lhs[] = { -1, 0, }; static const YYINT empty_len[] = { 2, 0, }; static const YYINT empty_defred[] = { 1, 0, }; static const YYINT empty_dgoto[] = { 1, }; static const YYINT empty_sindex[] = { 0, 0, }; static const YYINT empty_rindex[] = { 0, 0, }; static const YYINT empty_gindex[] = { 0, }; #define YYTABLESIZE 0 static const YYINT empty_table[] = { 0, }; static const YYINT empty_check[] = { -1, }; #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 256 #define YYUNDFTOKEN 259 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const empty_name[] = { "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,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 empty_rule[] = { "$accept : start", "start :", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; /* 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 13 "empty.y" #include static int YYLEX_DECL() { return -1; } static void YYERROR_DECL() { printf("%s\n",s); } #line 246 "empty.tab.c" #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 /* yym is set below */ /* yyn is set below */ 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; YYERROR_CALL("syntax error"); goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; 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 > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); switch (yyn) { } 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) { yychar = YYLEX; if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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); } byacc-20221106/test/yacc/err_syntax23.tab.c0000644000000000000000000000067213726503203016710 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/yacc/err_syntax8.error0000644000000000000000000000011012361053263016760 0ustar rootrootYACC: e - line 6 of "./err_syntax8.y", illegal use of reserved symbol . byacc-20221106/test/yacc/err_syntax12.error0000644000000000000000000000011612361053263017041 0ustar rootrootYACC: w - line 7 of "./err_syntax12.y", the value of text has been redeclared byacc-20221106/test/yacc/err_syntax22.output0000644000000000000000000000000012313672523017244 0ustar rootrootbyacc-20221106/test/yacc/err_syntax7b.tab.h0000644000000000000000000000000012313161123016752 0ustar rootrootbyacc-20221106/test/yacc/no_opts.error0000644000000000000000000000004513501466650016167 0ustar rootrootYACC: f - cannot open "nosuchfile.y" byacc-20221106/test/yacc/no_b_opt1.output0000644000000000000000000000000013501466650016564 0ustar rootrootbyacc-20221106/test/yacc/no_b_opt.output0000644000000000000000000000000013501466650016503 0ustar rootrootbyacc-20221106/test/yacc/err_syntax24.tab.c0000644000000000000000000000067213726503203016711 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/0000755000000000000000000000000014164144452013761 5ustar rootrootbyacc-20221106/test/btyacc/err_syntax12.output0000644000000000000000000000063112314147323017577 0ustar rootroot 0 $accept : S $end 1 S : error state 0 $accept : . S $end (0) error shift 1 . error S goto 2 state 1 S : error . (1) . reduce 1 state 2 $accept : S . $end (0) $end accept 3 terminals, 2 nonterminals 2 grammar rules, 3 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 456 text 3 457 $accept 4 458 S byacc-20221106/test/btyacc/quote_calc2-s.tab.h0000644000000000000000000000042412312171122017323 0ustar rootroot#ifndef _quote_calc2__defines_h_ #define _quote_calc2__defines_h_ #define OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #endif /* _quote_calc2__defines_h_ */ byacc-20221106/test/btyacc/calc.output0000644000000000000000000001630312312171120016131 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 DIGIT 3 258 LETTER 4 124 '|' 5 38 '&' 6 43 '+' 7 45 '-' 8 42 '*' 9 47 '/' 10 37 '%' 11 259 UMINUS 12 10 '\n' 13 61 '=' 14 40 '(' 15 41 ')' 16 260 $accept 17 261 list 18 262 stat 19 263 expr 20 264 number byacc-20221106/test/btyacc/quote_calc3.output0000644000000000000000000002756012312171122017442 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr OP_ADD expr 8 | expr OP_SUB expr 9 | expr OP_MUL expr 10 | expr OP_DIV expr 11 | expr OP_MOD expr 12 | expr OP_AND expr 13 | expr '|' expr 14 | OP_SUB expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 OP_SUB shift 3 DIGIT shift 4 LETTER shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 expr : OP_SUB . expr (14) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 12 number goto 9 state 4 number : DIGIT . (17) . reduce 17 state 5 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 13 OP_ADD reduce 15 OP_SUB reduce 15 OP_MUL reduce 15 OP_DIV reduce 15 OP_MOD reduce 15 OP_AND reduce 15 '|' reduce 15 '\n' reduce 15 state 6 expr : '(' . expr ')' (6) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 OP_ADD reduce 16 OP_SUB reduce 16 OP_MUL reduce 16 OP_DIV reduce 16 OP_MOD reduce 16 OP_AND reduce 16 '|' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 expr : LETTER . (15) . reduce 15 12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD 12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB 12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL 12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV 12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD 12: shift/reduce conflict (shift 21, reduce 14) on OP_AND state 12 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) expr : OP_SUB expr . (14) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' reduce 14 '\n' reduce 14 ')' reduce 14 state 13 stat : LETTER '=' . expr (5) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 24 number goto 9 state 14 expr : '(' expr . ')' (6) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr OP_ADD . expr (7) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr OP_SUB . expr (8) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr OP_MUL . expr (9) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr OP_DIV . expr (10) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr OP_MOD . expr (11) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr OP_AND . expr (12) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '|' . expr (13) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD 26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB 26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL 26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV 26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD 26: shift/reduce conflict (shift 21, reduce 7) on OP_AND 26: shift/reduce conflict (shift 22, reduce 7) on '|' state 26 expr : expr . OP_ADD expr (7) expr : expr OP_ADD expr . (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 7 ')' reduce 7 27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD 27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB 27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL 27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV 27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD 27: shift/reduce conflict (shift 21, reduce 8) on OP_AND 27: shift/reduce conflict (shift 22, reduce 8) on '|' state 27 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr OP_SUB expr . (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 8 ')' reduce 8 28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD 28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB 28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL 28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV 28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD 28: shift/reduce conflict (shift 21, reduce 9) on OP_AND 28: shift/reduce conflict (shift 22, reduce 9) on '|' state 28 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr OP_MUL expr . (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 9 ')' reduce 9 29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD 29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB 29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL 29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV 29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD 29: shift/reduce conflict (shift 21, reduce 10) on OP_AND 29: shift/reduce conflict (shift 22, reduce 10) on '|' state 29 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr OP_DIV expr . (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 10 ')' reduce 10 30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD 30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB 30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL 30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV 30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD 30: shift/reduce conflict (shift 21, reduce 11) on OP_AND 30: shift/reduce conflict (shift 22, reduce 11) on '|' state 30 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr OP_MOD expr . (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 11 ')' reduce 11 31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD 31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB 31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL 31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV 31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD 31: shift/reduce conflict (shift 21, reduce 12) on OP_AND 31: shift/reduce conflict (shift 22, reduce 12) on '|' state 31 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr OP_AND expr . (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 12 ')' reduce 12 32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD 32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB 32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL 32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV 32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD 32: shift/reduce conflict (shift 21, reduce 13) on OP_AND state 32 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' reduce 13 '\n' reduce 13 ')' reduce 13 State 12 contains 6 shift/reduce conflicts. State 26 contains 7 shift/reduce conflicts. State 27 contains 7 shift/reduce conflicts. State 28 contains 7 shift/reduce conflicts. State 29 contains 7 shift/reduce conflicts. State 30 contains 7 shift/reduce conflicts. State 31 contains 7 shift/reduce conflicts. State 32 contains 6 shift/reduce conflicts. 28 terminals, 5 nonterminals 19 grammar rules, 33 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 OP_ADD 3 258 "ADD-operator" 4 259 OP_SUB 5 260 "SUB-operator" 6 261 OP_MUL 7 262 "MUL-operator" 8 263 OP_DIV 9 264 "DIV-operator" 10 265 OP_MOD 11 266 "MOD-operator" 12 267 OP_AND 13 268 "AND-operator" 14 269 DIGIT 15 270 LETTER 16 124 '|' 17 38 '&' 18 43 '+' 19 45 '-' 20 42 '*' 21 47 '/' 22 37 '%' 23 271 UMINUS 24 10 '\n' 25 61 '=' 26 40 '(' 27 41 ')' 28 272 $accept 29 273 list 30 274 stat 31 275 expr 32 276 number byacc-20221106/test/btyacc/calc_code_imports.tab.h0000644000000000000000000000026413565110447020353 0ustar rootroot#ifndef _calc_code_imports__defines_h_ #define _calc_code_imports__defines_h_ #define DIGIT 257 #define LETTER 258 #define UMINUS 259 #endif /* _calc_code_imports__defines_h_ */ byacc-20221106/test/btyacc/code_error.tab.c0000644000000000000000000000330114051574134017011 0ustar rootroot#undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" typedef int YYINT; const YYINT error_lhs[] = { -1, 0, }; const YYINT error_len[] = { 2, 1, }; const YYINT error_defred[] = { 0, 1, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) const YYINT error_stos[] = { 0, 256, 258, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ const YYINT error_dgoto[] = { 2, }; const YYINT error_sindex[] = { -256, 0, 0, }; const YYINT error_rindex[] = { 0, 0, 0, }; #if YYBTYACC const YYINT error_cindex[] = { 0, 0, 0, }; #endif const YYINT error_gindex[] = { 0, }; const YYINT error_table[] = { 1, }; const YYINT error_check[] = { 256, }; #if YYBTYACC const YYINT error_ctable[] = { -1, }; #endif #ifndef YYDEBUG #define YYDEBUG 0 #endif #if YYDEBUG const char *const error_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","$accept","S","illegal-symbol", }; const char *const error_rule[] = { "$accept : S", "S : error", }; #endif byacc-20221106/test/btyacc/no_p_opt.output0000644000000000000000000000000013501467273017051 0ustar rootrootbyacc-20221106/test/btyacc/quote_calc2-s.error0000644000000000000000000000004112313700136017457 0ustar rootrootYACC: 54 shift/reduce conflicts. byacc-20221106/test/btyacc/empty.error0000644000000000000000000000000012313700134016145 0ustar rootrootbyacc-20221106/test/btyacc/btyacc_destroy3.error0000644000000000000000000000000012414015057020115 0ustar rootrootbyacc-20221106/test/btyacc/btyacc_calc1.tab.c0000644000000000000000000015231714104035275017207 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 1 #define YYDEBUGSTR (yytrial ? YYPREFIX "debug(trial)" : YYPREFIX "debug") #ifndef yyparse #define yyparse calc1_parse #endif /* yyparse */ #ifndef yylex #define yylex calc1_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc1_error #endif /* yyerror */ #ifndef yychar #define yychar calc1_char #endif /* yychar */ #ifndef yyval #define yyval calc1_val #endif /* yyval */ #ifndef yylval #define yylval calc1_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc1_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc1_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc1_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc1_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc1_len #endif /* yylen */ #ifndef yydefred #define yydefred calc1_defred #endif /* yydefred */ #ifndef yystos #define yystos calc1_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto calc1_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc1_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc1_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc1_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc1_table #endif /* yytable */ #ifndef yycheck #define yycheck calc1_check #endif /* yycheck */ #ifndef yyname #define yyname calc1_name #endif /* yyname */ #ifndef yyrule #define yyrule calc1_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex calc1_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable calc1_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "calc1_" #define YYPURE 1 #line 3 "btyacc_calc1.y" /* http://dinosaur.compilertools.net/yacc/index.html */ #include #include #include #include typedef struct interval { double lo, hi; } INTERVAL; INTERVAL vmul(double, double, INTERVAL); INTERVAL vdiv(double, double, INTERVAL); int dcheck(INTERVAL); double dreg[26]; INTERVAL vreg[26]; #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #line 29 "btyacc_calc1.y" typedef union YYSTYPE { int ival; double dval; INTERVAL vval; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 158 "btyacc_calc1.tab.c" /* 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 # ifdef YYLEX_PARAM_TYPE # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM) # else # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM) # endif # define YYLEX yylex(&yylval, YYLEX_PARAM) #else # define YYLEX_DECL() yylex(YYSTYPE *yylval) # define YYLEX yylex(&yylval) #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 DREG 257 #define VREG 258 #define CONST 259 #define UMINUS 260 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc1_lhs[] = { -1, 0, 0, 0, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; static const YYINT calc1_len[] = { 2, 0, 3, 3, 1, 1, 3, 3, 1, 1, 3, 3, 3, 3, 2, 3, 1, 5, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, }; static const YYINT calc1_defred[] = { 1, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 3, 0, 0, 9, 18, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 15, 0, 28, 0, 0, 0, 0, 0, 24, 0, 26, 0, 0, 23, 25, 14, 0, 0, 0, 0, 0, 0, 0, 0, 12, 13, 17, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT calc1_stos[] = { 0, 262, 256, 257, 258, 259, 45, 40, 263, 264, 265, 10, 61, 61, 257, 258, 263, 264, 263, 264, 43, 45, 42, 47, 43, 45, 42, 47, 10, 45, 40, 263, 263, 264, 41, 44, 41, 263, 264, 263, 264, 263, 264, 263, 264, 264, 264, 264, 264, 263, 263, 43, 45, 42, 47, 263, 263, 263, 263, 263, 41, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT calc1_dgoto[] = { 1, 32, 9, 10, }; static const YYINT calc1_sindex[] = { 0, -40, -9, -59, -54, 0, -37, -37, 0, 82, 4, 0, -34, -37, 0, 0, 0, 0, -31, -25, -37, -37, -37, -37, -37, -37, -37, -37, 0, -34, -34, 132, 0, 82, 0, -34, 0, 0, -12, 0, -12, 0, 0, 0, 0, -12, -12, 0, 0, 0, 112, -34, -34, -34, -34, 119, -11, -11, 0, 0, 0, }; static const YYINT calc1_rindex[] = { 0, 0, 0, 51, 58, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 9, 27, 0, 0, 0, -5, 41, -4, 77, -2, 0, 8, 0, 78, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 99, 0, 0, 0, }; #if YYBTYACC static const YYINT calc1_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 2, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 17, 0, 24, 0, 31, 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT calc1_gindex[] = { 0, 3, 125, 0, }; #define YYTABLESIZE 225 static const YYINT calc1_table[] = { 7, 11, 12, 7, 8, 6, 30, 13, 6, 16, 18, 29, 14, 35, 28, 31, 36, 26, 24, 16, 25, 5, 27, 37, 39, 41, 43, 20, 14, 6, 26, 53, 49, 50, 23, 27, 54, 7, 55, 10, 11, 26, 12, 14, 14, 14, 0, 14, 29, 14, 16, 20, 13, 0, 56, 57, 58, 59, 20, 6, 20, 9, 20, 0, 9, 23, 6, 23, 18, 23, 0, 9, 26, 26, 26, 11, 26, 0, 26, 29, 29, 29, 20, 29, 20, 29, 20, 22, 19, 0, 0, 0, 0, 9, 9, 21, 9, 0, 9, 0, 18, 18, 10, 18, 0, 18, 0, 6, 0, 11, 3, 0, 9, 0, 0, 0, 0, 0, 22, 19, 22, 19, 22, 19, 26, 24, 21, 25, 21, 27, 21, 17, 19, 10, 0, 10, 0, 10, 33, 0, 11, 0, 11, 0, 11, 38, 40, 42, 44, 45, 46, 47, 48, 34, 53, 51, 0, 52, 0, 54, 60, 53, 51, 0, 52, 0, 54, 18, 6, 0, 0, 3, 0, 9, 53, 51, 0, 52, 0, 54, 6, 0, 0, 3, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 14, 15, 5, 14, 0, 5, }; static const YYINT calc1_check[] = { 40, 10, 61, 40, 1, 45, 40, 61, 45, 6, 7, 45, 10, 44, 10, 12, 41, 42, 43, 10, 45, 10, 47, 20, 21, 22, 23, 10, 44, 10, 42, 42, 29, 30, 10, 47, 47, 10, 35, 44, 44, 10, 44, 41, 42, 43, -1, 45, 10, 47, 41, 10, 44, -1, 51, 52, 53, 54, 41, 42, 43, 10, 45, -1, 47, 41, 42, 43, 10, 45, -1, 47, 41, 42, 43, 10, 45, -1, 47, 41, 42, 43, 41, 45, 43, 47, 45, 10, 10, -1, -1, -1, -1, 42, 43, 10, 45, -1, 47, -1, 42, 43, 10, 45, -1, 47, -1, 42, 43, 10, 45, -1, 47, -1, -1, -1, -1, -1, 41, 41, 43, 43, 45, 45, 42, 43, 41, 45, 43, 47, 45, 6, 7, 41, -1, 43, -1, 45, 13, -1, 41, -1, 43, -1, 45, 20, 21, 22, 23, 24, 25, 26, 27, 41, 42, 43, -1, 45, -1, 47, 41, 42, 43, -1, 45, -1, 47, 41, 42, 43, -1, 45, -1, 47, 42, 43, -1, 45, -1, 47, 42, 43, -1, 45, -1, 47, -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, 256, 257, 258, 259, 257, 258, 259, 257, -1, 259, }; #if YYBTYACC static const YYINT calc1_ctable[] = { 20, 16, -1, 21, 16, -1, 22, 16, -1, 23, 16, -1, 4, 16, -1, 14, 16, -1, 34, 16, -1, 10, 16, -1, 11, 16, -1, 12, 16, -1, 13, 16, -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, -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, -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, -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, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 260 #define YYUNDFTOKEN 266 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc1_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0, 0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, "error","DREG","VREG","CONST","UMINUS","$accept","lines","dexp","vexp","line", "illegal-symbol", }; static const char *const calc1_rule[] = { "$accept : lines", "lines :", "lines : lines line '\\n'", "lines : lines error '\\n'", "line : dexp", "line : vexp", "line : DREG '=' dexp", "line : VREG '=' vexp", "dexp : CONST", "dexp : DREG", "dexp : dexp '+' dexp", "dexp : dexp '-' dexp", "dexp : dexp '*' dexp", "dexp : dexp '/' dexp", "dexp : '-' dexp", "dexp : '(' dexp ')'", "vexp : dexp", "vexp : '(' dexp ',' dexp ')'", "vexp : VREG", "vexp : vexp '+' vexp", "vexp : dexp '+' vexp", "vexp : vexp '-' vexp", "vexp : dexp '-' vexp", "vexp : vexp '*' vexp", "vexp : dexp '*' vexp", "vexp : vexp '/' vexp", "vexp : dexp '/' vexp", "vexp : '-' vexp", "vexp : '(' vexp ')'", }; #endif #if YYDEBUG int yydebug; #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ #line 174 "btyacc_calc1.y" /* beginning of subroutines section */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } #define BSZ 50 /* buffer size for floating point numbers */ static void YYERROR_DECL() { fprintf(stderr, "%s\n", s); } /* lexical analysis */ static int YYLEX_DECL() { int c; while ((c = getchar()) == ' ') { /* skip over blanks */ } if (isupper(c)) { #if YYPURE (*yylval).ival = c - 'A'; #else yylval.ival = c - 'A'; #endif return (VREG); } if (islower(c)) { #if YYPURE (*yylval).ival = c - 'a'; #else yylval.ival = c - 'a'; #endif return (DREG); } if (isdigit(c) || c == '.') { /* gobble up digits, points, exponents */ char buf[BSZ + 1], *cp = buf; int dot = 0, expr = 0; for (; (cp - buf) < BSZ; ++cp, c = getchar()) { *cp = (char) c; if (isdigit(c)) continue; if (c == '.') { if (dot++ || expr) return ('.'); /* will cause syntax error */ continue; } if (c == 'e') { if (expr++) return ('e'); /* will cause syntax error */ continue; } /* end of number */ break; } *cp = '\0'; if ((cp - buf) >= BSZ) printf("constant too long: truncated\n"); else ungetc(c, stdin); /* push back last char read */ #if YYPURE (*yylval).dval = atof(buf); #else yylval.dval = atof(buf); #endif return (CONST); } return (c); } static INTERVAL hilo(double a, double b, double c, double d) { /* returns the smallest interval containing a, b, c, and d */ /* used by *, / routines */ INTERVAL v; if (a > b) { v.hi = a; v.lo = b; } else { v.hi = b; v.lo = a; } if (c > d) { if (c > v.hi) v.hi = c; if (d < v.lo) v.lo = d; } else { if (d > v.hi) v.hi = d; if (c < v.lo) v.lo = c; } return (v); } INTERVAL vmul(double a, double b, INTERVAL v) { return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo)); } int dcheck(INTERVAL v) { if (v.hi >= 0. && v.lo <= 0.) { printf("divisor interval contains 0.\n"); return (1); } return (0); } INTERVAL vdiv(double a, double b, INTERVAL v) { return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo)); } #line 620 "btyacc_calc1.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif /* variables for the parser stack */ YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif yyerrflag = 0; yychar = 0; memset(&yyval, 0, sizeof(yyval)); memset(&yylval, 0, sizeof(yylval)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(&yyloc, 0, sizeof(yyloc)); memset(&yylloc, 0, sizeof(yylloc)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 2: #line 51 "btyacc_calc1.y" {YYVALID;} #line 1354 "btyacc_calc1.tab.c" break; case 3: #line 52 "btyacc_calc1.y" {YYVALID;} if (!yytrial) #line 53 "btyacc_calc1.y" { yyerrok; } #line 1363 "btyacc_calc1.tab.c" break; case 4: if (!yytrial) #line 59 "btyacc_calc1.y" { (void) printf("%15.8f\n", yystack.l_mark[0].dval); } #line 1371 "btyacc_calc1.tab.c" break; case 5: if (!yytrial) #line 63 "btyacc_calc1.y" { (void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[0].vval.lo, yystack.l_mark[0].vval.hi); } #line 1379 "btyacc_calc1.tab.c" break; case 6: if (!yytrial) #line 67 "btyacc_calc1.y" { dreg[yystack.l_mark[-2].ival] = yystack.l_mark[0].dval; } #line 1387 "btyacc_calc1.tab.c" break; case 7: if (!yytrial) #line 71 "btyacc_calc1.y" { vreg[yystack.l_mark[-2].ival] = yystack.l_mark[0].vval; } #line 1395 "btyacc_calc1.tab.c" break; case 9: if (!yytrial) #line 78 "btyacc_calc1.y" { yyval.dval = dreg[yystack.l_mark[0].ival]; } #line 1403 "btyacc_calc1.tab.c" break; case 10: if (!yytrial) #line 82 "btyacc_calc1.y" { yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval; } #line 1411 "btyacc_calc1.tab.c" break; case 11: if (!yytrial) #line 86 "btyacc_calc1.y" { yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval; } #line 1419 "btyacc_calc1.tab.c" break; case 12: if (!yytrial) #line 90 "btyacc_calc1.y" { yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval; } #line 1427 "btyacc_calc1.tab.c" break; case 13: if (!yytrial) #line 94 "btyacc_calc1.y" { yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval; } #line 1435 "btyacc_calc1.tab.c" break; case 14: if (!yytrial) #line 98 "btyacc_calc1.y" { yyval.dval = -yystack.l_mark[0].dval; } #line 1443 "btyacc_calc1.tab.c" break; case 15: if (!yytrial) #line 102 "btyacc_calc1.y" { yyval.dval = yystack.l_mark[-1].dval; } #line 1451 "btyacc_calc1.tab.c" break; case 16: if (!yytrial) #line 108 "btyacc_calc1.y" { yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval; } #line 1459 "btyacc_calc1.tab.c" break; case 17: if (!yytrial) #line 112 "btyacc_calc1.y" { yyval.vval.lo = yystack.l_mark[-3].dval; yyval.vval.hi = yystack.l_mark[-1].dval; if ( yyval.vval.lo > yyval.vval.hi ) { (void) printf("interval out of order\n"); YYERROR; } } #line 1473 "btyacc_calc1.tab.c" break; case 18: if (!yytrial) #line 122 "btyacc_calc1.y" { yyval.vval = vreg[yystack.l_mark[0].ival]; } #line 1481 "btyacc_calc1.tab.c" break; case 19: if (!yytrial) #line 126 "btyacc_calc1.y" { yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi; yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo; } #line 1490 "btyacc_calc1.tab.c" break; case 20: if (!yytrial) #line 131 "btyacc_calc1.y" { yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi; yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo; } #line 1499 "btyacc_calc1.tab.c" break; case 21: if (!yytrial) #line 136 "btyacc_calc1.y" { yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo; yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi; } #line 1508 "btyacc_calc1.tab.c" break; case 22: if (!yytrial) #line 141 "btyacc_calc1.y" { yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo; yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi; } #line 1517 "btyacc_calc1.tab.c" break; case 23: if (!yytrial) #line 146 "btyacc_calc1.y" { yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); } #line 1525 "btyacc_calc1.tab.c" break; case 24: if (!yytrial) #line 150 "btyacc_calc1.y" { yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); } #line 1533 "btyacc_calc1.tab.c" break; case 25: if (!yytrial) #line 154 "btyacc_calc1.y" { if (dcheck(yystack.l_mark[0].vval)) YYERROR; yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); } #line 1542 "btyacc_calc1.tab.c" break; case 26: if (!yytrial) #line 159 "btyacc_calc1.y" { if (dcheck ( yystack.l_mark[0].vval )) YYERROR; yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); } #line 1551 "btyacc_calc1.tab.c" break; case 27: if (!yytrial) #line 164 "btyacc_calc1.y" { yyval.vval.hi = -yystack.l_mark[0].vval.lo; yyval.vval.lo = -yystack.l_mark[0].vval.hi; } #line 1560 "btyacc_calc1.tab.c" break; case 28: if (!yytrial) #line 169 "btyacc_calc1.y" { yyval.vval = yystack.l_mark[-1].vval; } #line 1568 "btyacc_calc1.tab.c" break; #line 1570 "btyacc_calc1.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_syntax6.tab.h0000644000000000000000000000000012314147323017144 0ustar rootrootbyacc-20221106/test/btyacc/calc_code_all.output0000644000000000000000000001630313565110447017773 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 DIGIT 3 258 LETTER 4 124 '|' 5 38 '&' 6 43 '+' 7 45 '-' 8 42 '*' 9 47 '/' 10 37 '%' 11 259 UMINUS 12 10 '\n' 13 61 '=' 14 40 '(' 15 41 ')' 16 260 $accept 17 261 list 18 262 stat 19 263 expr 20 264 number byacc-20221106/test/btyacc/err_syntax20.output0000644000000000000000000000114512314147323017577 0ustar rootroot 0 $accept : expr $end 1 expr : '(' recur ')' state 0 $accept : . expr $end (0) '(' shift 1 . error expr goto 2 state 1 expr : '(' . recur ')' (1) recur shift 3 . error state 2 $accept : expr . $end (0) $end accept state 3 expr : '(' recur . ')' (1) ')' shift 4 . error state 4 expr : '(' recur ')' . (1) . reduce 1 5 terminals, 2 nonterminals 2 grammar rules, 5 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 recur 3 40 '(' 4 41 ')' 5 258 $accept 6 259 expr byacc-20221106/test/btyacc/quote_calc.tab.h0000644000000000000000000000056112312171122017003 0ustar rootroot#ifndef _quote_calc__defines_h_ #define _quote_calc__defines_h_ #define OP_ADD 257 #define ADD 258 #define OP_SUB 259 #define SUB 260 #define OP_MUL 261 #define MUL 262 #define OP_DIV 263 #define DIV 264 #define OP_MOD 265 #define MOD 266 #define OP_AND 267 #define AND 268 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #endif /* _quote_calc__defines_h_ */ byacc-20221106/test/btyacc/code_error.output0000644000000000000000000000060512312171121017351 0ustar rootroot 0 $accept : S $end 1 S : error state 0 $accept : . S $end (0) error shift 1 . error S goto 2 state 1 S : error . (1) . reduce 1 state 2 $accept : S . $end (0) $end accept 2 terminals, 2 nonterminals 2 grammar rules, 3 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 $accept 3 258 S byacc-20221106/test/btyacc/err_syntax20.tab.c0000644000000000000000000011610514104035275017232 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse err_syntax20_parse #endif /* yyparse */ #ifndef yylex #define yylex err_syntax20_lex #endif /* yylex */ #ifndef yyerror #define yyerror err_syntax20_error #endif /* yyerror */ #ifndef yychar #define yychar err_syntax20_char #endif /* yychar */ #ifndef yyval #define yyval err_syntax20_val #endif /* yyval */ #ifndef yylval #define yylval err_syntax20_lval #endif /* yylval */ #ifndef yydebug #define yydebug err_syntax20_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs err_syntax20_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag err_syntax20_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs err_syntax20_lhs #endif /* yylhs */ #ifndef yylen #define yylen err_syntax20_len #endif /* yylen */ #ifndef yydefred #define yydefred err_syntax20_defred #endif /* yydefred */ #ifndef yystos #define yystos err_syntax20_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto err_syntax20_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex err_syntax20_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex err_syntax20_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex err_syntax20_gindex #endif /* yygindex */ #ifndef yytable #define yytable err_syntax20_table #endif /* yytable */ #ifndef yycheck #define yycheck err_syntax20_check #endif /* yycheck */ #ifndef yyname #define yyname err_syntax20_name #endif /* yyname */ #ifndef yyrule #define yyrule err_syntax20_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex err_syntax20_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable err_syntax20_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "err_syntax20_" #define YYPURE 0 #line 2 "err_syntax20.y" int yylex(void); static void yyerror(const char *); #line 124 "err_syntax20.tab.c" /* 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 recur 257 #define YYERRCODE 256 typedef int YYINT; static const YYINT err_syntax20_lhs[] = { -1, 0, }; static const YYINT err_syntax20_len[] = { 2, 3, }; static const YYINT err_syntax20_defred[] = { 0, 0, 0, 0, 1, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT err_syntax20_stos[] = { 0, 40, 259, 257, 41, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT err_syntax20_dgoto[] = { 2, }; static const YYINT err_syntax20_sindex[] = { -40, -256, 0, -39, 0, }; static const YYINT err_syntax20_rindex[] = { 0, 0, 0, 0, 0, }; #if YYBTYACC static const YYINT err_syntax20_cindex[] = { 0, 0, 0, 0, 0, }; #endif static const YYINT err_syntax20_gindex[] = { 0, }; #define YYTABLESIZE 2 static const YYINT err_syntax20_table[] = { 1, 3, 4, }; static const YYINT err_syntax20_check[] = { 40, 257, 41, }; #if YYBTYACC static const YYINT err_syntax20_ctable[] = { -1, -1, }; #endif #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 257 #define YYUNDFTOKEN 260 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const err_syntax20_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'('","')'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","recur","$accept","expr", "illegal-symbol", }; static const char *const err_syntax20_rule[] = { "$accept : expr", "expr : '(' recur ')'", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 16 "err_syntax20.y" #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } #line 376 "err_syntax20.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 1: #line 12 "err_syntax20.y" { yystack.l_mark[-1].rechk = 3; } #line 1049 "err_syntax20.tab.c" break; #line 1051 "err_syntax20.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_syntax9.tab.h0000644000000000000000000000000012314147323017147 0ustar rootrootbyacc-20221106/test/btyacc/calc_code_top.output0000644000000000000000000001630313565110447020025 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 DIGIT 3 258 LETTER 4 124 '|' 5 38 '&' 6 43 '+' 7 45 '-' 8 42 '*' 9 47 '/' 10 37 '%' 11 259 UMINUS 12 10 '\n' 13 61 '=' 14 40 '(' 15 41 ')' 16 260 $accept 17 261 list 18 262 stat 19 263 expr 20 264 number byacc-20221106/test/btyacc/pure_calc.tab.h0000644000000000000000000000021512312171122016615 0ustar rootroot#ifndef _calc__defines_h_ #define _calc__defines_h_ #define DIGIT 257 #define LETTER 258 #define UMINUS 259 #endif /* _calc__defines_h_ */ byacc-20221106/test/btyacc/quote_calc3.tab.h0000644000000000000000000000042412312171122017064 0ustar rootroot#ifndef _quote_calc3__defines_h_ #define _quote_calc3__defines_h_ #define OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #endif /* _quote_calc3__defines_h_ */ byacc-20221106/test/btyacc/pure_error.error0000644000000000000000000000000012313700136017175 0ustar rootrootbyacc-20221106/test/btyacc/btyacc_demo.error0000644000000000000000000000004112723664633017307 0ustar rootrootYACC: 12 shift/reduce conflicts. byacc-20221106/test/btyacc/defines2.error0000644000000000000000000000000013501474556016526 0ustar rootrootbyacc-20221106/test/btyacc/calc1.output0000644000000000000000000003661412312171121016222 0ustar rootroot 0 $accept : line $end 1 lines : 2 | lines line 3 line : dexp '\n' 4 | vexp '\n' 5 | DREG '=' dexp '\n' 6 | VREG '=' vexp '\n' 7 | error '\n' 8 dexp : CONST 9 | DREG 10 | dexp '+' dexp 11 | dexp '-' dexp 12 | dexp '*' dexp 13 | dexp '/' dexp 14 | '-' dexp 15 | '(' dexp ')' 16 vexp : dexp 17 | '(' dexp ',' dexp ')' 18 | VREG 19 | vexp '+' vexp 20 | dexp '+' vexp 21 | vexp '-' vexp 22 | dexp '-' vexp 23 | vexp '*' vexp 24 | dexp '*' vexp 25 | vexp '/' vexp 26 | dexp '/' vexp 27 | '-' vexp 28 | '(' vexp ')' state 0 $accept : . line $end (0) error shift 1 DREG shift 2 VREG shift 3 CONST shift 4 '-' shift 5 '(' shift 6 . error line goto 7 dexp goto 8 vexp goto 9 state 1 line : error . '\n' (7) '\n' shift 10 . error state 2 line : DREG . '=' dexp '\n' (5) dexp : DREG . (9) '=' shift 11 '+' reduce 9 '-' reduce 9 '*' reduce 9 '/' reduce 9 '\n' reduce 9 state 3 line : VREG . '=' vexp '\n' (6) vexp : VREG . (18) '=' shift 12 '+' reduce 18 '-' reduce 18 '*' reduce 18 '/' reduce 18 '\n' reduce 18 state 4 dexp : CONST . (8) . reduce 8 state 5 dexp : '-' . dexp (14) vexp : '-' . vexp (27) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 15 vexp goto 16 state 6 dexp : '(' . dexp ')' (15) vexp : '(' . dexp ',' dexp ')' (17) vexp : '(' . vexp ')' (28) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 17 vexp goto 18 state 7 $accept : line . $end (0) $end accept 8: shift/reduce conflict (shift 19, reduce 16) on '+' 8: shift/reduce conflict (shift 20, reduce 16) on '-' 8: shift/reduce conflict (shift 21, reduce 16) on '*' 8: shift/reduce conflict (shift 22, reduce 16) on '/' 8: shift/reduce conflict (shift 23, reduce 16) on '\n' state 8 line : dexp . '\n' (3) dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '+' shift 19 '-' shift 20 '*' shift 21 '/' shift 22 '\n' shift 23 state 9 line : vexp . '\n' (4) vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '+' shift 24 '-' shift 25 '*' shift 26 '/' shift 27 '\n' shift 28 . error state 10 line : error '\n' . (7) . reduce 7 state 11 line : DREG '=' . dexp '\n' (5) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 31 state 12 line : VREG '=' . vexp '\n' (6) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 33 state 13 dexp : DREG . (9) . reduce 9 state 14 vexp : VREG . (18) . reduce 18 15: reduce/reduce conflict (reduce 14, reduce 16) on '+' 15: reduce/reduce conflict (reduce 14, reduce 16) on '-' 15: reduce/reduce conflict (reduce 14, reduce 16) on '*' 15: reduce/reduce conflict (reduce 14, reduce 16) on '/' 15: reduce/reduce conflict (reduce 14, reduce 16) on '\n' 15: reduce/reduce conflict (reduce 14, reduce 16) on ')' state 15 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '-' dexp . (14) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) . reduce 14 state 16 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : '-' vexp . (27) . reduce 27 17: shift/reduce conflict (shift 19, reduce 16) on '+' 17: shift/reduce conflict (shift 20, reduce 16) on '-' 17: shift/reduce conflict (shift 21, reduce 16) on '*' 17: shift/reduce conflict (shift 22, reduce 16) on '/' 17: shift/reduce conflict (shift 34, reduce 16) on ')' state 17 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '(' dexp . ')' (15) vexp : dexp . (16) vexp : '(' dexp . ',' dexp ')' (17) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '+' shift 19 '-' shift 20 '*' shift 21 '/' shift 22 ')' shift 34 ',' shift 35 state 18 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : '(' vexp . ')' (28) '+' shift 24 '-' shift 25 '*' shift 26 '/' shift 27 ')' shift 36 . error state 19 dexp : dexp '+' . dexp (10) vexp : dexp '+' . vexp (20) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 37 vexp goto 38 state 20 dexp : dexp '-' . dexp (11) vexp : dexp '-' . vexp (22) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 39 vexp goto 40 state 21 dexp : dexp '*' . dexp (12) vexp : dexp '*' . vexp (24) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 41 vexp goto 42 state 22 dexp : dexp '/' . dexp (13) vexp : dexp '/' . vexp (26) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 43 vexp goto 44 state 23 line : dexp '\n' . (3) . reduce 3 state 24 vexp : vexp '+' . vexp (19) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 45 state 25 vexp : vexp '-' . vexp (21) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 46 state 26 vexp : vexp '*' . vexp (23) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 47 state 27 vexp : vexp '/' . vexp (25) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 48 state 28 line : vexp '\n' . (4) . reduce 4 state 29 dexp : '-' . dexp (14) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 49 state 30 dexp : '(' . dexp ')' (15) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 50 state 31 line : DREG '=' dexp . '\n' (5) dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) '+' shift 51 '-' shift 52 '*' shift 53 '/' shift 54 '\n' shift 55 . error 32: shift/reduce conflict (shift 19, reduce 16) on '+' 32: shift/reduce conflict (shift 20, reduce 16) on '-' 32: shift/reduce conflict (shift 21, reduce 16) on '*' 32: shift/reduce conflict (shift 22, reduce 16) on '/' state 32 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '+' shift 19 '-' shift 20 '*' shift 21 '/' shift 22 '\n' reduce 16 ')' reduce 16 state 33 line : VREG '=' vexp . '\n' (6) vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '+' shift 24 '-' shift 25 '*' shift 26 '/' shift 27 '\n' shift 56 . error state 34 dexp : '(' dexp ')' . (15) . reduce 15 state 35 vexp : '(' dexp ',' . dexp ')' (17) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 57 state 36 vexp : '(' vexp ')' . (28) . reduce 28 37: reduce/reduce conflict (reduce 10, reduce 16) on '+' 37: reduce/reduce conflict (reduce 10, reduce 16) on '-' 37: shift/reduce conflict (shift 21, reduce 16) on '*' 37: shift/reduce conflict (shift 22, reduce 16) on '/' 37: reduce/reduce conflict (reduce 10, reduce 16) on '\n' 37: reduce/reduce conflict (reduce 10, reduce 16) on ')' state 37 dexp : dexp . '+' dexp (10) dexp : dexp '+' dexp . (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '*' shift 21 '/' shift 22 '+' reduce 10 '-' reduce 10 '\n' reduce 10 ')' reduce 10 ',' reduce 10 state 38 vexp : vexp . '+' vexp (19) vexp : dexp '+' vexp . (20) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 20 '-' reduce 20 '\n' reduce 20 ')' reduce 20 39: reduce/reduce conflict (reduce 11, reduce 16) on '+' 39: reduce/reduce conflict (reduce 11, reduce 16) on '-' 39: shift/reduce conflict (shift 21, reduce 16) on '*' 39: shift/reduce conflict (shift 22, reduce 16) on '/' 39: reduce/reduce conflict (reduce 11, reduce 16) on '\n' 39: reduce/reduce conflict (reduce 11, reduce 16) on ')' state 39 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp '-' dexp . (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '*' shift 21 '/' shift 22 '+' reduce 11 '-' reduce 11 '\n' reduce 11 ')' reduce 11 ',' reduce 11 state 40 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : dexp '-' vexp . (22) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 22 '-' reduce 22 '\n' reduce 22 ')' reduce 22 41: reduce/reduce conflict (reduce 12, reduce 16) on '+' 41: reduce/reduce conflict (reduce 12, reduce 16) on '-' 41: reduce/reduce conflict (reduce 12, reduce 16) on '*' 41: reduce/reduce conflict (reduce 12, reduce 16) on '/' 41: reduce/reduce conflict (reduce 12, reduce 16) on '\n' 41: reduce/reduce conflict (reduce 12, reduce 16) on ')' state 41 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp '*' dexp . (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) . reduce 12 state 42 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : dexp '*' vexp . (24) vexp : vexp . '/' vexp (25) . reduce 24 43: reduce/reduce conflict (reduce 13, reduce 16) on '+' 43: reduce/reduce conflict (reduce 13, reduce 16) on '-' 43: reduce/reduce conflict (reduce 13, reduce 16) on '*' 43: reduce/reduce conflict (reduce 13, reduce 16) on '/' 43: reduce/reduce conflict (reduce 13, reduce 16) on '\n' 43: reduce/reduce conflict (reduce 13, reduce 16) on ')' state 43 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : dexp '/' dexp . (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) . reduce 13 state 44 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : dexp '/' vexp . (26) . reduce 26 state 45 vexp : vexp . '+' vexp (19) vexp : vexp '+' vexp . (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 19 '-' reduce 19 '\n' reduce 19 ')' reduce 19 state 46 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp '-' vexp . (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 21 '-' reduce 21 '\n' reduce 21 ')' reduce 21 state 47 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp '*' vexp . (23) vexp : vexp . '/' vexp (25) . reduce 23 state 48 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : vexp '/' vexp . (25) . reduce 25 state 49 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '-' dexp . (14) . reduce 14 state 50 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '(' dexp . ')' (15) '+' shift 51 '-' shift 52 '*' shift 53 '/' shift 54 ')' shift 34 . error state 51 dexp : dexp '+' . dexp (10) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 58 state 52 dexp : dexp '-' . dexp (11) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 59 state 53 dexp : dexp '*' . dexp (12) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 60 state 54 dexp : dexp '/' . dexp (13) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 61 state 55 line : DREG '=' dexp '\n' . (5) . reduce 5 state 56 line : VREG '=' vexp '\n' . (6) . reduce 6 state 57 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : '(' dexp ',' dexp . ')' (17) '+' shift 51 '-' shift 52 '*' shift 53 '/' shift 54 ')' shift 62 . error state 58 dexp : dexp . '+' dexp (10) dexp : dexp '+' dexp . (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) '*' shift 53 '/' shift 54 '+' reduce 10 '-' reduce 10 '\n' reduce 10 ')' reduce 10 state 59 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp '-' dexp . (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) '*' shift 53 '/' shift 54 '+' reduce 11 '-' reduce 11 '\n' reduce 11 ')' reduce 11 state 60 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp '*' dexp . (12) dexp : dexp . '/' dexp (13) . reduce 12 state 61 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : dexp '/' dexp . (13) . reduce 13 state 62 vexp : '(' dexp ',' dexp ')' . (17) . reduce 17 Rules never reduced: lines : (1) lines : lines line (2) State 8 contains 5 shift/reduce conflicts. State 15 contains 6 reduce/reduce conflicts. State 17 contains 5 shift/reduce conflicts. State 32 contains 4 shift/reduce conflicts. State 37 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts. State 39 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts. State 41 contains 6 reduce/reduce conflicts. State 43 contains 6 reduce/reduce conflicts. 15 terminals, 5 nonterminals 29 grammar rules, 63 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 DREG 3 258 VREG 4 259 CONST 5 43 '+' 6 45 '-' 7 42 '*' 8 47 '/' 9 260 UMINUS 10 10 '\n' 11 61 '=' 12 40 '(' 13 41 ')' 14 44 ',' 15 261 $accept 16 262 line 17 263 dexp 18 264 vexp 19 265 lines byacc-20221106/test/btyacc/err_syntax10.output0000644000000000000000000000067612314147323017606 0ustar rootroot 0 $accept : S $end 1 S : error state 0 $accept : . S $end (0) error shift 1 . error S goto 2 state 1 S : error . (1) . reduce 1 state 2 $accept : S . $end (0) $end accept 5 terminals, 2 nonterminals 2 grammar rules, 3 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 40 '(' 3 42 '*' 4 38 '&' 5 257 $accept 6 258 S byacc-20221106/test/btyacc/err_syntax18.error0000644000000000000000000000013112361053263017372 0ustar rootrootYACC: w - line 9 of "./err_syntax18.y", $4 references beyond the end of the current rule byacc-20221106/test/btyacc/err_syntax1.error0000644000000000000000000000007512361053263017311 0ustar rootrootYACC: e - line 1 of "./err_syntax1.y", syntax error ?% { ^ byacc-20221106/test/btyacc/inherit0.tab.c0000644000000000000000000012215714104035275016420 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse inherit0_parse #endif /* yyparse */ #ifndef yylex #define yylex inherit0_lex #endif /* yylex */ #ifndef yyerror #define yyerror inherit0_error #endif /* yyerror */ #ifndef yychar #define yychar inherit0_char #endif /* yychar */ #ifndef yyval #define yyval inherit0_val #endif /* yyval */ #ifndef yylval #define yylval inherit0_lval #endif /* yylval */ #ifndef yydebug #define yydebug inherit0_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs inherit0_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag inherit0_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs inherit0_lhs #endif /* yylhs */ #ifndef yylen #define yylen inherit0_len #endif /* yylen */ #ifndef yydefred #define yydefred inherit0_defred #endif /* yydefred */ #ifndef yystos #define yystos inherit0_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto inherit0_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex inherit0_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex inherit0_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex inherit0_gindex #endif /* yygindex */ #ifndef yytable #define yytable inherit0_table #endif /* yytable */ #ifndef yycheck #define yycheck inherit0_check #endif /* yycheck */ #ifndef yyname #define yyname inherit0_name #endif /* yyname */ #ifndef yyrule #define yyrule inherit0_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex inherit0_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable inherit0_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "inherit0_" #define YYPURE 0 #line 2 "inherit0.y" extern void mksymbol(int t, int c, int id); #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) extern int YYLEX_DECL(); extern void YYERROR_DECL(); #endif #line 130 "inherit0.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 GLOBAL 257 #define LOCAL 258 #define REAL 259 #define INTEGER 260 #define NAME 261 #define YYERRCODE 256 typedef int YYINT; static const YYINT inherit0_lhs[] = { -1, 0, 0, 1, 1, 2, 2, 3, 3, 5, 6, 4, }; static const YYINT inherit0_len[] = { 2, 3, 2, 1, 1, 1, 1, 2, 1, 0, 0, 3, }; static const YYINT inherit0_defred[] = { 0, 3, 4, 5, 6, 0, 0, 9, 0, 2, 10, 8, 0, 0, 7, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT inherit0_stos[] = { 0, 257, 258, 259, 260, 263, 264, 265, 265, 267, 268, 261, 266, 269, 261, 266, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT inherit0_dgoto[] = { 5, 6, 7, 12, 9, 10, 13, }; static const YYINT inherit0_sindex[] = { -257, 0, 0, 0, 0, 0, -255, 0, -254, 0, 0, 0, -253, -254, 0, -253, }; static const YYINT inherit0_rindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 9, }; #if YYBTYACC static const YYINT inherit0_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT inherit0_gindex[] = { 0, 0, 4, -2, 0, 0, 0, }; #define YYTABLESIZE 11 static const YYINT inherit0_table[] = { 1, 2, 3, 4, 3, 4, 1, 11, 14, 11, 8, 15, }; static const YYINT inherit0_check[] = { 257, 258, 259, 260, 259, 260, 0, 261, 261, 0, 6, 13, }; #if YYBTYACC static const YYINT inherit0_ctable[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; #endif #define YYFINAL 5 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 261 #define YYUNDFTOKEN 270 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const inherit0_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","GLOBAL","LOCAL","REAL","INTEGER", "NAME","$accept","declaration","class","type","namelist","locnamelist","$$1", "$$2","illegal-symbol", }; static const char *const inherit0_rule[] = { "$accept : declaration", "declaration : class type namelist", "declaration : type locnamelist", "class : GLOBAL", "class : LOCAL", "type : REAL", "type : INTEGER", "namelist : namelist NAME", "namelist : NAME", "$$1 :", "$$2 :", "locnamelist : $$1 $$2 namelist", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 46 "inherit0.y" extern int YYLEX_DECL(); extern void YYERROR_DECL(); #line 396 "inherit0.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 1: #line 20 "inherit0.y" { yyval = yystack.l_mark[0]; } #line 1069 "inherit0.tab.c" break; case 2: #line 22 "inherit0.y" { yyval = yystack.l_mark[0]; } #line 1074 "inherit0.tab.c" break; case 3: #line 25 "inherit0.y" { yyval = 1; } #line 1079 "inherit0.tab.c" break; case 4: #line 26 "inherit0.y" { yyval = 2; } #line 1084 "inherit0.tab.c" break; case 5: #line 29 "inherit0.y" { yyval = 1; } #line 1089 "inherit0.tab.c" break; case 6: #line 30 "inherit0.y" { yyval = 2; } #line 1094 "inherit0.tab.c" break; case 7: #line 34 "inherit0.y" { mksymbol(yystack.l_mark[-2], yystack.l_mark[-3], yystack.l_mark[0]); } #line 1099 "inherit0.tab.c" break; case 8: #line 36 "inherit0.y" { mksymbol(yystack.l_mark[-1], yystack.l_mark[-2], yystack.l_mark[0]); } #line 1104 "inherit0.tab.c" break; case 9: #line 40 "inherit0.y" { yyval = 2; } #line 1109 "inherit0.tab.c" break; case 10: #line 41 "inherit0.y" { yyval = yystack.l_mark[-2]; } #line 1114 "inherit0.tab.c" break; case 11: #line 43 "inherit0.y" { yyval = yystack.l_mark[0]; } #line 1119 "inherit0.tab.c" break; #line 1121 "inherit0.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_inherit4.tab.c0000644000000000000000000012621214104035275017270 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse err_inherit4_parse #endif /* yyparse */ #ifndef yylex #define yylex err_inherit4_lex #endif /* yylex */ #ifndef yyerror #define yyerror err_inherit4_error #endif /* yyerror */ #ifndef yychar #define yychar err_inherit4_char #endif /* yychar */ #ifndef yyval #define yyval err_inherit4_val #endif /* yyval */ #ifndef yylval #define yylval err_inherit4_lval #endif /* yylval */ #ifndef yydebug #define yydebug err_inherit4_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs err_inherit4_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag err_inherit4_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs err_inherit4_lhs #endif /* yylhs */ #ifndef yylen #define yylen err_inherit4_len #endif /* yylen */ #ifndef yydefred #define yydefred err_inherit4_defred #endif /* yydefred */ #ifndef yystos #define yystos err_inherit4_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto err_inherit4_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex err_inherit4_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex err_inherit4_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex err_inherit4_gindex #endif /* yygindex */ #ifndef yytable #define yytable err_inherit4_table #endif /* yytable */ #ifndef yycheck #define yycheck err_inherit4_check #endif /* yycheck */ #ifndef yyname #define yyname err_inherit4_name #endif /* yyname */ #ifndef yyrule #define yyrule err_inherit4_rule #endif /* yyrule */ #ifndef yyloc #define yyloc err_inherit4_loc #endif /* yyloc */ #ifndef yylloc #define yylloc err_inherit4_lloc #endif /* yylloc */ #if YYBTYACC #ifndef yycindex #define yycindex err_inherit4_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable err_inherit4_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "err_inherit4_" #define YYPURE 0 #line 3 "err_inherit4.y" #include typedef enum {cGLOBAL, cLOCAL} class; typedef enum {tREAL, tINTEGER} type; typedef char * name; struct symbol { class c; type t; name id; }; typedef struct symbol symbol; struct namelist { symbol *s; struct namelist *next; }; typedef struct namelist namelist; extern symbol *mksymbol(type t, class c, name id); #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) #endif #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #line 41 "err_inherit4.y" typedef union YYSTYPE { class cval; type tval; namelist * nlist; name id; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 163 "err_inherit4.tab.c" #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED /* Default: YYLTYPE is the text position type. */ typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; unsigned source; } YYLTYPE; #define YYLTYPE_IS_DECLARED 1 #endif #define YYRHSLOC(rhs, k) ((rhs)[k]) /* 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(YYLTYPE *loc, const char *s) #endif #ifndef YYERROR_CALL #define YYERROR_CALL(msg) yyerror(&yylloc, msg) #endif #ifndef YYDESTRUCT_DECL #define YYDESTRUCT_DECL() yydestruct(const char *msg, int psymb, YYSTYPE *val, YYLTYPE *loc) #endif #ifndef YYDESTRUCT_CALL #define YYDESTRUCT_CALL(msg, psymb, val, loc) yydestruct(msg, psymb, val, loc) #endif extern int YYPARSE_DECL(); #define GLOBAL 257 #define LOCAL 258 #define REAL 259 #define INTEGER 260 #define NAME 261 #define YYERRCODE 256 typedef int YYINT; static const YYINT err_inherit4_lhs[] = { -1, 5, 6, 0, 0, 3, 3, 4, 4, 1, 1, 2, }; static const YYINT err_inherit4_len[] = { 2, 0, 0, 5, 2, 1, 1, 1, 1, 2, 1, 1, }; static const YYINT err_inherit4_defred[] = { 0, 5, 6, 7, 8, 0, 0, 0, 1, 10, 0, 4, 2, 9, 0, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT err_inherit4_stos[] = { 0, 257, 258, 259, 260, 263, 266, 267, 267, 261, 264, 265, 268, 261, 269, 264, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT err_inherit4_dgoto[] = { 5, 10, 11, 6, 7, 12, 14, }; static const YYINT err_inherit4_sindex[] = { -257, 0, 0, 0, 0, 0, -255, -254, 0, 0, -253, 0, 0, 0, -254, -253, }; static const YYINT err_inherit4_rindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 9, }; #if YYBTYACC static const YYINT err_inherit4_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT err_inherit4_gindex[] = { 0, -4, 0, 0, 5, 0, 0, }; #define YYTABLESIZE 11 static const YYINT err_inherit4_table[] = { 1, 2, 3, 4, 3, 4, 11, 9, 13, 3, 15, 8, }; static const YYINT err_inherit4_check[] = { 257, 258, 259, 260, 259, 260, 0, 261, 261, 0, 14, 6, }; #if YYBTYACC static const YYINT err_inherit4_ctable[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; #endif #define YYFINAL 5 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 261 #define YYUNDFTOKEN 270 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const err_inherit4_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","GLOBAL","LOCAL","REAL","INTEGER", "NAME","$accept","declaration","namelist","locnamelist","class","type","$$1", "$$2","illegal-symbol", }; static const char *const err_inherit4_rule[] = { "$accept : declaration", "$$1 :", "$$2 :", "declaration : class type $$1 $$2 namelist", "declaration : type locnamelist", "class : GLOBAL", "class : LOCAL", "type : REAL", "type : INTEGER", "namelist : namelist NAME", "namelist : NAME", "locnamelist : namelist", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 80 "err_inherit4.y" extern int YYLEX_DECL(); extern void YYERROR_DECL(); #line 444 "err_inherit4.tab.c" /* Release memory associated with symbol. */ #if ! defined YYDESTRUCT_IS_DECLARED static void YYDESTRUCT_DECL() { switch (psymb) { case 263: #line 28 "err_inherit4.y" { } #line 456 "err_inherit4.tab.c" break; case 264: #line 28 "err_inherit4.y" { } #line 461 "err_inherit4.tab.c" break; case 265: #line 28 "err_inherit4.y" { } #line 466 "err_inherit4.tab.c" break; } } #define YYDESTRUCT_IS_DECLARED 1 #endif /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 1: #line 52 "err_inherit4.y" yyval.cval = yystack.l_mark[-1].cval; #line 1144 "err_inherit4.tab.c" break; case 2: #line 52 "err_inherit4.y" yyval.tval = yystack.l_mark[-1].tval; #line 1149 "err_inherit4.tab.c" break; case 3: #line 53 "err_inherit4.y" { yyval.nlist = yystack.l_mark[0].nlist; yyloc = yystack.p_mark[0]; } #line 1154 "err_inherit4.tab.c" break; case 4: #line 55 "err_inherit4.y" { yyval.nlist = yystack.l_mark[0].nlist; yyloc = yystack.p_mark[-3]; } #line 1159 "err_inherit4.tab.c" break; case 5: #line 58 "err_inherit4.y" { yyval.cval = cGLOBAL; } #line 1164 "err_inherit4.tab.c" break; case 6: #line 59 "err_inherit4.y" { yyval.cval = cLOCAL; } #line 1169 "err_inherit4.tab.c" break; case 7: #line 62 "err_inherit4.y" { yyval.tval = tREAL; } #line 1174 "err_inherit4.tab.c" break; case 8: #line 63 "err_inherit4.y" { yyval.tval = tINTEGER; } #line 1179 "err_inherit4.tab.c" break; case 9: #line 67 "err_inherit4.y" { yyval.nlist->s = mksymbol(yystack.l_mark[-2].tval, yystack.l_mark[-3].cval, yystack.l_mark[0].id); yyval.nlist->next = yystack.l_mark[-1].nlist; } #line 1186 "err_inherit4.tab.c" break; case 10: #line 71 "err_inherit4.y" { yyval.nlist->s = mksymbol(yystack.l_mark[-1].tval, yystack.l_mark[-2].cval, yystack.l_mark[0].id); yyval.nlist->next = NULL; } #line 1193 "err_inherit4.tab.c" break; case 11: #line 77 "err_inherit4.y" { yyval.nlist = yystack.l_mark[0].nlist; yyloc = yystack.p_mark[1]; } #line 1198 "err_inherit4.tab.c" break; #line 1200 "err_inherit4.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/quote_calc-s.tab.c0000644000000000000000000013733414104035275017260 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse quote_calc_parse #endif /* yyparse */ #ifndef yylex #define yylex quote_calc_lex #endif /* yylex */ #ifndef yyerror #define yyerror quote_calc_error #endif /* yyerror */ #ifndef yychar #define yychar quote_calc_char #endif /* yychar */ #ifndef yyval #define yyval quote_calc_val #endif /* yyval */ #ifndef yylval #define yylval quote_calc_lval #endif /* yylval */ #ifndef yydebug #define yydebug quote_calc_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs quote_calc_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag quote_calc_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs quote_calc_lhs #endif /* yylhs */ #ifndef yylen #define yylen quote_calc_len #endif /* yylen */ #ifndef yydefred #define yydefred quote_calc_defred #endif /* yydefred */ #ifndef yystos #define yystos quote_calc_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto quote_calc_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex quote_calc_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex quote_calc_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex quote_calc_gindex #endif /* yygindex */ #ifndef yytable #define yytable quote_calc_table #endif /* yytable */ #ifndef yycheck #define yycheck quote_calc_check #endif /* yycheck */ #ifndef yyname #define yyname quote_calc_name #endif /* yyname */ #ifndef yyrule #define yyrule quote_calc_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex quote_calc_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable quote_calc_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "quote_calc_" #define YYPURE 0 #line 2 "quote_calc.y" # include # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); #line 131 "quote_calc-s.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 OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #define YYERRCODE 256 typedef int YYINT; static const YYINT quote_calc_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT quote_calc_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT quote_calc_defred[] = { 1, 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, 0, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT quote_calc_stos[] = { 0, 273, 256, 259, 269, 270, 40, 274, 275, 276, 10, 270, 275, 61, 275, 10, 257, 259, 261, 263, 265, 267, 124, 269, 275, 41, 275, 275, 275, 275, 275, 275, 275, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT quote_calc_dgoto[] = { 1, 7, 8, 9, }; static const YYINT quote_calc_sindex[] = { 0, -38, 5, -36, 0, -51, -36, 7, -121, -248, 0, 0, -243, -36, -22, 0, -36, -36, -36, -36, -36, -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, -121, -243, }; static const YYINT quote_calc_rindex[] = { 0, 0, 0, 0, 0, -9, 0, 0, 13, -10, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, -3, -2, -1, 1, 2, 3, -4, }; #if YYBTYACC static const YYINT quote_calc_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT quote_calc_gindex[] = { 0, 0, 42, 0, }; #define YYTABLESIZE 258 static const YYINT quote_calc_table[] = { 16, 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, 10, 11, 12, 16, 10, 17, 15, 18, 25, 19, 23, 20, 4, 21, 5, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, }; static const YYINT quote_calc_check[] = { 10, 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, 10, 10, 10, 257, 10, 259, 10, 261, 41, 263, 269, 265, 10, 267, 10, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, 19, 20, 21, 22, -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, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, -1, 259, -1, 261, -1, 263, -1, 265, -1, 267, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, 259, -1, 259, -1, -1, -1, -1, -1, -1, -1, 269, 270, 269, 270, 257, -1, 259, -1, 261, -1, 263, -1, 265, -1, 267, -1, 257, 257, 259, 259, 261, 261, 263, 263, 265, 265, 267, 267, }; #if YYBTYACC static const YYINT quote_calc_ctable[] = { -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, -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, -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, -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, -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, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 271 #define YYUNDFTOKEN 277 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const quote_calc_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV", "\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS", "$accept","list","stat","expr","number","illegal-symbol", }; static const char *const quote_calc_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr OP_ADD expr", "expr : expr OP_SUB expr", "expr : expr OP_MUL expr", "expr : expr OP_DIV expr", "expr : expr OP_MOD expr", "expr : expr OP_AND expr", "expr : expr '|' expr", "expr : OP_SUB expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 73 "quote_calc.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 529 "quote_calc-s.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 35 "quote_calc.y" { yyerrok ; } #line 1202 "quote_calc-s.tab.c" break; case 4: #line 39 "quote_calc.y" { printf("%d\n",yystack.l_mark[0]);} #line 1207 "quote_calc-s.tab.c" break; case 5: #line 41 "quote_calc.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1212 "quote_calc-s.tab.c" break; case 6: #line 45 "quote_calc.y" { yyval = yystack.l_mark[-1]; } #line 1217 "quote_calc-s.tab.c" break; case 7: #line 47 "quote_calc.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1222 "quote_calc-s.tab.c" break; case 8: #line 49 "quote_calc.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1227 "quote_calc-s.tab.c" break; case 9: #line 51 "quote_calc.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1232 "quote_calc-s.tab.c" break; case 10: #line 53 "quote_calc.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1237 "quote_calc-s.tab.c" break; case 11: #line 55 "quote_calc.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1242 "quote_calc-s.tab.c" break; case 12: #line 57 "quote_calc.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1247 "quote_calc-s.tab.c" break; case 13: #line 59 "quote_calc.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1252 "quote_calc-s.tab.c" break; case 14: #line 61 "quote_calc.y" { yyval = - yystack.l_mark[0]; } #line 1257 "quote_calc-s.tab.c" break; case 15: #line 63 "quote_calc.y" { yyval = regs[yystack.l_mark[0]]; } #line 1262 "quote_calc-s.tab.c" break; case 17: #line 68 "quote_calc.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1267 "quote_calc-s.tab.c" break; case 18: #line 70 "quote_calc.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1272 "quote_calc-s.tab.c" break; #line 1274 "quote_calc-s.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/calc_code_default.tab.h0000644000000000000000000000026413565110447020302 0ustar rootroot#ifndef _calc_code_default__defines_h_ #define _calc_code_default__defines_h_ #define DIGIT 257 #define LETTER 258 #define UMINUS 259 #endif /* _calc_code_default__defines_h_ */ byacc-20221106/test/btyacc/err_inherit4.error0000644000000000000000000000101112361053263017417 0ustar rootrootYACC: w - line 32 of "./err_inherit4.y", destructor redeclared %destructor { ^ YACC: w - line 77 of "./err_inherit4.y", wrong number of default arguments for namelist { $$ = $1; @$ = @2; } ^ YACC: w - line 77 of "./err_inherit4.y", wrong type for default argument 2 to namelist { $$ = $1; @$ = @2; } ^ YACC: w - line 77 of "./err_inherit4.y", wrong type for default argument 1 to namelist { $$ = $1; @$ = @2; } ^ YACC: w - line 77 of "./err_inherit4.y", @2 references beyond the end of the current rule byacc-20221106/test/btyacc/stdin1.calc.c0000644000000000000000000013173414104035275016235 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #define YYPREFIX "yy" #define YYPURE 0 #line 2 "(null)" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 34 "stdin1.calc.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 #if !(defined(yylex) || defined(YYSTATE)) int YYLEX_DECL(); #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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT yylhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT yylen[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT yydefred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT yystos[] = { 0, 261, 256, 257, 258, 45, 40, 262, 263, 264, 10, 61, 258, 263, 263, 10, 124, 38, 43, 45, 42, 47, 37, 257, 263, 41, 263, 263, 263, 263, 263, 263, 263, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT yydgoto[] = { 1, 7, 8, 9, }; static const YYINT yysindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT yyrindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; #if YYBTYACC static const YYINT yycindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT yygindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT yytable[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT yycheck[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #if YYBTYACC static const YYINT yyctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const yyname[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number", "illegal-symbol", }; static const char *const yyrule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 66 "(null)" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 418 "stdin1.calc.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 28 "(null)" { yyerrok ; } #line 1091 "stdin1.calc.c" break; case 4: #line 32 "(null)" { printf("%d\n",yystack.l_mark[0]);} #line 1096 "stdin1.calc.c" break; case 5: #line 34 "(null)" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1101 "stdin1.calc.c" break; case 6: #line 38 "(null)" { yyval = yystack.l_mark[-1]; } #line 1106 "stdin1.calc.c" break; case 7: #line 40 "(null)" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1111 "stdin1.calc.c" break; case 8: #line 42 "(null)" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1116 "stdin1.calc.c" break; case 9: #line 44 "(null)" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1121 "stdin1.calc.c" break; case 10: #line 46 "(null)" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1126 "stdin1.calc.c" break; case 11: #line 48 "(null)" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1131 "stdin1.calc.c" break; case 12: #line 50 "(null)" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1136 "stdin1.calc.c" break; case 13: #line 52 "(null)" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1141 "stdin1.calc.c" break; case 14: #line 54 "(null)" { yyval = - yystack.l_mark[0]; } #line 1146 "stdin1.calc.c" break; case 15: #line 56 "(null)" { yyval = regs[yystack.l_mark[0]]; } #line 1151 "stdin1.calc.c" break; case 17: #line 61 "(null)" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1156 "stdin1.calc.c" break; case 18: #line 63 "(null)" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1161 "stdin1.calc.c" break; #line 1163 "stdin1.calc.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/no_b_opt.error0000644000000000000000000000236014102077544016633 0ustar rootrootYACC: error message Usage: YACC [options] filename Options: -b file_prefix set filename prefix (default "y.") -B create a backtracking parser -d write definitions (.tab.h) -h print this help-message -H defines_file write definitions to defines_file -i write interface (y.tab.i) -g write a graphical description -l suppress #line directives -L enable position processing, e.g., "%locations" -o output_file (default ".tab.c") -p symbol_prefix set symbol prefix (default "yy") -P create a reentrant parser, e.g., "%pure-parser" -r produce separate code and table files (y.code.c) -s suppress #define's for quoted names in %token lines -t add debugging support -v write description (y.output) -V show version information and exit Long options: --defines -H --file-prefix -b --graph -g --help -h --name-prefix -p --no-lines -l --output -o --version -V byacc-20221106/test/btyacc/err_syntax17.tab.h0000644000000000000000000000000012314147323017226 0ustar rootrootbyacc-20221106/test/btyacc/defines3.error0000644000000000000000000000000013501474556016527 0ustar rootrootbyacc-20221106/test/btyacc/rename_debug.error0000644000000000000000000000000012321224351017425 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax20.error0000644000000000000000000000005012314147323017362 0ustar rootrootYACC: w - the symbol recur is undefined byacc-20221106/test/btyacc/err_syntax10.error0000644000000000000000000000034412361053263017370 0ustar rootrootYACC: w - line 7 of "./err_syntax10.y", the type of '(' has been redeclared YACC: w - line 7 of "./err_syntax10.y", the type of '*' has been redeclared YACC: w - line 7 of "./err_syntax10.y", the type of '&' has been redeclared byacc-20221106/test/btyacc/help.output0000644000000000000000000000000013501467273016164 0ustar rootrootbyacc-20221106/test/btyacc/ok_syntax1.tab.h0000644000000000000000000000116114030125515016765 0ustar rootroot#ifndef _ok_syntax1__defines_h_ #define _ok_syntax1__defines_h_ #define DIGIT 257 #define LETTER 258 #define OCT1 259 #define HEX1 260 #define HEX2 261 #define HEX3 262 #define STR1 263 #define STR2 265 #define BELL 266 #define BS 267 #define NL 268 #define LF 269 #define CR 270 #define TAB 271 #define VT 272 #define UMINUS 273 #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 typedef union YYSTYPE { char * cval; int ival; double dval; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #endif /* _ok_syntax1__defines_h_ */ byacc-20221106/test/btyacc/rename_debug.c0000644000000000000000000011044714104035275016545 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #line 20 "rename_debug.c" #include "rename_debug.i" #include "rename_debug.h" typedef int YYINT; static const YYINT yylhs[] = { -1, 0, }; static const YYINT yylen[] = { 2, 1, }; static const YYINT yydefred[] = { 0, 1, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT yystos[] = { 0, 256, 258, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT yydgoto[] = { 2, }; static const YYINT yysindex[] = { -256, 0, 0, }; static const YYINT yyrindex[] = { 0, 0, 0, }; #if YYBTYACC static const YYINT yycindex[] = { 0, 0, 0, }; #endif static const YYINT yygindex[] = { 0, }; #define YYTABLESIZE 0 static const YYINT yytable[] = { 1, }; static const YYINT yycheck[] = { 256, }; #if YYBTYACC static const YYINT yyctable[] = { -1, }; #endif #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 1 #endif #define YYMAXTOKEN 256 #define YYUNDFTOKEN 259 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const yyname[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","$accept","S","illegal-symbol", }; static const char *const yyrule[] = { "$accept : S", "S : error", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 12 "code_debug.y" #include #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } #line 241 "rename_debug.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/inherit1.error0000644000000000000000000000000012315230212016527 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax1.output0000644000000000000000000000000012314147323017503 0ustar rootrootbyacc-20221106/test/btyacc/calc_code_requires.error0000644000000000000000000000000013565110447020636 0ustar rootrootbyacc-20221106/test/btyacc/no_output2.error0000644000000000000000000000236014102077544017152 0ustar rootrootYACC: error message Usage: YACC [options] filename Options: -b file_prefix set filename prefix (default "y.") -B create a backtracking parser -d write definitions (.tab.h) -h print this help-message -H defines_file write definitions to defines_file -i write interface (y.tab.i) -g write a graphical description -l suppress #line directives -L enable position processing, e.g., "%locations" -o output_file (default ".tab.c") -p symbol_prefix set symbol prefix (default "yy") -P create a reentrant parser, e.g., "%pure-parser" -r produce separate code and table files (y.code.c) -s suppress #define's for quoted names in %token lines -t add debugging support -v write description (y.output) -V show version information and exit Long options: --defines -H --file-prefix -b --graph -g --help -h --name-prefix -p --no-lines -l --output -o --version -V byacc-20221106/test/btyacc/err_syntax7a.output0000644000000000000000000000000012314147323017652 0ustar rootrootbyacc-20221106/test/btyacc/no_output1.output0000644000000000000000000000000013501467273017351 0ustar rootrootbyacc-20221106/test/btyacc/code_error.tab.h0000644000000000000000000000013012312171121016776 0ustar rootroot#ifndef _error__defines_h_ #define _error__defines_h_ #endif /* _error__defines_h_ */ byacc-20221106/test/btyacc/err_syntax17.tab.c0000644000000000000000000000067213726503203017241 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/calc.tab.c0000644000000000000000000013463714104035275015606 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse calc_parse #endif /* yyparse */ #ifndef yylex #define yylex calc_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc_error #endif /* yyerror */ #ifndef yychar #define yychar calc_char #endif /* yychar */ #ifndef yyval #define yyval calc_val #endif /* yyval */ #ifndef yylval #define yylval calc_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc_len #endif /* yylen */ #ifndef yydefred #define yydefred calc_defred #endif /* yydefred */ #ifndef yystos #define yystos calc_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto calc_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc_table #endif /* yytable */ #ifndef yycheck #define yycheck calc_check #endif /* yycheck */ #ifndef yyname #define yyname calc_name #endif /* yyname */ #ifndef yyrule #define yyrule calc_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex calc_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable calc_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "calc_" #define YYPURE 0 #line 2 "calc.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 131 "calc.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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT calc_stos[] = { 0, 261, 256, 257, 258, 45, 40, 262, 263, 264, 10, 61, 258, 263, 263, 10, 124, 38, 43, 45, 42, 47, 37, 257, 263, 41, 263, 263, 263, 263, 263, 263, 263, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT calc_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; #if YYBTYACC static const YYINT calc_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT calc_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #if YYBTYACC static const YYINT calc_ctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number", "illegal-symbol", }; static const char *const calc_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 66 "calc.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 511 "calc.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 28 "calc.y" { yyerrok ; } #line 1184 "calc.tab.c" break; case 4: #line 32 "calc.y" { printf("%d\n",yystack.l_mark[0]);} #line 1189 "calc.tab.c" break; case 5: #line 34 "calc.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1194 "calc.tab.c" break; case 6: #line 38 "calc.y" { yyval = yystack.l_mark[-1]; } #line 1199 "calc.tab.c" break; case 7: #line 40 "calc.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1204 "calc.tab.c" break; case 8: #line 42 "calc.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1209 "calc.tab.c" break; case 9: #line 44 "calc.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1214 "calc.tab.c" break; case 10: #line 46 "calc.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1219 "calc.tab.c" break; case 11: #line 48 "calc.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1224 "calc.tab.c" break; case 12: #line 50 "calc.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1229 "calc.tab.c" break; case 13: #line 52 "calc.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1234 "calc.tab.c" break; case 14: #line 54 "calc.y" { yyval = - yystack.l_mark[0]; } #line 1239 "calc.tab.c" break; case 15: #line 56 "calc.y" { yyval = regs[yystack.l_mark[0]]; } #line 1244 "calc.tab.c" break; case 17: #line 61 "calc.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1249 "calc.tab.c" break; case 18: #line 63 "calc.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1254 "calc.tab.c" break; #line 1256 "calc.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_inherit5.tab.h0000644000000000000000000000000012315230212017246 0ustar rootrootbyacc-20221106/test/btyacc/code_calc.tab.h0000644000000000000000000000026312723664633016603 0ustar rootroot#ifndef _calc__defines_h_ #define _calc__defines_h_ #define DIGIT 257 #define LETTER 258 #define UMINUS 259 #undef yytname #define yytname yyname #endif /* _calc__defines_h_ */ byacc-20221106/test/btyacc/btyacc_destroy1.output0000644000000000000000000000653112413642516020346 0ustar rootroot 0 $accept : declaration $end 1 declaration : class type namelist '(' class ',' type ')' 2 | type locnamelist '(' class ')' 3 class : GLOBAL 4 | LOCAL 5 type : REAL 6 | INTEGER 7 namelist : namelist NAME 8 | NAME 9 locnamelist : namelist '(' LOCAL ',' type ')' state 0 $accept : . declaration $end (0) GLOBAL shift 1 LOCAL shift 2 REAL shift 3 INTEGER shift 4 . error declaration goto 5 class goto 6 type goto 7 state 1 class : GLOBAL . (3) . reduce 3 state 2 class : LOCAL . (4) . reduce 4 state 3 type : REAL . (5) . reduce 5 state 4 type : INTEGER . (6) . reduce 6 state 5 $accept : declaration . $end (0) $end accept state 6 declaration : class . type namelist '(' class ',' type ')' (1) REAL shift 3 INTEGER shift 4 . error type goto 8 state 7 declaration : type . locnamelist '(' class ')' (2) NAME shift 9 . error locnamelist goto 10 namelist goto 11 state 8 declaration : class type . namelist '(' class ',' type ')' (1) NAME shift 9 . error namelist goto 12 state 9 namelist : NAME . (8) . reduce 8 state 10 declaration : type locnamelist . '(' class ')' (2) '(' shift 13 . error state 11 namelist : namelist . NAME (7) locnamelist : namelist . '(' LOCAL ',' type ')' (9) NAME shift 14 '(' shift 15 . error state 12 declaration : class type namelist . '(' class ',' type ')' (1) namelist : namelist . NAME (7) NAME shift 14 '(' shift 16 . error state 13 declaration : type locnamelist '(' . class ')' (2) GLOBAL shift 1 LOCAL shift 2 . error class goto 17 state 14 namelist : namelist NAME . (7) . reduce 7 state 15 locnamelist : namelist '(' . LOCAL ',' type ')' (9) LOCAL shift 18 . error state 16 declaration : class type namelist '(' . class ',' type ')' (1) GLOBAL shift 1 LOCAL shift 2 . error class goto 19 state 17 declaration : type locnamelist '(' class . ')' (2) ')' shift 20 . error state 18 locnamelist : namelist '(' LOCAL . ',' type ')' (9) ',' shift 21 . error state 19 declaration : class type namelist '(' class . ',' type ')' (1) ',' shift 22 . error state 20 declaration : type locnamelist '(' class ')' . (2) . reduce 2 state 21 locnamelist : namelist '(' LOCAL ',' . type ')' (9) REAL shift 3 INTEGER shift 4 . error type goto 23 state 22 declaration : class type namelist '(' class ',' . type ')' (1) REAL shift 3 INTEGER shift 4 . error type goto 24 state 23 locnamelist : namelist '(' LOCAL ',' type . ')' (9) ')' shift 25 . error state 24 declaration : class type namelist '(' class ',' type . ')' (1) ')' shift 26 . error state 25 locnamelist : namelist '(' LOCAL ',' type ')' . (9) . reduce 9 state 26 declaration : class type namelist '(' class ',' type ')' . (1) . reduce 1 10 terminals, 6 nonterminals 10 grammar rules, 27 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 GLOBAL 3 258 LOCAL 4 259 REAL 5 260 INTEGER 6 261 NAME 7 40 '(' 8 44 ',' 9 41 ')' 10 262 $accept 11 263 declaration 12 264 locnamelist 13 265 class 14 266 type 15 267 namelist byacc-20221106/test/btyacc/error.tab.h0000644000000000000000000000013012312171121016004 0ustar rootroot#ifndef _error__defines_h_ #define _error__defines_h_ #endif /* _error__defines_h_ */ byacc-20221106/test/btyacc/inherit2.output0000644000000000000000000000446512723664634017010 0ustar rootroot 0 $accept : declaration $end 1 $$1 : 2 $$2 : 3 declaration : class type $$1 $$2 namelist 4 | type locnamelist 5 class : GLOBAL 6 | LOCAL 7 type : REAL 8 | INTEGER 9 namelist : namelist NAME 10 | NAME 11 $$3 : 12 locnamelist : $$3 $$2 namelist state 0 $accept : . declaration $end (0) GLOBAL shift 1 LOCAL shift 2 REAL shift 3 INTEGER shift 4 . error declaration goto 5 class goto 6 type goto 7 state 1 class : GLOBAL . (5) . reduce 5 state 2 class : LOCAL . (6) . reduce 6 state 3 type : REAL . (7) . reduce 7 state 4 type : INTEGER . (8) . reduce 8 state 5 $accept : declaration . $end (0) $end accept state 6 declaration : class . type $$1 $$2 namelist (3) REAL shift 3 INTEGER shift 4 . error type goto 8 state 7 declaration : type . locnamelist (4) $$3 : . (11) . reduce 11 locnamelist goto 9 $$3 goto 10 state 8 declaration : class type . $$1 $$2 namelist (3) $$1 : . (1) . reduce 1 $$1 goto 11 state 9 declaration : type locnamelist . (4) . reduce 4 state 10 locnamelist : $$3 . $$2 namelist (12) $$2 : . (2) . reduce 2 $$2 goto 12 state 11 declaration : class type $$1 . $$2 namelist (3) $$2 : . (2) . reduce 2 $$2 goto 13 state 12 locnamelist : $$3 $$2 . namelist (12) NAME shift 14 . error namelist goto 15 state 13 declaration : class type $$1 $$2 . namelist (3) NAME shift 14 . error namelist goto 16 state 14 namelist : NAME . (10) . reduce 10 state 15 namelist : namelist . NAME (9) locnamelist : $$3 $$2 namelist . (12) NAME shift 17 $end reduce 12 state 16 declaration : class type $$1 $$2 namelist . (3) namelist : namelist . NAME (9) NAME shift 17 $end reduce 3 state 17 namelist : namelist NAME . (9) . reduce 9 7 terminals, 9 nonterminals 13 grammar rules, 18 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 GLOBAL 3 258 LOCAL 4 259 REAL 5 260 INTEGER 6 261 NAME 7 262 $accept 8 263 declaration 9 264 namelist 10 265 locnamelist 11 266 class 12 267 type 13 268 $$1 14 269 $$2 15 270 $$3 byacc-20221106/test/btyacc/calc_code_all.error0000644000000000000000000000000013565110447017547 0ustar rootrootbyacc-20221106/test/btyacc/quote_calc3.error0000644000000000000000000000004112313700136017220 0ustar rootrootYACC: 54 shift/reduce conflicts. byacc-20221106/test/btyacc/ok_syntax1.output0000644000000000000000000001731212321234457017345 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '\n' reduce 15 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '\n' reduce 16 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 13 '|' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 12 '|' reduce 12 '&' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 7 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 8 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 42 terminals, 5 nonterminals 19 grammar rules, 33 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 DIGIT 3 258 LETTER 4 259 OCT1 5 127 '\177' 6 260 HEX1 7 255 '\377' 8 261 HEX2 9 262 HEX3 10 263 STR1 11 264 "\177\177\\\n" 12 265 STR2 13 266 BELL 14 7 '\a' 15 267 BS 16 8 '\b' 17 268 NL 18 10 '\n' 19 269 LF 20 12 '\f' 21 270 CR 22 13 '\r' 23 271 TAB 24 9 '\t' 25 272 VT 26 11 '\v' 27 64 '@' 28 126 '~' 29 94 '^' 30 35 '#' 31 124 '|' 32 38 '&' 33 43 '+' 34 45 '-' 35 42 '*' 36 47 '/' 37 37 '%' 38 273 UMINUS 39 61 '=' 40 40 '(' 41 41 ')' 42 274 $accept 43 275 list 44 276 stat 45 277 expr 46 278 number byacc-20221106/test/btyacc/err_inherit2.output0000644000000000000000000000000012315230212017607 0ustar rootrootbyacc-20221106/test/btyacc/quote_calc-s.error0000644000000000000000000000004112313700136017375 0ustar rootrootYACC: 54 shift/reduce conflicts. byacc-20221106/test/btyacc/err_syntax21.error0000644000000000000000000000006712361053263017374 0ustar rootrootYACC: e - line 12 of "./err_syntax21.y", $0 is untyped byacc-20221106/test/btyacc/calc.tab.h0000644000000000000000000000021512312171120015560 0ustar rootroot#ifndef _calc__defines_h_ #define _calc__defines_h_ #define DIGIT 257 #define LETTER 258 #define UMINUS 259 #endif /* _calc__defines_h_ */ byacc-20221106/test/btyacc/err_syntax22.tab.h0000644000000000000000000000000012314147323017222 0ustar rootrootbyacc-20221106/test/btyacc/calc2.output0000644000000000000000000001630312312171121016214 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 DIGIT 3 258 LETTER 4 124 '|' 5 38 '&' 6 43 '+' 7 45 '-' 8 42 '*' 9 47 '/' 10 37 '%' 11 259 UMINUS 12 10 '\n' 13 61 '=' 14 40 '(' 15 41 ')' 16 260 $accept 17 261 list 18 262 stat 19 263 expr 20 264 number byacc-20221106/test/btyacc/calc_code_provides.error0000644000000000000000000000000013565110447020632 0ustar rootrootbyacc-20221106/test/btyacc/calc1.tab.c0000644000000000000000000014724514104035275015666 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse calc1_parse #endif /* yyparse */ #ifndef yylex #define yylex calc1_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc1_error #endif /* yyerror */ #ifndef yychar #define yychar calc1_char #endif /* yychar */ #ifndef yyval #define yyval calc1_val #endif /* yyval */ #ifndef yylval #define yylval calc1_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc1_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc1_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc1_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc1_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc1_len #endif /* yylen */ #ifndef yydefred #define yydefred calc1_defred #endif /* yydefred */ #ifndef yystos #define yystos calc1_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto calc1_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc1_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc1_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc1_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc1_table #endif /* yytable */ #ifndef yycheck #define yycheck calc1_check #endif /* yycheck */ #ifndef yyname #define yyname calc1_name #endif /* yyname */ #ifndef yyrule #define yyrule calc1_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex calc1_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable calc1_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "calc1_" #define YYPURE 0 #line 2 "calc1.y" /* http://dinosaur.compilertools.net/yacc/index.html */ #include #include #include #include typedef struct interval { double lo, hi; } INTERVAL; INTERVAL vmul(double, double, INTERVAL); INTERVAL vdiv(double, double, INTERVAL); extern int yylex(void); static void yyerror(const char *s); int dcheck(INTERVAL); double dreg[26]; INTERVAL vreg[26]; #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #line 31 "calc1.y" typedef union YYSTYPE { int ival; double dval; INTERVAL vval; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 161 "calc1.tab.c" /* 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 DREG 257 #define VREG 258 #define CONST 259 #define UMINUS 260 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc1_lhs[] = { -1, 3, 3, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; static const YYINT calc1_len[] = { 2, 0, 2, 2, 2, 4, 4, 2, 1, 1, 3, 3, 3, 3, 2, 3, 1, 5, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, }; static const YYINT calc1_defred[] = { 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 7, 0, 0, 9, 18, 14, 27, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 15, 0, 28, 0, 0, 0, 0, 12, 24, 13, 26, 0, 0, 23, 25, 14, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, 12, 13, 17, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT calc1_stos[] = { 0, 256, 257, 258, 259, 45, 40, 262, 263, 264, 10, 61, 61, 257, 258, 263, 264, 263, 264, 43, 45, 42, 47, 10, 43, 45, 42, 47, 10, 45, 40, 263, 263, 264, 41, 44, 41, 263, 264, 263, 264, 263, 264, 263, 264, 264, 264, 264, 264, 263, 263, 43, 45, 42, 47, 10, 10, 263, 263, 263, 263, 263, 41, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT calc1_dgoto[] = { 7, 32, 9, 0, }; static const YYINT calc1_sindex[] = { -40, -8, -48, -47, 0, -37, -37, 0, 2, 17, 0, -34, -37, 0, 0, 0, 0, -25, 90, -37, -37, -37, -37, 0, -37, -37, -37, -37, 0, -34, -34, 25, 125, 31, 0, -34, 0, -11, 37, -11, 37, 0, 0, 0, 0, 37, 37, 0, 0, 0, 111, -34, -34, -34, -34, 0, 0, 118, 69, 69, 0, 0, 0, }; static const YYINT calc1_rindex[] = { 0, 0, 38, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9, 0, 0, 0, 0, 51, -3, 56, 61, 0, 0, 0, 0, 67, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 83, 0, 0, 0, }; #if YYBTYACC static const YYINT calc1_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT calc1_gindex[] = { 0, 4, 124, 0, }; #define YYTABLESIZE 225 static const YYINT calc1_table[] = { 6, 16, 10, 6, 8, 5, 30, 20, 5, 15, 17, 29, 23, 11, 12, 31, 34, 21, 19, 35, 20, 0, 22, 37, 39, 41, 43, 28, 0, 0, 0, 21, 16, 49, 50, 55, 22, 0, 20, 57, 20, 56, 20, 0, 21, 19, 0, 20, 9, 22, 0, 0, 0, 0, 18, 58, 59, 60, 61, 26, 24, 10, 25, 0, 27, 0, 11, 53, 51, 0, 52, 22, 54, 26, 24, 0, 25, 19, 27, 26, 9, 9, 21, 9, 27, 9, 18, 18, 10, 18, 0, 18, 10, 11, 10, 10, 10, 11, 0, 11, 11, 11, 22, 0, 22, 0, 22, 0, 19, 0, 19, 53, 19, 21, 0, 21, 54, 21, 0, 10, 0, 10, 0, 10, 11, 0, 11, 0, 11, 16, 18, 36, 26, 24, 0, 25, 33, 27, 0, 0, 0, 0, 0, 38, 40, 42, 44, 0, 45, 46, 47, 48, 34, 53, 51, 0, 52, 0, 54, 62, 53, 51, 0, 52, 0, 54, 0, 21, 19, 0, 20, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 13, 14, 4, 13, 0, 4, }; static const YYINT calc1_check[] = { 40, 10, 10, 40, 0, 45, 40, 10, 45, 5, 6, 45, 10, 61, 61, 11, 41, 42, 43, 44, 45, -1, 47, 19, 20, 21, 22, 10, -1, -1, -1, 42, 41, 29, 30, 10, 47, -1, 41, 35, 43, 10, 45, -1, 42, 43, -1, 45, 10, 47, -1, -1, -1, -1, 10, 51, 52, 53, 54, 42, 43, 10, 45, -1, 47, -1, 10, 42, 43, -1, 45, 10, 47, 42, 43, -1, 45, 10, 47, 42, 42, 43, 10, 45, 47, 47, 42, 43, 10, 45, -1, 47, 41, 10, 43, 44, 45, 41, -1, 43, 44, 45, 41, -1, 43, -1, 45, -1, 41, -1, 43, 42, 45, 41, -1, 43, 47, 45, -1, 41, -1, 43, -1, 45, 41, -1, 43, -1, 45, 5, 6, 41, 42, 43, -1, 45, 12, 47, -1, -1, -1, -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, 41, 42, 43, -1, 45, -1, 47, 41, 42, 43, -1, 45, -1, 47, -1, 42, 43, -1, 45, -1, 47, -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, 256, 257, 258, 259, 257, 258, 259, 257, -1, 259, }; #if YYBTYACC static const YYINT calc1_ctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; #endif #define YYFINAL 7 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 260 #define YYUNDFTOKEN 266 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc1_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0, 0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, "error","DREG","VREG","CONST","UMINUS","$accept","line","dexp","vexp","lines", "illegal-symbol", }; static const char *const calc1_rule[] = { "$accept : line", "lines :", "lines : lines line", "line : dexp '\\n'", "line : vexp '\\n'", "line : DREG '=' dexp '\\n'", "line : VREG '=' vexp '\\n'", "line : error '\\n'", "dexp : CONST", "dexp : DREG", "dexp : dexp '+' dexp", "dexp : dexp '-' dexp", "dexp : dexp '*' dexp", "dexp : dexp '/' dexp", "dexp : '-' dexp", "dexp : '(' dexp ')'", "vexp : dexp", "vexp : '(' dexp ',' dexp ')'", "vexp : VREG", "vexp : vexp '+' vexp", "vexp : dexp '+' vexp", "vexp : vexp '-' vexp", "vexp : dexp '-' vexp", "vexp : vexp '*' vexp", "vexp : dexp '*' vexp", "vexp : vexp '/' vexp", "vexp : dexp '/' vexp", "vexp : '-' vexp", "vexp : '(' vexp ')'", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 176 "calc1.y" /* beginning of subroutines section */ #define BSZ 50 /* buffer size for floating point numbers */ /* lexical analysis */ static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { int c; while ((c = getchar()) == ' ') { /* skip over blanks */ } if (isupper(c)) { yylval.ival = c - 'A'; return (VREG); } if (islower(c)) { yylval.ival = c - 'a'; return (DREG); } if (isdigit(c) || c == '.') { /* gobble up digits, points, exponents */ char buf[BSZ + 1], *cp = buf; int dot = 0, expr = 0; for (; (cp - buf) < BSZ; ++cp, c = getchar()) { *cp = (char) c; if (isdigit(c)) continue; if (c == '.') { if (dot++ || expr) return ('.'); /* will cause syntax error */ continue; } if (c == 'e') { if (expr++) return ('e'); /* will cause syntax error */ continue; } /* end of number */ break; } *cp = '\0'; if ((cp - buf) >= BSZ) printf("constant too long: truncated\n"); else ungetc(c, stdin); /* push back last char read */ yylval.dval = atof(buf); return (CONST); } return (c); } static INTERVAL hilo(double a, double b, double c, double d) { /* returns the smallest interval containing a, b, c, and d */ /* used by *, / routines */ INTERVAL v; if (a > b) { v.hi = a; v.lo = b; } else { v.hi = b; v.lo = a; } if (c > d) { if (c > v.hi) v.hi = c; if (d < v.lo) v.lo = d; } else { if (d > v.hi) v.hi = d; if (c < v.lo) v.lo = c; } return (v); } INTERVAL vmul(double a, double b, INTERVAL v) { return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo)); } int dcheck(INTERVAL v) { if (v.hi >= 0. && v.lo <= 0.) { printf("divisor interval contains 0.\n"); return (1); } return (0); } INTERVAL vdiv(double a, double b, INTERVAL v) { return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo)); } #line 655 "calc1.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 57 "calc1.y" { (void) printf("%15.8f\n", yystack.l_mark[-1].dval); } #line 1330 "calc1.tab.c" break; case 4: #line 61 "calc1.y" { (void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi); } #line 1337 "calc1.tab.c" break; case 5: #line 65 "calc1.y" { dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval; } #line 1344 "calc1.tab.c" break; case 6: #line 69 "calc1.y" { vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval; } #line 1351 "calc1.tab.c" break; case 7: #line 73 "calc1.y" { yyerrok; } #line 1358 "calc1.tab.c" break; case 9: #line 80 "calc1.y" { yyval.dval = dreg[yystack.l_mark[0].ival]; } #line 1365 "calc1.tab.c" break; case 10: #line 84 "calc1.y" { yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval; } #line 1372 "calc1.tab.c" break; case 11: #line 88 "calc1.y" { yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval; } #line 1379 "calc1.tab.c" break; case 12: #line 92 "calc1.y" { yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval; } #line 1386 "calc1.tab.c" break; case 13: #line 96 "calc1.y" { yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval; } #line 1393 "calc1.tab.c" break; case 14: #line 100 "calc1.y" { yyval.dval = -yystack.l_mark[0].dval; } #line 1400 "calc1.tab.c" break; case 15: #line 104 "calc1.y" { yyval.dval = yystack.l_mark[-1].dval; } #line 1407 "calc1.tab.c" break; case 16: #line 110 "calc1.y" { yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval; } #line 1414 "calc1.tab.c" break; case 17: #line 114 "calc1.y" { yyval.vval.lo = yystack.l_mark[-3].dval; yyval.vval.hi = yystack.l_mark[-1].dval; if ( yyval.vval.lo > yyval.vval.hi ) { (void) printf("interval out of order\n"); YYERROR; } } #line 1427 "calc1.tab.c" break; case 18: #line 124 "calc1.y" { yyval.vval = vreg[yystack.l_mark[0].ival]; } #line 1434 "calc1.tab.c" break; case 19: #line 128 "calc1.y" { yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi; yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo; } #line 1442 "calc1.tab.c" break; case 20: #line 133 "calc1.y" { yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi; yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo; } #line 1450 "calc1.tab.c" break; case 21: #line 138 "calc1.y" { yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo; yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi; } #line 1458 "calc1.tab.c" break; case 22: #line 143 "calc1.y" { yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo; yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi; } #line 1466 "calc1.tab.c" break; case 23: #line 148 "calc1.y" { yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); } #line 1473 "calc1.tab.c" break; case 24: #line 152 "calc1.y" { yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); } #line 1480 "calc1.tab.c" break; case 25: #line 156 "calc1.y" { if (dcheck(yystack.l_mark[0].vval)) YYERROR; yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); } #line 1488 "calc1.tab.c" break; case 26: #line 161 "calc1.y" { if (dcheck ( yystack.l_mark[0].vval )) YYERROR; yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); } #line 1496 "calc1.tab.c" break; case 27: #line 166 "calc1.y" { yyval.vval.hi = -yystack.l_mark[0].vval.lo; yyval.vval.lo = -yystack.l_mark[0].vval.hi; } #line 1504 "calc1.tab.c" break; case 28: #line 171 "calc1.y" { yyval.vval = yystack.l_mark[-1].vval; } #line 1511 "calc1.tab.c" break; #line 1513 "calc1.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_syntax4.output0000644000000000000000000000000012314147323017506 0ustar rootrootbyacc-20221106/test/btyacc/nostdin.error0000644000000000000000000000233414102077543016512 0ustar rootrootUsage: YACC [options] filename Options: -b file_prefix set filename prefix (default "y.") -B create a backtracking parser -d write definitions (.tab.h) -h print this help-message -H defines_file write definitions to defines_file -i write interface (y.tab.i) -g write a graphical description -l suppress #line directives -L enable position processing, e.g., "%locations" -o output_file (default ".tab.c") -p symbol_prefix set symbol prefix (default "yy") -P create a reentrant parser, e.g., "%pure-parser" -r produce separate code and table files (y.code.c) -s suppress #define's for quoted names in %token lines -t add debugging support -v write description (y.output) -V show version information and exit Long options: --defines -H --file-prefix -b --graph -g --help -h --name-prefix -p --no-lines -l --output -o --version -V byacc-20221106/test/btyacc/err_syntax7b.error0000644000000000000000000000013712361053263017460 0ustar rootrootYACC: e - line 6 of "./err_syntax7b.y", illegal character %token '\x.' ^ byacc-20221106/test/btyacc/err_syntax7.tab.c0000644000000000000000000000067213726503203017160 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/err_syntax9.output0000644000000000000000000000000012314147323017513 0ustar rootrootbyacc-20221106/test/btyacc/stdin1.error0000644000000000000000000000000013501467273016227 0ustar rootrootbyacc-20221106/test/btyacc/pure_error.output0000644000000000000000000000060512312171122017413 0ustar rootroot 0 $accept : S $end 1 S : error state 0 $accept : . S $end (0) error shift 1 . error S goto 2 state 1 S : error . (1) . reduce 1 state 2 $accept : S . $end (0) $end accept 2 terminals, 2 nonterminals 2 grammar rules, 3 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 $accept 3 258 S byacc-20221106/test/btyacc/grammar.tab.h0000644000000000000000000000154112312171121016310 0ustar rootroot#ifndef _grammar__defines_h_ #define _grammar__defines_h_ #define T_IDENTIFIER 257 #define T_TYPEDEF_NAME 258 #define T_DEFINE_NAME 259 #define T_AUTO 260 #define T_EXTERN 261 #define T_REGISTER 262 #define T_STATIC 263 #define T_TYPEDEF 264 #define T_INLINE 265 #define T_EXTENSION 266 #define T_CHAR 267 #define T_DOUBLE 268 #define T_FLOAT 269 #define T_INT 270 #define T_VOID 271 #define T_LONG 272 #define T_SHORT 273 #define T_SIGNED 274 #define T_UNSIGNED 275 #define T_ENUM 276 #define T_STRUCT 277 #define T_UNION 278 #define T_Bool 279 #define T_Complex 280 #define T_Imaginary 281 #define T_TYPE_QUALIFIER 282 #define T_BRACKETS 283 #define T_LBRACE 284 #define T_MATCHRBRACE 285 #define T_ELLIPSIS 286 #define T_INITIALIZER 287 #define T_STRING_LITERAL 288 #define T_ASM 289 #define T_ASMARG 290 #define T_VA_DCL 291 #endif /* _grammar__defines_h_ */ byacc-20221106/test/btyacc/err_inherit4.tab.h0000644000000000000000000000153314030125514017265 0ustar rootroot#ifndef _err_inherit4__defines_h_ #define _err_inherit4__defines_h_ #define GLOBAL 257 #define LOCAL 258 #define REAL 259 #define INTEGER 260 #define NAME 261 #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 typedef union YYSTYPE { class cval; type tval; namelist * nlist; name id; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ extern YYSTYPE err_inherit4_lval; #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED /* Default: YYLTYPE is the text position type. */ typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; unsigned source; } YYLTYPE; #define YYLTYPE_IS_DECLARED 1 #endif #define YYRHSLOC(rhs, k) ((rhs)[k]) extern YYLTYPE err_inherit4_lloc; #endif /* _err_inherit4__defines_h_ */ byacc-20221106/test/btyacc/inherit1.tab.c0000644000000000000000000012341714104035275016421 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse inherit1_parse #endif /* yyparse */ #ifndef yylex #define yylex inherit1_lex #endif /* yylex */ #ifndef yyerror #define yyerror inherit1_error #endif /* yyerror */ #ifndef yychar #define yychar inherit1_char #endif /* yychar */ #ifndef yyval #define yyval inherit1_val #endif /* yyval */ #ifndef yylval #define yylval inherit1_lval #endif /* yylval */ #ifndef yydebug #define yydebug inherit1_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs inherit1_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag inherit1_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs inherit1_lhs #endif /* yylhs */ #ifndef yylen #define yylen inherit1_len #endif /* yylen */ #ifndef yydefred #define yydefred inherit1_defred #endif /* yydefred */ #ifndef yystos #define yystos inherit1_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto inherit1_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex inherit1_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex inherit1_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex inherit1_gindex #endif /* yygindex */ #ifndef yytable #define yytable inherit1_table #endif /* yytable */ #ifndef yycheck #define yycheck inherit1_check #endif /* yycheck */ #ifndef yyname #define yyname inherit1_name #endif /* yyname */ #ifndef yyrule #define yyrule inherit1_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex inherit1_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable inherit1_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "inherit1_" #define YYPURE 0 #line 2 "inherit1.y" #include typedef enum {cGLOBAL, cLOCAL} class; typedef enum {tREAL, tINTEGER} type; typedef char * name; struct symbol { class c; type t; name id; }; typedef struct symbol symbol; struct namelist { symbol *s; struct namelist *next; }; typedef struct namelist namelist; extern symbol *mksymbol(type t, class c, name id); #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) extern int YYLEX_DECL(); extern void YYERROR_DECL(); #endif #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #line 32 "inherit1.y" typedef union YYSTYPE { class cval; type tval; namelist * nlist; name id; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 157 "inherit1.tab.c" /* 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 GLOBAL 257 #define LOCAL 258 #define REAL 259 #define INTEGER 260 #define NAME 261 #define YYERRCODE 256 typedef int YYINT; static const YYINT inherit1_lhs[] = { -1, 0, 0, 3, 3, 4, 4, 1, 1, 5, 6, 2, }; static const YYINT inherit1_len[] = { 2, 3, 2, 1, 1, 1, 1, 2, 1, 0, 0, 3, }; static const YYINT inherit1_defred[] = { 0, 3, 4, 5, 6, 0, 0, 9, 0, 2, 10, 8, 0, 0, 7, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT inherit1_stos[] = { 0, 257, 258, 259, 260, 263, 266, 267, 267, 265, 268, 261, 264, 269, 261, 264, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT inherit1_dgoto[] = { 5, 12, 9, 6, 7, 10, 13, }; static const YYINT inherit1_sindex[] = { -257, 0, 0, 0, 0, 0, -255, 0, -254, 0, 0, 0, -253, -254, 0, -253, }; static const YYINT inherit1_rindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 9, }; #if YYBTYACC static const YYINT inherit1_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT inherit1_gindex[] = { 0, -3, 0, 0, 5, 0, 0, }; #define YYTABLESIZE 11 static const YYINT inherit1_table[] = { 1, 2, 3, 4, 3, 4, 1, 11, 14, 11, 15, 8, }; static const YYINT inherit1_check[] = { 257, 258, 259, 260, 259, 260, 0, 261, 261, 0, 13, 6, }; #if YYBTYACC static const YYINT inherit1_ctable[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; #endif #define YYFINAL 5 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 261 #define YYUNDFTOKEN 270 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const inherit1_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","GLOBAL","LOCAL","REAL","INTEGER", "NAME","$accept","declaration","namelist","locnamelist","class","type","$$1", "$$2","illegal-symbol", }; static const char *const inherit1_rule[] = { "$accept : declaration", "declaration : class type namelist", "declaration : type locnamelist", "class : GLOBAL", "class : LOCAL", "type : REAL", "type : INTEGER", "namelist : namelist NAME", "namelist : NAME", "$$1 :", "$$2 :", "locnamelist : $$1 $$2 namelist", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 74 "inherit1.y" extern int YYLEX_DECL(); extern void YYERROR_DECL(); #line 417 "inherit1.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 1: #line 44 "inherit1.y" { yyval.nlist = yystack.l_mark[0].nlist; } #line 1090 "inherit1.tab.c" break; case 2: #line 46 "inherit1.y" { yyval.nlist = yystack.l_mark[0].nlist; } #line 1095 "inherit1.tab.c" break; case 3: #line 49 "inherit1.y" { yyval.cval = cGLOBAL; } #line 1100 "inherit1.tab.c" break; case 4: #line 50 "inherit1.y" { yyval.cval = cLOCAL; } #line 1105 "inherit1.tab.c" break; case 5: #line 53 "inherit1.y" { yyval.tval = tREAL; } #line 1110 "inherit1.tab.c" break; case 6: #line 54 "inherit1.y" { yyval.tval = tINTEGER; } #line 1115 "inherit1.tab.c" break; case 7: #line 58 "inherit1.y" { yyval.nlist->s = mksymbol(yystack.l_mark[-2].tval, yystack.l_mark[-3].cval, yystack.l_mark[0].id); yyval.nlist->next = yystack.l_mark[-1].nlist; } #line 1122 "inherit1.tab.c" break; case 8: #line 62 "inherit1.y" { yyval.nlist->s = mksymbol(yystack.l_mark[-1].tval, yystack.l_mark[-2].cval, yystack.l_mark[0].id); yyval.nlist->next = NULL; } #line 1129 "inherit1.tab.c" break; case 9: #line 68 "inherit1.y" { yyval.cval = cLOCAL; } #line 1134 "inherit1.tab.c" break; case 10: #line 69 "inherit1.y" { yyval.tval = yystack.l_mark[-2].tval; } #line 1139 "inherit1.tab.c" break; case 11: #line 71 "inherit1.y" { yyval.nlist = yystack.l_mark[0].nlist; } #line 1144 "inherit1.tab.c" break; #line 1146 "inherit1.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/defines3.calc.h0000644000000000000000000000020413501474556016534 0ustar rootroot#ifndef _yy_defines_h_ #define _yy_defines_h_ #define DIGIT 257 #define LETTER 258 #define UMINUS 259 #endif /* _yy_defines_h_ */ byacc-20221106/test/btyacc/quote_calc.tab.c0000644000000000000000000013743014104035275017015 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse quote_calc_parse #endif /* yyparse */ #ifndef yylex #define yylex quote_calc_lex #endif /* yylex */ #ifndef yyerror #define yyerror quote_calc_error #endif /* yyerror */ #ifndef yychar #define yychar quote_calc_char #endif /* yychar */ #ifndef yyval #define yyval quote_calc_val #endif /* yyval */ #ifndef yylval #define yylval quote_calc_lval #endif /* yylval */ #ifndef yydebug #define yydebug quote_calc_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs quote_calc_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag quote_calc_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs quote_calc_lhs #endif /* yylhs */ #ifndef yylen #define yylen quote_calc_len #endif /* yylen */ #ifndef yydefred #define yydefred quote_calc_defred #endif /* yydefred */ #ifndef yystos #define yystos quote_calc_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto quote_calc_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex quote_calc_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex quote_calc_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex quote_calc_gindex #endif /* yygindex */ #ifndef yytable #define yytable quote_calc_table #endif /* yytable */ #ifndef yycheck #define yycheck quote_calc_check #endif /* yycheck */ #ifndef yyname #define yyname quote_calc_name #endif /* yyname */ #ifndef yyrule #define yyrule quote_calc_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex quote_calc_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable quote_calc_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "quote_calc_" #define YYPURE 0 #line 2 "quote_calc.y" # include # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); #line 131 "quote_calc.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 OP_ADD 257 #define ADD 258 #define OP_SUB 259 #define SUB 260 #define OP_MUL 261 #define MUL 262 #define OP_DIV 263 #define DIV 264 #define OP_MOD 265 #define MOD 266 #define OP_AND 267 #define AND 268 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #define YYERRCODE 256 typedef int YYINT; static const YYINT quote_calc_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT quote_calc_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT quote_calc_defred[] = { 1, 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, 0, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT quote_calc_stos[] = { 0, 273, 256, 259, 269, 270, 40, 274, 275, 276, 10, 270, 275, 61, 275, 10, 257, 259, 261, 263, 265, 267, 124, 269, 275, 41, 275, 275, 275, 275, 275, 275, 275, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT quote_calc_dgoto[] = { 1, 7, 8, 9, }; static const YYINT quote_calc_sindex[] = { 0, -38, 5, -36, 0, -51, -36, 7, -121, -248, 0, 0, -243, -36, -22, 0, -36, -36, -36, -36, -36, -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, -121, -243, }; static const YYINT quote_calc_rindex[] = { 0, 0, 0, 0, 0, -9, 0, 0, 13, -10, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, -3, -2, -1, 1, 2, 3, -4, }; #if YYBTYACC static const YYINT quote_calc_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT quote_calc_gindex[] = { 0, 0, 42, 0, }; #define YYTABLESIZE 258 static const YYINT quote_calc_table[] = { 16, 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, 10, 11, 12, 16, 10, 17, 15, 18, 25, 19, 23, 20, 4, 21, 5, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, }; static const YYINT quote_calc_check[] = { 10, 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, 10, 10, 10, 257, 10, 259, 10, 261, 41, 263, 269, 265, 10, 267, 10, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, 19, 20, 21, 22, -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, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, -1, 259, -1, 261, -1, 263, -1, 265, -1, 267, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, 259, -1, 259, -1, -1, -1, -1, -1, -1, -1, 269, 270, 269, 270, 257, -1, 259, -1, 261, -1, 263, -1, 265, -1, 267, -1, 257, 257, 259, 259, 261, 261, 263, 263, 265, 265, 267, 267, }; #if YYBTYACC static const YYINT quote_calc_ctable[] = { -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, -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, -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, -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, -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, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 271 #define YYUNDFTOKEN 277 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const quote_calc_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV", "\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS", "$accept","list","stat","expr","number","illegal-symbol", }; static const char *const quote_calc_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr OP_ADD expr", "expr : expr OP_SUB expr", "expr : expr OP_MUL expr", "expr : expr OP_DIV expr", "expr : expr OP_MOD expr", "expr : expr OP_AND expr", "expr : expr '|' expr", "expr : OP_SUB expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 73 "quote_calc.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 535 "quote_calc.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 35 "quote_calc.y" { yyerrok ; } #line 1208 "quote_calc.tab.c" break; case 4: #line 39 "quote_calc.y" { printf("%d\n",yystack.l_mark[0]);} #line 1213 "quote_calc.tab.c" break; case 5: #line 41 "quote_calc.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1218 "quote_calc.tab.c" break; case 6: #line 45 "quote_calc.y" { yyval = yystack.l_mark[-1]; } #line 1223 "quote_calc.tab.c" break; case 7: #line 47 "quote_calc.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1228 "quote_calc.tab.c" break; case 8: #line 49 "quote_calc.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1233 "quote_calc.tab.c" break; case 9: #line 51 "quote_calc.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1238 "quote_calc.tab.c" break; case 10: #line 53 "quote_calc.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1243 "quote_calc.tab.c" break; case 11: #line 55 "quote_calc.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1248 "quote_calc.tab.c" break; case 12: #line 57 "quote_calc.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1253 "quote_calc.tab.c" break; case 13: #line 59 "quote_calc.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1258 "quote_calc.tab.c" break; case 14: #line 61 "quote_calc.y" { yyval = - yystack.l_mark[0]; } #line 1263 "quote_calc.tab.c" break; case 15: #line 63 "quote_calc.y" { yyval = regs[yystack.l_mark[0]]; } #line 1268 "quote_calc.tab.c" break; case 17: #line 68 "quote_calc.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1273 "quote_calc.tab.c" break; case 18: #line 70 "quote_calc.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1278 "quote_calc.tab.c" break; #line 1280 "quote_calc.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/btyacc_destroy1.error0000644000000000000000000000000012413642516020120 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax7a.error0000644000000000000000000000014112361053263017452 0ustar rootrootYACC: e - line 6 of "./err_syntax7a.y", illegal character %token '\xfff' ^ byacc-20221106/test/btyacc/err_syntax24.output0000644000000000000000000000000012314147323017570 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax8.tab.c0000644000000000000000000000067213726503203017161 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/defines1.output0000644000000000000000000000000013501474556016734 0ustar rootrootbyacc-20221106/test/btyacc/no_code_c.output0000644000000000000000000000000013501467273017144 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax18.tab.c0000644000000000000000000011634114104035275017243 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse err_syntax18_parse #endif /* yyparse */ #ifndef yylex #define yylex err_syntax18_lex #endif /* yylex */ #ifndef yyerror #define yyerror err_syntax18_error #endif /* yyerror */ #ifndef yychar #define yychar err_syntax18_char #endif /* yychar */ #ifndef yyval #define yyval err_syntax18_val #endif /* yyval */ #ifndef yylval #define yylval err_syntax18_lval #endif /* yylval */ #ifndef yydebug #define yydebug err_syntax18_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs err_syntax18_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag err_syntax18_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs err_syntax18_lhs #endif /* yylhs */ #ifndef yylen #define yylen err_syntax18_len #endif /* yylen */ #ifndef yydefred #define yydefred err_syntax18_defred #endif /* yydefred */ #ifndef yystos #define yystos err_syntax18_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto err_syntax18_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex err_syntax18_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex err_syntax18_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex err_syntax18_gindex #endif /* yygindex */ #ifndef yytable #define yytable err_syntax18_table #endif /* yytable */ #ifndef yycheck #define yycheck err_syntax18_check #endif /* yycheck */ #ifndef yyname #define yyname err_syntax18_name #endif /* yyname */ #ifndef yyrule #define yyrule err_syntax18_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex err_syntax18_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable err_syntax18_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "err_syntax18_" #define YYPURE 0 #line 2 "err_syntax18.y" int yylex(void); static void yyerror(const char *); #line 124 "err_syntax18.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 YYERRCODE 256 typedef int YYINT; static const YYINT err_syntax18_lhs[] = { -1, 0, }; static const YYINT err_syntax18_len[] = { 2, 3, }; static const YYINT err_syntax18_defred[] = { 0, 0, 0, 0, 1, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT err_syntax18_stos[] = { 0, 40, 258, 258, 41, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT err_syntax18_dgoto[] = { 2, }; static const YYINT err_syntax18_sindex[] = { -40, -40, 0, -39, 0, }; static const YYINT err_syntax18_rindex[] = { 0, 0, 0, 0, 0, }; #if YYBTYACC static const YYINT err_syntax18_cindex[] = { 0, 0, 0, 0, 0, }; #endif static const YYINT err_syntax18_gindex[] = { 2, }; #define YYTABLESIZE 3 static const YYINT err_syntax18_table[] = { 1, 0, 4, 3, }; static const YYINT err_syntax18_check[] = { 40, -1, 41, 1, }; #if YYBTYACC static const YYINT err_syntax18_ctable[] = { -1, -1, -1, }; #endif #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 256 #define YYUNDFTOKEN 259 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const err_syntax18_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'('","')'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","$accept","expr", "illegal-symbol", }; static const char *const err_syntax18_rule[] = { "$accept : expr", "expr : '(' expr ')'", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 13 "err_syntax18.y" #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } #line 381 "err_syntax18.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 1: #line 9 "err_syntax18.y" { yyval = yystack.l_mark[1]; } #line 1054 "err_syntax18.tab.c" break; #line 1056 "err_syntax18.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/no_output.error0000644000000000000000000000005213501467273017070 0ustar rootrootYACC: f - cannot open "nosuchfile.output" byacc-20221106/test/btyacc/err_syntax26.output0000644000000000000000000000000012314147323017572 0ustar rootrootbyacc-20221106/test/btyacc/btyacc_demo.tab.c0000644000000000000000000023127014104035275017144 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 1 #define YYDEBUGSTR (yytrial ? YYPREFIX "debug(trial)" : YYPREFIX "debug") #ifndef yyparse #define yyparse demo_parse #endif /* yyparse */ #ifndef yylex #define yylex demo_lex #endif /* yylex */ #ifndef yyerror #define yyerror demo_error #endif /* yyerror */ #ifndef yychar #define yychar demo_char #endif /* yychar */ #ifndef yyval #define yyval demo_val #endif /* yyval */ #ifndef yylval #define yylval demo_lval #endif /* yylval */ #ifndef yydebug #define yydebug demo_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs demo_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag demo_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs demo_lhs #endif /* yylhs */ #ifndef yylen #define yylen demo_len #endif /* yylen */ #ifndef yydefred #define yydefred demo_defred #endif /* yydefred */ #ifndef yystos #define yystos demo_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto demo_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex demo_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex demo_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex demo_gindex #endif /* yygindex */ #ifndef yytable #define yytable demo_table #endif /* yytable */ #ifndef yycheck #define yycheck demo_check #endif /* yycheck */ #ifndef yyname #define yyname demo_name #endif /* yyname */ #ifndef yyrule #define yyrule demo_rule #endif /* yyrule */ #ifndef yyloc #define yyloc demo_loc #endif /* yyloc */ #ifndef yylloc #define yylloc demo_lloc #endif /* yylloc */ #if YYBTYACC #ifndef yycindex #define yycindex demo_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable demo_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "demo_" #define YYPURE 0 #line 15 "btyacc_demo.y" /* dummy types just for compile check */ typedef int Code; typedef int Decl_List; typedef int Expr; typedef int Expr_List; typedef int Scope; typedef int Type; enum Operator { ADD, SUB, MUL, MOD, DIV, DEREF }; typedef unsigned char bool; typedef struct Decl { Scope *scope; Type *type; bool (*istype)(void); } Decl; #include "btyacc_demo.tab.h" #include #include #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #line 36 "btyacc_demo.y" typedef union YYSTYPE { Scope *scope; Expr *expr; Expr_List *elist; Type *type; Decl *decl; Decl_List *dlist; Code *code; char *id; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 167 "btyacc_demo.tab.c" #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED /* Default: YYLTYPE is the text position type. */ typedef struct YYLTYPE { int first_line; int first_column; int last_line; int last_column; unsigned source; } YYLTYPE; #define YYLTYPE_IS_DECLARED 1 #endif #define YYRHSLOC(rhs, k) ((rhs)[k]) /* 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(YYLTYPE *loc, const char *s) #endif #ifndef YYERROR_CALL #define YYERROR_CALL(msg) yyerror(&yylloc, msg) #endif #ifndef YYDESTRUCT_DECL #define YYDESTRUCT_DECL() yydestruct(const char *msg, int psymb, YYSTYPE *val, YYLTYPE *loc) #endif #ifndef YYDESTRUCT_CALL #define YYDESTRUCT_CALL(msg, psymb, val, loc) yydestruct(msg, psymb, val, loc) #endif extern int YYPARSE_DECL(); #define PREFIX 257 #define POSTFIX 258 #define ID 259 #define CONSTANT 260 #define EXTERN 261 #define REGISTER 262 #define STATIC 263 #define CONST 264 #define VOLATILE 265 #define IF 266 #define THEN 267 #define ELSE 268 #define CLCL 269 #define YYERRCODE 256 typedef int YYINT; static const YYINT demo_lhs[] = { -1, 15, 15, 15, 12, 18, 0, 4, 19, 4, 2, 20, 2, 10, 10, 13, 13, 11, 11, 11, 11, 11, 14, 14, 21, 22, 3, 3, 8, 8, 23, 24, 8, 8, 8, 8, 16, 16, 17, 17, 9, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 25, 26, 5, 5, 27, 5, 6, 6, 7, }; static const YYINT demo_len[] = { 2, 0, 1, 3, 2, 0, 2, 0, 0, 3, 3, 0, 4, 1, 3, 0, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0, 5, 1, 0, 1, 0, 0, 5, 5, 5, 6, 0, 1, 4, 1, 2, 4, 4, 4, 4, 4, 3, 1, 1, 1, 2, 0, 0, 11, 8, 0, 2, 0, 3, 4, }; static const YYINT demo_defred[] = { 5, 0, 7, 0, 0, 19, 20, 21, 22, 23, 2, 9, 0, 13, 18, 17, 0, 15, 30, 29, 0, 0, 0, 0, 0, 31, 10, 24, 24, 24, 0, 14, 3, 16, 25, 0, 25, 0, 0, 8, 12, 0, 0, 0, 39, 0, 0, 0, 8, 47, 48, 0, 57, 0, 32, 0, 0, 15, 30, 0, 30, 30, 30, 30, 30, 34, 0, 0, 0, 46, 0, 0, 0, 0, 0, 59, 0, 38, 0, 0, 43, 45, 44, 0, 0, 49, 58, 0, 30, 50, 56, 0, 0, 0, 51, 0, 0, 52, 0, 53, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT demo_stos[] = { 0, 271, 289, 275, 290, 261, 262, 263, 264, 265, 269, 273, 281, 282, 283, 285, 286, 42, 40, 259, 274, 279, 290, 259, 284, 294, 59, 44, 40, 91, 291, 282, 269, 285, 292, 295, 292, 292, 292, 123, 278, 293, 279, 293, 280, 281, 287, 288, 42, 259, 260, 272, 290, 279, 41, 279, 279, 41, 44, 290, 43, 45, 42, 47, 37, 93, 277, 284, 294, 272, 294, 294, 294, 294, 294, 125, 290, 280, 272, 272, 272, 272, 272, 266, 272, 273, 276, 298, 40, 59, 278, 294, 272, 41, 267, 296, 276, 268, 297, 276, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT demo_dgoto[] = { 1, 84, 85, 20, 3, 86, 66, 40, 21, 44, 12, 13, 14, 24, 15, 16, 46, 47, 2, 22, 30, 34, 41, 25, 35, 95, 98, 87, }; static const YYINT demo_sindex[] = { 0, 0, 0, 0, -103, 0, 0, 0, 0, 0, 0, 0, -31, 0, 0, 0, -238, 0, 0, 0, 4, -36, -103, 0, -133, 0, 0, 0, 0, 0, -94, 0, 0, 0, 0, -40, 0, -103, -33, 0, 0, -40, -25, -40, 0, -31, 8, 15, 0, 0, 0, -2, 0, -36, 0, -36, -36, 0, 0, -33, 0, 0, 0, 0, 0, 0, -92, -133, -103, 0, -33, -33, -33, -33, -33, 0, -8, 0, 23, 23, 0, 0, 0, 11, 75, 0, 0, -94, 0, 0, 0, -33, 96, -194, 0, -8, 0, 0, -8, 0, }; static const YYINT demo_rindex[] = { 0, 0, 0, 1, -181, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, -39, -181, 12, -34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -5, 0, -11, 0, 0, 0, -17, 0, 28, 0, -41, 0, 47, 0, 0, 0, 0, 0, -13, 0, 18, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, -19, -27, -181, 0, 0, 0, 0, 0, 0, 0, -29, 0, 56, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -29, -30, 0, -29, 0, }; #if YYBTYACC static const YYINT demo_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 58, 0, 62, 0, -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -143, -147, 0, -134, 0, }; #endif static const YYINT demo_gindex[] = { 0, 9, 143, 0, 0, 50, 0, 63, 101, 83, 7, 130, 0, 98, 2, 0, 0, 0, 0, 19, 0, 10, 117, 66, 0, 0, 0, 0, }; #define YYTABLESIZE 286 static const YYINT demo_table[] = { 28, 6, 17, 28, 28, 27, 24, 24, 24, 48, 24, 17, 54, 35, 35, 28, 54, 35, 0, 0, 27, 23, 4, 8, 28, 24, 33, 28, 33, 39, 36, 33, 35, 75, 48, 64, 28, 36, 37, 38, 62, 60, 28, 61, 45, 63, 33, 51, 27, 57, 28, 88, 4, 4, 4, 29, 4, 24, 52, 58, 64, 28, 26, 26, 35, 62, 29, 59, 69, 33, 63, 4, 28, 94, 28, 45, 28, 26, 1, 78, 79, 80, 81, 82, 11, 76, 28, 28, 37, 24, 6, 65, 0, 54, 55, 54, 35, 41, 0, 41, 92, 41, 0, 4, 8, 42, 28, 42, 28, 42, 33, 40, 64, 9, 40, 41, 9, 62, 60, 28, 61, 12, 63, 42, 68, 9, 70, 71, 72, 73, 74, 8, 9, 64, 89, 4, 42, 93, 62, 60, 28, 61, 53, 63, 55, 96, 56, 11, 99, 41, 90, 77, 31, 43, 91, 67, 0, 42, 5, 6, 7, 8, 9, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 8, 8, 8, 8, 8, 24, 49, 50, 8, 54, 54, 54, 54, 54, 54, 54, 54, 3, 3, 54, 8, 8, 8, 8, 8, 8, 8, 8, 1, 0, 8, 0, 50, 5, 6, 7, 8, 9, 83, 0, 8, 10, 8, 8, 8, 8, 8, 0, 0, 0, 8, 4, 0, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8, 0, 0, 0, 8, }; static const YYINT demo_check[] = { 41, 0, 42, 44, 40, 44, 40, 41, 42, 42, 44, 42, 42, 40, 41, 40, 41, 44, 40, 40, 59, 259, 3, 42, 41, 59, 24, 44, 41, 123, 41, 44, 59, 125, 42, 37, 41, 27, 28, 29, 42, 43, 59, 45, 37, 47, 59, 38, 44, 41, 91, 40, 40, 41, 42, 91, 44, 91, 39, 44, 37, 44, 44, 59, 91, 42, 91, 48, 59, 67, 47, 59, 44, 267, 91, 68, 59, 59, 259, 70, 71, 72, 73, 74, 123, 66, 91, 59, 41, 123, 269, 93, 40, 123, 123, 125, 123, 41, 40, 43, 91, 45, 40, 91, 123, 41, 123, 43, 91, 45, 123, 41, 37, 259, 44, 59, 259, 42, 43, 91, 45, 268, 47, 59, 58, 259, 60, 61, 62, 63, 64, 264, 265, 37, 59, 123, 35, 41, 42, 43, 123, 45, 41, 47, 43, 95, 45, 4, 98, 93, 87, 68, 22, 36, 88, 57, -1, 93, 261, 262, 263, 264, 265, -1, -1, -1, 269, -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, 259, 261, 262, 263, 264, 265, 259, 259, 260, 269, 259, 260, 261, 262, 263, 264, 265, 266, 259, 259, 269, 259, 260, 261, 262, 263, 264, 265, 266, 259, -1, 269, -1, 260, 261, 262, 263, 264, 265, 266, -1, 259, 269, 261, 262, 263, 264, 265, -1, -1, -1, 269, 259, -1, 261, 262, 263, 264, 265, 261, 262, 263, 264, 265, -1, -1, -1, 269, }; #if YYBTYACC static const YYINT demo_ctable[] = { 18, 28, -1, 19, 8, -1, 32, 4, -1, 49, 1, -1, 97, 54, -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, -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, -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, -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, -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, -1, -1, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 269 #define YYUNDFTOKEN 299 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const demo_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, "'%'",0,0,"'('","')'","'*'","'+'","','","'-'","'.'","'/'",0,0,0,0,0,0,0,0,0,0,0, "';'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'['",0, "']'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'",0,"'}'",0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,"error","PREFIX","POSTFIX","ID","CONSTANT","EXTERN", "REGISTER","STATIC","CONST","VOLATILE","IF","THEN","ELSE","CLCL","$accept", "input","expr","decl","declarator_list","decl_list","statement", "statement_list","block_statement","declarator","formal_arg","decl_specs", "decl_spec","typename","cv_quals","cv_qual","opt_scope","formal_arg_list", "nonempty_formal_arg_list","$$1","$$2","$$3","$$4","$$5","$$6","$$7","$$8", "$$9","$$10","illegal-symbol", }; static const char *const demo_rule[] = { "$accept : input", "opt_scope :", "opt_scope : CLCL", "opt_scope : opt_scope ID CLCL", "typename : opt_scope ID", "$$1 :", "input : $$1 decl_list", "decl_list :", "$$2 :", "decl_list : decl_list $$2 decl", "decl : decl_specs declarator_list ';'", "$$3 :", "decl : decl_specs declarator $$3 block_statement", "decl_specs : decl_spec", "decl_specs : decl_specs $$2 decl_spec", "cv_quals :", "cv_quals : cv_quals cv_qual", "decl_spec : cv_qual", "decl_spec : typename", "decl_spec : EXTERN", "decl_spec : REGISTER", "decl_spec : STATIC", "cv_qual : CONST", "cv_qual : VOLATILE", "$$4 :", "$$5 :", "declarator_list : declarator_list ',' $$4 $$5 declarator", "declarator_list : declarator", "declarator :", "declarator : ID", "$$6 :", "$$7 :", "declarator : '(' $$6 $$7 declarator ')'", "declarator : '*' cv_quals $$4 $$5 declarator", "declarator : declarator '[' $$4 expr ']'", "declarator : declarator '(' $$4 formal_arg_list ')' cv_quals", "formal_arg_list :", "formal_arg_list : nonempty_formal_arg_list", "nonempty_formal_arg_list : nonempty_formal_arg_list ',' $$6 formal_arg", "nonempty_formal_arg_list : formal_arg", "formal_arg : decl_specs declarator", "expr : expr '+' $$6 expr", "expr : expr '-' $$6 expr", "expr : expr '*' $$6 expr", "expr : expr '%' $$6 expr", "expr : expr '/' $$6 expr", "expr : '*' $$2 expr", "expr : ID", "expr : CONSTANT", "statement : decl", "statement : expr ';'", "$$8 :", "$$9 :", "statement : IF '(' $$6 expr ')' THEN $$8 statement ELSE $$9 statement", "statement : IF '(' $$6 expr ')' THEN $$8 statement", "$$10 :", "statement : $$10 block_statement", "statement_list :", "statement_list : statement_list $$2 statement", "block_statement : '{' $$2 statement_list '}'", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 200 "btyacc_demo.y" extern int YYLEX_DECL(); extern void YYERROR_DECL(); extern Scope *global_scope; extern Decl * lookup(Scope *scope, char *id); extern Scope * new_scope(Scope *outer_scope); extern Scope * start_fn_def(Scope *scope, Decl *fn_decl); extern void finish_fn_def(Decl *fn_decl, Code *block); extern Type * type_combine(Type *specs, Type *spec); extern Type * bare_extern(void); extern Type * bare_register(void); extern Type * bare_static(void); extern Type * bare_const(void); extern Type * bare_volatile(void); extern Decl * declare(Scope *scope, char *id, Type *type); extern Decl * make_pointer(Decl *decl, Type *type); extern Decl * make_array(Type *type, Expr *expr); extern Decl * build_function(Decl *decl, Decl_List *dlist, Type *type); extern Decl_List * append_dlist(Decl_List *dlist, Decl *decl); extern Decl_List * build_dlist(Decl *decl); extern Expr * build_expr(Expr *left, enum Operator op, Expr *right); extern Expr * var_expr(Scope *scope, char *id); extern Code * build_expr_code(Expr *expr); extern Code * build_if(Expr *cond_expr, Code *then_stmt, Code *else_stmt); extern Code * code_append(Code *stmt_list, Code *stmt); #line 667 "btyacc_demo.tab.c" /* Release memory associated with symbol. */ #if ! defined YYDESTRUCT_IS_DECLARED static void YYDESTRUCT_DECL() { switch (psymb) { case 43: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 683 "btyacc_demo.tab.c" break; case 45: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 692 "btyacc_demo.tab.c" break; case 42: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 701 "btyacc_demo.tab.c" break; case 47: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 710 "btyacc_demo.tab.c" break; case 37: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 719 "btyacc_demo.tab.c" break; case 257: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 728 "btyacc_demo.tab.c" break; case 258: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 737 "btyacc_demo.tab.c" break; case 40: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 746 "btyacc_demo.tab.c" break; case 91: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 755 "btyacc_demo.tab.c" break; case 46: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 764 "btyacc_demo.tab.c" break; case 259: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).id); } #line 773 "btyacc_demo.tab.c" break; case 260: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).expr); } #line 782 "btyacc_demo.tab.c" break; case 261: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 791 "btyacc_demo.tab.c" break; case 262: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 800 "btyacc_demo.tab.c" break; case 263: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 809 "btyacc_demo.tab.c" break; case 264: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 818 "btyacc_demo.tab.c" break; case 265: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 827 "btyacc_demo.tab.c" break; case 266: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 836 "btyacc_demo.tab.c" break; case 267: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 845 "btyacc_demo.tab.c" break; case 268: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 854 "btyacc_demo.tab.c" break; case 269: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 863 "btyacc_demo.tab.c" break; case 59: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 872 "btyacc_demo.tab.c" break; case 44: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 881 "btyacc_demo.tab.c" break; case 41: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 890 "btyacc_demo.tab.c" break; case 93: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 899 "btyacc_demo.tab.c" break; case 123: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 908 "btyacc_demo.tab.c" break; case 125: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 917 "btyacc_demo.tab.c" break; case 270: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 926 "btyacc_demo.tab.c" break; case 271: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 935 "btyacc_demo.tab.c" break; case 272: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).expr); } #line 944 "btyacc_demo.tab.c" break; case 273: #line 67 "btyacc_demo.y" { /* 'msg' is a 'char *' indicating the context of destructor invocation*/ printf("%s accessed by symbol \"decl\" (case s.b. 273) @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).decl->scope); free((*val).decl->type); } #line 954 "btyacc_demo.tab.c" break; case 274: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 963 "btyacc_demo.tab.c" break; case 275: #line 83 "btyacc_demo.y" { printf("%s accessed by symbol with no type @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); /* in this example, we don't know what to do here */ } #line 972 "btyacc_demo.tab.c" break; case 276: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).code); } #line 981 "btyacc_demo.tab.c" break; case 277: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).code); } #line 990 "btyacc_demo.tab.c" break; case 278: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).code); } #line 999 "btyacc_demo.tab.c" break; case 279: #line 73 "btyacc_demo.y" { printf("%s accessed by symbol with type (case s.b. 279 & 280) @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).decl); } #line 1008 "btyacc_demo.tab.c" break; case 280: #line 73 "btyacc_demo.y" { printf("%s accessed by symbol with type (case s.b. 279 & 280) @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).decl); } #line 1017 "btyacc_demo.tab.c" break; case 281: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).type); } #line 1026 "btyacc_demo.tab.c" break; case 282: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).type); } #line 1035 "btyacc_demo.tab.c" break; case 283: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).type); } #line 1044 "btyacc_demo.tab.c" break; case 284: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).type); } #line 1053 "btyacc_demo.tab.c" break; case 285: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).type); } #line 1062 "btyacc_demo.tab.c" break; case 286: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).scope); } #line 1071 "btyacc_demo.tab.c" break; case 287: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).dlist); } #line 1080 "btyacc_demo.tab.c" break; case 288: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).dlist); } #line 1089 "btyacc_demo.tab.c" break; case 289: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).scope); } #line 1098 "btyacc_demo.tab.c" break; case 290: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).scope); } #line 1107 "btyacc_demo.tab.c" break; case 291: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).scope); } #line 1116 "btyacc_demo.tab.c" break; case 292: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).scope); } #line 1125 "btyacc_demo.tab.c" break; case 293: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).type); } #line 1134 "btyacc_demo.tab.c" break; case 294: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).scope); } #line 1143 "btyacc_demo.tab.c" break; case 295: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).type); } #line 1152 "btyacc_demo.tab.c" break; case 296: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).scope); } #line 1161 "btyacc_demo.tab.c" break; case 297: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).scope); } #line 1170 "btyacc_demo.tab.c" break; case 298: #line 78 "btyacc_demo.y" { printf("%s accessed by symbol of any type other than @ position[%d,%d..%d,%d]\n", msg, (*loc).first_line, (*loc).first_column, (*loc).last_line, (*loc).last_column); free((*val).scope); } #line 1179 "btyacc_demo.tab.c" break; } } #define YYDESTRUCT_IS_DECLARED 1 #endif /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 1: #line 93 "btyacc_demo.y" { yyval.scope = yystack.l_mark[0].scope; } #line 1857 "btyacc_demo.tab.c" break; case 2: #line 94 "btyacc_demo.y" { yyval.scope = global_scope; } #line 1862 "btyacc_demo.tab.c" break; case 3: #line 95 "btyacc_demo.y" { Decl *d = lookup(yystack.l_mark[-2].scope, yystack.l_mark[-1].id); if (!d || !d->scope) YYERROR; yyval.scope = d->scope; } #line 1869 "btyacc_demo.tab.c" break; case 4: #line 101 "btyacc_demo.y" { Decl *d = lookup(yystack.l_mark[-1].scope, yystack.l_mark[0].id); if (d == NULL || d->istype() == 0) YYERROR; yyval.type = d->type; } #line 1876 "btyacc_demo.tab.c" break; case 5: #line 106 "btyacc_demo.y" yyval.scope = global_scope = new_scope(0); #line 1881 "btyacc_demo.tab.c" break; case 8: #line 107 "btyacc_demo.y" yyval.scope = yystack.l_mark[-1].scope; #line 1886 "btyacc_demo.tab.c" break; case 10: #line 109 "btyacc_demo.y" {YYVALID;} #line 1891 "btyacc_demo.tab.c" break; case 11: #line 110 "btyacc_demo.y" yyval.scope = start_fn_def(yystack.l_mark[-2].scope, yystack.l_mark[0].decl); #line 1896 "btyacc_demo.tab.c" break; case 12: if (!yytrial) #line 111 "btyacc_demo.y" { /* demonstrate use of @$ & @N, although this is just the default computation and so is not necessary */ yyloc.first_line = yystack.p_mark[-3].first_line; yyloc.first_column = yystack.p_mark[-3].first_column; yyloc.last_line = yystack.p_mark[0].last_line; yyloc.last_column = yystack.p_mark[0].last_column; finish_fn_def(yystack.l_mark[-2].decl, yystack.l_mark[0].code); } #line 1908 "btyacc_demo.tab.c" break; case 13: #line 121 "btyacc_demo.y" { yyval.type = yystack.l_mark[0].type; } #line 1913 "btyacc_demo.tab.c" break; case 14: #line 122 "btyacc_demo.y" { yyval.type = type_combine(yystack.l_mark[-2].type, yystack.l_mark[0].type); } #line 1918 "btyacc_demo.tab.c" break; case 15: #line 125 "btyacc_demo.y" { yyval.type = 0; } #line 1923 "btyacc_demo.tab.c" break; case 16: #line 126 "btyacc_demo.y" { yyval.type = type_combine(yystack.l_mark[-1].type, yystack.l_mark[0].type); } #line 1928 "btyacc_demo.tab.c" break; case 17: #line 130 "btyacc_demo.y" { yyval.type = yystack.l_mark[0].type; } #line 1933 "btyacc_demo.tab.c" break; case 18: #line 131 "btyacc_demo.y" { yyval.type = yystack.l_mark[0].type; } #line 1938 "btyacc_demo.tab.c" break; case 19: #line 132 "btyacc_demo.y" { yyval.type = bare_extern(); } #line 1943 "btyacc_demo.tab.c" break; case 20: #line 133 "btyacc_demo.y" { yyval.type = bare_register(); } #line 1948 "btyacc_demo.tab.c" break; case 21: #line 134 "btyacc_demo.y" { yyval.type = bare_static(); } #line 1953 "btyacc_demo.tab.c" break; case 22: #line 138 "btyacc_demo.y" { yyval.type = bare_const(); } #line 1958 "btyacc_demo.tab.c" break; case 23: #line 139 "btyacc_demo.y" { yyval.type = bare_volatile(); } #line 1963 "btyacc_demo.tab.c" break; case 24: #line 143 "btyacc_demo.y" yyval.scope = yystack.l_mark[-3].scope; #line 1968 "btyacc_demo.tab.c" break; case 25: #line 143 "btyacc_demo.y" yyval.type = yystack.l_mark[-3].type; #line 1973 "btyacc_demo.tab.c" break; case 28: #line 148 "btyacc_demo.y" { if (!yystack.l_mark[0].type) YYERROR; } if (!yytrial) #line 149 "btyacc_demo.y" { yyval.decl = declare(yystack.l_mark[-1].scope, 0, yystack.l_mark[0].type); } #line 1980 "btyacc_demo.tab.c" break; case 29: if (!yytrial) #line 150 "btyacc_demo.y" { yyval.decl = declare(yystack.l_mark[-2].scope, yystack.l_mark[0].id, yystack.l_mark[-1].type); } #line 1986 "btyacc_demo.tab.c" break; case 30: #line 151 "btyacc_demo.y" yyval.scope = yystack.l_mark[-2].scope; #line 1991 "btyacc_demo.tab.c" break; case 31: #line 151 "btyacc_demo.y" yyval.type = yystack.l_mark[-2].type; #line 1996 "btyacc_demo.tab.c" break; case 32: if (!yytrial) #line 151 "btyacc_demo.y" { yyval.decl = yystack.l_mark[-1].decl; } #line 2002 "btyacc_demo.tab.c" break; case 33: if (!yytrial) #line 153 "btyacc_demo.y" { yyval.decl = make_pointer(yystack.l_mark[0].decl, yystack.l_mark[-3].type); } #line 2008 "btyacc_demo.tab.c" break; case 34: if (!yytrial) #line 155 "btyacc_demo.y" { yyval.decl = make_array(yystack.l_mark[-4].decl->type, yystack.l_mark[-1].expr); } #line 2014 "btyacc_demo.tab.c" break; case 35: if (!yytrial) #line 157 "btyacc_demo.y" { yyval.decl = build_function(yystack.l_mark[-5].decl, yystack.l_mark[-2].dlist, yystack.l_mark[0].type); } #line 2020 "btyacc_demo.tab.c" break; case 36: if (!yytrial) #line 160 "btyacc_demo.y" { yyval.dlist = 0; } #line 2026 "btyacc_demo.tab.c" break; case 37: if (!yytrial) #line 161 "btyacc_demo.y" { yyval.dlist = yystack.l_mark[0].dlist; } #line 2032 "btyacc_demo.tab.c" break; case 38: if (!yytrial) #line 164 "btyacc_demo.y" { yyval.dlist = append_dlist(yystack.l_mark[-3].dlist, yystack.l_mark[0].decl); } #line 2038 "btyacc_demo.tab.c" break; case 39: if (!yytrial) #line 165 "btyacc_demo.y" { yyval.dlist = build_dlist(yystack.l_mark[0].decl); } #line 2044 "btyacc_demo.tab.c" break; case 40: if (!yytrial) #line 168 "btyacc_demo.y" { yyval.decl = yystack.l_mark[0].decl; } #line 2050 "btyacc_demo.tab.c" break; case 41: if (!yytrial) #line 172 "btyacc_demo.y" { yyval.expr = build_expr(yystack.l_mark[-3].expr, ADD, yystack.l_mark[0].expr); } #line 2056 "btyacc_demo.tab.c" break; case 42: if (!yytrial) #line 173 "btyacc_demo.y" { yyval.expr = build_expr(yystack.l_mark[-3].expr, SUB, yystack.l_mark[0].expr); } #line 2062 "btyacc_demo.tab.c" break; case 43: if (!yytrial) #line 174 "btyacc_demo.y" { yyval.expr = build_expr(yystack.l_mark[-3].expr, MUL, yystack.l_mark[0].expr); } #line 2068 "btyacc_demo.tab.c" break; case 44: if (!yytrial) #line 175 "btyacc_demo.y" { yyval.expr = build_expr(yystack.l_mark[-3].expr, MOD, yystack.l_mark[0].expr); } #line 2074 "btyacc_demo.tab.c" break; case 45: if (!yytrial) #line 176 "btyacc_demo.y" { yyval.expr = build_expr(yystack.l_mark[-3].expr, DIV, yystack.l_mark[0].expr); } #line 2080 "btyacc_demo.tab.c" break; case 46: if (!yytrial) #line 177 "btyacc_demo.y" { yyval.expr = build_expr(0, DEREF, yystack.l_mark[0].expr); } #line 2086 "btyacc_demo.tab.c" break; case 47: if (!yytrial) #line 178 "btyacc_demo.y" { yyval.expr = var_expr(yystack.l_mark[-1].scope, yystack.l_mark[0].id); } #line 2092 "btyacc_demo.tab.c" break; case 48: if (!yytrial) #line 179 "btyacc_demo.y" { yyval.expr = yystack.l_mark[0].expr; } #line 2098 "btyacc_demo.tab.c" break; case 49: if (!yytrial) #line 183 "btyacc_demo.y" { yyval.code = 0; } #line 2104 "btyacc_demo.tab.c" break; case 50: #line 184 "btyacc_demo.y" {YYVALID;} if (!yytrial) #line 184 "btyacc_demo.y" { yyval.code = build_expr_code(yystack.l_mark[-1].expr); } #line 2111 "btyacc_demo.tab.c" break; case 51: #line 185 "btyacc_demo.y" yyval.scope = yystack.l_mark[-6].scope; #line 2116 "btyacc_demo.tab.c" break; case 52: #line 185 "btyacc_demo.y" yyval.scope = yystack.l_mark[-9].scope; #line 2121 "btyacc_demo.tab.c" break; case 53: #line 185 "btyacc_demo.y" {YYVALID;} if (!yytrial) #line 186 "btyacc_demo.y" { yyval.code = build_if(yystack.l_mark[-7].expr, yystack.l_mark[-3].code, yystack.l_mark[0].code); } #line 2128 "btyacc_demo.tab.c" break; case 54: #line 187 "btyacc_demo.y" {YYVALID;} if (!yytrial) #line 188 "btyacc_demo.y" { yyval.code = build_if(yystack.l_mark[-4].expr, yystack.l_mark[0].code, 0); } #line 2135 "btyacc_demo.tab.c" break; case 55: #line 189 "btyacc_demo.y" yyval.scope = new_scope(yystack.l_mark[0].scope); #line 2140 "btyacc_demo.tab.c" break; case 56: #line 189 "btyacc_demo.y" {YYVALID;} if (!yytrial) #line 189 "btyacc_demo.y" { yyval.code = yystack.l_mark[0].code; } #line 2147 "btyacc_demo.tab.c" break; case 57: if (!yytrial) #line 192 "btyacc_demo.y" { yyval.code = 0; } #line 2153 "btyacc_demo.tab.c" break; case 58: if (!yytrial) #line 193 "btyacc_demo.y" { yyval.code = code_append(yystack.l_mark[-2].code, yystack.l_mark[0].code); } #line 2159 "btyacc_demo.tab.c" break; case 59: if (!yytrial) #line 197 "btyacc_demo.y" { yyval.code = yystack.l_mark[-1].code; } #line 2165 "btyacc_demo.tab.c" break; #line 2167 "btyacc_demo.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/inherit2.tab.h0000644000000000000000000000075314030125515016417 0ustar rootroot#ifndef _inherit2__defines_h_ #define _inherit2__defines_h_ #define GLOBAL 257 #define LOCAL 258 #define REAL 259 #define INTEGER 260 #define NAME 261 #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 typedef union YYSTYPE { class cval; type tval; namelist * nlist; name id; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ extern YYSTYPE inherit2_lval; #endif /* _inherit2__defines_h_ */ byacc-20221106/test/btyacc/code_error.error0000644000000000000000000000000012313700134017132 0ustar rootrootbyacc-20221106/test/btyacc/err_inherit1.tab.h0000644000000000000000000000000012315230211017241 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax25.tab.c0000644000000000000000000000067213726503203017240 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/calc_code_all.tab.c0000644000000000000000000013712214104035275017420 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 /* %code "top" block start */ #line 5 "calc_code_all.y" /* CODE-TOP */ /* %code "top" block end */ #line 22 "calc_code_all.tab.c" #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse calc_code_all_parse #endif /* yyparse */ #ifndef yylex #define yylex calc_code_all_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc_code_all_error #endif /* yyerror */ #ifndef yychar #define yychar calc_code_all_char #endif /* yychar */ #ifndef yyval #define yyval calc_code_all_val #endif /* yyval */ #ifndef yylval #define yylval calc_code_all_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc_code_all_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc_code_all_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc_code_all_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc_code_all_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc_code_all_len #endif /* yylen */ #ifndef yydefred #define yydefred calc_code_all_defred #endif /* yydefred */ #ifndef yystos #define yystos calc_code_all_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto calc_code_all_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc_code_all_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc_code_all_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc_code_all_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc_code_all_table #endif /* yytable */ #ifndef yycheck #define yycheck calc_code_all_check #endif /* yycheck */ #ifndef yyname #define yyname calc_code_all_name #endif /* yyname */ #ifndef yyrule #define yyrule calc_code_all_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex calc_code_all_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable calc_code_all_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "calc_code_all_" #define YYPURE 0 #line 9 "calc_code_all.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 137 "calc_code_all.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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc_code_all_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc_code_all_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc_code_all_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT calc_code_all_stos[] = { 0, 261, 256, 257, 258, 45, 40, 262, 263, 264, 10, 61, 258, 263, 263, 10, 124, 38, 43, 45, 42, 47, 37, 257, 263, 41, 263, 263, 263, 263, 263, 263, 263, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT calc_code_all_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc_code_all_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc_code_all_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; #if YYBTYACC static const YYINT calc_code_all_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT calc_code_all_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc_code_all_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc_code_all_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #if YYBTYACC static const YYINT calc_code_all_ctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc_code_all_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number", "illegal-symbol", }; static const char *const calc_code_all_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif /* %code "requires" block start */ #line 3 "calc_code_all.y" /* CODE-REQUIRES */ /* %code "requires" block end */ #line 367 "calc_code_all.tab.c" #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ /* %code "provides" block start */ #line 4 "calc_code_all.y" /* CODE-PROVIDES */ #line 6 "calc_code_all.y" /* CODE-PROVIDES2 */ /* %code "provides" block end */ #line 488 "calc_code_all.tab.c" /* %code "" block start */ #line 1 "calc_code_all.y" /* CODE-DEFAULT2 */ #line 2 "calc_code_all.y" /* CODE-DEFAULT */ /* %code "" block end */ #line 496 "calc_code_all.tab.c" #line 73 "calc_code_all.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 539 "calc_code_all.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 35 "calc_code_all.y" { yyerrok ; } #line 1212 "calc_code_all.tab.c" break; case 4: #line 39 "calc_code_all.y" { printf("%d\n",yystack.l_mark[0]);} #line 1217 "calc_code_all.tab.c" break; case 5: #line 41 "calc_code_all.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1222 "calc_code_all.tab.c" break; case 6: #line 45 "calc_code_all.y" { yyval = yystack.l_mark[-1]; } #line 1227 "calc_code_all.tab.c" break; case 7: #line 47 "calc_code_all.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1232 "calc_code_all.tab.c" break; case 8: #line 49 "calc_code_all.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1237 "calc_code_all.tab.c" break; case 9: #line 51 "calc_code_all.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1242 "calc_code_all.tab.c" break; case 10: #line 53 "calc_code_all.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1247 "calc_code_all.tab.c" break; case 11: #line 55 "calc_code_all.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1252 "calc_code_all.tab.c" break; case 12: #line 57 "calc_code_all.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1257 "calc_code_all.tab.c" break; case 13: #line 59 "calc_code_all.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1262 "calc_code_all.tab.c" break; case 14: #line 61 "calc_code_all.y" { yyval = - yystack.l_mark[0]; } #line 1267 "calc_code_all.tab.c" break; case 15: #line 63 "calc_code_all.y" { yyval = regs[yystack.l_mark[0]]; } #line 1272 "calc_code_all.tab.c" break; case 17: #line 68 "calc_code_all.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1277 "calc_code_all.tab.c" break; case 18: #line 70 "calc_code_all.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1282 "calc_code_all.tab.c" break; #line 1284 "calc_code_all.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_syntax13.tab.c0000644000000000000000000000067213726503203017235 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/err_syntax16.error0000644000000000000000000000012412361053263017372 0ustar rootrootYACC: e - line 14 of "./err_syntax16.y", a token appears on the lhs of a production byacc-20221106/test/btyacc/rename_debug.output0000644000000000000000000000060512321224351017647 0ustar rootroot 0 $accept : S $end 1 S : error state 0 $accept : . S $end (0) error shift 1 . error S goto 2 state 1 S : error . (1) . reduce 1 state 2 $accept : S . $end (0) $end accept 2 terminals, 2 nonterminals 2 grammar rules, 3 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 $accept 3 258 S byacc-20221106/test/btyacc/btyacc_destroy3.tab.c0000644000000000000000000013530014104035275017771 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 1 #define YYDEBUGSTR (yytrial ? YYPREFIX "debug(trial)" : YYPREFIX "debug") #ifndef yyparse #define yyparse destroy3_parse #endif /* yyparse */ #ifndef yylex #define yylex destroy3_lex #endif /* yylex */ #ifndef yyerror #define yyerror destroy3_error #endif /* yyerror */ #ifndef yychar #define yychar destroy3_char #endif /* yychar */ #ifndef yyval #define yyval destroy3_val #endif /* yyval */ #ifndef yylval #define yylval destroy3_lval #endif /* yylval */ #ifndef yydebug #define yydebug destroy3_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs destroy3_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag destroy3_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs destroy3_lhs #endif /* yylhs */ #ifndef yylen #define yylen destroy3_len #endif /* yylen */ #ifndef yydefred #define yydefred destroy3_defred #endif /* yydefred */ #ifndef yystos #define yystos destroy3_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto destroy3_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex destroy3_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex destroy3_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex destroy3_gindex #endif /* yygindex */ #ifndef yytable #define yytable destroy3_table #endif /* yytable */ #ifndef yycheck #define yycheck destroy3_check #endif /* yycheck */ #ifndef yyname #define yyname destroy3_name #endif /* yyname */ #ifndef yyrule #define yyrule destroy3_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex destroy3_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable destroy3_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "destroy3_" #define YYPURE 0 #line 7 "btyacc_destroy3.y" #include typedef enum {cGLOBAL, cLOCAL} class; typedef enum {tREAL, tINTEGER} type; typedef char * name; struct symbol { class c; type t; name id; }; typedef struct symbol symbol; struct namelist { symbol *s; struct namelist *next; }; typedef struct namelist namelist; struct parser_param { int *rtrn; symbol ss; }; extern symbol *mksymbol(type t, class c, name id); #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) #endif #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #line 53 "btyacc_destroy3.y" typedef union YYSTYPE { class cval; type tval; namelist * nlist; name id; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 160 "btyacc_destroy3.tab.c" /* 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(struct parser_param *param, int flag) #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(struct parser_param *param, int flag, const char *s) #endif #ifndef YYERROR_CALL #define YYERROR_CALL(msg) yyerror(param, flag, msg) #endif #ifndef YYDESTRUCT_DECL #define YYDESTRUCT_DECL() yydestruct(const char *msg, int psymb, YYSTYPE *val, struct parser_param *param, int flag) #endif #ifndef YYDESTRUCT_CALL #define YYDESTRUCT_CALL(msg, psymb, val) yydestruct(msg, psymb, val, param, flag) #endif extern int YYPARSE_DECL(); #define GLOBAL 257 #define LOCAL 258 #define REAL 259 #define INTEGER 260 #define NAME 261 #define YYERRCODE 256 typedef int YYINT; static const YYINT destroy3_lhs[] = { -1, 0, 0, 2, 2, 3, 3, 4, 4, 1, }; static const YYINT destroy3_len[] = { 2, 8, 5, 1, 1, 1, 1, 2, 1, 6, }; static const YYINT destroy3_defred[] = { 0, 3, 4, 5, 6, 0, 0, 0, 0, 8, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 9, 1, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT destroy3_stos[] = { 0, 257, 258, 259, 260, 263, 265, 266, 266, 261, 264, 267, 267, 40, 261, 40, 40, 265, 258, 265, 41, 44, 44, 266, 266, 41, 41, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT destroy3_dgoto[] = { 5, 10, 6, 7, 11, }; static const YYINT destroy3_sindex[] = { -254, 0, 0, 0, 0, 0, -251, -248, -248, 0, -26, -40, -39, -246, 0, -243, -246, -25, -24, -23, 0, -251, -251, -22, -19, 0, 0, }; static const YYINT destroy3_rindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #if YYBTYACC static const YYINT destroy3_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT destroy3_gindex[] = { 0, 0, -6, -4, 15, }; #define YYTABLESIZE 222 static const YYINT destroy3_table[] = { 15, 16, 8, 1, 2, 3, 4, 17, 3, 4, 19, 1, 2, 9, 13, 18, 20, 23, 24, 25, 21, 22, 26, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, }; static const YYINT destroy3_check[] = { 40, 40, 6, 257, 258, 259, 260, 13, 259, 260, 16, 257, 258, 261, 40, 258, 41, 21, 22, 41, 44, 44, 41, 8, -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, -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, -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, -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, 261, 261, }; #if YYBTYACC static const YYINT destroy3_ctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, -1, -1, }; #endif #define YYFINAL 5 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 261 #define YYUNDFTOKEN 268 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const destroy3_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'('","')'",0,0,"','",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","GLOBAL","LOCAL", "REAL","INTEGER","NAME","$accept","declaration","locnamelist","class","type", "namelist","illegal-symbol", }; static const char *const destroy3_rule[] = { "$accept : declaration", "declaration : class type namelist '(' class ',' type ')'", "declaration : type locnamelist '(' class ')'", "class : GLOBAL", "class : LOCAL", "type : REAL", "type : INTEGER", "namelist : namelist NAME", "namelist : NAME", "locnamelist : namelist '(' LOCAL ',' type ')'", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 92 "btyacc_destroy3.y" extern int YYLEX_DECL(); extern void YYERROR_DECL(); #line 492 "btyacc_destroy3.tab.c" /* Release memory associated with symbol. */ #if ! defined YYDESTRUCT_IS_DECLARED static void YYDESTRUCT_DECL() { switch (psymb) { case 263: #line 44 "btyacc_destroy3.y" { namelist *p = (*val).nlist; while (p != NULL) { namelist *pp = p; p = p->next; free(pp->s); free(pp); } } #line 511 "btyacc_destroy3.tab.c" break; } } #define YYDESTRUCT_IS_DECLARED 1 #endif /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 1: if (!yytrial) #line 65 "btyacc_destroy3.y" { yyval.nlist = yystack.l_mark[-5].nlist; } #line 1190 "btyacc_destroy3.tab.c" break; case 2: if (!yytrial) #line 67 "btyacc_destroy3.y" { yyval.nlist = yystack.l_mark[-3].nlist; } #line 1196 "btyacc_destroy3.tab.c" break; case 3: if (!yytrial) #line 70 "btyacc_destroy3.y" { yyval.cval = cGLOBAL; } #line 1202 "btyacc_destroy3.tab.c" break; case 4: if (!yytrial) #line 71 "btyacc_destroy3.y" { yyval.cval = cLOCAL; } #line 1208 "btyacc_destroy3.tab.c" break; case 5: if (!yytrial) #line 74 "btyacc_destroy3.y" { yyval.tval = tREAL; } #line 1214 "btyacc_destroy3.tab.c" break; case 6: if (!yytrial) #line 75 "btyacc_destroy3.y" { yyval.tval = tINTEGER; } #line 1220 "btyacc_destroy3.tab.c" break; case 7: if (!yytrial) #line 79 "btyacc_destroy3.y" { yyval.nlist->s = mksymbol(yystack.l_mark[-2].tval, yystack.l_mark[-2].cval, yystack.l_mark[0].id); yyval.nlist->next = yystack.l_mark[-1].nlist; } #line 1228 "btyacc_destroy3.tab.c" break; case 8: if (!yytrial) #line 83 "btyacc_destroy3.y" { yyval.nlist->s = mksymbol(0, 0, yystack.l_mark[0].id); yyval.nlist->next = NULL; } #line 1236 "btyacc_destroy3.tab.c" break; case 9: if (!yytrial) #line 89 "btyacc_destroy3.y" { yyval.nlist = yystack.l_mark[-5].nlist; } #line 1242 "btyacc_destroy3.tab.c" break; #line 1244 "btyacc_destroy3.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/expr.oxout.output0000644000000000000000000000600613044507462017400 0ustar rootroot 0 $accept : yyyAugNonterm $end 1 $$1 : 2 yyyAugNonterm : $$1 s 3 s : expr 4 expr : expr '*' expr 5 | expr '+' expr 6 | expr '/' expr 7 | expr '-' expr 8 | '(' expr ')' 9 | ID 10 | CONST state 0 $accept : . yyyAugNonterm $end (0) $$1 : . (1) . reduce 1 yyyAugNonterm goto 1 $$1 goto 2 state 1 $accept : yyyAugNonterm . $end (0) $end accept state 2 yyyAugNonterm : $$1 . s (2) ID shift 3 CONST shift 4 '(' shift 5 . error s goto 6 expr goto 7 state 3 expr : ID . (9) . reduce 9 state 4 expr : CONST . (10) . reduce 10 state 5 expr : '(' . expr ')' (8) ID shift 3 CONST shift 4 '(' shift 5 . error expr goto 8 state 6 yyyAugNonterm : $$1 s . (2) . reduce 2 state 7 s : expr . (3) expr : expr . '*' expr (4) expr : expr . '+' expr (5) expr : expr . '/' expr (6) expr : expr . '-' expr (7) '+' shift 9 '-' shift 10 '*' shift 11 '/' shift 12 $end reduce 3 state 8 expr : expr . '*' expr (4) expr : expr . '+' expr (5) expr : expr . '/' expr (6) expr : expr . '-' expr (7) expr : '(' expr . ')' (8) '+' shift 9 '-' shift 10 '*' shift 11 '/' shift 12 ')' shift 13 . error state 9 expr : expr '+' . expr (5) ID shift 3 CONST shift 4 '(' shift 5 . error expr goto 14 state 10 expr : expr '-' . expr (7) ID shift 3 CONST shift 4 '(' shift 5 . error expr goto 15 state 11 expr : expr '*' . expr (4) ID shift 3 CONST shift 4 '(' shift 5 . error expr goto 16 state 12 expr : expr '/' . expr (6) ID shift 3 CONST shift 4 '(' shift 5 . error expr goto 17 state 13 expr : '(' expr ')' . (8) . reduce 8 state 14 expr : expr . '*' expr (4) expr : expr . '+' expr (5) expr : expr '+' expr . (5) expr : expr . '/' expr (6) expr : expr . '-' expr (7) '*' shift 11 '/' shift 12 $end reduce 5 '+' reduce 5 '-' reduce 5 ')' reduce 5 state 15 expr : expr . '*' expr (4) expr : expr . '+' expr (5) expr : expr . '/' expr (6) expr : expr . '-' expr (7) expr : expr '-' expr . (7) '*' shift 11 '/' shift 12 $end reduce 7 '+' reduce 7 '-' reduce 7 ')' reduce 7 state 16 expr : expr . '*' expr (4) expr : expr '*' expr . (4) expr : expr . '+' expr (5) expr : expr . '/' expr (6) expr : expr . '-' expr (7) . reduce 4 state 17 expr : expr . '*' expr (4) expr : expr . '+' expr (5) expr : expr . '/' expr (6) expr : expr '/' expr . (6) expr : expr . '-' expr (7) '*' shift 11 $end reduce 6 '+' reduce 6 '-' reduce 6 '/' reduce 6 ')' reduce 6 10 terminals, 5 nonterminals 11 grammar rules, 18 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 ID 3 258 CONST 4 43 '+' 5 45 '-' 6 42 '*' 7 47 '/' 8 40 '(' 9 41 ')' 10 259 $accept 11 260 yyyAugNonterm 12 261 s 13 262 $$1 14 263 expr byacc-20221106/test/btyacc/err_syntax26.tab.c0000644000000000000000000000067213726503203017241 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/big_l.output0000644000000000000000000000000013501467273016310 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax5.output0000644000000000000000000000000012314147323017507 0ustar rootrootbyacc-20221106/test/btyacc/no_output.output0000644000000000000000000000000013501467273017270 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax13.error0000644000000000000000000000011112361053263017363 0ustar rootrootYACC: e - line 7 of "./err_syntax13.y", the start symbol text is a token byacc-20221106/test/btyacc/err_syntax8a.tab.c0000644000000000000000000000067213726503203017322 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/nostdin.output0000644000000000000000000000000013501467273016712 0ustar rootrootbyacc-20221106/test/btyacc/big_b.error0000644000000000000000000000233414102077543016076 0ustar rootrootUsage: YACC [options] filename Options: -b file_prefix set filename prefix (default "y.") -B create a backtracking parser -d write definitions (.tab.h) -h print this help-message -H defines_file write definitions to defines_file -i write interface (y.tab.i) -g write a graphical description -l suppress #line directives -L enable position processing, e.g., "%locations" -o output_file (default ".tab.c") -p symbol_prefix set symbol prefix (default "yy") -P create a reentrant parser, e.g., "%pure-parser" -r produce separate code and table files (y.code.c) -s suppress #define's for quoted names in %token lines -t add debugging support -v write description (y.output) -V show version information and exit Long options: --defines -H --file-prefix -b --graph -g --help -h --name-prefix -p --no-lines -l --output -o --version -V byacc-20221106/test/btyacc/pure_error.tab.h0000644000000000000000000000013012312171122017040 0ustar rootroot#ifndef _error__defines_h_ #define _error__defines_h_ #endif /* _error__defines_h_ */ byacc-20221106/test/btyacc/quote_calc4.tab.h0000644000000000000000000000042412312171122017065 0ustar rootroot#ifndef _quote_calc4__defines_h_ #define _quote_calc4__defines_h_ #define OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #endif /* _quote_calc4__defines_h_ */ byacc-20221106/test/btyacc/defines2.output0000644000000000000000000000000013501474556016735 0ustar rootrootbyacc-20221106/test/btyacc/calc2.tab.c0000644000000000000000000013565414104035275015670 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse calc2_parse #endif /* yyparse */ #ifndef yylex #define yylex calc2_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc2_error #endif /* yyerror */ #ifndef yychar #define yychar calc2_char #endif /* yychar */ #ifndef yyval #define yyval calc2_val #endif /* yyval */ #ifndef yylval #define yylval calc2_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc2_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc2_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc2_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc2_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc2_len #endif /* yylen */ #ifndef yydefred #define yydefred calc2_defred #endif /* yydefred */ #ifndef yystos #define yystos calc2_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto calc2_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc2_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc2_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc2_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc2_table #endif /* yytable */ #ifndef yycheck #define yycheck calc2_check #endif /* yycheck */ #ifndef yyname #define yyname calc2_name #endif /* yyname */ #ifndef yyrule #define yyrule calc2_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex calc2_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable calc2_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "calc2_" #define YYPURE 0 #line 7 "calc2.y" # include # include #ifdef YYBISON #define YYLEX_PARAM base #define YYLEX_DECL() yylex(int *YYLEX_PARAM) #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) int YYLEX_DECL(); static void YYERROR_DECL(); #endif #line 133 "calc2.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(int regs[26], int *base) #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(int *base) # define YYLEX yylex(base) #endif /* Parameters sent to yyerror. */ #ifndef YYERROR_DECL #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) #endif #ifndef YYERROR_CALL #define YYERROR_CALL(msg) yyerror(regs, base, msg) #endif extern int YYPARSE_DECL(); #define DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc2_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc2_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc2_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT calc2_stos[] = { 0, 261, 256, 257, 258, 45, 40, 262, 263, 264, 10, 61, 258, 263, 263, 10, 124, 38, 43, 45, 42, 47, 37, 257, 263, 41, 263, 263, 263, 263, 263, 263, 263, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT calc2_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc2_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc2_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; #if YYBTYACC static const YYINT calc2_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT calc2_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc2_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc2_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #if YYBTYACC static const YYINT calc2_ctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc2_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number", "illegal-symbol", }; static const char *const calc2_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 73 "calc2.y" /* start of programs */ #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main (void) { int regs[26]; int base = 10; while(!feof(stdin)) { yyparse(regs, &base); } return 0; } #define UNUSED(x) ((void)(x)) static void YYERROR_DECL() { UNUSED(regs); /* %parse-param regs is not actually used here */ UNUSED(base); /* %parse-param base is not actually used here */ fprintf(stderr, "%s\n", s); } int YYLEX_DECL() { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = (c - '0') % (*base); return ( DIGIT ); } return( c ); } #line 524 "calc2.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 35 "calc2.y" { yyerrok ; } #line 1197 "calc2.tab.c" break; case 4: #line 39 "calc2.y" { printf("%d\n",yystack.l_mark[0]);} #line 1202 "calc2.tab.c" break; case 5: #line 41 "calc2.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1207 "calc2.tab.c" break; case 6: #line 45 "calc2.y" { yyval = yystack.l_mark[-1]; } #line 1212 "calc2.tab.c" break; case 7: #line 47 "calc2.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1217 "calc2.tab.c" break; case 8: #line 49 "calc2.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1222 "calc2.tab.c" break; case 9: #line 51 "calc2.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1227 "calc2.tab.c" break; case 10: #line 53 "calc2.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1232 "calc2.tab.c" break; case 11: #line 55 "calc2.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1237 "calc2.tab.c" break; case 12: #line 57 "calc2.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1242 "calc2.tab.c" break; case 13: #line 59 "calc2.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1247 "calc2.tab.c" break; case 14: #line 61 "calc2.y" { yyval = - yystack.l_mark[0]; } #line 1252 "calc2.tab.c" break; case 15: #line 63 "calc2.y" { yyval = regs[yystack.l_mark[0]]; } #line 1257 "calc2.tab.c" break; case 17: #line 68 "calc2.y" { yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1262 "calc2.tab.c" break; case 18: #line 70 "calc2.y" { yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1267 "calc2.tab.c" break; #line 1269 "calc2.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/inherit1.tab.h0000644000000000000000000000075314030125515016416 0ustar rootroot#ifndef _inherit1__defines_h_ #define _inherit1__defines_h_ #define GLOBAL 257 #define LOCAL 258 #define REAL 259 #define INTEGER 260 #define NAME 261 #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 typedef union YYSTYPE { class cval; type tval; namelist * nlist; name id; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ extern YYSTYPE inherit1_lval; #endif /* _inherit1__defines_h_ */ byacc-20221106/test/btyacc/err_syntax2.output0000644000000000000000000000000012314147323017504 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax4.error0000644000000000000000000000007112361053263017310 0ustar rootrootYACC: e - line 1 of "./err_syntax4.y", unmatched %{ %{ ^ byacc-20221106/test/btyacc/calc_code_top.tab.h0000644000000000000000000000025013565110447017453 0ustar rootroot#ifndef _calc_code_top__defines_h_ #define _calc_code_top__defines_h_ #define DIGIT 257 #define LETTER 258 #define UMINUS 259 #endif /* _calc_code_top__defines_h_ */ byacc-20221106/test/btyacc/big_b.output0000644000000000000000000000000013501467273016276 0ustar rootrootbyacc-20221106/test/btyacc/btyacc_demo.output0000644000000000000000000005234112723664633017530 0ustar rootroot 0 $accept : input $end 1 opt_scope : 2 | CLCL 3 | opt_scope ID CLCL 4 typename : opt_scope ID 5 $$1 : 6 input : $$1 decl_list 7 decl_list : 8 $$2 : 9 decl_list : decl_list $$2 decl 10 decl : decl_specs declarator_list ';' 11 $$3 : 12 decl : decl_specs declarator $$3 block_statement 13 decl_specs : decl_spec 14 | decl_specs $$2 decl_spec 15 cv_quals : 16 | cv_quals cv_qual 17 decl_spec : cv_qual 18 | typename 19 | EXTERN 20 | REGISTER 21 | STATIC 22 cv_qual : CONST 23 | VOLATILE 24 $$4 : 25 $$5 : 26 declarator_list : declarator_list ',' $$4 $$5 declarator 27 | declarator 28 declarator : 29 | ID 30 $$6 : 31 $$7 : 32 declarator : '(' $$6 $$7 declarator ')' 33 | '*' cv_quals $$4 $$5 declarator 34 | declarator '[' $$4 expr ']' 35 | declarator '(' $$4 formal_arg_list ')' cv_quals 36 formal_arg_list : 37 | nonempty_formal_arg_list 38 nonempty_formal_arg_list : nonempty_formal_arg_list ',' $$6 formal_arg 39 | formal_arg 40 formal_arg : decl_specs declarator 41 expr : expr '+' $$6 expr 42 | expr '-' $$6 expr 43 | expr '*' $$6 expr 44 | expr '%' $$6 expr 45 | expr '/' $$6 expr 46 | '*' $$2 expr 47 | ID 48 | CONSTANT 49 statement : decl 50 | expr ';' 51 $$8 : 52 $$9 : 53 statement : IF '(' $$6 expr ')' THEN $$8 statement ELSE $$9 statement 54 | IF '(' $$6 expr ')' THEN $$8 statement 55 $$10 : 56 statement : $$10 block_statement 57 statement_list : 58 | statement_list $$2 statement 59 block_statement : '{' $$2 statement_list '}' state 0 $accept : . input $end (0) $$1 : . (5) . reduce 5 input goto 1 $$1 goto 2 state 1 $accept : input . $end (0) $end accept state 2 input : $$1 . decl_list (6) decl_list : . (7) . reduce 7 decl_list goto 3 state 3 input : $$1 decl_list . (6) decl_list : decl_list . $$2 decl (9) $$2 : . (8) $end reduce 6 ID reduce 8 EXTERN reduce 8 REGISTER reduce 8 STATIC reduce 8 CONST reduce 8 VOLATILE reduce 8 CLCL reduce 8 $$2 goto 4 state 4 decl_list : decl_list $$2 . decl (9) opt_scope : . (1) EXTERN shift 5 REGISTER shift 6 STATIC shift 7 CONST shift 8 VOLATILE shift 9 CLCL shift 10 ID reduce 1 decl goto 11 decl_specs goto 12 decl_spec goto 13 typename goto 14 cv_qual goto 15 opt_scope goto 16 state 5 decl_spec : EXTERN . (19) . reduce 19 state 6 decl_spec : REGISTER . (20) . reduce 20 state 7 decl_spec : STATIC . (21) . reduce 21 state 8 cv_qual : CONST . (22) . reduce 22 state 9 cv_qual : VOLATILE . (23) . reduce 23 state 10 opt_scope : CLCL . (2) . reduce 2 state 11 decl_list : decl_list $$2 decl . (9) . reduce 9 12: shift/reduce conflict (shift 18, reduce 28) on '(' 12: shift/reduce conflict (shift 19, reduce 8) on ID state 12 decl : decl_specs . declarator_list ';' (10) decl : decl_specs . declarator $$3 block_statement (12) decl_specs : decl_specs . $$2 decl_spec (14) $$2 : . (8) declarator : . (28) '*' shift 17 '(' [trial] shift 18 ID [trial] shift 19 '(' [trial] reduce 28 '[' reduce 28 ID [trial] reduce 8 EXTERN reduce 8 REGISTER reduce 8 STATIC reduce 8 CONST reduce 8 VOLATILE reduce 8 CLCL reduce 8 ';' reduce 28 ',' reduce 28 '{' reduce 28 declarator_list goto 20 declarator goto 21 $$2 goto 22 state 13 decl_specs : decl_spec . (13) . reduce 13 state 14 decl_spec : typename . (18) . reduce 18 state 15 decl_spec : cv_qual . (17) . reduce 17 state 16 opt_scope : opt_scope . ID CLCL (3) typename : opt_scope . ID (4) ID shift 23 . error state 17 declarator : '*' . cv_quals $$4 $$5 declarator (33) cv_quals : . (15) . reduce 15 cv_quals goto 24 state 18 declarator : '(' . $$6 $$7 declarator ')' (32) $$6 : . (30) . reduce 30 $$6 goto 25 state 19 declarator : ID . (29) . reduce 29 state 20 decl : decl_specs declarator_list . ';' (10) declarator_list : declarator_list . ',' $$4 $$5 declarator (26) ';' shift 26 ',' shift 27 . error state 21 decl : decl_specs declarator . $$3 block_statement (12) declarator_list : declarator . (27) declarator : declarator . '[' $$4 expr ']' (34) declarator : declarator . '(' $$4 formal_arg_list ')' cv_quals (35) $$3 : . (11) '(' shift 28 '[' shift 29 ';' reduce 27 ',' reduce 27 '{' reduce 11 $$3 goto 30 state 22 decl_specs : decl_specs $$2 . decl_spec (14) opt_scope : . (1) EXTERN shift 5 REGISTER shift 6 STATIC shift 7 CONST shift 8 VOLATILE shift 9 CLCL shift 10 ID reduce 1 decl_spec goto 31 typename goto 14 cv_qual goto 15 opt_scope goto 16 23: shift/reduce conflict (shift 32, reduce 4) on CLCL state 23 opt_scope : opt_scope ID . CLCL (3) typename : opt_scope ID . (4) CLCL [trial] shift 32 '*' reduce 4 '(' reduce 4 '[' reduce 4 ID reduce 4 EXTERN reduce 4 REGISTER reduce 4 STATIC reduce 4 CONST reduce 4 VOLATILE reduce 4 CLCL [trial] reduce 4 ';' reduce 4 ',' reduce 4 ')' reduce 4 '{' reduce 4 state 24 cv_quals : cv_quals . cv_qual (16) declarator : '*' cv_quals . $$4 $$5 declarator (33) $$4 : . (24) CONST shift 8 VOLATILE shift 9 '*' reduce 24 '(' reduce 24 '[' reduce 24 ID reduce 24 ';' reduce 24 ',' reduce 24 ')' reduce 24 '{' reduce 24 cv_qual goto 33 $$4 goto 34 state 25 declarator : '(' $$6 . $$7 declarator ')' (32) $$7 : . (31) . reduce 31 $$7 goto 35 state 26 decl : decl_specs declarator_list ';' . (10) . reduce 10 state 27 declarator_list : declarator_list ',' . $$4 $$5 declarator (26) $$4 : . (24) . reduce 24 $$4 goto 36 state 28 declarator : declarator '(' . $$4 formal_arg_list ')' cv_quals (35) $$4 : . (24) . reduce 24 $$4 goto 37 state 29 declarator : declarator '[' . $$4 expr ']' (34) $$4 : . (24) . reduce 24 $$4 goto 38 state 30 decl : decl_specs declarator $$3 . block_statement (12) '{' shift 39 . error block_statement goto 40 state 31 decl_specs : decl_specs $$2 decl_spec . (14) . reduce 14 state 32 opt_scope : opt_scope ID CLCL . (3) . reduce 3 state 33 cv_quals : cv_quals cv_qual . (16) . reduce 16 state 34 declarator : '*' cv_quals $$4 . $$5 declarator (33) $$5 : . (25) . reduce 25 $$5 goto 41 35: shift/reduce conflict (shift 18, reduce 28) on '(' state 35 declarator : '(' $$6 $$7 . declarator ')' (32) declarator : . (28) '*' shift 17 '(' [trial] shift 18 ID shift 19 '(' [trial] reduce 28 '[' reduce 28 ')' reduce 28 declarator goto 42 state 36 declarator_list : declarator_list ',' $$4 . $$5 declarator (26) $$5 : . (25) . reduce 25 $$5 goto 43 state 37 declarator : declarator '(' $$4 . formal_arg_list ')' cv_quals (35) opt_scope : . (1) formal_arg_list : . (36) EXTERN shift 5 REGISTER shift 6 STATIC shift 7 CONST shift 8 VOLATILE shift 9 CLCL shift 10 ID reduce 1 ')' reduce 36 formal_arg goto 44 decl_specs goto 45 decl_spec goto 13 typename goto 14 cv_qual goto 15 opt_scope goto 16 formal_arg_list goto 46 nonempty_formal_arg_list goto 47 state 38 declarator : declarator '[' $$4 . expr ']' (34) '*' shift 48 ID shift 49 CONSTANT shift 50 . error expr goto 51 state 39 block_statement : '{' . $$2 statement_list '}' (59) $$2 : . (8) . reduce 8 $$2 goto 52 state 40 decl : decl_specs declarator $$3 block_statement . (12) . reduce 12 41: shift/reduce conflict (shift 18, reduce 28) on '(' state 41 declarator : '*' cv_quals $$4 $$5 . declarator (33) declarator : . (28) '*' shift 17 '(' [trial] shift 18 ID shift 19 '(' [trial] reduce 28 '[' reduce 28 ';' reduce 28 ',' reduce 28 ')' reduce 28 '{' reduce 28 declarator goto 53 state 42 declarator : '(' $$6 $$7 declarator . ')' (32) declarator : declarator . '[' $$4 expr ']' (34) declarator : declarator . '(' $$4 formal_arg_list ')' cv_quals (35) '(' shift 28 '[' shift 29 ')' shift 54 . error 43: shift/reduce conflict (shift 18, reduce 28) on '(' state 43 declarator_list : declarator_list ',' $$4 $$5 . declarator (26) declarator : . (28) '*' shift 17 '(' [trial] shift 18 ID shift 19 '(' [trial] reduce 28 '[' reduce 28 ';' reduce 28 ',' reduce 28 declarator goto 55 state 44 nonempty_formal_arg_list : formal_arg . (39) . reduce 39 45: shift/reduce conflict (shift 18, reduce 28) on '(' 45: shift/reduce conflict (shift 19, reduce 8) on ID state 45 decl_specs : decl_specs . $$2 decl_spec (14) formal_arg : decl_specs . declarator (40) $$2 : . (8) declarator : . (28) '*' shift 17 '(' [trial] shift 18 ID [trial] shift 19 '(' [trial] reduce 28 '[' reduce 28 ID [trial] reduce 8 EXTERN reduce 8 REGISTER reduce 8 STATIC reduce 8 CONST reduce 8 VOLATILE reduce 8 CLCL reduce 8 ',' reduce 28 ')' reduce 28 declarator goto 56 $$2 goto 22 state 46 declarator : declarator '(' $$4 formal_arg_list . ')' cv_quals (35) ')' shift 57 . error state 47 formal_arg_list : nonempty_formal_arg_list . (37) nonempty_formal_arg_list : nonempty_formal_arg_list . ',' $$6 formal_arg (38) ',' shift 58 ')' reduce 37 state 48 expr : '*' . $$2 expr (46) $$2 : . (8) . reduce 8 $$2 goto 59 state 49 expr : ID . (47) . reduce 47 state 50 expr : CONSTANT . (48) . reduce 48 state 51 declarator : declarator '[' $$4 expr . ']' (34) expr : expr . '+' $$6 expr (41) expr : expr . '-' $$6 expr (42) expr : expr . '*' $$6 expr (43) expr : expr . '%' $$6 expr (44) expr : expr . '/' $$6 expr (45) '+' shift 60 '-' shift 61 '*' shift 62 '/' shift 63 '%' shift 64 ']' shift 65 . error state 52 block_statement : '{' $$2 . statement_list '}' (59) statement_list : . (57) . reduce 57 statement_list goto 66 state 53 declarator : '*' cv_quals $$4 $$5 declarator . (33) declarator : declarator . '[' $$4 expr ']' (34) declarator : declarator . '(' $$4 formal_arg_list ')' cv_quals (35) '(' shift 28 '[' shift 29 ';' reduce 33 ',' reduce 33 ')' reduce 33 '{' reduce 33 state 54 declarator : '(' $$6 $$7 declarator ')' . (32) . reduce 32 state 55 declarator_list : declarator_list ',' $$4 $$5 declarator . (26) declarator : declarator . '[' $$4 expr ']' (34) declarator : declarator . '(' $$4 formal_arg_list ')' cv_quals (35) '(' shift 28 '[' shift 29 ';' reduce 26 ',' reduce 26 state 56 declarator : declarator . '[' $$4 expr ']' (34) declarator : declarator . '(' $$4 formal_arg_list ')' cv_quals (35) formal_arg : decl_specs declarator . (40) '(' shift 28 '[' shift 29 ',' reduce 40 ')' reduce 40 state 57 declarator : declarator '(' $$4 formal_arg_list ')' . cv_quals (35) cv_quals : . (15) . reduce 15 cv_quals goto 67 state 58 nonempty_formal_arg_list : nonempty_formal_arg_list ',' . $$6 formal_arg (38) $$6 : . (30) . reduce 30 $$6 goto 68 state 59 expr : '*' $$2 . expr (46) '*' shift 48 ID shift 49 CONSTANT shift 50 . error expr goto 69 state 60 expr : expr '+' . $$6 expr (41) $$6 : . (30) . reduce 30 $$6 goto 70 state 61 expr : expr '-' . $$6 expr (42) $$6 : . (30) . reduce 30 $$6 goto 71 state 62 expr : expr '*' . $$6 expr (43) $$6 : . (30) . reduce 30 $$6 goto 72 state 63 expr : expr '/' . $$6 expr (45) $$6 : . (30) . reduce 30 $$6 goto 73 state 64 expr : expr '%' . $$6 expr (44) $$6 : . (30) . reduce 30 $$6 goto 74 state 65 declarator : declarator '[' $$4 expr ']' . (34) . reduce 34 state 66 statement_list : statement_list . $$2 statement (58) block_statement : '{' $$2 statement_list . '}' (59) $$2 : . (8) '}' shift 75 '*' reduce 8 ID reduce 8 CONSTANT reduce 8 EXTERN reduce 8 REGISTER reduce 8 STATIC reduce 8 CONST reduce 8 VOLATILE reduce 8 IF reduce 8 CLCL reduce 8 '{' reduce 8 $$2 goto 76 state 67 cv_quals : cv_quals . cv_qual (16) declarator : declarator '(' $$4 formal_arg_list ')' cv_quals . (35) CONST shift 8 VOLATILE shift 9 '(' reduce 35 '[' reduce 35 ';' reduce 35 ',' reduce 35 ')' reduce 35 '{' reduce 35 cv_qual goto 33 state 68 nonempty_formal_arg_list : nonempty_formal_arg_list ',' $$6 . formal_arg (38) opt_scope : . (1) EXTERN shift 5 REGISTER shift 6 STATIC shift 7 CONST shift 8 VOLATILE shift 9 CLCL shift 10 ID reduce 1 formal_arg goto 77 decl_specs goto 45 decl_spec goto 13 typename goto 14 cv_qual goto 15 opt_scope goto 16 state 69 expr : expr . '+' $$6 expr (41) expr : expr . '-' $$6 expr (42) expr : expr . '*' $$6 expr (43) expr : expr . '%' $$6 expr (44) expr : expr . '/' $$6 expr (45) expr : '*' $$2 expr . (46) . reduce 46 state 70 expr : expr '+' $$6 . expr (41) '*' shift 48 ID shift 49 CONSTANT shift 50 . error expr goto 78 state 71 expr : expr '-' $$6 . expr (42) '*' shift 48 ID shift 49 CONSTANT shift 50 . error expr goto 79 state 72 expr : expr '*' $$6 . expr (43) '*' shift 48 ID shift 49 CONSTANT shift 50 . error expr goto 80 state 73 expr : expr '/' $$6 . expr (45) '*' shift 48 ID shift 49 CONSTANT shift 50 . error expr goto 81 state 74 expr : expr '%' $$6 . expr (44) '*' shift 48 ID shift 49 CONSTANT shift 50 . error expr goto 82 state 75 block_statement : '{' $$2 statement_list '}' . (59) . reduce 59 76: shift/reduce conflict (shift 49, reduce 1) on ID state 76 statement_list : statement_list $$2 . statement (58) opt_scope : . (1) $$10 : . (55) '*' shift 48 ID [trial] shift 49 CONSTANT shift 50 EXTERN shift 5 REGISTER shift 6 STATIC shift 7 CONST shift 8 VOLATILE shift 9 IF shift 83 CLCL shift 10 ID [trial] reduce 1 '{' reduce 55 expr goto 84 decl goto 85 statement goto 86 decl_specs goto 12 decl_spec goto 13 typename goto 14 cv_qual goto 15 opt_scope goto 16 $$10 goto 87 state 77 nonempty_formal_arg_list : nonempty_formal_arg_list ',' $$6 formal_arg . (38) . reduce 38 state 78 expr : expr . '+' $$6 expr (41) expr : expr '+' $$6 expr . (41) expr : expr . '-' $$6 expr (42) expr : expr . '*' $$6 expr (43) expr : expr . '%' $$6 expr (44) expr : expr . '/' $$6 expr (45) '*' shift 62 '/' shift 63 '%' shift 64 '+' reduce 41 '-' reduce 41 ';' reduce 41 ')' reduce 41 ']' reduce 41 state 79 expr : expr . '+' $$6 expr (41) expr : expr . '-' $$6 expr (42) expr : expr '-' $$6 expr . (42) expr : expr . '*' $$6 expr (43) expr : expr . '%' $$6 expr (44) expr : expr . '/' $$6 expr (45) '*' shift 62 '/' shift 63 '%' shift 64 '+' reduce 42 '-' reduce 42 ';' reduce 42 ')' reduce 42 ']' reduce 42 state 80 expr : expr . '+' $$6 expr (41) expr : expr . '-' $$6 expr (42) expr : expr . '*' $$6 expr (43) expr : expr '*' $$6 expr . (43) expr : expr . '%' $$6 expr (44) expr : expr . '/' $$6 expr (45) . reduce 43 state 81 expr : expr . '+' $$6 expr (41) expr : expr . '-' $$6 expr (42) expr : expr . '*' $$6 expr (43) expr : expr . '%' $$6 expr (44) expr : expr . '/' $$6 expr (45) expr : expr '/' $$6 expr . (45) . reduce 45 state 82 expr : expr . '+' $$6 expr (41) expr : expr . '-' $$6 expr (42) expr : expr . '*' $$6 expr (43) expr : expr . '%' $$6 expr (44) expr : expr '%' $$6 expr . (44) expr : expr . '/' $$6 expr (45) . reduce 44 state 83 statement : IF . '(' $$6 expr ')' THEN $$8 statement ELSE $$9 statement (53) statement : IF . '(' $$6 expr ')' THEN $$8 statement (54) '(' shift 88 . error state 84 expr : expr . '+' $$6 expr (41) expr : expr . '-' $$6 expr (42) expr : expr . '*' $$6 expr (43) expr : expr . '%' $$6 expr (44) expr : expr . '/' $$6 expr (45) statement : expr . ';' (50) '+' shift 60 '-' shift 61 '*' shift 62 '/' shift 63 '%' shift 64 ';' shift 89 . error state 85 statement : decl . (49) . reduce 49 state 86 statement_list : statement_list $$2 statement . (58) . reduce 58 state 87 statement : $$10 . block_statement (56) '{' shift 39 . error block_statement goto 90 state 88 statement : IF '(' . $$6 expr ')' THEN $$8 statement ELSE $$9 statement (53) statement : IF '(' . $$6 expr ')' THEN $$8 statement (54) $$6 : . (30) . reduce 30 $$6 goto 91 state 89 statement : expr ';' . (50) . reduce 50 state 90 statement : $$10 block_statement . (56) . reduce 56 state 91 statement : IF '(' $$6 . expr ')' THEN $$8 statement ELSE $$9 statement (53) statement : IF '(' $$6 . expr ')' THEN $$8 statement (54) '*' shift 48 ID shift 49 CONSTANT shift 50 . error expr goto 92 state 92 expr : expr . '+' $$6 expr (41) expr : expr . '-' $$6 expr (42) expr : expr . '*' $$6 expr (43) expr : expr . '%' $$6 expr (44) expr : expr . '/' $$6 expr (45) statement : IF '(' $$6 expr . ')' THEN $$8 statement ELSE $$9 statement (53) statement : IF '(' $$6 expr . ')' THEN $$8 statement (54) '+' shift 60 '-' shift 61 '*' shift 62 '/' shift 63 '%' shift 64 ')' shift 93 . error state 93 statement : IF '(' $$6 expr ')' . THEN $$8 statement ELSE $$9 statement (53) statement : IF '(' $$6 expr ')' . THEN $$8 statement (54) THEN shift 94 . error state 94 statement : IF '(' $$6 expr ')' THEN . $$8 statement ELSE $$9 statement (53) statement : IF '(' $$6 expr ')' THEN . $$8 statement (54) $$8 : . (51) . reduce 51 $$8 goto 95 95: shift/reduce conflict (shift 49, reduce 1) on ID state 95 statement : IF '(' $$6 expr ')' THEN $$8 . statement ELSE $$9 statement (53) statement : IF '(' $$6 expr ')' THEN $$8 . statement (54) opt_scope : . (1) $$10 : . (55) '*' shift 48 ID [trial] shift 49 CONSTANT shift 50 EXTERN shift 5 REGISTER shift 6 STATIC shift 7 CONST shift 8 VOLATILE shift 9 IF shift 83 CLCL shift 10 ID [trial] reduce 1 '{' reduce 55 expr goto 84 decl goto 85 statement goto 96 decl_specs goto 12 decl_spec goto 13 typename goto 14 cv_qual goto 15 opt_scope goto 16 $$10 goto 87 96: shift/reduce conflict (shift 97, reduce 54) on ELSE state 96 statement : IF '(' $$6 expr ')' THEN $$8 statement . ELSE $$9 statement (53) statement : IF '(' $$6 expr ')' THEN $$8 statement . (54) ELSE [trial] shift 97 '*' reduce 54 ID reduce 54 CONSTANT reduce 54 EXTERN reduce 54 REGISTER reduce 54 STATIC reduce 54 CONST reduce 54 VOLATILE reduce 54 IF reduce 54 ELSE [trial] reduce 54 CLCL reduce 54 '{' reduce 54 '}' reduce 54 state 97 statement : IF '(' $$6 expr ')' THEN $$8 statement ELSE . $$9 statement (53) $$9 : . (52) . reduce 52 $$9 goto 98 98: shift/reduce conflict (shift 49, reduce 1) on ID state 98 statement : IF '(' $$6 expr ')' THEN $$8 statement ELSE $$9 . statement (53) opt_scope : . (1) $$10 : . (55) '*' shift 48 ID [trial] shift 49 CONSTANT shift 50 EXTERN shift 5 REGISTER shift 6 STATIC shift 7 CONST shift 8 VOLATILE shift 9 IF shift 83 CLCL shift 10 ID [trial] reduce 1 '{' reduce 55 expr goto 84 decl goto 85 statement goto 99 decl_specs goto 12 decl_spec goto 13 typename goto 14 cv_qual goto 15 opt_scope goto 16 $$10 goto 87 state 99 statement : IF '(' $$6 expr ')' THEN $$8 statement ELSE $$9 statement . (53) . reduce 53 State 12 contains 2 shift/reduce conflicts. State 23 contains 1 shift/reduce conflict. State 35 contains 1 shift/reduce conflict. State 41 contains 1 shift/reduce conflict. State 43 contains 1 shift/reduce conflict. State 45 contains 2 shift/reduce conflicts. State 76 contains 1 shift/reduce conflict. State 95 contains 1 shift/reduce conflict. State 96 contains 1 shift/reduce conflict. State 98 contains 1 shift/reduce conflict. 29 terminals, 29 nonterminals 60 grammar rules, 100 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 43 '+' 3 45 '-' 4 42 '*' 5 47 '/' 6 37 '%' 7 257 PREFIX 8 258 POSTFIX 9 40 '(' 10 91 '[' 11 46 '.' 12 259 ID 13 260 CONSTANT 14 261 EXTERN 15 262 REGISTER 16 263 STATIC 17 264 CONST 18 265 VOLATILE 19 266 IF 20 267 THEN 21 268 ELSE 22 269 CLCL 23 59 ';' 24 44 ',' 25 41 ')' 26 93 ']' 27 123 '{' 28 125 '}' 29 270 $accept 30 271 input 31 272 expr 32 273 decl 33 274 declarator_list 34 275 decl_list 35 276 statement 36 277 statement_list 37 278 block_statement 38 279 declarator 39 280 formal_arg 40 281 decl_specs 41 282 decl_spec 42 283 typename 43 284 cv_quals 44 285 cv_qual 45 286 opt_scope 46 287 formal_arg_list 47 288 nonempty_formal_arg_list 48 289 $$1 49 290 $$2 50 291 $$3 51 292 $$4 52 293 $$5 53 294 $$6 54 295 $$7 55 296 $$8 56 297 $$9 57 298 $$10 byacc-20221106/test/btyacc/err_syntax14.output0000644000000000000000000000000012314147323017567 0ustar rootrootbyacc-20221106/test/btyacc/no_opts.output0000644000000000000000000000000013501467273016715 0ustar rootrootbyacc-20221106/test/btyacc/btyacc_destroy2.tab.h0000644000000000000000000000075314030125513017771 0ustar rootroot#ifndef _destroy2__defines_h_ #define _destroy2__defines_h_ #define GLOBAL 257 #define LOCAL 258 #define REAL 259 #define INTEGER 260 #define NAME 261 #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 typedef union YYSTYPE { class cval; type tval; namelist * nlist; name id; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ extern YYSTYPE destroy2_lval; #endif /* _destroy2__defines_h_ */ byacc-20221106/test/btyacc/defines2.calc.c0000644000000000000000000013156014104035275016527 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #define YYPREFIX "yy" #define YYPURE 0 #line 2 "calc.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 34 "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 #if !(defined(yylex) || defined(YYSTATE)) int YYLEX_DECL(); #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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT yylhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT yylen[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT yydefred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT yystos[] = { 0, 261, 256, 257, 258, 45, 40, 262, 263, 264, 10, 61, 258, 263, 263, 10, 124, 38, 43, 45, 42, 47, 37, 257, 263, 41, 263, 263, 263, 263, 263, 263, 263, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT yydgoto[] = { 1, 7, 8, 9, }; static const YYINT yysindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT yyrindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; #if YYBTYACC static const YYINT yycindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT yygindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT yytable[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT yycheck[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #if YYBTYACC static const YYINT yyctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const yyname[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number", "illegal-symbol", }; static const char *const yyrule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 66 "calc.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 418 "y.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 28 "calc.y" { yyerrok ; } #line 1091 "y.tab.c" break; case 4: #line 32 "calc.y" { printf("%d\n",yystack.l_mark[0]);} #line 1096 "y.tab.c" break; case 5: #line 34 "calc.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1101 "y.tab.c" break; case 6: #line 38 "calc.y" { yyval = yystack.l_mark[-1]; } #line 1106 "y.tab.c" break; case 7: #line 40 "calc.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1111 "y.tab.c" break; case 8: #line 42 "calc.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1116 "y.tab.c" break; case 9: #line 44 "calc.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1121 "y.tab.c" break; case 10: #line 46 "calc.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1126 "y.tab.c" break; case 11: #line 48 "calc.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1131 "y.tab.c" break; case 12: #line 50 "calc.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1136 "y.tab.c" break; case 13: #line 52 "calc.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1141 "y.tab.c" break; case 14: #line 54 "calc.y" { yyval = - yystack.l_mark[0]; } #line 1146 "y.tab.c" break; case 15: #line 56 "calc.y" { yyval = regs[yystack.l_mark[0]]; } #line 1151 "y.tab.c" break; case 17: #line 61 "calc.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1156 "y.tab.c" break; case 18: #line 63 "calc.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1161 "y.tab.c" break; #line 1163 "y.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_inherit5.output0000644000000000000000000000000012315230212017612 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax14.error0000644000000000000000000000017312361053263017374 0ustar rootrootYACC: w - line 7 of "./err_syntax14.y", the start symbol has been redeclared YACC: e - the start symbol text2 is undefined byacc-20221106/test/btyacc/err_syntax5.tab.c0000644000000000000000000000067213726503203017156 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/quote_calc4.error0000644000000000000000000000004112313700137017222 0ustar rootrootYACC: 54 shift/reduce conflicts. byacc-20221106/test/btyacc/pure_calc.error0000644000000000000000000000000012313700136016746 0ustar rootrootbyacc-20221106/test/btyacc/calc_code_default.output0000644000000000000000000001630313565110447020647 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 DIGIT 3 258 LETTER 4 124 '|' 5 38 '&' 6 43 '+' 7 45 '-' 8 42 '*' 9 47 '/' 10 37 '%' 11 259 UMINUS 12 10 '\n' 13 61 '=' 14 40 '(' 15 41 ')' 16 260 $accept 17 261 list 18 262 stat 19 263 expr 20 264 number byacc-20221106/test/btyacc/pure_calc.output0000644000000000000000000001630312312171121017165 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 DIGIT 3 258 LETTER 4 124 '|' 5 38 '&' 6 43 '+' 7 45 '-' 8 42 '*' 9 47 '/' 10 37 '%' 11 259 UMINUS 12 10 '\n' 13 61 '=' 14 40 '(' 15 41 ')' 16 260 $accept 17 261 list 18 262 stat 19 263 expr 20 264 number byacc-20221106/test/btyacc/quote_calc2-s.output0000644000000000000000000002713212312171122017674 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr "ADD" expr 8 | expr "SUB" expr 9 | expr "MUL" expr 10 | expr "DIV" expr 11 | expr "MOD" expr 12 | expr "AND" expr 13 | expr '|' expr 14 | "SUB" expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 "SUB" shift 3 DIGIT shift 4 LETTER shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 expr : "SUB" . expr (14) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 12 number goto 9 state 4 number : DIGIT . (17) . reduce 17 state 5 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 13 "ADD" reduce 15 "SUB" reduce 15 "MUL" reduce 15 "DIV" reduce 15 "MOD" reduce 15 "AND" reduce 15 '|' reduce 15 '\n' reduce 15 state 6 expr : '(' . expr ')' (6) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 "ADD" reduce 16 "SUB" reduce 16 "MUL" reduce 16 "DIV" reduce 16 "MOD" reduce 16 "AND" reduce 16 '|' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 expr : LETTER . (15) . reduce 15 12: shift/reduce conflict (shift 16, reduce 14) on "ADD" 12: shift/reduce conflict (shift 17, reduce 14) on "SUB" 12: shift/reduce conflict (shift 18, reduce 14) on "MUL" 12: shift/reduce conflict (shift 19, reduce 14) on "DIV" 12: shift/reduce conflict (shift 20, reduce 14) on "MOD" 12: shift/reduce conflict (shift 21, reduce 14) on "AND" state 12 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) expr : "SUB" expr . (14) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' reduce 14 '\n' reduce 14 ')' reduce 14 state 13 stat : LETTER '=' . expr (5) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 24 number goto 9 state 14 expr : '(' expr . ')' (6) expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr "ADD" . expr (7) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr "SUB" . expr (8) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr "MUL" . expr (9) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr "DIV" . expr (10) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr "MOD" . expr (11) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr "AND" . expr (12) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '|' . expr (13) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 26: shift/reduce conflict (shift 16, reduce 7) on "ADD" 26: shift/reduce conflict (shift 17, reduce 7) on "SUB" 26: shift/reduce conflict (shift 18, reduce 7) on "MUL" 26: shift/reduce conflict (shift 19, reduce 7) on "DIV" 26: shift/reduce conflict (shift 20, reduce 7) on "MOD" 26: shift/reduce conflict (shift 21, reduce 7) on "AND" 26: shift/reduce conflict (shift 22, reduce 7) on '|' state 26 expr : expr . "ADD" expr (7) expr : expr "ADD" expr . (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 7 ')' reduce 7 27: shift/reduce conflict (shift 16, reduce 8) on "ADD" 27: shift/reduce conflict (shift 17, reduce 8) on "SUB" 27: shift/reduce conflict (shift 18, reduce 8) on "MUL" 27: shift/reduce conflict (shift 19, reduce 8) on "DIV" 27: shift/reduce conflict (shift 20, reduce 8) on "MOD" 27: shift/reduce conflict (shift 21, reduce 8) on "AND" 27: shift/reduce conflict (shift 22, reduce 8) on '|' state 27 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr "SUB" expr . (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 8 ')' reduce 8 28: shift/reduce conflict (shift 16, reduce 9) on "ADD" 28: shift/reduce conflict (shift 17, reduce 9) on "SUB" 28: shift/reduce conflict (shift 18, reduce 9) on "MUL" 28: shift/reduce conflict (shift 19, reduce 9) on "DIV" 28: shift/reduce conflict (shift 20, reduce 9) on "MOD" 28: shift/reduce conflict (shift 21, reduce 9) on "AND" 28: shift/reduce conflict (shift 22, reduce 9) on '|' state 28 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr "MUL" expr . (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 9 ')' reduce 9 29: shift/reduce conflict (shift 16, reduce 10) on "ADD" 29: shift/reduce conflict (shift 17, reduce 10) on "SUB" 29: shift/reduce conflict (shift 18, reduce 10) on "MUL" 29: shift/reduce conflict (shift 19, reduce 10) on "DIV" 29: shift/reduce conflict (shift 20, reduce 10) on "MOD" 29: shift/reduce conflict (shift 21, reduce 10) on "AND" 29: shift/reduce conflict (shift 22, reduce 10) on '|' state 29 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr "DIV" expr . (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 10 ')' reduce 10 30: shift/reduce conflict (shift 16, reduce 11) on "ADD" 30: shift/reduce conflict (shift 17, reduce 11) on "SUB" 30: shift/reduce conflict (shift 18, reduce 11) on "MUL" 30: shift/reduce conflict (shift 19, reduce 11) on "DIV" 30: shift/reduce conflict (shift 20, reduce 11) on "MOD" 30: shift/reduce conflict (shift 21, reduce 11) on "AND" 30: shift/reduce conflict (shift 22, reduce 11) on '|' state 30 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr "MOD" expr . (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 11 ')' reduce 11 31: shift/reduce conflict (shift 16, reduce 12) on "ADD" 31: shift/reduce conflict (shift 17, reduce 12) on "SUB" 31: shift/reduce conflict (shift 18, reduce 12) on "MUL" 31: shift/reduce conflict (shift 19, reduce 12) on "DIV" 31: shift/reduce conflict (shift 20, reduce 12) on "MOD" 31: shift/reduce conflict (shift 21, reduce 12) on "AND" 31: shift/reduce conflict (shift 22, reduce 12) on '|' state 31 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr "AND" expr . (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 12 ')' reduce 12 32: shift/reduce conflict (shift 16, reduce 13) on "ADD" 32: shift/reduce conflict (shift 17, reduce 13) on "SUB" 32: shift/reduce conflict (shift 18, reduce 13) on "MUL" 32: shift/reduce conflict (shift 19, reduce 13) on "DIV" 32: shift/reduce conflict (shift 20, reduce 13) on "MOD" 32: shift/reduce conflict (shift 21, reduce 13) on "AND" state 32 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' reduce 13 '\n' reduce 13 ')' reduce 13 State 12 contains 6 shift/reduce conflicts. State 26 contains 7 shift/reduce conflicts. State 27 contains 7 shift/reduce conflicts. State 28 contains 7 shift/reduce conflicts. State 29 contains 7 shift/reduce conflicts. State 30 contains 7 shift/reduce conflicts. State 31 contains 7 shift/reduce conflicts. State 32 contains 6 shift/reduce conflicts. 28 terminals, 5 nonterminals 19 grammar rules, 33 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 OP_ADD 3 258 "ADD" 4 259 OP_SUB 5 260 "SUB" 6 261 OP_MUL 7 262 "MUL" 8 263 OP_DIV 9 264 "DIV" 10 265 OP_MOD 11 266 "MOD" 12 267 OP_AND 13 268 "AND" 14 269 DIGIT 15 270 LETTER 16 124 '|' 17 38 '&' 18 43 '+' 19 45 '-' 20 42 '*' 21 47 '/' 22 37 '%' 23 271 UMINUS 24 10 '\n' 25 61 '=' 26 40 '(' 27 41 ')' 28 272 $accept 29 273 list 30 274 stat 31 275 expr 32 276 number byacc-20221106/test/btyacc/quote_calc2.error0000644000000000000000000000004112313700136017217 0ustar rootrootYACC: 54 shift/reduce conflicts. byacc-20221106/test/btyacc/pure_calc.tab.c0000644000000000000000000013644414104035275016637 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse calc_parse #endif /* yyparse */ #ifndef yylex #define yylex calc_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc_error #endif /* yyerror */ #ifndef yychar #define yychar calc_char #endif /* yychar */ #ifndef yyval #define yyval calc_val #endif /* yyval */ #ifndef yylval #define yylval calc_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc_len #endif /* yylen */ #ifndef yydefred #define yydefred calc_defred #endif /* yydefred */ #ifndef yystos #define yystos calc_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto calc_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc_table #endif /* yytable */ #ifndef yycheck #define yycheck calc_check #endif /* yycheck */ #ifndef yyname #define yyname calc_name #endif /* yyname */ #ifndef yyrule #define yyrule calc_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex calc_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable calc_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "calc_" #define YYPURE 1 #line 2 "pure_calc.y" # include # include int regs[26]; int base; #ifdef YYBISON #define YYSTYPE int #define YYLEX_PARAM &yylval #define YYLEX_DECL() yylex(YYSTYPE *yylval) #define YYERROR_DECL() yyerror(const char *s) int YYLEX_DECL(); static void YYERROR_DECL(); #endif #line 137 "pure_calc.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 # ifdef YYLEX_PARAM_TYPE # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM) # else # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM) # endif # define YYLEX yylex(&yylval, YYLEX_PARAM) #else # define YYLEX_DECL() yylex(YYSTYPE *yylval) # define YYLEX yylex(&yylval) #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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT calc_stos[] = { 0, 261, 256, 257, 258, 45, 40, 262, 263, 264, 10, 61, 258, 263, 263, 10, 124, 38, 43, 45, 42, 47, 37, 257, 263, 41, 263, 263, 263, 263, 263, 263, 263, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT calc_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; #if YYBTYACC static const YYINT calc_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT calc_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #if YYBTYACC static const YYINT calc_ctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number", "illegal-symbol", }; static const char *const calc_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ #line 72 "pure_calc.y" /* start of programs */ #ifdef YYBYACC static int YYLEX_DECL(); #endif int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void YYERROR_DECL() { fprintf(stderr, "%s\n", s); } int YYLEX_DECL() { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { *yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { *yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 473 "pure_calc.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif /* variables for the parser stack */ YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif yyerrflag = 0; yychar = 0; memset(&yyval, 0, sizeof(yyval)); memset(&yylval, 0, sizeof(yylval)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(&yyloc, 0, sizeof(yyloc)); memset(&yylloc, 0, sizeof(yylloc)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 34 "pure_calc.y" { yyerrok ; } #line 1207 "pure_calc.tab.c" break; case 4: #line 38 "pure_calc.y" { printf("%d\n",yystack.l_mark[0]);} #line 1212 "pure_calc.tab.c" break; case 5: #line 40 "pure_calc.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1217 "pure_calc.tab.c" break; case 6: #line 44 "pure_calc.y" { yyval = yystack.l_mark[-1]; } #line 1222 "pure_calc.tab.c" break; case 7: #line 46 "pure_calc.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1227 "pure_calc.tab.c" break; case 8: #line 48 "pure_calc.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1232 "pure_calc.tab.c" break; case 9: #line 50 "pure_calc.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1237 "pure_calc.tab.c" break; case 10: #line 52 "pure_calc.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1242 "pure_calc.tab.c" break; case 11: #line 54 "pure_calc.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1247 "pure_calc.tab.c" break; case 12: #line 56 "pure_calc.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1252 "pure_calc.tab.c" break; case 13: #line 58 "pure_calc.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1257 "pure_calc.tab.c" break; case 14: #line 60 "pure_calc.y" { yyval = - yystack.l_mark[0]; } #line 1262 "pure_calc.tab.c" break; case 15: #line 62 "pure_calc.y" { yyval = regs[yystack.l_mark[0]]; } #line 1267 "pure_calc.tab.c" break; case 17: #line 67 "pure_calc.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1272 "pure_calc.tab.c" break; case 18: #line 69 "pure_calc.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1277 "pure_calc.tab.c" break; #line 1279 "pure_calc.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/no_verbose.error0000644000000000000000000000005213501467273017175 0ustar rootrootYACC: f - cannot open "nosuchfile.output" byacc-20221106/test/btyacc/error.error0000644000000000000000000000000012313700135016141 0ustar rootrootbyacc-20221106/test/btyacc/inherit1.output0000644000000000000000000000404312315230212016751 0ustar rootroot 0 $accept : declaration $end 1 declaration : class type namelist 2 | type locnamelist 3 class : GLOBAL 4 | LOCAL 5 type : REAL 6 | INTEGER 7 namelist : namelist NAME 8 | NAME 9 $$1 : 10 $$2 : 11 locnamelist : $$1 $$2 namelist state 0 $accept : . declaration $end (0) GLOBAL shift 1 LOCAL shift 2 REAL shift 3 INTEGER shift 4 . error declaration goto 5 class goto 6 type goto 7 state 1 class : GLOBAL . (3) . reduce 3 state 2 class : LOCAL . (4) . reduce 4 state 3 type : REAL . (5) . reduce 5 state 4 type : INTEGER . (6) . reduce 6 state 5 $accept : declaration . $end (0) $end accept state 6 declaration : class . type namelist (1) REAL shift 3 INTEGER shift 4 . error type goto 8 state 7 declaration : type . locnamelist (2) $$1 : . (9) . reduce 9 locnamelist goto 9 $$1 goto 10 state 8 declaration : class type . namelist (1) NAME shift 11 . error namelist goto 12 state 9 declaration : type locnamelist . (2) . reduce 2 state 10 locnamelist : $$1 . $$2 namelist (11) $$2 : . (10) . reduce 10 $$2 goto 13 state 11 namelist : NAME . (8) . reduce 8 state 12 declaration : class type namelist . (1) namelist : namelist . NAME (7) NAME shift 14 $end reduce 1 state 13 locnamelist : $$1 $$2 . namelist (11) NAME shift 11 . error namelist goto 15 state 14 namelist : namelist NAME . (7) . reduce 7 state 15 namelist : namelist . NAME (7) locnamelist : $$1 $$2 namelist . (11) NAME shift 14 $end reduce 11 7 terminals, 8 nonterminals 12 grammar rules, 16 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 GLOBAL 3 258 LOCAL 4 259 REAL 5 260 INTEGER 6 261 NAME 7 262 $accept 8 263 declaration 9 264 namelist 10 265 locnamelist 11 266 class 12 267 type 13 268 $$1 14 269 $$2 byacc-20221106/test/btyacc/err_syntax19.error0000644000000000000000000000015412361053263017400 0ustar rootrootYACC: e - line 9 of "./err_syntax19.y", illegal $-name { $$ = $; } ^ byacc-20221106/test/btyacc/calc_code_imports.tab.c0000644000000000000000000013627014104035275020350 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse calc_code_imports_parse #endif /* yyparse */ #ifndef yylex #define yylex calc_code_imports_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc_code_imports_error #endif /* yyerror */ #ifndef yychar #define yychar calc_code_imports_char #endif /* yychar */ #ifndef yyval #define yyval calc_code_imports_val #endif /* yyval */ #ifndef yylval #define yylval calc_code_imports_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc_code_imports_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc_code_imports_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc_code_imports_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc_code_imports_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc_code_imports_len #endif /* yylen */ #ifndef yydefred #define yydefred calc_code_imports_defred #endif /* yydefred */ #ifndef yystos #define yystos calc_code_imports_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto calc_code_imports_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc_code_imports_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc_code_imports_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc_code_imports_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc_code_imports_table #endif /* yytable */ #ifndef yycheck #define yycheck calc_code_imports_check #endif /* yycheck */ #ifndef yyname #define yyname calc_code_imports_name #endif /* yyname */ #ifndef yyrule #define yyrule calc_code_imports_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex calc_code_imports_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable calc_code_imports_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "calc_code_imports_" #define YYPURE 0 #line 5 "calc_code_imports.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 131 "calc_code_imports.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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc_code_imports_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc_code_imports_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc_code_imports_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT calc_code_imports_stos[] = { 0, 261, 256, 257, 258, 45, 40, 262, 263, 264, 10, 61, 258, 263, 263, 10, 124, 38, 43, 45, 42, 47, 37, 257, 263, 41, 263, 263, 263, 263, 263, 263, 263, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT calc_code_imports_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc_code_imports_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc_code_imports_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; #if YYBTYACC static const YYINT calc_code_imports_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT calc_code_imports_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc_code_imports_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc_code_imports_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #if YYBTYACC static const YYINT calc_code_imports_ctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc_code_imports_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number", "illegal-symbol", }; static const char *const calc_code_imports_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 69 "calc_code_imports.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 511 "calc_code_imports.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 31 "calc_code_imports.y" { yyerrok ; } #line 1184 "calc_code_imports.tab.c" break; case 4: #line 35 "calc_code_imports.y" { printf("%d\n",yystack.l_mark[0]);} #line 1189 "calc_code_imports.tab.c" break; case 5: #line 37 "calc_code_imports.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1194 "calc_code_imports.tab.c" break; case 6: #line 41 "calc_code_imports.y" { yyval = yystack.l_mark[-1]; } #line 1199 "calc_code_imports.tab.c" break; case 7: #line 43 "calc_code_imports.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1204 "calc_code_imports.tab.c" break; case 8: #line 45 "calc_code_imports.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1209 "calc_code_imports.tab.c" break; case 9: #line 47 "calc_code_imports.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1214 "calc_code_imports.tab.c" break; case 10: #line 49 "calc_code_imports.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1219 "calc_code_imports.tab.c" break; case 11: #line 51 "calc_code_imports.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1224 "calc_code_imports.tab.c" break; case 12: #line 53 "calc_code_imports.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1229 "calc_code_imports.tab.c" break; case 13: #line 55 "calc_code_imports.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1234 "calc_code_imports.tab.c" break; case 14: #line 57 "calc_code_imports.y" { yyval = - yystack.l_mark[0]; } #line 1239 "calc_code_imports.tab.c" break; case 15: #line 59 "calc_code_imports.y" { yyval = regs[yystack.l_mark[0]]; } #line 1244 "calc_code_imports.tab.c" break; case 17: #line 64 "calc_code_imports.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1249 "calc_code_imports.tab.c" break; case 18: #line 66 "calc_code_imports.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1254 "calc_code_imports.tab.c" break; #line 1256 "calc_code_imports.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_syntax27.tab.h0000644000000000000000000000000012320633041017221 0ustar rootrootbyacc-20221106/test/btyacc/no_output2.output0000644000000000000000000000000013501467273017352 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax7a.tab.c0000644000000000000000000000067213726503203017321 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/quote_calc4-s.output0000644000000000000000000003316012312171122017674 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr "ADD-operator" expr 8 | expr "SUB-operator" expr 9 | expr "MUL-operator" expr 10 | expr "DIV-operator" expr 11 | expr "MOD-operator" expr 12 | expr "AND-operator" expr 13 | expr '|' expr 14 | "SUB-operator" expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 expr : "SUB-operator" . expr (14) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 12 number goto 9 state 4 number : DIGIT . (17) . reduce 17 state 5 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 13 "ADD-operator" reduce 15 "SUB-operator" reduce 15 "MUL-operator" reduce 15 "DIV-operator" reduce 15 "MOD-operator" reduce 15 "AND-operator" reduce 15 '|' reduce 15 '\n' reduce 15 state 6 expr : '(' . expr ')' (6) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 "ADD-operator" reduce 16 "SUB-operator" reduce 16 "MUL-operator" reduce 16 "DIV-operator" reduce 16 "MOD-operator" reduce 16 "AND-operator" reduce 16 '|' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 expr : LETTER . (15) . reduce 15 12: shift/reduce conflict (shift 16, reduce 14) on "ADD-operator" 12: shift/reduce conflict (shift 17, reduce 14) on "SUB-operator" 12: shift/reduce conflict (shift 18, reduce 14) on "MUL-operator" 12: shift/reduce conflict (shift 19, reduce 14) on "DIV-operator" 12: shift/reduce conflict (shift 20, reduce 14) on "MOD-operator" 12: shift/reduce conflict (shift 21, reduce 14) on "AND-operator" state 12 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) expr : "SUB-operator" expr . (14) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' reduce 14 '\n' reduce 14 ')' reduce 14 state 13 stat : LETTER '=' . expr (5) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 24 number goto 9 state 14 expr : '(' expr . ')' (6) expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr "ADD-operator" . expr (7) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr "SUB-operator" . expr (8) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr "MUL-operator" . expr (9) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr "DIV-operator" . expr (10) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr "MOD-operator" . expr (11) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr "AND-operator" . expr (12) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '|' . expr (13) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 26: shift/reduce conflict (shift 16, reduce 7) on "ADD-operator" 26: shift/reduce conflict (shift 17, reduce 7) on "SUB-operator" 26: shift/reduce conflict (shift 18, reduce 7) on "MUL-operator" 26: shift/reduce conflict (shift 19, reduce 7) on "DIV-operator" 26: shift/reduce conflict (shift 20, reduce 7) on "MOD-operator" 26: shift/reduce conflict (shift 21, reduce 7) on "AND-operator" 26: shift/reduce conflict (shift 22, reduce 7) on '|' state 26 expr : expr . "ADD-operator" expr (7) expr : expr "ADD-operator" expr . (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 7 ')' reduce 7 27: shift/reduce conflict (shift 16, reduce 8) on "ADD-operator" 27: shift/reduce conflict (shift 17, reduce 8) on "SUB-operator" 27: shift/reduce conflict (shift 18, reduce 8) on "MUL-operator" 27: shift/reduce conflict (shift 19, reduce 8) on "DIV-operator" 27: shift/reduce conflict (shift 20, reduce 8) on "MOD-operator" 27: shift/reduce conflict (shift 21, reduce 8) on "AND-operator" 27: shift/reduce conflict (shift 22, reduce 8) on '|' state 27 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr "SUB-operator" expr . (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 8 ')' reduce 8 28: shift/reduce conflict (shift 16, reduce 9) on "ADD-operator" 28: shift/reduce conflict (shift 17, reduce 9) on "SUB-operator" 28: shift/reduce conflict (shift 18, reduce 9) on "MUL-operator" 28: shift/reduce conflict (shift 19, reduce 9) on "DIV-operator" 28: shift/reduce conflict (shift 20, reduce 9) on "MOD-operator" 28: shift/reduce conflict (shift 21, reduce 9) on "AND-operator" 28: shift/reduce conflict (shift 22, reduce 9) on '|' state 28 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr "MUL-operator" expr . (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 9 ')' reduce 9 29: shift/reduce conflict (shift 16, reduce 10) on "ADD-operator" 29: shift/reduce conflict (shift 17, reduce 10) on "SUB-operator" 29: shift/reduce conflict (shift 18, reduce 10) on "MUL-operator" 29: shift/reduce conflict (shift 19, reduce 10) on "DIV-operator" 29: shift/reduce conflict (shift 20, reduce 10) on "MOD-operator" 29: shift/reduce conflict (shift 21, reduce 10) on "AND-operator" 29: shift/reduce conflict (shift 22, reduce 10) on '|' state 29 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr "DIV-operator" expr . (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 10 ')' reduce 10 30: shift/reduce conflict (shift 16, reduce 11) on "ADD-operator" 30: shift/reduce conflict (shift 17, reduce 11) on "SUB-operator" 30: shift/reduce conflict (shift 18, reduce 11) on "MUL-operator" 30: shift/reduce conflict (shift 19, reduce 11) on "DIV-operator" 30: shift/reduce conflict (shift 20, reduce 11) on "MOD-operator" 30: shift/reduce conflict (shift 21, reduce 11) on "AND-operator" 30: shift/reduce conflict (shift 22, reduce 11) on '|' state 30 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr "MOD-operator" expr . (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 11 ')' reduce 11 31: shift/reduce conflict (shift 16, reduce 12) on "ADD-operator" 31: shift/reduce conflict (shift 17, reduce 12) on "SUB-operator" 31: shift/reduce conflict (shift 18, reduce 12) on "MUL-operator" 31: shift/reduce conflict (shift 19, reduce 12) on "DIV-operator" 31: shift/reduce conflict (shift 20, reduce 12) on "MOD-operator" 31: shift/reduce conflict (shift 21, reduce 12) on "AND-operator" 31: shift/reduce conflict (shift 22, reduce 12) on '|' state 31 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr "AND-operator" expr . (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 12 ')' reduce 12 32: shift/reduce conflict (shift 16, reduce 13) on "ADD-operator" 32: shift/reduce conflict (shift 17, reduce 13) on "SUB-operator" 32: shift/reduce conflict (shift 18, reduce 13) on "MUL-operator" 32: shift/reduce conflict (shift 19, reduce 13) on "DIV-operator" 32: shift/reduce conflict (shift 20, reduce 13) on "MOD-operator" 32: shift/reduce conflict (shift 21, reduce 13) on "AND-operator" state 32 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' reduce 13 '\n' reduce 13 ')' reduce 13 State 12 contains 6 shift/reduce conflicts. State 26 contains 7 shift/reduce conflicts. State 27 contains 7 shift/reduce conflicts. State 28 contains 7 shift/reduce conflicts. State 29 contains 7 shift/reduce conflicts. State 30 contains 7 shift/reduce conflicts. State 31 contains 7 shift/reduce conflicts. State 32 contains 6 shift/reduce conflicts. 28 terminals, 5 nonterminals 19 grammar rules, 33 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 OP_ADD 3 258 "ADD-operator" 4 259 OP_SUB 5 260 "SUB-operator" 6 261 OP_MUL 7 262 "MUL-operator" 8 263 OP_DIV 9 264 "DIV-operator" 10 265 OP_MOD 11 266 "MOD-operator" 12 267 OP_AND 13 268 "AND-operator" 14 269 DIGIT 15 270 LETTER 16 124 '|' 17 38 '&' 18 43 '+' 19 45 '-' 20 42 '*' 21 47 '/' 22 37 '%' 23 271 UMINUS 24 10 '\n' 25 61 '=' 26 40 '(' 27 41 ')' 28 272 $accept 29 273 list 30 274 stat 31 275 expr 32 276 number byacc-20221106/test/btyacc/ok_syntax1.error0000644000000000000000000000000012321214633017112 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax13.output0000644000000000000000000000000012314147323017566 0ustar rootrootbyacc-20221106/test/btyacc/quote_calc4.output0000644000000000000000000003316012312171122017434 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr "ADD-operator" expr 8 | expr "SUB-operator" expr 9 | expr "MUL-operator" expr 10 | expr "DIV-operator" expr 11 | expr "MOD-operator" expr 12 | expr "AND-operator" expr 13 | expr '|' expr 14 | "SUB-operator" expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 expr : "SUB-operator" . expr (14) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 12 number goto 9 state 4 number : DIGIT . (17) . reduce 17 state 5 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 13 "ADD-operator" reduce 15 "SUB-operator" reduce 15 "MUL-operator" reduce 15 "DIV-operator" reduce 15 "MOD-operator" reduce 15 "AND-operator" reduce 15 '|' reduce 15 '\n' reduce 15 state 6 expr : '(' . expr ')' (6) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 "ADD-operator" reduce 16 "SUB-operator" reduce 16 "MUL-operator" reduce 16 "DIV-operator" reduce 16 "MOD-operator" reduce 16 "AND-operator" reduce 16 '|' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 expr : LETTER . (15) . reduce 15 12: shift/reduce conflict (shift 16, reduce 14) on "ADD-operator" 12: shift/reduce conflict (shift 17, reduce 14) on "SUB-operator" 12: shift/reduce conflict (shift 18, reduce 14) on "MUL-operator" 12: shift/reduce conflict (shift 19, reduce 14) on "DIV-operator" 12: shift/reduce conflict (shift 20, reduce 14) on "MOD-operator" 12: shift/reduce conflict (shift 21, reduce 14) on "AND-operator" state 12 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) expr : "SUB-operator" expr . (14) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' reduce 14 '\n' reduce 14 ')' reduce 14 state 13 stat : LETTER '=' . expr (5) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 24 number goto 9 state 14 expr : '(' expr . ')' (6) expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr "ADD-operator" . expr (7) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr "SUB-operator" . expr (8) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr "MUL-operator" . expr (9) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr "DIV-operator" . expr (10) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr "MOD-operator" . expr (11) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr "AND-operator" . expr (12) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '|' . expr (13) "SUB-operator" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 26: shift/reduce conflict (shift 16, reduce 7) on "ADD-operator" 26: shift/reduce conflict (shift 17, reduce 7) on "SUB-operator" 26: shift/reduce conflict (shift 18, reduce 7) on "MUL-operator" 26: shift/reduce conflict (shift 19, reduce 7) on "DIV-operator" 26: shift/reduce conflict (shift 20, reduce 7) on "MOD-operator" 26: shift/reduce conflict (shift 21, reduce 7) on "AND-operator" 26: shift/reduce conflict (shift 22, reduce 7) on '|' state 26 expr : expr . "ADD-operator" expr (7) expr : expr "ADD-operator" expr . (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 7 ')' reduce 7 27: shift/reduce conflict (shift 16, reduce 8) on "ADD-operator" 27: shift/reduce conflict (shift 17, reduce 8) on "SUB-operator" 27: shift/reduce conflict (shift 18, reduce 8) on "MUL-operator" 27: shift/reduce conflict (shift 19, reduce 8) on "DIV-operator" 27: shift/reduce conflict (shift 20, reduce 8) on "MOD-operator" 27: shift/reduce conflict (shift 21, reduce 8) on "AND-operator" 27: shift/reduce conflict (shift 22, reduce 8) on '|' state 27 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr "SUB-operator" expr . (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 8 ')' reduce 8 28: shift/reduce conflict (shift 16, reduce 9) on "ADD-operator" 28: shift/reduce conflict (shift 17, reduce 9) on "SUB-operator" 28: shift/reduce conflict (shift 18, reduce 9) on "MUL-operator" 28: shift/reduce conflict (shift 19, reduce 9) on "DIV-operator" 28: shift/reduce conflict (shift 20, reduce 9) on "MOD-operator" 28: shift/reduce conflict (shift 21, reduce 9) on "AND-operator" 28: shift/reduce conflict (shift 22, reduce 9) on '|' state 28 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr "MUL-operator" expr . (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 9 ')' reduce 9 29: shift/reduce conflict (shift 16, reduce 10) on "ADD-operator" 29: shift/reduce conflict (shift 17, reduce 10) on "SUB-operator" 29: shift/reduce conflict (shift 18, reduce 10) on "MUL-operator" 29: shift/reduce conflict (shift 19, reduce 10) on "DIV-operator" 29: shift/reduce conflict (shift 20, reduce 10) on "MOD-operator" 29: shift/reduce conflict (shift 21, reduce 10) on "AND-operator" 29: shift/reduce conflict (shift 22, reduce 10) on '|' state 29 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr "DIV-operator" expr . (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 10 ')' reduce 10 30: shift/reduce conflict (shift 16, reduce 11) on "ADD-operator" 30: shift/reduce conflict (shift 17, reduce 11) on "SUB-operator" 30: shift/reduce conflict (shift 18, reduce 11) on "MUL-operator" 30: shift/reduce conflict (shift 19, reduce 11) on "DIV-operator" 30: shift/reduce conflict (shift 20, reduce 11) on "MOD-operator" 30: shift/reduce conflict (shift 21, reduce 11) on "AND-operator" 30: shift/reduce conflict (shift 22, reduce 11) on '|' state 30 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr "MOD-operator" expr . (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 11 ')' reduce 11 31: shift/reduce conflict (shift 16, reduce 12) on "ADD-operator" 31: shift/reduce conflict (shift 17, reduce 12) on "SUB-operator" 31: shift/reduce conflict (shift 18, reduce 12) on "MUL-operator" 31: shift/reduce conflict (shift 19, reduce 12) on "DIV-operator" 31: shift/reduce conflict (shift 20, reduce 12) on "MOD-operator" 31: shift/reduce conflict (shift 21, reduce 12) on "AND-operator" 31: shift/reduce conflict (shift 22, reduce 12) on '|' state 31 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr "AND-operator" expr . (12) expr : expr . '|' expr (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' shift 22 '\n' reduce 12 ')' reduce 12 32: shift/reduce conflict (shift 16, reduce 13) on "ADD-operator" 32: shift/reduce conflict (shift 17, reduce 13) on "SUB-operator" 32: shift/reduce conflict (shift 18, reduce 13) on "MUL-operator" 32: shift/reduce conflict (shift 19, reduce 13) on "DIV-operator" 32: shift/reduce conflict (shift 20, reduce 13) on "MOD-operator" 32: shift/reduce conflict (shift 21, reduce 13) on "AND-operator" state 32 expr : expr . "ADD-operator" expr (7) expr : expr . "SUB-operator" expr (8) expr : expr . "MUL-operator" expr (9) expr : expr . "DIV-operator" expr (10) expr : expr . "MOD-operator" expr (11) expr : expr . "AND-operator" expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) "ADD-operator" shift 16 "SUB-operator" shift 17 "MUL-operator" shift 18 "DIV-operator" shift 19 "MOD-operator" shift 20 "AND-operator" shift 21 '|' reduce 13 '\n' reduce 13 ')' reduce 13 State 12 contains 6 shift/reduce conflicts. State 26 contains 7 shift/reduce conflicts. State 27 contains 7 shift/reduce conflicts. State 28 contains 7 shift/reduce conflicts. State 29 contains 7 shift/reduce conflicts. State 30 contains 7 shift/reduce conflicts. State 31 contains 7 shift/reduce conflicts. State 32 contains 6 shift/reduce conflicts. 28 terminals, 5 nonterminals 19 grammar rules, 33 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 OP_ADD 3 258 "ADD-operator" 4 259 OP_SUB 5 260 "SUB-operator" 6 261 OP_MUL 7 262 "MUL-operator" 8 263 OP_DIV 9 264 "DIV-operator" 10 265 OP_MOD 11 266 "MOD-operator" 12 267 OP_AND 13 268 "AND-operator" 14 269 DIGIT 15 270 LETTER 16 124 '|' 17 38 '&' 18 43 '+' 19 45 '-' 20 42 '*' 21 47 '/' 22 37 '%' 23 271 UMINUS 24 10 '\n' 25 61 '=' 26 40 '(' 27 41 ')' 28 272 $accept 29 273 list 30 274 stat 31 275 expr 32 276 number byacc-20221106/test/btyacc/err_syntax6.tab.c0000644000000000000000000000067213726503203017157 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/quote_calc3-s.output0000644000000000000000000002756012312171122017702 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr OP_ADD expr 8 | expr OP_SUB expr 9 | expr OP_MUL expr 10 | expr OP_DIV expr 11 | expr OP_MOD expr 12 | expr OP_AND expr 13 | expr '|' expr 14 | OP_SUB expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 OP_SUB shift 3 DIGIT shift 4 LETTER shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 expr : OP_SUB . expr (14) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 12 number goto 9 state 4 number : DIGIT . (17) . reduce 17 state 5 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 13 OP_ADD reduce 15 OP_SUB reduce 15 OP_MUL reduce 15 OP_DIV reduce 15 OP_MOD reduce 15 OP_AND reduce 15 '|' reduce 15 '\n' reduce 15 state 6 expr : '(' . expr ')' (6) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 OP_ADD reduce 16 OP_SUB reduce 16 OP_MUL reduce 16 OP_DIV reduce 16 OP_MOD reduce 16 OP_AND reduce 16 '|' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 expr : LETTER . (15) . reduce 15 12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD 12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB 12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL 12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV 12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD 12: shift/reduce conflict (shift 21, reduce 14) on OP_AND state 12 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) expr : OP_SUB expr . (14) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' reduce 14 '\n' reduce 14 ')' reduce 14 state 13 stat : LETTER '=' . expr (5) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 24 number goto 9 state 14 expr : '(' expr . ')' (6) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr OP_ADD . expr (7) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr OP_SUB . expr (8) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr OP_MUL . expr (9) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr OP_DIV . expr (10) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr OP_MOD . expr (11) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr OP_AND . expr (12) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '|' . expr (13) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD 26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB 26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL 26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV 26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD 26: shift/reduce conflict (shift 21, reduce 7) on OP_AND 26: shift/reduce conflict (shift 22, reduce 7) on '|' state 26 expr : expr . OP_ADD expr (7) expr : expr OP_ADD expr . (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 7 ')' reduce 7 27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD 27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB 27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL 27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV 27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD 27: shift/reduce conflict (shift 21, reduce 8) on OP_AND 27: shift/reduce conflict (shift 22, reduce 8) on '|' state 27 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr OP_SUB expr . (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 8 ')' reduce 8 28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD 28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB 28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL 28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV 28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD 28: shift/reduce conflict (shift 21, reduce 9) on OP_AND 28: shift/reduce conflict (shift 22, reduce 9) on '|' state 28 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr OP_MUL expr . (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 9 ')' reduce 9 29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD 29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB 29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL 29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV 29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD 29: shift/reduce conflict (shift 21, reduce 10) on OP_AND 29: shift/reduce conflict (shift 22, reduce 10) on '|' state 29 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr OP_DIV expr . (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 10 ')' reduce 10 30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD 30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB 30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL 30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV 30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD 30: shift/reduce conflict (shift 21, reduce 11) on OP_AND 30: shift/reduce conflict (shift 22, reduce 11) on '|' state 30 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr OP_MOD expr . (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 11 ')' reduce 11 31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD 31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB 31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL 31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV 31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD 31: shift/reduce conflict (shift 21, reduce 12) on OP_AND 31: shift/reduce conflict (shift 22, reduce 12) on '|' state 31 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr OP_AND expr . (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 12 ')' reduce 12 32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD 32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB 32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL 32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV 32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD 32: shift/reduce conflict (shift 21, reduce 13) on OP_AND state 32 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' reduce 13 '\n' reduce 13 ')' reduce 13 State 12 contains 6 shift/reduce conflicts. State 26 contains 7 shift/reduce conflicts. State 27 contains 7 shift/reduce conflicts. State 28 contains 7 shift/reduce conflicts. State 29 contains 7 shift/reduce conflicts. State 30 contains 7 shift/reduce conflicts. State 31 contains 7 shift/reduce conflicts. State 32 contains 6 shift/reduce conflicts. 28 terminals, 5 nonterminals 19 grammar rules, 33 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 OP_ADD 3 258 "ADD-operator" 4 259 OP_SUB 5 260 "SUB-operator" 6 261 OP_MUL 7 262 "MUL-operator" 8 263 OP_DIV 9 264 "DIV-operator" 10 265 OP_MOD 11 266 "MOD-operator" 12 267 OP_AND 13 268 "AND-operator" 14 269 DIGIT 15 270 LETTER 16 124 '|' 17 38 '&' 18 43 '+' 19 45 '-' 20 42 '*' 21 47 '/' 22 37 '%' 23 271 UMINUS 24 10 '\n' 25 61 '=' 26 40 '(' 27 41 ')' 28 272 $accept 29 273 list 30 274 stat 31 275 expr 32 276 number byacc-20221106/test/btyacc/code_calc.output0000644000000000000000000001630312312171121017124 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 DIGIT 3 258 LETTER 4 124 '|' 5 38 '&' 6 43 '+' 7 45 '-' 8 42 '*' 9 47 '/' 10 37 '%' 11 259 UMINUS 12 10 '\n' 13 61 '=' 14 40 '(' 15 41 ')' 16 260 $accept 17 261 list 18 262 stat 19 263 expr 20 264 number byacc-20221106/test/btyacc/no_graph.error0000644000000000000000000000004713501467273016635 0ustar rootrootYACC: f - cannot open "nosuchfile.dot" byacc-20221106/test/btyacc/err_syntax7a.tab.h0000644000000000000000000000000012314147323017306 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax11.output0000644000000000000000000000063012314147323017575 0ustar rootroot 0 $accept : S $end 1 S : error state 0 $accept : . S $end (0) error shift 1 . error S goto 2 state 1 S : error . (1) . reduce 1 state 2 $accept : S . $end (0) $end accept 3 terminals, 2 nonterminals 2 grammar rules, 3 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 124 '|' 3 257 $accept 4 258 S byacc-20221106/test/btyacc/err_syntax10.tab.h0000644000000000000000000000015512314147323017232 0ustar rootroot#ifndef _err_syntax10__defines_h_ #define _err_syntax10__defines_h_ #endif /* _err_syntax10__defines_h_ */ byacc-20221106/test/btyacc/ok_syntax1.tab.c0000644000000000000000000014072714104035275017001 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse ok_syntax1_parse #endif /* yyparse */ #ifndef yylex #define yylex ok_syntax1_lex #endif /* yylex */ #ifndef yyerror #define yyerror ok_syntax1_error #endif /* yyerror */ #ifndef yychar #define yychar ok_syntax1_char #endif /* yychar */ #ifndef yyval #define yyval ok_syntax1_val #endif /* yyval */ #ifndef yylval #define yylval ok_syntax1_lval #endif /* yylval */ #ifndef yydebug #define yydebug ok_syntax1_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs ok_syntax1_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag ok_syntax1_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs ok_syntax1_lhs #endif /* yylhs */ #ifndef yylen #define yylen ok_syntax1_len #endif /* yylen */ #ifndef yydefred #define yydefred ok_syntax1_defred #endif /* yydefred */ #ifndef yystos #define yystos ok_syntax1_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto ok_syntax1_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex ok_syntax1_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex ok_syntax1_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex ok_syntax1_gindex #endif /* yygindex */ #ifndef yytable #define yytable ok_syntax1_table #endif /* yytable */ #ifndef yycheck #define yycheck ok_syntax1_check #endif /* yycheck */ #ifndef yyname #define yyname ok_syntax1_name #endif /* yyname */ #ifndef yyrule #define yyrule ok_syntax1_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex ok_syntax1_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable ok_syntax1_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "ok_syntax1_" #define YYPURE 1 #line 9 "ok_syntax1.y" # include # include #ifdef YYBISON #define YYSTYPE int #define YYLEX_PARAM base #define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM) #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) int YYLEX_DECL(); static void YYERROR_DECL(); #endif #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #line 43 "ok_syntax1.y" typedef union YYSTYPE { char * cval; int ival; double dval; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 148 "ok_syntax1.tab.c" /* 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(int regs[26], int *base) #endif /* Parameters sent to lex. */ #ifdef YYLEX_PARAM # ifdef YYLEX_PARAM_TYPE # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM) # else # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM) # endif # define YYLEX yylex(&yylval, YYLEX_PARAM) #else # define YYLEX_DECL() yylex(YYSTYPE *yylval, int *base) # define YYLEX yylex(&yylval, base) #endif /* Parameters sent to yyerror. */ #ifndef YYERROR_DECL #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) #endif #ifndef YYERROR_CALL #define YYERROR_CALL(msg) yyerror(regs, base, msg) #endif extern int YYPARSE_DECL(); #define DIGIT 257 #define LETTER 258 #define OCT1 259 #define HEX1 260 #define HEX2 261 #define HEX3 262 #define STR1 263 #define STR2 265 #define BELL 266 #define BS 267 #define NL 268 #define LF 269 #define CR 270 #define TAB 271 #define VT 272 #define UMINUS 273 #define YYERRCODE 256 typedef int YYINT; static const YYINT ok_syntax1_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT ok_syntax1_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT ok_syntax1_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT ok_syntax1_stos[] = { 0, 275, 256, 257, 258, 45, 40, 276, 277, 278, 10, 61, 258, 277, 277, 10, 124, 38, 43, 45, 42, 47, 37, 257, 277, 41, 277, 277, 277, 277, 277, 277, 277, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT ok_syntax1_dgoto[] = { 1, 7, 8, 9, }; static const YYINT ok_syntax1_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT ok_syntax1_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; #if YYBTYACC static const YYINT ok_syntax1_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT ok_syntax1_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT ok_syntax1_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT ok_syntax1_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #if YYBTYACC static const YYINT ok_syntax1_ctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 273 #define YYUNDFTOKEN 279 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const ok_syntax1_name[] = { "$end",0,0,0,0,0,0,"'\\a'","'\\b'","'\\t'","'\\n'","'\\v'","'\\f'","'\\r'",0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'#'",0,"'%'","'&'",0,"'('","')'","'*'", "'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0,0,"'='",0,0,"'@'",0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'^'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,"'~'","'\\177'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'\\377'", "error","DIGIT","LETTER","OCT1","HEX1","HEX2","HEX3","STR1", "\"\\177\\177\\\\\\n\"","STR2","BELL","BS","NL","LF","CR","TAB","VT","UMINUS", "$accept","list","stat","expr","number","illegal-symbol", }; static const char *const ok_syntax1_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ #line 104 "ok_syntax1.y" /* start of programs */ #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main (void) { int regs[26]; int base = 10; while(!feof(stdin)) { yyparse(regs, &base); } return 0; } #define UNUSED(x) ((void)(x)) static void YYERROR_DECL() { UNUSED(regs); /* %parse-param regs is not actually used here */ UNUSED(base); /* %parse-param base is not actually used here */ fprintf(stderr, "%s\n", s); } int YYLEX_DECL() { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval->ival = (c - 'a'); return ( LETTER ); } if( isdigit( c )) { yylval->ival = (c - '0') % (*base); return ( DIGIT ); } return( c ); } #line 500 "ok_syntax1.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif /* variables for the parser stack */ YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif yyerrflag = 0; yychar = 0; memset(&yyval, 0, sizeof(yyval)); memset(&yylval, 0, sizeof(yylval)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(&yyloc, 0, sizeof(yyloc)); memset(&yylloc, 0, sizeof(yylloc)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 66 "ok_syntax1.y" { yyerrok ; } #line 1234 "ok_syntax1.tab.c" break; case 4: #line 70 "ok_syntax1.y" { printf("%d\n",yystack.l_mark[0].ival);} #line 1239 "ok_syntax1.tab.c" break; case 5: #line 72 "ok_syntax1.y" { regs[yystack.l_mark[-2].ival] = yystack.l_mark[0].ival; } #line 1244 "ok_syntax1.tab.c" break; case 6: #line 76 "ok_syntax1.y" { yyval.ival = yystack.l_mark[-1].ival; } #line 1249 "ok_syntax1.tab.c" break; case 7: #line 78 "ok_syntax1.y" { yyval.ival = yystack.l_mark[-2].ival + yystack.l_mark[0].ival; } #line 1254 "ok_syntax1.tab.c" break; case 8: #line 80 "ok_syntax1.y" { yyval.ival = yystack.l_mark[-2].ival - yystack.l_mark[0].ival; } #line 1259 "ok_syntax1.tab.c" break; case 9: #line 82 "ok_syntax1.y" { yyval.ival = yystack.l_mark[-2].ival * yystack.l_mark[0].ival; } #line 1264 "ok_syntax1.tab.c" break; case 10: #line 84 "ok_syntax1.y" { yyval.ival = yystack.l_mark[-2].ival / yystack.l_mark[0].ival; } #line 1269 "ok_syntax1.tab.c" break; case 11: #line 86 "ok_syntax1.y" { yyval.ival = yystack.l_mark[-2].ival % yystack.l_mark[0].ival; } #line 1274 "ok_syntax1.tab.c" break; case 12: #line 88 "ok_syntax1.y" { yyval.ival = yystack.l_mark[-2].ival & yystack.l_mark[0].ival; } #line 1279 "ok_syntax1.tab.c" break; case 13: #line 90 "ok_syntax1.y" { yyval.ival = yystack.l_mark[-2].ival | yystack.l_mark[0].ival; } #line 1284 "ok_syntax1.tab.c" break; case 14: #line 92 "ok_syntax1.y" { yyval.ival = - yystack.l_mark[0].ival; } #line 1289 "ok_syntax1.tab.c" break; case 15: #line 94 "ok_syntax1.y" { yyval.ival = regs[yystack.l_mark[0].ival]; } #line 1294 "ok_syntax1.tab.c" break; case 17: #line 99 "ok_syntax1.y" { yyval.ival = yystack.l_mark[0].ival; (*base) = (yystack.l_mark[0].ival==0) ? 8 : 10; } #line 1299 "ok_syntax1.tab.c" break; case 18: #line 101 "ok_syntax1.y" { yyval.ival = (*base) * yystack.l_mark[-1].ival + yystack.l_mark[0].ival; } #line 1304 "ok_syntax1.tab.c" break; #line 1306 "ok_syntax1.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_inherit2.tab.h0000644000000000000000000000000012315230212017243 0ustar rootrootbyacc-20221106/test/btyacc/calc_code_requires.tab.h0000644000000000000000000000054413565110447020516 0ustar rootroot#ifndef _calc_code_requires__defines_h_ #define _calc_code_requires__defines_h_ /* %code "requires" block start */ #line 1 "calc_code_requires.y" /* CODE-REQUIRES */ #line 2 "calc_code_requires.y" /* CODE-REQUIRES2 */ /* %code "requires" block end */ #define DIGIT 257 #define LETTER 258 #define UMINUS 259 #endif /* _calc_code_requires__defines_h_ */ byacc-20221106/test/btyacc/calc_code_requires.output0000644000000000000000000001630313565110447021062 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 DIGIT 3 258 LETTER 4 124 '|' 5 38 '&' 6 43 '+' 7 45 '-' 8 42 '*' 9 47 '/' 10 37 '%' 11 259 UMINUS 12 10 '\n' 13 61 '=' 14 40 '(' 15 41 ')' 16 260 $accept 17 261 list 18 262 stat 19 263 expr 20 264 number byacc-20221106/test/btyacc/empty.output0000644000000000000000000000056012312171121016364 0ustar rootroot 0 $accept : start $end 1 start : state 0 $accept : . start $end (0) start : . (1) . reduce 1 start goto 1 state 1 $accept : start . $end (0) $end accept 2 terminals, 2 nonterminals 2 grammar rules, 2 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 $accept 3 258 start byacc-20221106/test/btyacc/calc1.error0000644000000000000000000000013112313700134015777 0ustar rootrootYACC: 2 rules never reduced YACC: 18 shift/reduce conflicts, 26 reduce/reduce conflicts. byacc-20221106/test/btyacc/btyacc_destroy2.error0000644000000000000000000000000012414015056020113 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax4.tab.c0000644000000000000000000000067213726503203017155 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/calc_code_provides.tab.h0000644000000000000000000000054413565110447020512 0ustar rootroot#ifndef _calc_code_provides__defines_h_ #define _calc_code_provides__defines_h_ #define DIGIT 257 #define LETTER 258 #define UMINUS 259 /* %code "provides" block start */ #line 1 "calc_code_provides.y" /* CODE-PROVIDES */ #line 2 "calc_code_provides.y" /* CODE-PROVIDES2 */ /* %code "provides" block end */ #endif /* _calc_code_provides__defines_h_ */ byacc-20221106/test/btyacc/inherit0.tab.h0000644000000000000000000000027412315230212016406 0ustar rootroot#ifndef _inherit0__defines_h_ #define _inherit0__defines_h_ #define GLOBAL 257 #define LOCAL 258 #define REAL 259 #define INTEGER 260 #define NAME 261 #endif /* _inherit0__defines_h_ */ byacc-20221106/test/btyacc/err_syntax18.tab.h0000644000000000000000000000015512314147323017242 0ustar rootroot#ifndef _err_syntax18__defines_h_ #define _err_syntax18__defines_h_ #endif /* _err_syntax18__defines_h_ */ byacc-20221106/test/btyacc/calc_code_default.tab.c0000644000000000000000000013656614104035275020307 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse calc_code_default_parse #endif /* yyparse */ #ifndef yylex #define yylex calc_code_default_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc_code_default_error #endif /* yyerror */ #ifndef yychar #define yychar calc_code_default_char #endif /* yychar */ #ifndef yyval #define yyval calc_code_default_val #endif /* yyval */ #ifndef yylval #define yylval calc_code_default_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc_code_default_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc_code_default_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc_code_default_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc_code_default_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc_code_default_len #endif /* yylen */ #ifndef yydefred #define yydefred calc_code_default_defred #endif /* yydefred */ #ifndef yystos #define yystos calc_code_default_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto calc_code_default_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc_code_default_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc_code_default_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc_code_default_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc_code_default_table #endif /* yytable */ #ifndef yycheck #define yycheck calc_code_default_check #endif /* yycheck */ #ifndef yyname #define yyname calc_code_default_name #endif /* yyname */ #ifndef yyrule #define yyrule calc_code_default_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex calc_code_default_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable calc_code_default_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "calc_code_default_" #define YYPURE 0 #line 5 "calc_code_default.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 131 "calc_code_default.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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc_code_default_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc_code_default_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc_code_default_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT calc_code_default_stos[] = { 0, 261, 256, 257, 258, 45, 40, 262, 263, 264, 10, 61, 258, 263, 263, 10, 124, 38, 43, 45, 42, 47, 37, 257, 263, 41, 263, 263, 263, 263, 263, 263, 263, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT calc_code_default_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc_code_default_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc_code_default_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; #if YYBTYACC static const YYINT calc_code_default_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT calc_code_default_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc_code_default_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc_code_default_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #if YYBTYACC static const YYINT calc_code_default_ctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc_code_default_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number", "illegal-symbol", }; static const char *const calc_code_default_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ /* %code "" block start */ #line 1 "calc_code_default.y" /* CODE-DEFAULT */ #line 2 "calc_code_default.y" /* CODE-DEFAULT2 */ /* %code "" block end */ #line 476 "calc_code_default.tab.c" #line 69 "calc_code_default.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 519 "calc_code_default.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 31 "calc_code_default.y" { yyerrok ; } #line 1192 "calc_code_default.tab.c" break; case 4: #line 35 "calc_code_default.y" { printf("%d\n",yystack.l_mark[0]);} #line 1197 "calc_code_default.tab.c" break; case 5: #line 37 "calc_code_default.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1202 "calc_code_default.tab.c" break; case 6: #line 41 "calc_code_default.y" { yyval = yystack.l_mark[-1]; } #line 1207 "calc_code_default.tab.c" break; case 7: #line 43 "calc_code_default.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1212 "calc_code_default.tab.c" break; case 8: #line 45 "calc_code_default.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1217 "calc_code_default.tab.c" break; case 9: #line 47 "calc_code_default.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1222 "calc_code_default.tab.c" break; case 10: #line 49 "calc_code_default.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1227 "calc_code_default.tab.c" break; case 11: #line 51 "calc_code_default.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1232 "calc_code_default.tab.c" break; case 12: #line 53 "calc_code_default.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1237 "calc_code_default.tab.c" break; case 13: #line 55 "calc_code_default.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1242 "calc_code_default.tab.c" break; case 14: #line 57 "calc_code_default.y" { yyval = - yystack.l_mark[0]; } #line 1247 "calc_code_default.tab.c" break; case 15: #line 59 "calc_code_default.y" { yyval = regs[yystack.l_mark[0]]; } #line 1252 "calc_code_default.tab.c" break; case 17: #line 64 "calc_code_default.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1257 "calc_code_default.tab.c" break; case 18: #line 66 "calc_code_default.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1262 "calc_code_default.tab.c" break; #line 1264 "calc_code_default.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_syntax12.tab.c0000644000000000000000000011657414104035275017245 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse err_syntax12_parse #endif /* yyparse */ #ifndef yylex #define yylex err_syntax12_lex #endif /* yylex */ #ifndef yyerror #define yyerror err_syntax12_error #endif /* yyerror */ #ifndef yychar #define yychar err_syntax12_char #endif /* yychar */ #ifndef yyval #define yyval err_syntax12_val #endif /* yyval */ #ifndef yylval #define yylval err_syntax12_lval #endif /* yylval */ #ifndef yydebug #define yydebug err_syntax12_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs err_syntax12_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag err_syntax12_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs err_syntax12_lhs #endif /* yylhs */ #ifndef yylen #define yylen err_syntax12_len #endif /* yylen */ #ifndef yydefred #define yydefred err_syntax12_defred #endif /* yydefred */ #ifndef yystos #define yystos err_syntax12_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto err_syntax12_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex err_syntax12_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex err_syntax12_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex err_syntax12_gindex #endif /* yygindex */ #ifndef yytable #define yytable err_syntax12_table #endif /* yytable */ #ifndef yycheck #define yycheck err_syntax12_check #endif /* yycheck */ #ifndef yyname #define yyname err_syntax12_name #endif /* yyname */ #ifndef yyrule #define yyrule err_syntax12_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex err_syntax12_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable err_syntax12_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "err_syntax12_" #define YYPURE 0 #line 2 "err_syntax12.y" int yylex(void); static void yyerror(const char *); #line 124 "err_syntax12.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 text 456 #define YYERRCODE 256 typedef int YYINT; static const YYINT err_syntax12_lhs[] = { -1, 0, }; static const YYINT err_syntax12_len[] = { 2, 1, }; static const YYINT err_syntax12_defred[] = { 0, 1, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT err_syntax12_stos[] = { 0, 256, 458, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT err_syntax12_dgoto[] = { 2, }; static const YYINT err_syntax12_sindex[] = { -256, 0, 0, }; static const YYINT err_syntax12_rindex[] = { 0, 0, 0, }; #if YYBTYACC static const YYINT err_syntax12_cindex[] = { 0, 0, 0, }; #endif static const YYINT err_syntax12_gindex[] = { 0, }; #define YYTABLESIZE 0 static const YYINT err_syntax12_table[] = { 1, }; static const YYINT err_syntax12_check[] = { 256, }; #if YYBTYACC static const YYINT err_syntax12_ctable[] = { -1, }; #endif #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 456 #define YYUNDFTOKEN 459 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const err_syntax12_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"text","$accept","S", "illegal-symbol", }; static const char *const err_syntax12_rule[] = { "$accept : S", "S : error", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 12 "err_syntax12.y" #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } #line 384 "err_syntax12.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_inherit3.tab.c0000644000000000000000000012656314104035275017300 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse err_inherit3_parse #endif /* yyparse */ #ifndef yylex #define yylex err_inherit3_lex #endif /* yylex */ #ifndef yyerror #define yyerror err_inherit3_error #endif /* yyerror */ #ifndef yychar #define yychar err_inherit3_char #endif /* yychar */ #ifndef yyval #define yyval err_inherit3_val #endif /* yyval */ #ifndef yylval #define yylval err_inherit3_lval #endif /* yylval */ #ifndef yydebug #define yydebug err_inherit3_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs err_inherit3_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag err_inherit3_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs err_inherit3_lhs #endif /* yylhs */ #ifndef yylen #define yylen err_inherit3_len #endif /* yylen */ #ifndef yydefred #define yydefred err_inherit3_defred #endif /* yydefred */ #ifndef yystos #define yystos err_inherit3_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto err_inherit3_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex err_inherit3_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex err_inherit3_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex err_inherit3_gindex #endif /* yygindex */ #ifndef yytable #define yytable err_inherit3_table #endif /* yytable */ #ifndef yycheck #define yycheck err_inherit3_check #endif /* yycheck */ #ifndef yyname #define yyname err_inherit3_name #endif /* yyname */ #ifndef yyrule #define yyrule err_inherit3_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex err_inherit3_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable err_inherit3_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "err_inherit3_" #define YYPURE 0 #line 2 "err_inherit3.y" #include typedef enum {cGLOBAL, cLOCAL} class; typedef enum {tREAL, tINTEGER} type; typedef char * name; struct symbol { class c; type t; name id; }; typedef struct symbol symbol; struct namelist { symbol *s; struct namelist *next; }; typedef struct namelist namelist; extern symbol *mksymbol(type t, class c, name id); #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) #endif #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #line 39 "err_inherit3.y" typedef union YYSTYPE { class cval; type tval; namelist * nlist; name id; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 155 "err_inherit3.tab.c" /* 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 #ifndef YYDESTRUCT_DECL #define YYDESTRUCT_DECL() yydestruct(const char *msg, int psymb, YYSTYPE *val) #endif #ifndef YYDESTRUCT_CALL #define YYDESTRUCT_CALL(msg, psymb, val) yydestruct(msg, psymb, val) #endif extern int YYPARSE_DECL(); #define GLOBAL 257 #define LOCAL 258 #define REAL 259 #define INTEGER 260 #define NAME 261 #define YYERRCODE 256 typedef int YYINT; static const YYINT err_inherit3_lhs[] = { -1, 5, 6, 0, 0, 3, 3, 4, 4, 7, 1, 1, 8, 2, }; static const YYINT err_inherit3_len[] = { 2, 0, 0, 5, 2, 1, 1, 1, 1, 0, 3, 1, 0, 3, }; static const YYINT err_inherit3_defred[] = { 0, 5, 6, 7, 8, 0, 0, 12, 1, 4, 2, 2, 0, 0, 11, 13, 0, 3, 0, 10, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT err_inherit3_stos[] = { 0, 257, 258, 259, 260, 263, 266, 267, 267, 265, 271, 268, 269, 269, 261, 264, 270, 264, 264, 261, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT err_inherit3_dgoto[] = { 5, 15, 9, 6, 7, 11, 12, 16, 10, }; static const YYINT err_inherit3_sindex[] = { -257, 0, 0, 0, 0, 0, -254, 0, 0, 0, 0, 0, -253, -253, 0, 0, -253, 0, -252, 0, }; static const YYINT err_inherit3_rindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #if YYBTYACC static const YYINT err_inherit3_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT err_inherit3_gindex[] = { 0, -9, 0, 0, 4, 0, 1, 0, 0, }; #define YYTABLESIZE 12 static const YYINT err_inherit3_table[] = { 1, 2, 3, 4, 17, 3, 4, 18, 14, 19, 8, 0, 13, }; static const YYINT err_inherit3_check[] = { 257, 258, 259, 260, 13, 259, 260, 16, 261, 261, 6, -1, 11, }; #if YYBTYACC static const YYINT err_inherit3_ctable[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; #endif #define YYFINAL 5 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 261 #define YYUNDFTOKEN 272 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const err_inherit3_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","GLOBAL","LOCAL","REAL","INTEGER", "NAME","$accept","declaration","namelist","locnamelist","class","type","$$1", "$$2","$$3","$$4","illegal-symbol", }; static const char *const err_inherit3_rule[] = { "$accept : declaration", "$$1 :", "$$2 :", "declaration : class type $$1 $$2 namelist", "declaration : type locnamelist", "class : GLOBAL", "class : LOCAL", "type : REAL", "type : INTEGER", "$$3 :", "namelist : $$3 namelist NAME", "namelist : NAME", "$$4 :", "locnamelist : $$4 $$2 namelist", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 78 "err_inherit3.y" extern int YYLEX_DECL(); extern void YYERROR_DECL(); #line 425 "err_inherit3.tab.c" /* Release memory associated with symbol. */ #if ! defined YYDESTRUCT_IS_DECLARED static void YYDESTRUCT_DECL() { switch (psymb) { case 263: #line 30 "err_inherit3.y" { namelist *p = (*val).nlist; while (p != NULL) { namelist *pp = p; p = p->next; free(pp->s); free(pp); } } #line 444 "err_inherit3.tab.c" break; case 264: #line 30 "err_inherit3.y" { namelist *p = (*val).nlist; while (p != NULL) { namelist *pp = p; p = p->next; free(pp->s); free(pp); } } #line 456 "err_inherit3.tab.c" break; case 265: #line 30 "err_inherit3.y" { namelist *p = (*val).nlist; while (p != NULL) { namelist *pp = p; p = p->next; free(pp->s); free(pp); } } #line 468 "err_inherit3.tab.c" break; } } #define YYDESTRUCT_IS_DECLARED 1 #endif /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 1: #line 50 "err_inherit3.y" yyval.cval = yystack.l_mark[-1].cval; #line 1146 "err_inherit3.tab.c" break; case 2: #line 50 "err_inherit3.y" yyval.tval = yystack.l_mark[-1].tval; #line 1151 "err_inherit3.tab.c" break; case 3: #line 51 "err_inherit3.y" { yyval.nlist = yystack.l_mark[0].nlist; } #line 1156 "err_inherit3.tab.c" break; case 4: #line 53 "err_inherit3.y" { yyval.nlist = yystack.l_mark[0].nlist; } #line 1161 "err_inherit3.tab.c" break; case 5: #line 56 "err_inherit3.y" { yyval.cval = cGLOBAL; } #line 1166 "err_inherit3.tab.c" break; case 6: #line 57 "err_inherit3.y" { yyval.cval = cLOCAL; } #line 1171 "err_inherit3.tab.c" break; case 7: #line 60 "err_inherit3.y" { yyval.tval = tREAL; } #line 1176 "err_inherit3.tab.c" break; case 8: #line 61 "err_inherit3.y" { yyval.tval = tINTEGER; } #line 1181 "err_inherit3.tab.c" break; case 9: #line 64 "err_inherit3.y" yyval.cval = yystack.l_mark[-2]; #line 1186 "err_inherit3.tab.c" break; case 10: #line 65 "err_inherit3.y" { yyval.nlist->s = mksymbol(yystack.l_mark[-5].tval, yystack.l_mark[-5].cval, yystack.l_mark[0].id); yyval.nlist->next = yystack.l_mark[-1].nlist; } #line 1193 "err_inherit3.tab.c" break; case 11: #line 69 "err_inherit3.y" { yyval.nlist->s = mksymbol(yystack.l_mark[-3], yystack.l_mark[-3], yystack.l_mark[0].id); yyval.nlist->next = NULL; } #line 1200 "err_inherit3.tab.c" break; case 12: #line 74 "err_inherit3.y" yyval.cval = cLOCAL; #line 1205 "err_inherit3.tab.c" break; case 13: #line 75 "err_inherit3.y" { yyval.nlist = yystack.l_mark[0].nlist; } #line 1210 "err_inherit3.tab.c" break; #line 1212 "err_inherit3.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_syntax6.output0000644000000000000000000000000012314147323017510 0ustar rootrootbyacc-20221106/test/btyacc/calc3.error0000644000000000000000000000000012313700134015774 0ustar rootrootbyacc-20221106/test/btyacc/varsyntax_calc1.error0000644000000000000000000000013112313713311020117 0ustar rootrootYACC: 2 rules never reduced YACC: 18 shift/reduce conflicts, 26 reduce/reduce conflicts. byacc-20221106/test/btyacc/err_syntax25.error0000644000000000000000000000012112361053263017367 0ustar rootrootYACC: e - line 11 of "./err_syntax25.y", too many %union declarations %union { ^ byacc-20221106/test/btyacc/err_syntax7.output0000644000000000000000000000000012314147323017511 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax2.tab.h0000644000000000000000000000000012314147323017140 0ustar rootrootbyacc-20221106/test/btyacc/code_calc.error0000644000000000000000000000000012313700134016703 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax11.error0000644000000000000000000000012212361053263017363 0ustar rootrootYACC: w - line 7 of "./err_syntax11.y", the precedence of '|' has been redeclared byacc-20221106/test/btyacc/err_syntax25.tab.h0000644000000000000000000000000012314147323017225 0ustar rootrootbyacc-20221106/test/btyacc/defines1.calc.h0000644000000000000000000000020413501474556016532 0ustar rootroot#ifndef _yy_defines_h_ #define _yy_defines_h_ #define DIGIT 257 #define LETTER 258 #define UMINUS 259 #endif /* _yy_defines_h_ */ byacc-20221106/test/btyacc/btyacc_destroy2.output0000644000000000000000000000653112414015056020341 0ustar rootroot 0 $accept : declaration $end 1 declaration : class type namelist '(' class ',' type ')' 2 | type locnamelist '(' class ')' 3 class : GLOBAL 4 | LOCAL 5 type : REAL 6 | INTEGER 7 namelist : namelist NAME 8 | NAME 9 locnamelist : namelist '(' LOCAL ',' type ')' state 0 $accept : . declaration $end (0) GLOBAL shift 1 LOCAL shift 2 REAL shift 3 INTEGER shift 4 . error declaration goto 5 class goto 6 type goto 7 state 1 class : GLOBAL . (3) . reduce 3 state 2 class : LOCAL . (4) . reduce 4 state 3 type : REAL . (5) . reduce 5 state 4 type : INTEGER . (6) . reduce 6 state 5 $accept : declaration . $end (0) $end accept state 6 declaration : class . type namelist '(' class ',' type ')' (1) REAL shift 3 INTEGER shift 4 . error type goto 8 state 7 declaration : type . locnamelist '(' class ')' (2) NAME shift 9 . error locnamelist goto 10 namelist goto 11 state 8 declaration : class type . namelist '(' class ',' type ')' (1) NAME shift 9 . error namelist goto 12 state 9 namelist : NAME . (8) . reduce 8 state 10 declaration : type locnamelist . '(' class ')' (2) '(' shift 13 . error state 11 namelist : namelist . NAME (7) locnamelist : namelist . '(' LOCAL ',' type ')' (9) NAME shift 14 '(' shift 15 . error state 12 declaration : class type namelist . '(' class ',' type ')' (1) namelist : namelist . NAME (7) NAME shift 14 '(' shift 16 . error state 13 declaration : type locnamelist '(' . class ')' (2) GLOBAL shift 1 LOCAL shift 2 . error class goto 17 state 14 namelist : namelist NAME . (7) . reduce 7 state 15 locnamelist : namelist '(' . LOCAL ',' type ')' (9) LOCAL shift 18 . error state 16 declaration : class type namelist '(' . class ',' type ')' (1) GLOBAL shift 1 LOCAL shift 2 . error class goto 19 state 17 declaration : type locnamelist '(' class . ')' (2) ')' shift 20 . error state 18 locnamelist : namelist '(' LOCAL . ',' type ')' (9) ',' shift 21 . error state 19 declaration : class type namelist '(' class . ',' type ')' (1) ',' shift 22 . error state 20 declaration : type locnamelist '(' class ')' . (2) . reduce 2 state 21 locnamelist : namelist '(' LOCAL ',' . type ')' (9) REAL shift 3 INTEGER shift 4 . error type goto 23 state 22 declaration : class type namelist '(' class ',' . type ')' (1) REAL shift 3 INTEGER shift 4 . error type goto 24 state 23 locnamelist : namelist '(' LOCAL ',' type . ')' (9) ')' shift 25 . error state 24 declaration : class type namelist '(' class ',' type . ')' (1) ')' shift 26 . error state 25 locnamelist : namelist '(' LOCAL ',' type ')' . (9) . reduce 9 state 26 declaration : class type namelist '(' class ',' type ')' . (1) . reduce 1 10 terminals, 6 nonterminals 10 grammar rules, 27 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 GLOBAL 3 258 LOCAL 4 259 REAL 5 260 INTEGER 6 261 NAME 7 40 '(' 8 44 ',' 9 41 ')' 10 262 $accept 11 263 declaration 12 264 locnamelist 13 265 class 14 266 type 15 267 namelist byacc-20221106/test/btyacc/err_syntax5.tab.h0000644000000000000000000000000012314147323017143 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax19.tab.c0000644000000000000000000000067213726503203017243 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/code_error.code.c0000644000000000000000000011335414104035275017164 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse error_parse #endif /* yyparse */ #ifndef yylex #define yylex error_lex #endif /* yylex */ #ifndef yyerror #define yyerror error_error #endif /* yyerror */ #ifndef yychar #define yychar error_char #endif /* yychar */ #ifndef yyval #define yyval error_val #endif /* yyval */ #ifndef yylval #define yylval error_lval #endif /* yylval */ #ifndef yydebug #define yydebug error_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs error_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag error_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs error_lhs #endif /* yylhs */ #ifndef yylen #define yylen error_len #endif /* yylen */ #ifndef yydefred #define yydefred error_defred #endif /* yydefred */ #ifndef yystos #define yystos error_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto error_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex error_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex error_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex error_gindex #endif /* yygindex */ #ifndef yytable #define yytable error_table #endif /* yytable */ #ifndef yycheck #define yycheck error_check #endif /* yycheck */ #ifndef yyname #define yyname error_name #endif /* yyname */ #ifndef yyrule #define yyrule error_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex error_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable error_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "error_" #define YYPURE 0 #line 2 "code_error.y" #ifdef YYBISON int yylex(void); static void yyerror(const char *); #endif #line 128 "code_error.code.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 #define YYERRCODE 256 #define YYTABLESIZE 0 #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 256 #define YYUNDFTOKEN 259 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) extern int YYPARSE_DECL(); typedef int YYINT; extern const YYINT yylhs[]; extern const YYINT yylen[]; extern const YYINT yydefred[]; extern const YYINT yystos[]; extern const YYINT yydgoto[]; extern const YYINT yysindex[]; extern const YYINT yyrindex[]; #if YYBTYACC extern const YYINT yycindex[]; #endif /* YYBTYACC */ extern const YYINT yygindex[]; extern const YYINT yytable[]; extern const YYINT yycheck[]; #if YYBTYACC extern const YYINT yyctable[]; #endif /* YYBTYACC */ #if YYDEBUG || defined(yytname) extern const char *const yyname[]; #endif #if YYDEBUG extern const char *const yyrule[]; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 12 "code_error.y" #include #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } #line 354 "code_error.code.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/inherit0.error0000644000000000000000000000000012315230212016526 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax22.tab.c0000644000000000000000000000067213726503203017235 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/err_syntax27.output0000644000000000000000000000000012320633041017565 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax25.output0000644000000000000000000000000012314147323017571 0ustar rootrootbyacc-20221106/test/btyacc/err_inherit2.error0000644000000000000000000000055712361053263017433 0ustar rootrootYACC: w - line 64 of "./err_inherit2.y", number of arguments of namelist doesn't agree with previous declaration YACC: w - line 64 of "./err_inherit2.y", type of argument 1 to namelist doesn't agree with previous declaration YACC: e - line 64 of "./err_inherit2.y", bad formal argument list namelist($c, $t, extra): namelist NAME ^ byacc-20221106/test/btyacc/inherit2.tab.c0000644000000000000000000012566314104035275016427 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse inherit2_parse #endif /* yyparse */ #ifndef yylex #define yylex inherit2_lex #endif /* yylex */ #ifndef yyerror #define yyerror inherit2_error #endif /* yyerror */ #ifndef yychar #define yychar inherit2_char #endif /* yychar */ #ifndef yyval #define yyval inherit2_val #endif /* yyval */ #ifndef yylval #define yylval inherit2_lval #endif /* yylval */ #ifndef yydebug #define yydebug inherit2_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs inherit2_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag inherit2_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs inherit2_lhs #endif /* yylhs */ #ifndef yylen #define yylen inherit2_len #endif /* yylen */ #ifndef yydefred #define yydefred inherit2_defred #endif /* yydefred */ #ifndef yystos #define yystos inherit2_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto inherit2_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex inherit2_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex inherit2_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex inherit2_gindex #endif /* yygindex */ #ifndef yytable #define yytable inherit2_table #endif /* yytable */ #ifndef yycheck #define yycheck inherit2_check #endif /* yycheck */ #ifndef yyname #define yyname inherit2_name #endif /* yyname */ #ifndef yyrule #define yyrule inherit2_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex inherit2_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable inherit2_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "inherit2_" #define YYPURE 0 #line 2 "inherit2.y" #include typedef enum {cGLOBAL, cLOCAL} class; typedef enum {tREAL, tINTEGER} type; typedef char * name; struct symbol { class c; type t; name id; }; typedef struct symbol symbol; struct namelist { symbol *s; struct namelist *next; }; typedef struct namelist namelist; extern symbol *mksymbol(type t, class c, name id); #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) #endif #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #line 39 "inherit2.y" typedef union YYSTYPE { class cval; type tval; namelist * nlist; name id; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 155 "inherit2.tab.c" /* 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 #ifndef YYDESTRUCT_DECL #define YYDESTRUCT_DECL() yydestruct(const char *msg, int psymb, YYSTYPE *val) #endif #ifndef YYDESTRUCT_CALL #define YYDESTRUCT_CALL(msg, psymb, val) yydestruct(msg, psymb, val) #endif extern int YYPARSE_DECL(); #define GLOBAL 257 #define LOCAL 258 #define REAL 259 #define INTEGER 260 #define NAME 261 #define YYERRCODE 256 typedef int YYINT; static const YYINT inherit2_lhs[] = { -1, 5, 6, 0, 0, 3, 3, 4, 4, 1, 1, 7, 2, }; static const YYINT inherit2_len[] = { 2, 0, 0, 5, 2, 1, 1, 1, 1, 2, 1, 0, 3, }; static const YYINT inherit2_defred[] = { 0, 5, 6, 7, 8, 0, 0, 11, 1, 4, 2, 2, 0, 0, 10, 0, 0, 9, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT inherit2_stos[] = { 0, 257, 258, 259, 260, 263, 266, 267, 267, 265, 270, 268, 269, 269, 261, 264, 264, 261, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT inherit2_dgoto[] = { 5, 15, 9, 6, 7, 11, 12, 10, }; static const YYINT inherit2_sindex[] = { -257, 0, 0, 0, 0, 0, -255, 0, 0, 0, 0, 0, -254, -254, 0, -253, -253, 0, }; static const YYINT inherit2_rindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 9, 0, }; #if YYBTYACC static const YYINT inherit2_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT inherit2_gindex[] = { 0, -3, 0, 0, 5, 0, 1, 0, }; #define YYTABLESIZE 12 static const YYINT inherit2_table[] = { 1, 2, 3, 4, 3, 4, 12, 14, 17, 3, 16, 8, 13, }; static const YYINT inherit2_check[] = { 257, 258, 259, 260, 259, 260, 0, 261, 261, 0, 13, 6, 11, }; #if YYBTYACC static const YYINT inherit2_ctable[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; #endif #define YYFINAL 5 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 261 #define YYUNDFTOKEN 271 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const inherit2_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","GLOBAL","LOCAL","REAL","INTEGER", "NAME","$accept","declaration","namelist","locnamelist","class","type","$$1", "$$2","$$3","illegal-symbol", }; static const char *const inherit2_rule[] = { "$accept : declaration", "$$1 :", "$$2 :", "declaration : class type $$1 $$2 namelist", "declaration : type locnamelist", "class : GLOBAL", "class : LOCAL", "type : REAL", "type : INTEGER", "namelist : namelist NAME", "namelist : NAME", "$$3 :", "locnamelist : $$3 $$2 namelist", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 78 "inherit2.y" extern int YYLEX_DECL(); extern void YYERROR_DECL(); #line 424 "inherit2.tab.c" /* Release memory associated with symbol. */ #if ! defined YYDESTRUCT_IS_DECLARED static void YYDESTRUCT_DECL() { switch (psymb) { case 263: #line 30 "inherit2.y" { namelist *p = (*val).nlist; while (p != NULL) { namelist *pp = p; p = p->next; free(pp->s); free(pp); } } #line 443 "inherit2.tab.c" break; case 264: #line 30 "inherit2.y" { namelist *p = (*val).nlist; while (p != NULL) { namelist *pp = p; p = p->next; free(pp->s); free(pp); } } #line 455 "inherit2.tab.c" break; case 265: #line 30 "inherit2.y" { namelist *p = (*val).nlist; while (p != NULL) { namelist *pp = p; p = p->next; free(pp->s); free(pp); } } #line 467 "inherit2.tab.c" break; } } #define YYDESTRUCT_IS_DECLARED 1 #endif /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 1: #line 50 "inherit2.y" yyval.cval = yystack.l_mark[-1].cval; #line 1145 "inherit2.tab.c" break; case 2: #line 50 "inherit2.y" yyval.tval = yystack.l_mark[-1].tval; #line 1150 "inherit2.tab.c" break; case 3: #line 51 "inherit2.y" { yyval.nlist = yystack.l_mark[0].nlist; } #line 1155 "inherit2.tab.c" break; case 4: #line 53 "inherit2.y" { yyval.nlist = yystack.l_mark[0].nlist; } #line 1160 "inherit2.tab.c" break; case 5: #line 56 "inherit2.y" { yyval.cval = cGLOBAL; } #line 1165 "inherit2.tab.c" break; case 6: #line 57 "inherit2.y" { yyval.cval = cLOCAL; } #line 1170 "inherit2.tab.c" break; case 7: #line 60 "inherit2.y" { yyval.tval = tREAL; } #line 1175 "inherit2.tab.c" break; case 8: #line 61 "inherit2.y" { yyval.tval = tINTEGER; } #line 1180 "inherit2.tab.c" break; case 9: #line 65 "inherit2.y" { yyval.nlist->s = mksymbol(yystack.l_mark[-2].tval, yystack.l_mark[-3].cval, yystack.l_mark[0].id); yyval.nlist->next = yystack.l_mark[-1].nlist; } #line 1187 "inherit2.tab.c" break; case 10: #line 69 "inherit2.y" { yyval.nlist->s = mksymbol(yystack.l_mark[-1].tval, yystack.l_mark[-2].cval, yystack.l_mark[0].id); yyval.nlist->next = NULL; } #line 1194 "inherit2.tab.c" break; case 11: #line 74 "inherit2.y" yyval.cval = cLOCAL; #line 1199 "inherit2.tab.c" break; case 12: #line 75 "inherit2.y" { yyval.nlist = yystack.l_mark[0].nlist; } #line 1204 "inherit2.tab.c" break; #line 1206 "inherit2.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_syntax12.tab.h0000644000000000000000000000017612314147323017237 0ustar rootroot#ifndef _err_syntax12__defines_h_ #define _err_syntax12__defines_h_ #define text 456 #endif /* _err_syntax12__defines_h_ */ byacc-20221106/test/btyacc/err_syntax26.error0000644000000000000000000000007712361053263017402 0ustar rootrootYACC: e - line 6 of "./err_syntax26.y", unexpected end-of-file byacc-20221106/test/btyacc/code_calc.code.c0000644000000000000000000012007314104035275016731 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse calc_parse #endif /* yyparse */ #ifndef yylex #define yylex calc_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc_error #endif /* yyerror */ #ifndef yychar #define yychar calc_char #endif /* yychar */ #ifndef yyval #define yyval calc_val #endif /* yyval */ #ifndef yylval #define yylval calc_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc_len #endif /* yylen */ #ifndef yydefred #define yydefred calc_defred #endif /* yydefred */ #ifndef yystos #define yystos calc_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto calc_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc_table #endif /* yytable */ #ifndef yycheck #define yycheck calc_check #endif /* yycheck */ #ifndef yyname #define yyname calc_name #endif /* yyname */ #ifndef yyrule #define yyrule calc_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex calc_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable calc_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "calc_" #define YYPURE 0 #line 4 "code_calc.y" # include # include int regs[26]; int base; #ifdef YYBISON int yylex(void); static void yyerror(const char *s); #endif #line 133 "code_calc.code.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 #define DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 #undef yytname #define yytname yyname #define YYTABLESIZE 220 #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) extern int YYPARSE_DECL(); typedef int YYINT; extern const YYINT yylhs[]; extern const YYINT yylen[]; extern const YYINT yydefred[]; extern const YYINT yystos[]; extern const YYINT yydgoto[]; extern const YYINT yysindex[]; extern const YYINT yyrindex[]; #if YYBTYACC extern const YYINT yycindex[]; #endif /* YYBTYACC */ extern const YYINT yygindex[]; extern const YYINT yytable[]; extern const YYINT yycheck[]; #if YYBTYACC extern const YYINT yyctable[]; #endif /* YYBTYACC */ #if YYDEBUG || defined(yytname) extern const char *const yyname[]; #endif #if YYDEBUG extern const char *const yyrule[]; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 70 "code_calc.y" /* start of programs */ #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 384 "code_calc.code.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 32 "code_calc.y" { yyerrok ; } #line 1057 "code_calc.code.c" break; case 4: #line 36 "code_calc.y" { printf("%d\n",yystack.l_mark[0]);} #line 1062 "code_calc.code.c" break; case 5: #line 38 "code_calc.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1067 "code_calc.code.c" break; case 6: #line 42 "code_calc.y" { yyval = yystack.l_mark[-1]; } #line 1072 "code_calc.code.c" break; case 7: #line 44 "code_calc.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1077 "code_calc.code.c" break; case 8: #line 46 "code_calc.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1082 "code_calc.code.c" break; case 9: #line 48 "code_calc.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1087 "code_calc.code.c" break; case 10: #line 50 "code_calc.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1092 "code_calc.code.c" break; case 11: #line 52 "code_calc.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1097 "code_calc.code.c" break; case 12: #line 54 "code_calc.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1102 "code_calc.code.c" break; case 13: #line 56 "code_calc.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1107 "code_calc.code.c" break; case 14: #line 58 "code_calc.y" { yyval = - yystack.l_mark[0]; } #line 1112 "code_calc.code.c" break; case 15: #line 60 "code_calc.y" { yyval = regs[yystack.l_mark[0]]; } #line 1117 "code_calc.code.c" break; case 17: #line 65 "code_calc.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1122 "code_calc.code.c" break; case 18: #line 67 "code_calc.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1127 "code_calc.code.c" break; #line 1129 "code_calc.code.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_syntax13.tab.h0000644000000000000000000000000012314147323017222 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax16.tab.c0000644000000000000000000000067213726503203017240 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/err_syntax3.error0000644000000000000000000000015412361053263017311 0ustar rootrootYACC: e - line 6 of "./err_syntax3.y", unterminated string %token '(' '*' '& ^ byacc-20221106/test/btyacc/rename_debug.i0000644000000000000000000000267113275005756016563 0ustar rootroot#define YYPREFIX "yy" #define YYPURE 0 #line 2 "code_debug.y" #ifdef YYBISON int yylex(void); static void yyerror(const char *); #endif #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 #if !(defined(yylex) || defined(YYSTATE)) int YYLEX_DECL(); #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(); #ifndef YYDEBUG #define YYDEBUG 1 #endif #if YYDEBUG extern int yydebug; #endif extern int yyerrflag; extern int yychar; extern YYSTYPE yyval; extern YYSTYPE yylval; extern int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) extern YYLTYPE yyloc; /* position returned by actions */ extern YYLTYPE yylloc; /* position from the lexer */ #endif byacc-20221106/test/btyacc/quote_calc4-s.error0000644000000000000000000000004112313700137017462 0ustar rootrootYACC: 54 shift/reduce conflicts. byacc-20221106/test/btyacc/err_syntax21.tab.c0000644000000000000000000000067213726503203017234 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/grammar.output0000644000000000000000000013317612312171121016666 0ustar rootroot 0 $accept : program $end 1 program : 2 | translation_unit 3 translation_unit : external_declaration 4 | translation_unit external_declaration 5 external_declaration : declaration 6 | function_definition 7 | ';' 8 | linkage_specification 9 | T_ASM T_ASMARG ';' 10 | error T_MATCHRBRACE 11 | error ';' 12 braces : T_LBRACE T_MATCHRBRACE 13 linkage_specification : T_EXTERN T_STRING_LITERAL braces 14 | T_EXTERN T_STRING_LITERAL declaration 15 declaration : decl_specifiers ';' 16 | decl_specifiers init_declarator_list ';' 17 $$1 : 18 declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';' 19 any_typedef : T_EXTENSION T_TYPEDEF 20 | T_TYPEDEF 21 opt_declarator_list : 22 | declarator_list 23 declarator_list : declarator 24 | declarator_list ',' declarator 25 $$2 : 26 $$3 : 27 function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE 28 $$4 : 29 function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE 30 opt_declaration_list : 31 | T_VA_DCL 32 | declaration_list 33 declaration_list : declaration 34 | declaration_list declaration 35 decl_specifiers : decl_specifier 36 | decl_specifiers decl_specifier 37 decl_specifier : storage_class 38 | type_specifier 39 | type_qualifier 40 storage_class : T_AUTO 41 | T_EXTERN 42 | T_REGISTER 43 | T_STATIC 44 | T_INLINE 45 | T_EXTENSION 46 type_specifier : T_CHAR 47 | T_DOUBLE 48 | T_FLOAT 49 | T_INT 50 | T_LONG 51 | T_SHORT 52 | T_SIGNED 53 | T_UNSIGNED 54 | T_VOID 55 | T_Bool 56 | T_Complex 57 | T_Imaginary 58 | T_TYPEDEF_NAME 59 | struct_or_union_specifier 60 | enum_specifier 61 type_qualifier : T_TYPE_QUALIFIER 62 | T_DEFINE_NAME 63 struct_or_union_specifier : struct_or_union any_id braces 64 | struct_or_union braces 65 | struct_or_union any_id 66 struct_or_union : T_STRUCT 67 | T_UNION 68 init_declarator_list : init_declarator 69 | init_declarator_list ',' init_declarator 70 init_declarator : declarator 71 $$5 : 72 init_declarator : declarator '=' $$5 T_INITIALIZER 73 enum_specifier : enumeration any_id braces 74 | enumeration braces 75 | enumeration any_id 76 enumeration : T_ENUM 77 any_id : T_IDENTIFIER 78 | T_TYPEDEF_NAME 79 declarator : pointer direct_declarator 80 | direct_declarator 81 direct_declarator : identifier_or_ref 82 | '(' declarator ')' 83 | direct_declarator T_BRACKETS 84 | direct_declarator '(' parameter_type_list ')' 85 | direct_declarator '(' opt_identifier_list ')' 86 pointer : '*' opt_type_qualifiers 87 | '*' opt_type_qualifiers pointer 88 opt_type_qualifiers : 89 | type_qualifier_list 90 type_qualifier_list : type_qualifier 91 | type_qualifier_list type_qualifier 92 parameter_type_list : parameter_list 93 | parameter_list ',' T_ELLIPSIS 94 parameter_list : parameter_declaration 95 | parameter_list ',' parameter_declaration 96 parameter_declaration : decl_specifiers declarator 97 | decl_specifiers abs_declarator 98 | decl_specifiers 99 opt_identifier_list : 100 | identifier_list 101 identifier_list : any_id 102 | identifier_list ',' any_id 103 identifier_or_ref : any_id 104 | '&' any_id 105 abs_declarator : pointer 106 | pointer direct_abs_declarator 107 | direct_abs_declarator 108 direct_abs_declarator : '(' abs_declarator ')' 109 | direct_abs_declarator T_BRACKETS 110 | T_BRACKETS 111 | direct_abs_declarator '(' parameter_type_list ')' 112 | direct_abs_declarator '(' ')' 113 | '(' parameter_type_list ')' 114 | '(' ')' state 0 $accept : . program $end (0) program : . (1) error shift 1 '(' shift 2 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 6 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 9 T_REGISTER shift 10 T_STATIC shift 11 T_TYPEDEF shift 12 T_INLINE shift 13 T_EXTENSION shift 14 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 T_ASM shift 31 ';' shift 32 $end reduce 1 program goto 33 decl_specifiers goto 34 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 declarator goto 41 direct_declarator goto 42 struct_or_union goto 43 pointer goto 44 any_id goto 45 identifier_or_ref goto 46 enumeration goto 47 translation_unit goto 48 external_declaration goto 49 declaration goto 50 function_definition goto 51 linkage_specification goto 52 any_typedef goto 53 state 1 external_declaration : error . T_MATCHRBRACE (10) external_declaration : error . ';' (11) T_MATCHRBRACE shift 54 ';' shift 55 . error state 2 direct_declarator : '(' . declarator ')' (82) '(' shift 2 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 . error declarator goto 57 direct_declarator goto 42 pointer goto 44 any_id goto 45 identifier_or_ref goto 46 state 3 pointer : '*' . opt_type_qualifiers (86) pointer : '*' . opt_type_qualifiers pointer (87) opt_type_qualifiers : . (88) T_DEFINE_NAME shift 7 T_TYPE_QUALIFIER shift 30 '(' reduce 88 '*' reduce 88 '&' reduce 88 T_IDENTIFIER reduce 88 T_TYPEDEF_NAME reduce 88 T_BRACKETS reduce 88 ',' reduce 88 ')' reduce 88 type_qualifier goto 58 opt_type_qualifiers goto 59 type_qualifier_list goto 60 state 4 identifier_or_ref : '&' . any_id (104) T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 . error any_id goto 61 state 5 any_id : T_IDENTIFIER . (77) . reduce 77 6: reduce/reduce conflict (reduce 58, reduce 78) on '(' 6: reduce/reduce conflict (reduce 58, reduce 78) on T_TYPEDEF_NAME 6: reduce/reduce conflict (reduce 58, reduce 78) on T_DEFINE_NAME 6: reduce/reduce conflict (reduce 58, reduce 78) on T_AUTO 6: reduce/reduce conflict (reduce 58, reduce 78) on T_EXTERN 6: reduce/reduce conflict (reduce 58, reduce 78) on T_REGISTER 6: reduce/reduce conflict (reduce 58, reduce 78) on T_STATIC 6: reduce/reduce conflict (reduce 58, reduce 78) on T_INLINE 6: reduce/reduce conflict (reduce 58, reduce 78) on T_EXTENSION 6: reduce/reduce conflict (reduce 58, reduce 78) on T_CHAR 6: reduce/reduce conflict (reduce 58, reduce 78) on T_DOUBLE 6: reduce/reduce conflict (reduce 58, reduce 78) on T_FLOAT 6: reduce/reduce conflict (reduce 58, reduce 78) on T_INT 6: reduce/reduce conflict (reduce 58, reduce 78) on T_VOID 6: reduce/reduce conflict (reduce 58, reduce 78) on T_LONG 6: reduce/reduce conflict (reduce 58, reduce 78) on T_SHORT 6: reduce/reduce conflict (reduce 58, reduce 78) on T_SIGNED 6: reduce/reduce conflict (reduce 58, reduce 78) on T_UNSIGNED 6: reduce/reduce conflict (reduce 58, reduce 78) on T_ENUM 6: reduce/reduce conflict (reduce 58, reduce 78) on T_STRUCT 6: reduce/reduce conflict (reduce 58, reduce 78) on T_UNION 6: reduce/reduce conflict (reduce 58, reduce 78) on T_Bool 6: reduce/reduce conflict (reduce 58, reduce 78) on T_Complex 6: reduce/reduce conflict (reduce 58, reduce 78) on T_Imaginary 6: reduce/reduce conflict (reduce 58, reduce 78) on T_TYPE_QUALIFIER 6: reduce/reduce conflict (reduce 58, reduce 78) on T_BRACKETS 6: reduce/reduce conflict (reduce 58, reduce 78) on ';' 6: reduce/reduce conflict (reduce 58, reduce 78) on ',' 6: reduce/reduce conflict (reduce 58, reduce 78) on ')' state 6 type_specifier : T_TYPEDEF_NAME . (58) any_id : T_TYPEDEF_NAME . (78) '(' reduce 58 '*' reduce 58 '&' reduce 58 T_IDENTIFIER reduce 58 T_TYPEDEF_NAME reduce 58 T_DEFINE_NAME reduce 58 T_AUTO reduce 58 T_EXTERN reduce 58 T_REGISTER reduce 58 T_STATIC reduce 58 T_TYPEDEF reduce 78 T_INLINE reduce 58 T_EXTENSION reduce 58 T_CHAR reduce 58 T_DOUBLE reduce 58 T_FLOAT reduce 58 T_INT reduce 58 T_VOID reduce 58 T_LONG reduce 58 T_SHORT reduce 58 T_SIGNED reduce 58 T_UNSIGNED reduce 58 T_ENUM reduce 58 T_STRUCT reduce 58 T_UNION reduce 58 T_Bool reduce 58 T_Complex reduce 58 T_Imaginary reduce 58 T_TYPE_QUALIFIER reduce 58 T_BRACKETS reduce 58 T_LBRACE reduce 78 T_VA_DCL reduce 78 ';' reduce 58 ',' reduce 58 '=' reduce 78 ')' reduce 58 state 7 type_qualifier : T_DEFINE_NAME . (62) . reduce 62 state 8 storage_class : T_AUTO . (40) . reduce 40 state 9 linkage_specification : T_EXTERN . T_STRING_LITERAL braces (13) linkage_specification : T_EXTERN . T_STRING_LITERAL declaration (14) storage_class : T_EXTERN . (41) T_STRING_LITERAL shift 62 '(' reduce 41 '*' reduce 41 '&' reduce 41 T_IDENTIFIER reduce 41 T_TYPEDEF_NAME reduce 41 T_DEFINE_NAME reduce 41 T_AUTO reduce 41 T_EXTERN reduce 41 T_REGISTER reduce 41 T_STATIC reduce 41 T_INLINE reduce 41 T_EXTENSION reduce 41 T_CHAR reduce 41 T_DOUBLE reduce 41 T_FLOAT reduce 41 T_INT reduce 41 T_VOID reduce 41 T_LONG reduce 41 T_SHORT reduce 41 T_SIGNED reduce 41 T_UNSIGNED reduce 41 T_ENUM reduce 41 T_STRUCT reduce 41 T_UNION reduce 41 T_Bool reduce 41 T_Complex reduce 41 T_Imaginary reduce 41 T_TYPE_QUALIFIER reduce 41 ';' reduce 41 state 10 storage_class : T_REGISTER . (42) . reduce 42 state 11 storage_class : T_STATIC . (43) . reduce 43 state 12 any_typedef : T_TYPEDEF . (20) . reduce 20 state 13 storage_class : T_INLINE . (44) . reduce 44 state 14 any_typedef : T_EXTENSION . T_TYPEDEF (19) storage_class : T_EXTENSION . (45) T_TYPEDEF shift 63 '(' reduce 45 '*' reduce 45 '&' reduce 45 T_IDENTIFIER reduce 45 T_TYPEDEF_NAME reduce 45 T_DEFINE_NAME reduce 45 T_AUTO reduce 45 T_EXTERN reduce 45 T_REGISTER reduce 45 T_STATIC reduce 45 T_INLINE reduce 45 T_EXTENSION reduce 45 T_CHAR reduce 45 T_DOUBLE reduce 45 T_FLOAT reduce 45 T_INT reduce 45 T_VOID reduce 45 T_LONG reduce 45 T_SHORT reduce 45 T_SIGNED reduce 45 T_UNSIGNED reduce 45 T_ENUM reduce 45 T_STRUCT reduce 45 T_UNION reduce 45 T_Bool reduce 45 T_Complex reduce 45 T_Imaginary reduce 45 T_TYPE_QUALIFIER reduce 45 ';' reduce 45 state 15 type_specifier : T_CHAR . (46) . reduce 46 state 16 type_specifier : T_DOUBLE . (47) . reduce 47 state 17 type_specifier : T_FLOAT . (48) . reduce 48 state 18 type_specifier : T_INT . (49) . reduce 49 state 19 type_specifier : T_VOID . (54) . reduce 54 state 20 type_specifier : T_LONG . (50) . reduce 50 state 21 type_specifier : T_SHORT . (51) . reduce 51 state 22 type_specifier : T_SIGNED . (52) . reduce 52 state 23 type_specifier : T_UNSIGNED . (53) . reduce 53 state 24 enumeration : T_ENUM . (76) . reduce 76 state 25 struct_or_union : T_STRUCT . (66) . reduce 66 state 26 struct_or_union : T_UNION . (67) . reduce 67 state 27 type_specifier : T_Bool . (55) . reduce 55 state 28 type_specifier : T_Complex . (56) . reduce 56 state 29 type_specifier : T_Imaginary . (57) . reduce 57 state 30 type_qualifier : T_TYPE_QUALIFIER . (61) . reduce 61 state 31 external_declaration : T_ASM . T_ASMARG ';' (9) T_ASMARG shift 64 . error state 32 external_declaration : ';' . (7) . reduce 7 state 33 $accept : program . $end (0) $end accept state 34 declaration : decl_specifiers . ';' (15) declaration : decl_specifiers . init_declarator_list ';' (16) function_definition : decl_specifiers . declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE (27) decl_specifiers : decl_specifiers . decl_specifier (36) '(' shift 2 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 6 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_INLINE shift 13 T_EXTENSION shift 66 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 ';' shift 67 . error decl_specifier goto 68 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 init_declarator_list goto 69 init_declarator goto 70 declarator goto 71 direct_declarator goto 42 struct_or_union goto 43 pointer goto 44 any_id goto 45 identifier_or_ref goto 46 enumeration goto 47 state 35 decl_specifiers : decl_specifier . (35) . reduce 35 state 36 decl_specifier : storage_class . (37) . reduce 37 state 37 decl_specifier : type_specifier . (38) . reduce 38 state 38 decl_specifier : type_qualifier . (39) . reduce 39 state 39 type_specifier : struct_or_union_specifier . (59) . reduce 59 state 40 type_specifier : enum_specifier . (60) . reduce 60 state 41 function_definition : declarator . $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE (29) $$4 : . (28) . reduce 28 $$4 goto 72 state 42 declarator : direct_declarator . (80) direct_declarator : direct_declarator . T_BRACKETS (83) direct_declarator : direct_declarator . '(' parameter_type_list ')' (84) direct_declarator : direct_declarator . '(' opt_identifier_list ')' (85) '(' shift 73 T_BRACKETS shift 74 T_TYPEDEF_NAME reduce 80 T_DEFINE_NAME reduce 80 T_AUTO reduce 80 T_EXTERN reduce 80 T_REGISTER reduce 80 T_STATIC reduce 80 T_TYPEDEF reduce 80 T_INLINE reduce 80 T_EXTENSION reduce 80 T_CHAR reduce 80 T_DOUBLE reduce 80 T_FLOAT reduce 80 T_INT reduce 80 T_VOID reduce 80 T_LONG reduce 80 T_SHORT reduce 80 T_SIGNED reduce 80 T_UNSIGNED reduce 80 T_ENUM reduce 80 T_STRUCT reduce 80 T_UNION reduce 80 T_Bool reduce 80 T_Complex reduce 80 T_Imaginary reduce 80 T_TYPE_QUALIFIER reduce 80 T_LBRACE reduce 80 T_VA_DCL reduce 80 ';' reduce 80 ',' reduce 80 '=' reduce 80 ')' reduce 80 state 43 struct_or_union_specifier : struct_or_union . any_id braces (63) struct_or_union_specifier : struct_or_union . braces (64) struct_or_union_specifier : struct_or_union . any_id (65) T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 T_LBRACE shift 75 . error any_id goto 76 braces goto 77 state 44 declarator : pointer . direct_declarator (79) '(' shift 2 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 . error direct_declarator goto 78 any_id goto 45 identifier_or_ref goto 46 state 45 identifier_or_ref : any_id . (103) . reduce 103 state 46 direct_declarator : identifier_or_ref . (81) . reduce 81 state 47 enum_specifier : enumeration . any_id braces (73) enum_specifier : enumeration . braces (74) enum_specifier : enumeration . any_id (75) T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 T_LBRACE shift 75 . error any_id goto 79 braces goto 80 state 48 program : translation_unit . (2) translation_unit : translation_unit . external_declaration (4) error shift 1 '(' shift 2 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 6 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 9 T_REGISTER shift 10 T_STATIC shift 11 T_TYPEDEF shift 12 T_INLINE shift 13 T_EXTENSION shift 14 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 T_ASM shift 31 ';' shift 32 $end reduce 2 decl_specifiers goto 34 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 declarator goto 41 direct_declarator goto 42 struct_or_union goto 43 pointer goto 44 any_id goto 45 identifier_or_ref goto 46 enumeration goto 47 external_declaration goto 81 declaration goto 50 function_definition goto 51 linkage_specification goto 52 any_typedef goto 53 state 49 translation_unit : external_declaration . (3) . reduce 3 state 50 external_declaration : declaration . (5) . reduce 5 state 51 external_declaration : function_definition . (6) . reduce 6 state 52 external_declaration : linkage_specification . (8) . reduce 8 state 53 declaration : any_typedef . decl_specifiers $$1 opt_declarator_list ';' (18) T_TYPEDEF_NAME shift 82 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_INLINE shift 13 T_EXTENSION shift 66 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 . error decl_specifiers goto 83 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 struct_or_union goto 43 enumeration goto 47 state 54 external_declaration : error T_MATCHRBRACE . (10) . reduce 10 state 55 external_declaration : error ';' . (11) . reduce 11 state 56 any_id : T_TYPEDEF_NAME . (78) . reduce 78 state 57 direct_declarator : '(' declarator . ')' (82) ')' shift 84 . error state 58 type_qualifier_list : type_qualifier . (90) . reduce 90 state 59 pointer : '*' opt_type_qualifiers . (86) pointer : '*' opt_type_qualifiers . pointer (87) '*' shift 3 '(' reduce 86 '&' reduce 86 T_IDENTIFIER reduce 86 T_TYPEDEF_NAME reduce 86 T_BRACKETS reduce 86 ',' reduce 86 ')' reduce 86 pointer goto 85 state 60 opt_type_qualifiers : type_qualifier_list . (89) type_qualifier_list : type_qualifier_list . type_qualifier (91) T_DEFINE_NAME shift 7 T_TYPE_QUALIFIER shift 30 '(' reduce 89 '*' reduce 89 '&' reduce 89 T_IDENTIFIER reduce 89 T_TYPEDEF_NAME reduce 89 T_BRACKETS reduce 89 ',' reduce 89 ')' reduce 89 type_qualifier goto 86 state 61 identifier_or_ref : '&' any_id . (104) . reduce 104 state 62 linkage_specification : T_EXTERN T_STRING_LITERAL . braces (13) linkage_specification : T_EXTERN T_STRING_LITERAL . declaration (14) T_TYPEDEF_NAME shift 82 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_TYPEDEF shift 12 T_INLINE shift 13 T_EXTENSION shift 14 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 T_LBRACE shift 75 . error decl_specifiers goto 87 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 struct_or_union goto 43 enumeration goto 47 declaration goto 88 braces goto 89 any_typedef goto 53 state 63 any_typedef : T_EXTENSION T_TYPEDEF . (19) . reduce 19 state 64 external_declaration : T_ASM T_ASMARG . ';' (9) ';' shift 90 . error state 65 storage_class : T_EXTERN . (41) . reduce 41 state 66 storage_class : T_EXTENSION . (45) . reduce 45 state 67 declaration : decl_specifiers ';' . (15) . reduce 15 state 68 decl_specifiers : decl_specifiers decl_specifier . (36) . reduce 36 state 69 declaration : decl_specifiers init_declarator_list . ';' (16) init_declarator_list : init_declarator_list . ',' init_declarator (69) ';' shift 91 ',' shift 92 . error state 70 init_declarator_list : init_declarator . (68) . reduce 68 state 71 function_definition : decl_specifiers declarator . $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE (27) init_declarator : declarator . (70) init_declarator : declarator . '=' $$5 T_INITIALIZER (72) $$2 : . (25) '=' shift 93 T_TYPEDEF_NAME reduce 25 T_DEFINE_NAME reduce 25 T_AUTO reduce 25 T_EXTERN reduce 25 T_REGISTER reduce 25 T_STATIC reduce 25 T_TYPEDEF reduce 25 T_INLINE reduce 25 T_EXTENSION reduce 25 T_CHAR reduce 25 T_DOUBLE reduce 25 T_FLOAT reduce 25 T_INT reduce 25 T_VOID reduce 25 T_LONG reduce 25 T_SHORT reduce 25 T_SIGNED reduce 25 T_UNSIGNED reduce 25 T_ENUM reduce 25 T_STRUCT reduce 25 T_UNION reduce 25 T_Bool reduce 25 T_Complex reduce 25 T_Imaginary reduce 25 T_TYPE_QUALIFIER reduce 25 T_LBRACE reduce 25 T_VA_DCL reduce 25 ';' reduce 70 ',' reduce 70 $$2 goto 94 state 72 function_definition : declarator $$4 . opt_declaration_list T_LBRACE T_MATCHRBRACE (29) opt_declaration_list : . (30) T_TYPEDEF_NAME shift 82 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_TYPEDEF shift 12 T_INLINE shift 13 T_EXTENSION shift 14 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 T_VA_DCL shift 95 T_LBRACE reduce 30 decl_specifiers goto 87 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 struct_or_union goto 43 enumeration goto 47 declaration goto 96 any_typedef goto 53 opt_declaration_list goto 97 declaration_list goto 98 state 73 direct_declarator : direct_declarator '(' . parameter_type_list ')' (84) direct_declarator : direct_declarator '(' . opt_identifier_list ')' (85) opt_identifier_list : . (99) T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 6 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_INLINE shift 13 T_EXTENSION shift 66 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 ')' reduce 99 decl_specifiers goto 99 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 parameter_type_list goto 100 parameter_list goto 101 parameter_declaration goto 102 opt_identifier_list goto 103 identifier_list goto 104 struct_or_union goto 43 any_id goto 105 enumeration goto 47 state 74 direct_declarator : direct_declarator T_BRACKETS . (83) . reduce 83 state 75 braces : T_LBRACE . T_MATCHRBRACE (12) T_MATCHRBRACE shift 106 . error state 76 struct_or_union_specifier : struct_or_union any_id . braces (63) struct_or_union_specifier : struct_or_union any_id . (65) T_LBRACE shift 75 '(' reduce 65 '*' reduce 65 '&' reduce 65 T_IDENTIFIER reduce 65 T_TYPEDEF_NAME reduce 65 T_DEFINE_NAME reduce 65 T_AUTO reduce 65 T_EXTERN reduce 65 T_REGISTER reduce 65 T_STATIC reduce 65 T_INLINE reduce 65 T_EXTENSION reduce 65 T_CHAR reduce 65 T_DOUBLE reduce 65 T_FLOAT reduce 65 T_INT reduce 65 T_VOID reduce 65 T_LONG reduce 65 T_SHORT reduce 65 T_SIGNED reduce 65 T_UNSIGNED reduce 65 T_ENUM reduce 65 T_STRUCT reduce 65 T_UNION reduce 65 T_Bool reduce 65 T_Complex reduce 65 T_Imaginary reduce 65 T_TYPE_QUALIFIER reduce 65 T_BRACKETS reduce 65 ';' reduce 65 ',' reduce 65 ')' reduce 65 braces goto 107 state 77 struct_or_union_specifier : struct_or_union braces . (64) . reduce 64 state 78 declarator : pointer direct_declarator . (79) direct_declarator : direct_declarator . T_BRACKETS (83) direct_declarator : direct_declarator . '(' parameter_type_list ')' (84) direct_declarator : direct_declarator . '(' opt_identifier_list ')' (85) '(' shift 73 T_BRACKETS shift 74 T_TYPEDEF_NAME reduce 79 T_DEFINE_NAME reduce 79 T_AUTO reduce 79 T_EXTERN reduce 79 T_REGISTER reduce 79 T_STATIC reduce 79 T_TYPEDEF reduce 79 T_INLINE reduce 79 T_EXTENSION reduce 79 T_CHAR reduce 79 T_DOUBLE reduce 79 T_FLOAT reduce 79 T_INT reduce 79 T_VOID reduce 79 T_LONG reduce 79 T_SHORT reduce 79 T_SIGNED reduce 79 T_UNSIGNED reduce 79 T_ENUM reduce 79 T_STRUCT reduce 79 T_UNION reduce 79 T_Bool reduce 79 T_Complex reduce 79 T_Imaginary reduce 79 T_TYPE_QUALIFIER reduce 79 T_LBRACE reduce 79 T_VA_DCL reduce 79 ';' reduce 79 ',' reduce 79 '=' reduce 79 ')' reduce 79 state 79 enum_specifier : enumeration any_id . braces (73) enum_specifier : enumeration any_id . (75) T_LBRACE shift 75 '(' reduce 75 '*' reduce 75 '&' reduce 75 T_IDENTIFIER reduce 75 T_TYPEDEF_NAME reduce 75 T_DEFINE_NAME reduce 75 T_AUTO reduce 75 T_EXTERN reduce 75 T_REGISTER reduce 75 T_STATIC reduce 75 T_INLINE reduce 75 T_EXTENSION reduce 75 T_CHAR reduce 75 T_DOUBLE reduce 75 T_FLOAT reduce 75 T_INT reduce 75 T_VOID reduce 75 T_LONG reduce 75 T_SHORT reduce 75 T_SIGNED reduce 75 T_UNSIGNED reduce 75 T_ENUM reduce 75 T_STRUCT reduce 75 T_UNION reduce 75 T_Bool reduce 75 T_Complex reduce 75 T_Imaginary reduce 75 T_TYPE_QUALIFIER reduce 75 T_BRACKETS reduce 75 ';' reduce 75 ',' reduce 75 ')' reduce 75 braces goto 108 state 80 enum_specifier : enumeration braces . (74) . reduce 74 state 81 translation_unit : translation_unit external_declaration . (4) . reduce 4 state 82 type_specifier : T_TYPEDEF_NAME . (58) . reduce 58 83: shift/reduce conflict (shift 82, reduce 17) on T_TYPEDEF_NAME state 83 declaration : any_typedef decl_specifiers . $$1 opt_declarator_list ';' (18) decl_specifiers : decl_specifiers . decl_specifier (36) $$1 : . (17) T_TYPEDEF_NAME shift 82 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_INLINE shift 13 T_EXTENSION shift 66 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 '(' reduce 17 '*' reduce 17 '&' reduce 17 T_IDENTIFIER reduce 17 ';' reduce 17 decl_specifier goto 68 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 struct_or_union goto 43 enumeration goto 47 $$1 goto 109 state 84 direct_declarator : '(' declarator ')' . (82) . reduce 82 state 85 pointer : '*' opt_type_qualifiers pointer . (87) . reduce 87 state 86 type_qualifier_list : type_qualifier_list type_qualifier . (91) . reduce 91 state 87 declaration : decl_specifiers . ';' (15) declaration : decl_specifiers . init_declarator_list ';' (16) decl_specifiers : decl_specifiers . decl_specifier (36) '(' shift 2 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 6 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_INLINE shift 13 T_EXTENSION shift 66 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 ';' shift 67 . error decl_specifier goto 68 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 init_declarator_list goto 69 init_declarator goto 70 declarator goto 110 direct_declarator goto 42 struct_or_union goto 43 pointer goto 44 any_id goto 45 identifier_or_ref goto 46 enumeration goto 47 state 88 linkage_specification : T_EXTERN T_STRING_LITERAL declaration . (14) . reduce 14 state 89 linkage_specification : T_EXTERN T_STRING_LITERAL braces . (13) . reduce 13 state 90 external_declaration : T_ASM T_ASMARG ';' . (9) . reduce 9 state 91 declaration : decl_specifiers init_declarator_list ';' . (16) . reduce 16 state 92 init_declarator_list : init_declarator_list ',' . init_declarator (69) '(' shift 2 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 . error init_declarator goto 111 declarator goto 110 direct_declarator goto 42 pointer goto 44 any_id goto 45 identifier_or_ref goto 46 state 93 init_declarator : declarator '=' . $$5 T_INITIALIZER (72) $$5 : . (71) . reduce 71 $$5 goto 112 state 94 function_definition : decl_specifiers declarator $$2 . opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE (27) opt_declaration_list : . (30) T_TYPEDEF_NAME shift 82 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_TYPEDEF shift 12 T_INLINE shift 13 T_EXTENSION shift 14 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 T_VA_DCL shift 95 T_LBRACE reduce 30 decl_specifiers goto 87 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 struct_or_union goto 43 enumeration goto 47 declaration goto 96 any_typedef goto 53 opt_declaration_list goto 113 declaration_list goto 98 state 95 opt_declaration_list : T_VA_DCL . (31) . reduce 31 state 96 declaration_list : declaration . (33) . reduce 33 state 97 function_definition : declarator $$4 opt_declaration_list . T_LBRACE T_MATCHRBRACE (29) T_LBRACE shift 114 . error state 98 opt_declaration_list : declaration_list . (32) declaration_list : declaration_list . declaration (34) T_TYPEDEF_NAME shift 82 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_TYPEDEF shift 12 T_INLINE shift 13 T_EXTENSION shift 14 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 T_LBRACE reduce 32 decl_specifiers goto 87 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 struct_or_union goto 43 enumeration goto 47 declaration goto 115 any_typedef goto 53 state 99 decl_specifiers : decl_specifiers . decl_specifier (36) parameter_declaration : decl_specifiers . declarator (96) parameter_declaration : decl_specifiers . abs_declarator (97) parameter_declaration : decl_specifiers . (98) '(' shift 116 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 6 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_INLINE shift 13 T_EXTENSION shift 66 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 T_BRACKETS shift 117 ',' reduce 98 ')' reduce 98 decl_specifier goto 68 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 declarator goto 118 direct_declarator goto 42 abs_declarator goto 119 direct_abs_declarator goto 120 struct_or_union goto 43 pointer goto 121 any_id goto 45 identifier_or_ref goto 46 enumeration goto 47 state 100 direct_declarator : direct_declarator '(' parameter_type_list . ')' (84) ')' shift 122 . error state 101 parameter_type_list : parameter_list . (92) parameter_type_list : parameter_list . ',' T_ELLIPSIS (93) parameter_list : parameter_list . ',' parameter_declaration (95) ',' shift 123 ')' reduce 92 state 102 parameter_list : parameter_declaration . (94) . reduce 94 state 103 direct_declarator : direct_declarator '(' opt_identifier_list . ')' (85) ')' shift 124 . error state 104 opt_identifier_list : identifier_list . (100) identifier_list : identifier_list . ',' any_id (102) ',' shift 125 ')' reduce 100 state 105 identifier_list : any_id . (101) . reduce 101 state 106 braces : T_LBRACE T_MATCHRBRACE . (12) . reduce 12 state 107 struct_or_union_specifier : struct_or_union any_id braces . (63) . reduce 63 state 108 enum_specifier : enumeration any_id braces . (73) . reduce 73 state 109 declaration : any_typedef decl_specifiers $$1 . opt_declarator_list ';' (18) opt_declarator_list : . (21) '(' shift 2 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 ';' reduce 21 declarator goto 126 direct_declarator goto 42 pointer goto 44 any_id goto 45 identifier_or_ref goto 46 opt_declarator_list goto 127 declarator_list goto 128 state 110 init_declarator : declarator . (70) init_declarator : declarator . '=' $$5 T_INITIALIZER (72) '=' shift 93 ';' reduce 70 ',' reduce 70 state 111 init_declarator_list : init_declarator_list ',' init_declarator . (69) . reduce 69 state 112 init_declarator : declarator '=' $$5 . T_INITIALIZER (72) T_INITIALIZER shift 129 . error state 113 function_definition : decl_specifiers declarator $$2 opt_declaration_list . T_LBRACE $$3 T_MATCHRBRACE (27) T_LBRACE shift 130 . error state 114 function_definition : declarator $$4 opt_declaration_list T_LBRACE . T_MATCHRBRACE (29) T_MATCHRBRACE shift 131 . error state 115 declaration_list : declaration_list declaration . (34) . reduce 34 state 116 direct_declarator : '(' . declarator ')' (82) direct_abs_declarator : '(' . abs_declarator ')' (108) direct_abs_declarator : '(' . parameter_type_list ')' (113) direct_abs_declarator : '(' . ')' (114) '(' shift 116 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 6 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_INLINE shift 13 T_EXTENSION shift 66 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 T_BRACKETS shift 117 ')' shift 132 . error decl_specifiers goto 99 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 declarator goto 57 direct_declarator goto 42 abs_declarator goto 133 direct_abs_declarator goto 120 parameter_type_list goto 134 parameter_list goto 101 parameter_declaration goto 102 struct_or_union goto 43 pointer goto 121 any_id goto 45 identifier_or_ref goto 46 enumeration goto 47 state 117 direct_abs_declarator : T_BRACKETS . (110) . reduce 110 state 118 parameter_declaration : decl_specifiers declarator . (96) . reduce 96 state 119 parameter_declaration : decl_specifiers abs_declarator . (97) . reduce 97 state 120 abs_declarator : direct_abs_declarator . (107) direct_abs_declarator : direct_abs_declarator . T_BRACKETS (109) direct_abs_declarator : direct_abs_declarator . '(' parameter_type_list ')' (111) direct_abs_declarator : direct_abs_declarator . '(' ')' (112) '(' shift 135 T_BRACKETS shift 136 ',' reduce 107 ')' reduce 107 state 121 declarator : pointer . direct_declarator (79) abs_declarator : pointer . (105) abs_declarator : pointer . direct_abs_declarator (106) '(' shift 116 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 T_BRACKETS shift 117 ',' reduce 105 ')' reduce 105 direct_declarator goto 78 direct_abs_declarator goto 137 any_id goto 45 identifier_or_ref goto 46 state 122 direct_declarator : direct_declarator '(' parameter_type_list ')' . (84) . reduce 84 state 123 parameter_type_list : parameter_list ',' . T_ELLIPSIS (93) parameter_list : parameter_list ',' . parameter_declaration (95) T_TYPEDEF_NAME shift 82 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_INLINE shift 13 T_EXTENSION shift 66 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 T_ELLIPSIS shift 138 . error decl_specifiers goto 99 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 parameter_declaration goto 139 struct_or_union goto 43 enumeration goto 47 state 124 direct_declarator : direct_declarator '(' opt_identifier_list ')' . (85) . reduce 85 state 125 identifier_list : identifier_list ',' . any_id (102) T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 . error any_id goto 140 state 126 declarator_list : declarator . (23) . reduce 23 state 127 declaration : any_typedef decl_specifiers $$1 opt_declarator_list . ';' (18) ';' shift 141 . error state 128 opt_declarator_list : declarator_list . (22) declarator_list : declarator_list . ',' declarator (24) ',' shift 142 ';' reduce 22 state 129 init_declarator : declarator '=' $$5 T_INITIALIZER . (72) . reduce 72 state 130 function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE . $$3 T_MATCHRBRACE (27) $$3 : . (26) . reduce 26 $$3 goto 143 state 131 function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE . (29) . reduce 29 state 132 direct_abs_declarator : '(' ')' . (114) . reduce 114 state 133 direct_abs_declarator : '(' abs_declarator . ')' (108) ')' shift 144 . error state 134 direct_abs_declarator : '(' parameter_type_list . ')' (113) ')' shift 145 . error state 135 direct_abs_declarator : direct_abs_declarator '(' . parameter_type_list ')' (111) direct_abs_declarator : direct_abs_declarator '(' . ')' (112) T_TYPEDEF_NAME shift 82 T_DEFINE_NAME shift 7 T_AUTO shift 8 T_EXTERN shift 65 T_REGISTER shift 10 T_STATIC shift 11 T_INLINE shift 13 T_EXTENSION shift 66 T_CHAR shift 15 T_DOUBLE shift 16 T_FLOAT shift 17 T_INT shift 18 T_VOID shift 19 T_LONG shift 20 T_SHORT shift 21 T_SIGNED shift 22 T_UNSIGNED shift 23 T_ENUM shift 24 T_STRUCT shift 25 T_UNION shift 26 T_Bool shift 27 T_Complex shift 28 T_Imaginary shift 29 T_TYPE_QUALIFIER shift 30 ')' shift 146 . error decl_specifiers goto 99 decl_specifier goto 35 storage_class goto 36 type_specifier goto 37 type_qualifier goto 38 struct_or_union_specifier goto 39 enum_specifier goto 40 parameter_type_list goto 147 parameter_list goto 101 parameter_declaration goto 102 struct_or_union goto 43 enumeration goto 47 state 136 direct_abs_declarator : direct_abs_declarator T_BRACKETS . (109) . reduce 109 state 137 abs_declarator : pointer direct_abs_declarator . (106) direct_abs_declarator : direct_abs_declarator . T_BRACKETS (109) direct_abs_declarator : direct_abs_declarator . '(' parameter_type_list ')' (111) direct_abs_declarator : direct_abs_declarator . '(' ')' (112) '(' shift 135 T_BRACKETS shift 136 ',' reduce 106 ')' reduce 106 state 138 parameter_type_list : parameter_list ',' T_ELLIPSIS . (93) . reduce 93 state 139 parameter_list : parameter_list ',' parameter_declaration . (95) . reduce 95 state 140 identifier_list : identifier_list ',' any_id . (102) . reduce 102 state 141 declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';' . (18) . reduce 18 state 142 declarator_list : declarator_list ',' . declarator (24) '(' shift 2 '*' shift 3 '&' shift 4 T_IDENTIFIER shift 5 T_TYPEDEF_NAME shift 56 . error declarator goto 148 direct_declarator goto 42 pointer goto 44 any_id goto 45 identifier_or_ref goto 46 state 143 function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 . T_MATCHRBRACE (27) T_MATCHRBRACE shift 149 . error state 144 direct_abs_declarator : '(' abs_declarator ')' . (108) . reduce 108 state 145 direct_abs_declarator : '(' parameter_type_list ')' . (113) . reduce 113 state 146 direct_abs_declarator : direct_abs_declarator '(' ')' . (112) . reduce 112 state 147 direct_abs_declarator : direct_abs_declarator '(' parameter_type_list . ')' (111) ')' shift 150 . error state 148 declarator_list : declarator_list ',' declarator . (24) . reduce 24 state 149 function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE . (27) . reduce 27 state 150 direct_abs_declarator : direct_abs_declarator '(' parameter_type_list ')' . (111) . reduce 111 State 6 contains 29 reduce/reduce conflicts. State 83 contains 1 shift/reduce conflict. 44 terminals, 43 nonterminals 115 grammar rules, 151 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 40 '(' 3 42 '*' 4 38 '&' 5 257 T_IDENTIFIER 6 258 T_TYPEDEF_NAME 7 259 T_DEFINE_NAME 8 260 T_AUTO 9 261 T_EXTERN 10 262 T_REGISTER 11 263 T_STATIC 12 264 T_TYPEDEF 13 265 T_INLINE 14 266 T_EXTENSION 15 267 T_CHAR 16 268 T_DOUBLE 17 269 T_FLOAT 18 270 T_INT 19 271 T_VOID 20 272 T_LONG 21 273 T_SHORT 22 274 T_SIGNED 23 275 T_UNSIGNED 24 276 T_ENUM 25 277 T_STRUCT 26 278 T_UNION 27 279 T_Bool 28 280 T_Complex 29 281 T_Imaginary 30 282 T_TYPE_QUALIFIER 31 283 T_BRACKETS 32 284 T_LBRACE 33 285 T_MATCHRBRACE 34 286 T_ELLIPSIS 35 287 T_INITIALIZER 36 288 T_STRING_LITERAL 37 289 T_ASM 38 290 T_ASMARG 39 291 T_VA_DCL 40 59 ';' 41 44 ',' 42 61 '=' 43 41 ')' 44 292 $accept 45 293 program 46 294 decl_specifiers 47 295 decl_specifier 48 296 storage_class 49 297 type_specifier 50 298 type_qualifier 51 299 struct_or_union_specifier 52 300 enum_specifier 53 301 init_declarator_list 54 302 init_declarator 55 303 declarator 56 304 direct_declarator 57 305 abs_declarator 58 306 direct_abs_declarator 59 307 parameter_type_list 60 308 parameter_list 61 309 parameter_declaration 62 310 opt_identifier_list 63 311 identifier_list 64 312 struct_or_union 65 313 pointer 66 314 opt_type_qualifiers 67 315 type_qualifier_list 68 316 any_id 69 317 identifier_or_ref 70 318 enumeration 71 319 translation_unit 72 320 external_declaration 73 321 declaration 74 322 function_definition 75 323 linkage_specification 76 324 braces 77 325 any_typedef 78 326 opt_declarator_list 79 327 $$1 80 328 declarator_list 81 329 opt_declaration_list 82 330 $$2 83 331 $$3 84 332 $$4 85 333 declaration_list 86 334 $$5 byacc-20221106/test/btyacc/quote_calc-s.tab.h0000644000000000000000000000042112312171122017236 0ustar rootroot#ifndef _quote_calc__defines_h_ #define _quote_calc__defines_h_ #define OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #endif /* _quote_calc__defines_h_ */ byacc-20221106/test/btyacc/expr.oxout.tab.c0000644000000000000000000022303714164144452017034 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse expr_oxout_parse #endif /* yyparse */ #ifndef yylex #define yylex expr_oxout_lex #endif /* yylex */ #ifndef yyerror #define yyerror expr_oxout_error #endif /* yyerror */ #ifndef yychar #define yychar expr_oxout_char #endif /* yychar */ #ifndef yyval #define yyval expr_oxout_val #endif /* yyval */ #ifndef yylval #define yylval expr_oxout_lval #endif /* yylval */ #ifndef yydebug #define yydebug expr_oxout_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs expr_oxout_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag expr_oxout_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs expr_oxout_lhs #endif /* yylhs */ #ifndef yylen #define yylen expr_oxout_len #endif /* yylen */ #ifndef yydefred #define yydefred expr_oxout_defred #endif /* yydefred */ #ifndef yystos #define yystos expr_oxout_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto expr_oxout_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex expr_oxout_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex expr_oxout_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex expr_oxout_gindex #endif /* yygindex */ #ifndef yytable #define yytable expr_oxout_table #endif /* yytable */ #ifndef yycheck #define yycheck expr_oxout_check #endif /* yycheck */ #ifndef yyname #define yyname expr_oxout_name #endif /* yyname */ #ifndef yyrule #define yyrule expr_oxout_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex expr_oxout_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable expr_oxout_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "expr_oxout_" #define YYPURE 0 #line 5 "expr.oxout.y" #include #include #line 8 "expr.Y" #include "expr.oxout.h" #include extern int yylex(void); extern void yyerror(const char *); #line 27 "expr.oxout.y" #include #define yyyR USHRT_MAX #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #line 31 "expr.oxout.y" typedef union YYSTYPE { struct yyyOxAttrbs { struct yyyStackItem *yyyOxStackItem; } yyyOxAttrbs; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 38 "expr.oxout.y" #include #include static int yyyYok = 1; extern yyyFT yyyRCIL[]; void yyyExecuteRRsection(yyyGNT *rootNode); void yyyYoxInit(void); void yyyDecorate(void); struct yyyOxAttrbs; /* hack required to compensate for 'msta' behavior */ void yyyGenIntNode(long yyyProdNum, int yyyRHSlength, int yyyNattrbs, struct yyyOxAttrbs *yyval_OxAttrbs, ...); void yyyAdjustINRC(long yyyProdNum, int yyyRHSlength, long startP, long stopP, struct yyyOxAttrbs *yyval_OxAttrbs, ...); void yyyCheckUnsolvedInstTrav(yyyGNT *rootNode,long *nNZrc,long *cycleSum); void yyyUnsolvedInstSearchTrav(yyyGNT *pNode); void yyyUnsolvedInstSearchTravAux(yyyGNT *pNode); void yyyabort(void); #line 166 "expr.oxout.tab.c" /* 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 ID 257 #define CONST 258 #define YYERRCODE 256 typedef int YYINT; static const YYINT expr_oxout_lhs[] = { -1, 2, 0, 1, 3, 3, 3, 3, 3, 3, 3, }; static const YYINT expr_oxout_len[] = { 2, 0, 2, 1, 3, 3, 3, 3, 3, 1, 1, }; static const YYINT expr_oxout_defred[] = { 1, 0, 0, 9, 10, 0, 2, 0, 0, 0, 0, 0, 0, 8, 0, 0, 4, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT expr_oxout_stos[] = { 0, 260, 262, 257, 258, 40, 261, 263, 263, 43, 45, 42, 47, 41, 263, 263, 263, 263, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT expr_oxout_dgoto[] = { 1, 6, 2, 7, }; static const YYINT expr_oxout_sindex[] = { 0, 0, -40, 0, 0, -40, 0, -18, -24, -40, -40, -40, -40, 0, -37, -37, 0, -39, }; static const YYINT expr_oxout_rindex[] = { 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 2, 8, 0, 1, }; #if YYBTYACC static const YYINT expr_oxout_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT expr_oxout_gindex[] = { 0, 0, 0, 4, }; #define YYTABLESIZE 218 static const YYINT expr_oxout_table[] = { 5, 6, 5, 11, 0, 11, 3, 0, 7, 8, 12, 0, 0, 14, 15, 16, 17, 13, 11, 9, 0, 10, 0, 12, 11, 9, 0, 10, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 5, 6, 5, 6, 5, 6, 7, 0, 7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, }; static const YYINT expr_oxout_check[] = { 40, 0, 0, 42, -1, 42, 0, -1, 0, 5, 47, -1, -1, 9, 10, 11, 12, 41, 42, 43, -1, 45, -1, 47, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, 41, 43, 43, 45, 45, 47, 41, -1, 43, -1, 45, -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, -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, -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, -1, 257, 258, }; #if YYBTYACC static const YYINT expr_oxout_ctable[] = { -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, -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, -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, -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, -1, -1, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 258 #define YYUNDFTOKEN 264 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const expr_oxout_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","ID", "CONST","$accept","yyyAugNonterm","s","$$1","expr","illegal-symbol", }; static const char *const expr_oxout_rule[] = { "$accept : yyyAugNonterm", "$$1 :", "yyyAugNonterm : $$1 s", "s : expr", "expr : expr '*' expr", "expr : expr '+' expr", "expr : expr '/' expr", "expr : expr '-' expr", "expr : '(' expr ')'", "expr : ID", "expr : CONST", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 53 "expr.Y" int yyparse(void); int main() {yyparse(); } #line 138 "expr.oxout.y" long yyySSALspaceSize = 20000; long yyyRSmaxSize = 1000; long yyyTravStackMaxSize = 2000; struct yyySolvedSAlistCell {yyyWAT attrbNum; long next; }; #define yyyLambdaSSAL 0 long yyySSALCfreeList = yyyLambdaSSAL; long yyyNewSSALC = 1; struct yyySolvedSAlistCell *yyySSALspace; long yyyNbytesStackStg; yyyFT yyyRCIL[1]; short yyyIIIEL[] = {0, 0,2,6,10,14,18,22,24, }; long yyyIIEL[] = { 0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0, 1,1, }; long yyyIEL[] = { 0,0,0, }; yyyFT yyyEntL[1]; void yyyfatal(char *msg) {fputs(msg,stderr);exit(-1);} #define yyySSALof 'S' #define yyyRSof 'q' #define yyyTSof 't' void yyyHandleOverflow(char which) {char *msg1 = "?", *msg2; long oldSize = 0, newSize; switch(which) { case yyySSALof : msg1 = "SSAL overflow: "; oldSize = yyySSALspaceSize; break; case yyyRSof : msg1 = "ready set overflow: "; oldSize = yyyRSmaxSize; break; case yyyTSof : msg1 = "traversal stack overflow: "; oldSize = yyyTravStackMaxSize; break; default :; } newSize = (3*oldSize)/2; if (newSize < 100) newSize = 100; fputs(msg1,stderr); fprintf(stderr,"size was %ld.\n",oldSize); msg2 = " Have to modify evaluator: -Y%c%ld.\n"; fprintf(stderr,msg2,which,newSize); exit(-1); } void yyySignalEnts(yyyGNT *node,long startP,long stopP) {yyyGNT *dumNode; while (startP < stopP) { if (!yyyEntL[startP]) dumNode = node; else dumNode = (node->cL)[yyyEntL[startP]-1]; if (!(--((dumNode->refCountList)[yyyEntL[startP+1]] ) ) ) { if (++yyyRSTop == yyyAfterRS) {yyyHandleOverflow(yyyRSof); break; } yyyRSTop->node = dumNode; yyyRSTop->whichSym = yyyEntL[startP]; yyyRSTop->wa = yyyEntL[startP+1]; } startP += 2; } } void yyySolveAndSignal() { long yyyiDum,*yyypL; int yyyws,yyywa; yyyGNT *yyyRSTopN,*yyyRefN; yyyParent yyyRSTopNp; yyyRSTopNp = (yyyRSTopN = yyyRSTop->node)->parent; yyyRefN= (yyyws = (yyyRSTop->whichSym))?yyyRSTopNp.noderef:yyyRSTopN; yyywa = yyyRSTop->wa; yyyRSTop--; switch(yyyRefN->prodNum) { case 1: /***yacc rule 1***/ switch (yyyws) { } break; case 2: /***yacc rule 2***/ switch (yyyws) { } break; case 3: /***yacc rule 3***/ switch (yyyws) { } break; case 4: /***yacc rule 4***/ switch (yyyws) { } break; case 5: /***yacc rule 5***/ switch (yyyws) { } break; case 6: /***yacc rule 6***/ switch (yyyws) { } break; case 7: /***yacc rule 7***/ switch (yyyws) { case 1: /**/ switch (yyywa) { } break; } break; case 8: /***yacc rule 8***/ switch (yyyws) { case 1: /**/ switch (yyywa) { } break; } break; } /* switch */ if (yyyws) /* the just-solved instance was inherited. */ {if (yyyRSTopN->prodNum) {yyyiDum = yyyIIEL[yyyIIIEL[yyyRSTopN->prodNum]] + yyywa; yyySignalEnts(yyyRSTopN,yyyIEL[yyyiDum], yyyIEL[yyyiDum+1] ); } } else /* the just-solved instance was synthesized. */ {if (!(yyyRSTopN->parentIsStack)) /* node has a parent. */ {yyyiDum = yyyIIEL[yyyIIIEL[yyyRSTopNp.noderef->prodNum] + yyyRSTopN->whichSym ] + yyywa; yyySignalEnts(yyyRSTopNp.noderef, yyyIEL[yyyiDum], yyyIEL[yyyiDum+1] ); } else /* node is still on the stack--it has no parent yet. */ {yyypL = &(yyyRSTopNp.stackref->solvedSAlist); if (yyySSALCfreeList == yyyLambdaSSAL) {yyySSALspace[yyyNewSSALC].next = *yyypL; if ((*yyypL = yyyNewSSALC++) == yyySSALspaceSize) yyyHandleOverflow(yyySSALof); } else {yyyiDum = yyySSALCfreeList; yyySSALCfreeList = yyySSALspace[yyySSALCfreeList].next; yyySSALspace[yyyiDum].next = *yyypL; *yyypL = yyyiDum; } yyySSALspace[*yyypL].attrbNum = yyywa; } } } /* yyySolveAndSignal */ #define condStg unsigned int conds; #define yyyClearConds {yyyTST->conds = 0;} #define yyySetCond(n) {yyyTST->conds += (1<<(n));} #define yyyCond(n) ((yyyTST->conds & (1<<(n)))?1:0) struct yyyTravStackItem {yyyGNT *node; char isReady; condStg }; void yyyDoTraversals(yyyGNT *rootNode) {struct yyyTravStackItem *yyyTravStack,*yyyTST,*yyyAfterTravStack; yyyGNT *yyyTSTn,**yyyCLptr2; int yyyi,yyyRL,yyyPass; int i; if (!yyyYok) return; if ((yyyTravStack = ((struct yyyTravStackItem *) calloc((size_t)yyyTravStackMaxSize, (size_t)sizeof(struct yyyTravStackItem) ) ) ) == (struct yyyTravStackItem *)NULL ) {fputs("malloc error in traversal stack allocation\n",stderr); exit(-1); } yyyAfterTravStack = yyyTravStack + yyyTravStackMaxSize; yyyTravStack++; for (yyyi=0; yyyi<2; yyyi++) { yyyTST = yyyTravStack; yyyTST->node = rootNode; yyyTST->isReady = 0; yyyClearConds while(yyyTST >= yyyTravStack) {yyyTSTn = yyyTST->node; if (yyyTST->isReady) {yyyPass = 1; goto yyyTravSwitch; yyyTpop: yyyTST--; } else {yyyPass = 0; goto yyyTravSwitch; yyyTpush: yyyTST->isReady = 1; if (yyyTSTn->prodNum) {if (yyyRL) {yyyCLptr2 = yyyTSTn->cL; i = yyyTSTn->cLlen; while (i--) {if (++yyyTST == yyyAfterTravStack) yyyHandleOverflow(yyyTSof); else {yyyTST->node = *yyyCLptr2; yyyTST->isReady = 0; yyyClearConds } yyyCLptr2++; } } /* right to left */ else /* left to right */ {i = yyyTSTn->cLlen; yyyCLptr2 = yyyTSTn->cL + i; while (i--) {yyyCLptr2--; if (++yyyTST == yyyAfterTravStack) yyyHandleOverflow(yyyTSof); else {yyyTST->node = *yyyCLptr2; yyyTST->isReady = 0; yyyClearConds } } } /* left to right */ } } /* else */ continue; yyyTravSwitch: switch(yyyTSTn->prodNum) { case 1: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) if (! #line 24 "expr.Y" (1) #line 444 "expr.oxout.y" ) yyySetCond(1) yyySetCond(2) case 1: if (yyyCond(0) != yyyPass) { #line 24 "expr.Y" #line 453 "expr.oxout.y" } if (yyyCond(1) != yyyPass) { #line 24 "expr.Y" printf("\n"); #line 459 "expr.oxout.y" } if (yyyCond(2) != yyyPass) { #line 25 "expr.Y" printf("prefix: "); #line 465 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; if ( #line 23 "expr.Y" (1) #line 477 "expr.oxout.y" ) yyySetCond(2) case 1: if (yyyCond(0) != yyyPass) { #line 22 "expr.Y" printf("\n"); #line 486 "expr.oxout.y" } if (yyyCond(1) != yyyPass) { #line 23 "expr.Y" #line 491 "expr.oxout.y" } if (yyyCond(2) != yyyPass) { #line 23 "expr.Y" printf("postfix: "); #line 497 "expr.oxout.y" } break; } break; } break; case 2: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) case 1: if (yyyCond(0) != yyyPass) { #line 29 "expr.Y" printf(" * "); #line 518 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: if (yyyCond(0) != yyyPass) { #line 28 "expr.Y" printf(" * "); #line 533 "expr.oxout.y" } break; } break; } break; case 3: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) case 1: if (yyyCond(0) != yyyPass) { #line 32 "expr.Y" printf(" + "); #line 554 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: if (yyyCond(0) != yyyPass) { #line 33 "expr.Y" printf(" + "); #line 569 "expr.oxout.y" } break; } break; } break; case 4: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) case 1: if (yyyCond(0) != yyyPass) { #line 37 "expr.Y" printf(" / "); #line 590 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: if (yyyCond(0) != yyyPass) { #line 36 "expr.Y" printf(" / "); #line 605 "expr.oxout.y" } break; } break; } break; case 5: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) case 1: if (yyyCond(0) != yyyPass) { #line 41 "expr.Y" printf(" - "); #line 626 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: if (yyyCond(0) != yyyPass) { #line 40 "expr.Y" printf(" - "); #line 641 "expr.oxout.y" } break; } break; } break; case 6: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0; case 1: break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: break; } break; } break; case 7: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) case 1: if (yyyCond(0) != yyyPass) { #line 46 "expr.Y" printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); #line 685 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: if (yyyCond(0) != yyyPass) { #line 45 "expr.Y" printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); #line 700 "expr.oxout.y" } break; } break; } break; case 8: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) case 1: if (yyyCond(0) != yyyPass) { #line 50 "expr.Y" printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); #line 721 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: if (yyyCond(0) != yyyPass) { #line 49 "expr.Y" printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); #line 736 "expr.oxout.y" } break; } break; } break; } /* switch */ if (yyyPass) goto yyyTpop; else goto yyyTpush; } /* while */ } /* for */ } /* yyyDoTraversals */ void yyyExecuteRRsection(yyyGNT *rootNode) { int yyyi; long cycleSum = 0; long nNZrc = 0; if (!yyyYok) return; yyyCheckUnsolvedInstTrav(rootNode,&nNZrc,&cycleSum); if (nNZrc) { fputs("\n\n\n**********\n",stderr); fputs("cycle detected in completed parse tree",stderr); fputs(" after decoration.\n",stderr); #if CYCLE_VERBOSE fprintf(stderr, "number of unsolved attribute instances == %ld.\n", nNZrc ); fprintf(stderr, "total number of remaining dependencies == %ld.\n", cycleSum ); fputs("average number of remaining dependencies\n",stderr); fprintf(stderr," per unsolved instance == %f.\n", ((float)(cycleSum)/(float)(nNZrc)) ); #endif fprintf(stderr, "searching parse tree for %ld unsolved instances:\n", nNZrc ); yyyUnsolvedInstSearchTravAux(rootNode); } yyyDoTraversals(rootNode); } /* yyyExecuteRRsection */ yyyWAT yyyLRCIL[2] = {0,0, }; void yyyYoxInit(void) { static int yyyInitDone = 0; if (yyyInitDone) return; if ((yyyRS = (yyyRSitem *) calloc((size_t)(yyyRSmaxSize+1), (size_t)sizeof(yyyRSitem)) ) == ((yyyRSitem *) NULL) ) yyyfatal("malloc error in ox ready set space allocation\n"); yyyRS++; yyyAfterRS = yyyRS + yyyRSmaxSize; if ((yyySSALspace = (struct yyySolvedSAlistCell *) calloc((size_t)(yyySSALspaceSize+1), (size_t)sizeof(struct yyySolvedSAlistCell)) ) == ((struct yyySolvedSAlistCell *) NULL) ) yyyfatal("malloc error in stack solved list space allocation\n"); yyyInitDone = 1; yyyRSTop = yyyRS - 1; } /* yyyYoxInit */ void yyyDecorate(void) { while (yyyRSTop >= yyyRS) yyySolveAndSignal(); } void yyyGenIntNode(long yyyProdNum, int yyyRHSlength, int yyyNattrbs, struct yyyOxAttrbs *yyval_OxAttrbs, ...) {yyyWST i; yyySIT **yyyOxStackItem = &yyval_OxAttrbs->yyyOxStackItem; yyyGNT *gnpDum; va_list ap; *yyyOxStackItem = (yyySIT *) malloc((size_t)sizeof(yyySIT)); if (*yyyOxStackItem == (yyySIT *) NULL) yyyfatal("malloc error in ox yacc semantic stack space allocation\n"); (*yyyOxStackItem)->node = (yyyGNT *) malloc((size_t)sizeof(yyyGNT)); if ((*yyyOxStackItem)->node == (yyyGNT *) NULL) yyyfatal("malloc error in ox node space allocation\n"); (*yyyOxStackItem)->solvedSAlist = yyyLambdaSSAL; (*yyyOxStackItem)->node->parent.stackref = *yyyOxStackItem; (*yyyOxStackItem)->node->parentIsStack = 1; (*yyyOxStackItem)->node->cLlen = yyyRHSlength; (*yyyOxStackItem)->node->cL = (yyyGNT **) calloc((size_t)yyyRHSlength, (size_t)sizeof(yyyGNT *)); if ((*yyyOxStackItem)->node->cL == (yyyGNT **) NULL) yyyfatal("malloc error in ox child list space allocation\n"); (*yyyOxStackItem)->node->refCountListLen = yyyNattrbs; (*yyyOxStackItem)->node->refCountList = (yyyRCT *) calloc((size_t)yyyNattrbs, (size_t)sizeof(yyyRCT)); if ((*yyyOxStackItem)->node->refCountList == (yyyRCT *) NULL) yyyfatal("malloc error in ox reference count list space allocation\n"); (*yyyOxStackItem)->node->prodNum = (int) yyyProdNum; va_start(ap, yyval_OxAttrbs); for (i=1;i<=yyyRHSlength;i++) {yyySIT *yaccStDum = va_arg(ap,struct yyyOxAttrbs *)->yyyOxStackItem; gnpDum = (*yyyOxStackItem)->node->cL[i-1] = yaccStDum->node; gnpDum->whichSym = i; gnpDum->parent.noderef = (*yyyOxStackItem)->node; gnpDum->parentIsStack = 0; } va_end(ap); } #define yyyDECORfREQ 50 void yyyAdjustINRC(long yyyProdNum, int yyyRHSlength, long startP, long stopP, struct yyyOxAttrbs *yyval_OxAttrbs, ...) {yyyWST i; yyySIT *yyyOxStackItem = yyval_OxAttrbs->yyyOxStackItem; long SSALptr,SSALptrHead,*cPtrPtr; long *pL; yyyGNT *gnpDum; long iTemp; long nextP; static unsigned short intNodeCount = yyyDECORfREQ; va_list ap; nextP = startP; while (nextP < stopP) {if (yyyRCIL[nextP] == yyyR) {(yyyOxStackItem->node->refCountList)[yyyRCIL[nextP+1]] = yyyRCIL[nextP+2]; } else {(((yyyOxStackItem->node->cL)[yyyRCIL[nextP]])->refCountList)[yyyRCIL[nextP+1]] = yyyRCIL[nextP+2]; } nextP += 3; } pL = yyyIIEL + yyyIIIEL[yyyProdNum]; va_start(ap, yyval_OxAttrbs); for (i=1;i<=yyyRHSlength;i++) {yyySIT *yaccStDum = va_arg(ap,struct yyyOxAttrbs *)->yyyOxStackItem; pL++; SSALptrHead = SSALptr = *(cPtrPtr = &(yaccStDum->solvedSAlist)); if (SSALptr != yyyLambdaSSAL) {*cPtrPtr = yyyLambdaSSAL; do { iTemp = (*pL+yyySSALspace[SSALptr].attrbNum); yyySignalEnts(yyyOxStackItem->node, yyyIEL[iTemp], yyyIEL[iTemp+1] ); SSALptr = *(cPtrPtr = &(yyySSALspace[SSALptr].next)); } while (SSALptr != yyyLambdaSSAL); *cPtrPtr = yyySSALCfreeList; yyySSALCfreeList = SSALptrHead; } } va_end(ap); nextP = startP + 2; while (nextP < stopP) {if (!yyyRCIL[nextP]) {if (yyyRCIL[nextP-2] == yyyR) {pL = &(yyyOxStackItem->solvedSAlist); if (yyySSALCfreeList == yyyLambdaSSAL) {yyySSALspace[yyyNewSSALC].next = *pL; if ((*pL = yyyNewSSALC++) == yyySSALspaceSize) yyyHandleOverflow(yyySSALof); } else {iTemp = yyySSALCfreeList; yyySSALCfreeList = yyySSALspace[yyySSALCfreeList].next; yyySSALspace[iTemp].next = *pL; *pL = iTemp; } yyySSALspace[*pL].attrbNum = yyyRCIL[nextP-1]; } else {if ((gnpDum = (yyyOxStackItem->node->cL)[yyyRCIL[nextP-2]])->prodNum != 0) { iTemp = yyyIIEL[yyyIIIEL[gnpDum->prodNum]] + yyyRCIL[nextP-1]; yyySignalEnts(gnpDum, yyyIEL[iTemp], yyyIEL[iTemp+1] ); } } } nextP += 3; } if (!--intNodeCount) {intNodeCount = yyyDECORfREQ; yyyDecorate(); } } void yyyGenLeaf(int nAttrbs,int typeNum,long startP,long stopP,YYSTYPE *mylval) {yyyRCT *rcPdum; yyySIT **yyyOxStackItem = &mylval->yyyOxAttrbs.yyyOxStackItem; (*yyyOxStackItem) = (yyySIT *) malloc((size_t)sizeof(yyySIT)); if ((*yyyOxStackItem) == (yyySIT *) NULL) yyyfatal("malloc error in ox yacc semantic stack space allocation\n"); (*yyyOxStackItem)->node = (yyyGNT *) malloc((size_t)sizeof(yyyGNT)) ; if ((*yyyOxStackItem)->node == (yyyGNT *) NULL) yyyfatal("malloc error in ox node space allocation\n"); (*yyyOxStackItem)->solvedSAlist = yyyLambdaSSAL; (*yyyOxStackItem)->node->parent.stackref = *yyyOxStackItem; (*yyyOxStackItem)->node->parentIsStack = 1; (*yyyOxStackItem)->node->cLlen = 0; (*yyyOxStackItem)->node->cL = (yyyGNT **)NULL; (*yyyOxStackItem)->node->refCountListLen = nAttrbs; rcPdum = (*yyyOxStackItem)->node->refCountList = (yyyRCT *) calloc((size_t)nAttrbs, (size_t)sizeof(yyyRCT)); if (rcPdum == (yyyRCT *) NULL) yyyfatal("malloc error in ox reference count list space allocation\n"); while (startP < stopP) rcPdum[yyyLRCIL[startP++]] = 0; (*yyyOxStackItem)->node->prodNum = 0; (*yyyOxStackItem)->node->whichSym = 0; } void yyyabort(void) {yyyYok = 0; } #define yyyLastProdNum 8 #define yyyNsorts 1 int yyyProdsInd[] = { 0, 0, 2, 6, 10, 14, 18, 22, 24, 26, }; int yyyProds[][2] = { { 116, 0},{ 462, 0},{ 462, 0},{ 462, 0},{ 412, 0}, { 462, 0},{ 462, 0},{ 462, 0},{ 420, 0},{ 462, 0}, { 462, 0},{ 462, 0},{ 452, 0},{ 462, 0},{ 462, 0}, { 462, 0},{ 436, 0},{ 462, 0},{ 462, 0},{ 396, 0}, { 462, 0},{ 404, 0},{ 462, 0},{ 619, 1},{ 462, 0}, { 567, 1}, }; int yyySortsInd[] = { 0, 0, 1, }; int yyySorts[] = { 413, }; char *yyyStringTab[] = { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,"s",0,0,0, 0,0,"y",0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,"LRpre",0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,"'('",0,0,0, 0,0,0,0,"')'", 0,0,0,0,0, 0,0,"'*'","lexeme",0, 0,0,0,0,0, "'+'",0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,"'-'",0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,"'/'",0,0, 0,0,0,0,0, 0,0,"expr",0,0, 0,0,0,0,0, 0,0,0,0,0, 0,"printf",0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,"CONST","LRpost",0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,"ID", 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0, }; #define yyySizeofProd(num) (yyyProdsInd[(num)+1] - yyyProdsInd[(num)]) #define yyyGSoccurStr(prodNum,symPos) \ (yyyStringTab[yyyProds[yyyProdsInd[(prodNum)] + (symPos)][0]]) #define yyySizeofSort(num) (yyySortsInd[(num)+1] - yyySortsInd[(num)]) #define yyySortOf(prodNum,symPos) \ (yyyProds[yyyProdsInd[(prodNum)] + (symPos)][1]) #define yyyAttrbStr(prodNum,symPos,attrbNum) \ (yyyStringTab[yyySorts[yyySortsInd[yyySortOf(prodNum,symPos)] + \ (attrbNum) \ ] \ ] \ ) void yyyShowProd(int i) {int j,nSyms; nSyms = yyySizeofProd(i); for (j=0; j\n",stderr); else putc('\n',stderr); } } } void yyyCheckNodeInstancesSolved(yyyGNT *np) {int mysort,sortSize,i,prodNum,symPos,inTerminalNode; int nUnsolvedInsts = 0; if (np->prodNum != 0) {inTerminalNode = 0; prodNum = np->prodNum; symPos = 0; } else {inTerminalNode = 1; prodNum = np->parent.noderef->prodNum; symPos = np->whichSym; } mysort = yyySortOf(prodNum,symPos); sortSize = yyySizeofSort(mysort); for (i=0; irefCountList)[i] != 0) nUnsolvedInsts += 1; if (nUnsolvedInsts) {fprintf(stderr, "\nFound node that has %d unsolved attribute instance(s).\n", nUnsolvedInsts ); fprintf(stderr,"Node is labeled \"%s\".\n", yyyGSoccurStr(prodNum,symPos)); if (inTerminalNode) {fputs("Node is terminal. Its parent production is:\n ",stderr); yyyShowProd(prodNum); } else {fputs("Node is nonterminal. ",stderr); if (!(np->parentIsStack)) {fprintf(stderr, "Node is %dth child in its parent production:\n ", np->whichSym ); yyyShowProd(np->parent.noderef->prodNum); } fputs("Node is on left hand side of this production:\n ",stderr); yyyShowProd(np->prodNum); } fputs("The following instances are unsolved:\n",stderr); for (i=0; irefCountList)[i] != 0) fprintf(stderr," %-16s still has %1d dependencies.\n", yyyAttrbStr(prodNum,symPos,i),(np->refCountList)[i]); } } void yyyCheckUnsolvedInstTrav(yyyGNT *pNode,long *nNZrc,long *cycleSum) {yyyGNT **yyyCLpdum; yyyRCT *rcp; int i; /* visit the refCountList of each node in the tree, and sum the non-zero refCounts */ rcp = pNode->refCountList; i = pNode->refCountListLen; while (i--) if (*rcp++) {*cycleSum += *(rcp - 1); (*nNZrc)++;} yyyCLpdum = pNode->cL; i = pNode->cLlen; while (i--) { yyyCheckUnsolvedInstTrav(*yyyCLpdum,nNZrc,cycleSum); yyyCLpdum++; } } void yyyUnsolvedInstSearchTravAux(yyyGNT *pNode) {yyyGNT **yyyCLpdum; int i; yyyCheckNodeInstancesSolved(pNode); yyyCLpdum = pNode->cL; i = pNode->cLlen; while (i--) { yyyUnsolvedInstSearchTravAux(*yyyCLpdum); yyyCLpdum++; } } void yyyUnsolvedInstSearchTrav(yyyGNT *pNode) {yyyGNT **yyyCLpdum; int i; yyyCLpdum = pNode->cL; i = pNode->cLlen; while (i--) { yyyUnsolvedInstSearchTravAux(*yyyCLpdum); yyyCLpdum++; } } #line 1797 "expr.oxout.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 1: #line 64 "expr.oxout.y" {yyyYoxInit();} #line 2470 "expr.oxout.tab.c" break; case 2: #line 66 "expr.oxout.y" { yyyDecorate(); yyyExecuteRRsection(yystack.l_mark[0].yyyOxAttrbs.yyyOxStackItem->node); } #line 2477 "expr.oxout.tab.c" break; case 3: #line 73 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(1,1,0,&yyval.yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); yyyAdjustINRC(1,1,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} #line 2484 "expr.oxout.tab.c" break; case 4: #line 80 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(2,3,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); yyyAdjustINRC(2,3,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} #line 2491 "expr.oxout.tab.c" break; case 5: #line 87 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(3,3,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); yyyAdjustINRC(3,3,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} #line 2498 "expr.oxout.tab.c" break; case 6: #line 94 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(4,3,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); yyyAdjustINRC(4,3,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} #line 2505 "expr.oxout.tab.c" break; case 7: #line 101 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(5,3,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); yyyAdjustINRC(5,3,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} #line 2512 "expr.oxout.tab.c" break; case 8: #line 108 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(6,3,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); yyyAdjustINRC(6,3,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[-2].yyyOxAttrbs,&yystack.l_mark[-1].yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} #line 2519 "expr.oxout.tab.c" break; case 9: #line 114 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(7,1,0,&yyval.yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); yyyAdjustINRC(7,1,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} #line 2526 "expr.oxout.tab.c" break; case 10: #line 121 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(8,1,0,&yyval.yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs); yyyAdjustINRC(8,1,0,0,&yyval.yyyOxAttrbs,&yystack.l_mark[0].yyyOxAttrbs);}} #line 2533 "expr.oxout.tab.c" break; #line 2535 "expr.oxout.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_syntax3.output0000644000000000000000000000000012314147323017505 0ustar rootrootbyacc-20221106/test/btyacc/grammar.tab.c0000644000000000000000000031075714104035275016331 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse grammar_parse #endif /* yyparse */ #ifndef yylex #define yylex grammar_lex #endif /* yylex */ #ifndef yyerror #define yyerror grammar_error #endif /* yyerror */ #ifndef yychar #define yychar grammar_char #endif /* yychar */ #ifndef yyval #define yyval grammar_val #endif /* yyval */ #ifndef yylval #define yylval grammar_lval #endif /* yylval */ #ifndef yydebug #define yydebug grammar_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs grammar_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag grammar_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs grammar_lhs #endif /* yylhs */ #ifndef yylen #define yylen grammar_len #endif /* yylen */ #ifndef yydefred #define yydefred grammar_defred #endif /* yydefred */ #ifndef yystos #define yystos grammar_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto grammar_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex grammar_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex grammar_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex grammar_gindex #endif /* yygindex */ #ifndef yytable #define yytable grammar_table #endif /* yytable */ #ifndef yycheck #define yycheck grammar_check #endif /* yycheck */ #ifndef yyname #define yyname grammar_name #endif /* yyname */ #ifndef yyrule #define yyrule grammar_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex grammar_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable grammar_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "grammar_" #define YYPURE 0 #line 9 "grammar.y" #ifdef YYBISON #include #define YYSTYPE_IS_DECLARED #define yyerror yaccError #endif #if defined(YYBISON) || !defined(YYBYACC) static void yyerror(const char *s); #endif #line 81 "grammar.y" #include #include #include #define OPT_LINTLIBRARY 1 #ifndef TRUE #define TRUE (1) #endif #ifndef FALSE #define FALSE (0) #endif /* #include "cproto.h" */ #define MAX_TEXT_SIZE 1024 #define TEXT_LEN (MAX_TEXT_SIZE / 2 - 3) /* Prototype styles */ #if OPT_LINTLIBRARY #define PROTO_ANSI_LLIB -2 /* form ANSI lint-library source */ #define PROTO_LINTLIBRARY -1 /* form lint-library source */ #endif #define PROTO_NONE 0 /* do not output any prototypes */ #define PROTO_TRADITIONAL 1 /* comment out parameters */ #define PROTO_ABSTRACT 2 /* comment out parameter names */ #define PROTO_ANSI 3 /* ANSI C prototype */ typedef int PrototypeStyle; typedef char boolean; extern boolean types_out; extern PrototypeStyle proto_style; #define ansiLintLibrary() (proto_style == PROTO_ANSI_LLIB) #define knrLintLibrary() (proto_style == PROTO_LINTLIBRARY) #define lintLibrary() (knrLintLibrary() || ansiLintLibrary()) #if OPT_LINTLIBRARY #define FUNC_UNKNOWN -1 /* unspecified */ #else #define FUNC_UNKNOWN 0 /* unspecified (same as FUNC_NONE) */ #endif #define FUNC_NONE 0 /* not a function definition */ #define FUNC_TRADITIONAL 1 /* traditional style */ #define FUNC_ANSI 2 /* ANSI style */ #define FUNC_BOTH 3 /* both styles */ typedef int FuncDefStyle; /* Source file text */ typedef struct text { char text[MAX_TEXT_SIZE]; /* source text */ long begin; /* offset in temporary file */ } Text; /* Declaration specifier flags */ #define DS_NONE 0 /* default */ #define DS_EXTERN 1 /* contains "extern" specifier */ #define DS_STATIC 2 /* contains "static" specifier */ #define DS_CHAR 4 /* contains "char" type specifier */ #define DS_SHORT 8 /* contains "short" type specifier */ #define DS_FLOAT 16 /* contains "float" type specifier */ #define DS_INLINE 32 /* contains "inline" specifier */ #define DS_JUNK 64 /* we're not interested in this declaration */ /* This structure stores information about a declaration specifier. */ typedef struct decl_spec { unsigned short flags; /* flags defined above */ char *text; /* source text */ long begin; /* offset in temporary file */ } DeclSpec; /* This is a list of function parameters. */ typedef struct _ParameterList { struct parameter *first; /* pointer to first parameter in list */ struct parameter *last; /* pointer to last parameter in list */ long begin_comment; /* begin offset of comment */ long end_comment; /* end offset of comment */ char *comment; /* comment at start of parameter list */ } ParameterList; /* This structure stores information about a declarator. */ typedef struct _Declarator { char *name; /* name of variable or function */ char *text; /* source text */ long begin; /* offset in temporary file */ long begin_comment; /* begin offset of comment */ long end_comment; /* end offset of comment */ FuncDefStyle func_def; /* style of function definition */ ParameterList params; /* function parameters */ boolean pointer; /* TRUE if it declares a pointer */ struct _Declarator *head; /* head function declarator */ struct _Declarator *func_stack; /* stack of function declarators */ struct _Declarator *next; /* next declarator in list */ } Declarator; /* This structure stores information about a function parameter. */ typedef struct parameter { struct parameter *next; /* next parameter in list */ DeclSpec decl_spec; Declarator *declarator; char *comment; /* comment following the parameter */ } Parameter; /* This is a list of declarators. */ typedef struct declarator_list { Declarator *first; /* pointer to first declarator in list */ Declarator *last; /* pointer to last declarator in list */ } DeclaratorList; /* #include "symbol.h" */ typedef struct symbol { struct symbol *next; /* next symbol in list */ char *name; /* name of symbol */ char *value; /* value of symbol (for defines) */ short flags; /* symbol attributes */ } Symbol; /* parser stack entry type */ typedef union { Text text; DeclSpec decl_spec; Parameter *parameter; ParameterList param_list; Declarator *declarator; DeclaratorList decl_list; } YYSTYPE; /* The hash table length should be a prime number. */ #define SYM_MAX_HASH 251 typedef struct symbol_table { Symbol *bucket[SYM_MAX_HASH]; /* hash buckets */ } SymbolTable; extern SymbolTable *new_symbol_table /* Create symbol table */ (void); extern void free_symbol_table /* Destroy symbol table */ (SymbolTable *s); extern Symbol *find_symbol /* Lookup symbol name */ (SymbolTable *s, const char *n); extern Symbol *new_symbol /* Define new symbol */ (SymbolTable *s, const char *n, const char *v, int f); /* #include "semantic.h" */ extern void new_decl_spec (DeclSpec *, const char *, long, int); extern void free_decl_spec (DeclSpec *); extern void join_decl_specs (DeclSpec *, DeclSpec *, DeclSpec *); extern void check_untagged (DeclSpec *); extern Declarator *new_declarator (const char *, const char *, long); extern void free_declarator (Declarator *); extern void new_decl_list (DeclaratorList *, Declarator *); extern void free_decl_list (DeclaratorList *); extern void add_decl_list (DeclaratorList *, DeclaratorList *, Declarator *); extern Parameter *new_parameter (DeclSpec *, Declarator *); extern void free_parameter (Parameter *); extern void new_param_list (ParameterList *, Parameter *); extern void free_param_list (ParameterList *); extern void add_param_list (ParameterList *, ParameterList *, Parameter *); extern void new_ident_list (ParameterList *); extern void add_ident_list (ParameterList *, ParameterList *, const char *); extern void set_param_types (ParameterList *, DeclSpec *, DeclaratorList *); extern void gen_declarations (DeclSpec *, DeclaratorList *); extern void gen_prototype (DeclSpec *, Declarator *); extern void gen_func_declarator (Declarator *); extern void gen_func_definition (DeclSpec *, Declarator *); extern void init_parser (void); extern void process_file (FILE *infile, char *name); extern char *cur_text (void); extern char *cur_file_name (void); extern char *implied_typedef (void); extern void include_file (char *name, int convert); extern char *supply_parm (int count); extern char *xstrdup (const char *); extern int already_declared (char *name); extern int is_actual_func (Declarator *d); extern int lint_ellipsis (Parameter *p); extern int want_typedef (void); extern void begin_tracking (void); extern void begin_typedef (void); extern void copy_typedef (char *s); extern void ellipsis_varargs (Declarator *d); extern void end_typedef (void); extern void flush_varargs (void); extern void fmt_library (int code); extern void imply_typedef (const char *s); extern void indent (FILE *outf); extern void put_blankline (FILE *outf); extern void put_body (FILE *outf, DeclSpec *decl_spec, Declarator *declarator); extern void put_char (FILE *outf, int c); extern void put_error (void); extern void put_newline (FILE *outf); extern void put_padded (FILE *outf, const char *s); extern void put_string (FILE *outf, const char *s); extern void track_in (void); extern boolean file_comments; extern FuncDefStyle func_style; extern char base_file[]; extern int yylex (void); /* declaration specifier attributes for the typedef statement currently being * scanned */ static int cur_decl_spec_flags; /* pointer to parameter list for the current function definition */ static ParameterList *func_params; /* A parser semantic action sets this pointer to the current declarator in * a function parameter declaration in order to catch any comments following * the parameter declaration on the same line. If the lexer scans a comment * and is not NULL, then the comment is attached to the * declarator. To ignore subsequent comments, the lexer sets this to NULL * after scanning a comment or end of line. */ static Declarator *cur_declarator; /* temporary string buffer */ static char buf[MAX_TEXT_SIZE]; /* table of typedef names */ static SymbolTable *typedef_names; /* table of define names */ static SymbolTable *define_names; /* table of type qualifiers */ static SymbolTable *type_qualifiers; /* information about the current input file */ typedef struct { char *base_name; /* base input file name */ char *file_name; /* current file name */ FILE *file; /* input file */ unsigned line_num; /* current line number in input file */ FILE *tmp_file; /* temporary file */ long begin_comment; /* tmp file offset after last written ) or ; */ long end_comment; /* tmp file offset after last comment */ boolean convert; /* if TRUE, convert function definitions */ boolean changed; /* TRUE if conversion done in this file */ } IncludeStack; static IncludeStack *cur_file; /* current input file */ /* #include "yyerror.c" */ static int haveAnsiParam (void); /* Flags to enable us to find if a procedure returns a value. */ static int return_val; /* nonzero on BRACES iff return-expression found */ static const char * dft_decl_spec (void) { return (lintLibrary() && !return_val) ? "void" : "int"; } static int haveAnsiParam (void) { Parameter *p; if (func_params != 0) { for (p = func_params->first; p != 0; p = p->next) { if (p->declarator->func_def == FUNC_ANSI) { return TRUE; } } } return FALSE; } #line 409 "grammar.tab.c" /* 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 T_IDENTIFIER 257 #define T_TYPEDEF_NAME 258 #define T_DEFINE_NAME 259 #define T_AUTO 260 #define T_EXTERN 261 #define T_REGISTER 262 #define T_STATIC 263 #define T_TYPEDEF 264 #define T_INLINE 265 #define T_EXTENSION 266 #define T_CHAR 267 #define T_DOUBLE 268 #define T_FLOAT 269 #define T_INT 270 #define T_VOID 271 #define T_LONG 272 #define T_SHORT 273 #define T_SIGNED 274 #define T_UNSIGNED 275 #define T_ENUM 276 #define T_STRUCT 277 #define T_UNION 278 #define T_Bool 279 #define T_Complex 280 #define T_Imaginary 281 #define T_TYPE_QUALIFIER 282 #define T_BRACKETS 283 #define T_LBRACE 284 #define T_MATCHRBRACE 285 #define T_ELLIPSIS 286 #define T_INITIALIZER 287 #define T_STRING_LITERAL 288 #define T_ASM 289 #define T_ASMARG 290 #define T_VA_DCL 291 #define YYERRCODE 256 typedef int YYINT; static const YYINT grammar_lhs[] = { -1, 0, 0, 26, 26, 27, 27, 27, 27, 27, 27, 27, 31, 30, 30, 28, 28, 34, 28, 32, 32, 33, 33, 35, 35, 37, 38, 29, 39, 29, 36, 36, 36, 40, 40, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6, 19, 19, 8, 8, 9, 41, 9, 7, 7, 7, 25, 23, 23, 10, 10, 11, 11, 11, 11, 11, 20, 20, 21, 21, 22, 22, 14, 14, 15, 15, 16, 16, 16, 17, 17, 18, 18, 24, 24, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, }; static const YYINT grammar_len[] = { 2, 0, 1, 1, 2, 1, 1, 1, 1, 3, 2, 2, 2, 3, 3, 2, 3, 0, 5, 2, 1, 0, 1, 1, 3, 0, 0, 7, 0, 5, 0, 1, 1, 1, 2, 1, 2, 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, 2, 2, 1, 1, 1, 3, 1, 0, 4, 3, 2, 2, 1, 1, 1, 2, 1, 1, 3, 2, 4, 4, 2, 3, 0, 1, 1, 2, 1, 3, 1, 3, 2, 2, 1, 0, 1, 1, 3, 1, 2, 1, 2, 1, 3, 2, 1, 4, 3, 3, 2, }; static const YYINT grammar_defred[] = { 0, 0, 0, 0, 0, 77, 0, 62, 40, 0, 42, 43, 20, 44, 0, 46, 47, 48, 49, 54, 50, 51, 52, 53, 76, 66, 67, 55, 56, 57, 61, 0, 7, 0, 0, 35, 37, 38, 39, 59, 60, 28, 0, 0, 0, 103, 81, 0, 0, 3, 5, 6, 8, 0, 10, 11, 78, 0, 90, 0, 0, 104, 0, 19, 0, 41, 45, 15, 36, 0, 68, 0, 0, 0, 83, 0, 0, 64, 0, 0, 74, 4, 58, 0, 82, 87, 91, 0, 14, 13, 9, 16, 0, 71, 0, 31, 33, 0, 0, 0, 0, 0, 94, 0, 0, 101, 12, 63, 73, 0, 0, 69, 0, 0, 0, 34, 0, 110, 96, 97, 0, 0, 84, 0, 85, 0, 23, 0, 0, 72, 26, 29, 114, 0, 0, 0, 109, 0, 93, 95, 102, 18, 0, 0, 108, 113, 112, 0, 24, 27, 111, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT grammar_stos[] = { 0, 256, 40, 42, 38, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 289, 59, 293, 294, 295, 296, 297, 298, 299, 300, 303, 304, 312, 313, 316, 317, 318, 319, 320, 321, 322, 323, 325, 285, 59, 258, 303, 298, 314, 315, 316, 288, 264, 290, 261, 266, 59, 295, 301, 302, 303, 332, 40, 283, 284, 316, 324, 304, 316, 324, 320, 258, 294, 41, 313, 298, 294, 321, 324, 59, 59, 44, 61, 330, 291, 321, 329, 333, 294, 307, 308, 309, 310, 311, 316, 285, 324, 324, 327, 303, 302, 334, 329, 284, 321, 40, 283, 303, 305, 306, 313, 41, 44, 41, 44, 303, 326, 328, 287, 284, 285, 41, 305, 307, 40, 283, 306, 286, 309, 316, 59, 44, 331, 41, 41, 41, 307, 303, 285, 41, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT grammar_dgoto[] = { 33, 87, 35, 36, 37, 38, 39, 40, 69, 70, 41, 42, 119, 120, 100, 101, 102, 103, 104, 43, 44, 59, 60, 45, 46, 47, 48, 49, 50, 51, 52, 77, 53, 127, 109, 128, 97, 94, 143, 72, 98, 112, }; static const YYINT grammar_sindex[] = { -2, -3, 27, -239, -177, 0, 0, 0, 0, -274, 0, 0, 0, 0, -246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -266, 0, 0, 455, 0, 0, 0, 0, 0, 0, 0, -35, -245, 128, 0, 0, -245, -2, 0, 0, 0, 0, 642, 0, 0, 0, -15, 0, -12, -239, 0, 590, 0, -27, 0, 0, 0, 0, -10, 0, -11, 534, -72, 0, -237, -232, 0, -35, -232, 0, 0, 0, 642, 0, 0, 0, 455, 0, 0, 0, 0, 27, 0, 534, 0, 0, -222, 617, 209, 34, 39, 0, 44, 42, 0, 0, 0, 0, 27, -11, 0, -200, -196, -195, 0, 174, 0, 0, 0, -33, 243, 0, 561, 0, -177, 0, 33, 49, 0, 0, 0, 0, 53, 55, 417, 0, -33, 0, 0, 0, 0, 27, -188, 0, 0, 0, 57, 0, 0, 0, }; static const YYINT grammar_rindex[] = { 99, 0, 0, 275, 0, 0, -38, 0, 0, 481, 0, 0, 0, 0, 509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, -182, 62, 0, 0, 133, 0, 64, 379, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -182, 0, 0, 0, -180, -19, 0, 65, 0, 0, 68, 0, 0, 0, 0, 51, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, -13, 19, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #if YYBTYACC static const YYINT grammar_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT grammar_gindex[] = { 0, 11, -17, 0, 0, 13, 0, 0, 0, 20, 8, -43, -1, -8, -89, 0, -9, 0, 0, 0, -44, 0, 0, 4, 0, 0, 0, 70, -53, 0, 0, -18, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, }; #define YYTABLESIZE 924 static const YYINT grammar_table[] = { 58, 78, 58, 58, 58, 73, 58, 135, 61, 88, 57, 34, 5, 56, 62, 85, 58, 68, 63, 96, 7, 58, 98, 78, 64, 98, 84, 134, 107, 80, 3, 107, 90, 17, 92, 17, 4, 17, 2, 75, 3, 96, 71, 30, 89, 115, 147, 76, 106, 91, 93, 79, 75, 70, 17, 121, 55, 32, 107, 34, 105, 108, 114, 105, 83, 4, 68, 2, 70, 3, 68, 80, 121, 86, 80, 122, 106, 105, 78, 106, 5, 56, 68, 123, 99, 124, 125, 129, 130, 80, 131, 80, 141, 142, 144, 110, 145, 149, 150, 1, 110, 2, 30, 99, 32, 79, 92, 118, 79, 100, 21, 22, 111, 137, 139, 133, 113, 126, 81, 0, 0, 0, 0, 79, 57, 79, 0, 99, 0, 140, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 99, 0, 0, 0, 148, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 2, 0, 0, 65, 0, 65, 65, 65, 0, 65, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 65, 10, 11, 65, 13, 66, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 0, 4, 0, 116, 132, 3, 0, 0, 58, 58, 58, 58, 58, 58, 58, 78, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 78, 4, 74, 116, 136, 3, 17, 78, 1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 4, 54, 116, 5, 56, 0, 31, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 88, 80, 88, 88, 88, 0, 88, 0, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 89, 79, 89, 89, 89, 0, 89, 0, 79, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 86, 25, 86, 86, 5, 56, 86, 0, 25, 65, 65, 65, 65, 65, 65, 65, 0, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 75, 0, 75, 75, 75, 0, 75, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 65, 10, 11, 75, 13, 66, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 117, 146, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 65, 10, 11, 0, 13, 66, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 117, 4, 0, 2, 0, 3, 0, 0, 5, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 41, 0, 41, 0, 41, 0, 0, 117, 0, 0, 0, 0, 0, 88, 88, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 45, 0, 45, 0, 45, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 89, 89, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 75, 75, 75, 75, 75, 75, 0, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 7, 8, 65, 10, 11, 0, 13, 66, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 65, 10, 11, 0, 13, 66, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 41, 41, 41, 41, 41, 41, 41, 0, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 0, 0, 45, 45, 45, 45, 45, 45, 45, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 82, 7, 8, 65, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 0, 0, 82, 7, 8, 65, 10, 11, 95, 13, 66, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 0, 0, 0, 138, 82, 7, 8, 65, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 0, 75, 82, 7, 8, 65, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 82, 7, 8, 65, 10, 11, 0, 13, 66, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, }; static const YYINT grammar_check[] = { 38, 44, 40, 41, 42, 40, 44, 40, 4, 62, 2, 0, 257, 258, 288, 59, 3, 34, 264, 72, 259, 59, 41, 61, 290, 44, 41, 116, 41, 47, 42, 44, 59, 38, 44, 40, 38, 42, 40, 284, 42, 94, 34, 282, 62, 98, 135, 43, 285, 59, 61, 47, 284, 44, 59, 99, 59, 59, 76, 48, 41, 79, 284, 44, 53, 38, 83, 40, 59, 42, 87, 41, 116, 60, 44, 41, 41, 73, 121, 44, 257, 258, 99, 44, 73, 41, 44, 287, 284, 59, 285, 61, 59, 44, 41, 87, 41, 285, 41, 0, 92, 0, 284, 41, 284, 41, 41, 99, 44, 41, 59, 59, 92, 121, 123, 116, 94, 109, 48, -1, -1, -1, -1, 59, 116, 61, -1, 116, -1, 125, -1, -1, -1, -1, 123, -1, -1, -1, -1, -1, -1, -1, 44, -1, -1, -1, 135, -1, -1, -1, 142, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, 38, -1, 40, -1, -1, 38, -1, 40, 41, 42, -1, 44, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, 263, 59, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, -1, 38, -1, 40, 41, 42, -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 38, 283, 40, 283, 42, 257, 291, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 38, 285, 40, 257, 258, -1, 289, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 38, 284, 40, 41, 42, -1, 44, -1, 291, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 38, 284, 40, 41, 42, -1, 44, -1, 291, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 38, 284, 40, 41, 257, 258, 44, -1, 291, 257, 258, 259, 260, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 38, -1, 40, 41, 42, -1, 44, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, 263, 59, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 41, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 38, -1, 40, -1, 42, -1, -1, 257, 258, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, 38, -1, 40, -1, 42, -1, -1, 283, -1, -1, -1, -1, -1, 257, 258, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, 38, -1, 40, -1, 42, -1, -1, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, -1, -1, 257, 258, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, -1, -1, 257, 258, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 283, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 258, 259, 260, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 257, 258, 259, 260, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, -1, -1, 257, 258, 259, 260, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, -1, -1, 258, 259, 260, 261, 262, 263, 291, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, -1, -1, -1, 286, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, -1, 284, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 258, 259, 260, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, }; #if YYBTYACC static const YYINT grammar_ctable[] = { -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, -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, -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, -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, -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, -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, -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, -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, -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, -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, -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, -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, -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, -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, -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, -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, -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, -1, -1, -1, -1, -1, -1, }; #endif #define YYFINAL 33 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 291 #define YYUNDFTOKEN 335 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const grammar_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,"'&'",0,"'('","')'","'*'",0,"','",0,0,0,0,0,0,0,0,0,0,0,0,0,0,"';'",0,"'='",0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error", "T_IDENTIFIER","T_TYPEDEF_NAME","T_DEFINE_NAME","T_AUTO","T_EXTERN", "T_REGISTER","T_STATIC","T_TYPEDEF","T_INLINE","T_EXTENSION","T_CHAR", "T_DOUBLE","T_FLOAT","T_INT","T_VOID","T_LONG","T_SHORT","T_SIGNED", "T_UNSIGNED","T_ENUM","T_STRUCT","T_UNION","T_Bool","T_Complex","T_Imaginary", "T_TYPE_QUALIFIER","T_BRACKETS","T_LBRACE","T_MATCHRBRACE","T_ELLIPSIS", "T_INITIALIZER","T_STRING_LITERAL","T_ASM","T_ASMARG","T_VA_DCL","$accept", "program","decl_specifiers","decl_specifier","storage_class","type_specifier", "type_qualifier","struct_or_union_specifier","enum_specifier", "init_declarator_list","init_declarator","declarator","direct_declarator", "abs_declarator","direct_abs_declarator","parameter_type_list","parameter_list", "parameter_declaration","opt_identifier_list","identifier_list", "struct_or_union","pointer","opt_type_qualifiers","type_qualifier_list", "any_id","identifier_or_ref","enumeration","translation_unit", "external_declaration","declaration","function_definition", "linkage_specification","braces","any_typedef","opt_declarator_list","$$1", "declarator_list","opt_declaration_list","$$2","$$3","$$4","declaration_list", "$$5","illegal-symbol", }; static const char *const grammar_rule[] = { "$accept : program", "program :", "program : translation_unit", "translation_unit : external_declaration", "translation_unit : translation_unit external_declaration", "external_declaration : declaration", "external_declaration : function_definition", "external_declaration : ';'", "external_declaration : linkage_specification", "external_declaration : T_ASM T_ASMARG ';'", "external_declaration : error T_MATCHRBRACE", "external_declaration : error ';'", "braces : T_LBRACE T_MATCHRBRACE", "linkage_specification : T_EXTERN T_STRING_LITERAL braces", "linkage_specification : T_EXTERN T_STRING_LITERAL declaration", "declaration : decl_specifiers ';'", "declaration : decl_specifiers init_declarator_list ';'", "$$1 :", "declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';'", "any_typedef : T_EXTENSION T_TYPEDEF", "any_typedef : T_TYPEDEF", "opt_declarator_list :", "opt_declarator_list : declarator_list", "declarator_list : declarator", "declarator_list : declarator_list ',' declarator", "$$2 :", "$$3 :", "function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE", "$$4 :", "function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE", "opt_declaration_list :", "opt_declaration_list : T_VA_DCL", "opt_declaration_list : declaration_list", "declaration_list : declaration", "declaration_list : declaration_list declaration", "decl_specifiers : decl_specifier", "decl_specifiers : decl_specifiers decl_specifier", "decl_specifier : storage_class", "decl_specifier : type_specifier", "decl_specifier : type_qualifier", "storage_class : T_AUTO", "storage_class : T_EXTERN", "storage_class : T_REGISTER", "storage_class : T_STATIC", "storage_class : T_INLINE", "storage_class : T_EXTENSION", "type_specifier : T_CHAR", "type_specifier : T_DOUBLE", "type_specifier : T_FLOAT", "type_specifier : T_INT", "type_specifier : T_LONG", "type_specifier : T_SHORT", "type_specifier : T_SIGNED", "type_specifier : T_UNSIGNED", "type_specifier : T_VOID", "type_specifier : T_Bool", "type_specifier : T_Complex", "type_specifier : T_Imaginary", "type_specifier : T_TYPEDEF_NAME", "type_specifier : struct_or_union_specifier", "type_specifier : enum_specifier", "type_qualifier : T_TYPE_QUALIFIER", "type_qualifier : T_DEFINE_NAME", "struct_or_union_specifier : struct_or_union any_id braces", "struct_or_union_specifier : struct_or_union braces", "struct_or_union_specifier : struct_or_union any_id", "struct_or_union : T_STRUCT", "struct_or_union : T_UNION", "init_declarator_list : init_declarator", "init_declarator_list : init_declarator_list ',' init_declarator", "init_declarator : declarator", "$$5 :", "init_declarator : declarator '=' $$5 T_INITIALIZER", "enum_specifier : enumeration any_id braces", "enum_specifier : enumeration braces", "enum_specifier : enumeration any_id", "enumeration : T_ENUM", "any_id : T_IDENTIFIER", "any_id : T_TYPEDEF_NAME", "declarator : pointer direct_declarator", "declarator : direct_declarator", "direct_declarator : identifier_or_ref", "direct_declarator : '(' declarator ')'", "direct_declarator : direct_declarator T_BRACKETS", "direct_declarator : direct_declarator '(' parameter_type_list ')'", "direct_declarator : direct_declarator '(' opt_identifier_list ')'", "pointer : '*' opt_type_qualifiers", "pointer : '*' opt_type_qualifiers pointer", "opt_type_qualifiers :", "opt_type_qualifiers : type_qualifier_list", "type_qualifier_list : type_qualifier", "type_qualifier_list : type_qualifier_list type_qualifier", "parameter_type_list : parameter_list", "parameter_type_list : parameter_list ',' T_ELLIPSIS", "parameter_list : parameter_declaration", "parameter_list : parameter_list ',' parameter_declaration", "parameter_declaration : decl_specifiers declarator", "parameter_declaration : decl_specifiers abs_declarator", "parameter_declaration : decl_specifiers", "opt_identifier_list :", "opt_identifier_list : identifier_list", "identifier_list : any_id", "identifier_list : identifier_list ',' any_id", "identifier_or_ref : any_id", "identifier_or_ref : '&' any_id", "abs_declarator : pointer", "abs_declarator : pointer direct_abs_declarator", "abs_declarator : direct_abs_declarator", "direct_abs_declarator : '(' abs_declarator ')'", "direct_abs_declarator : direct_abs_declarator T_BRACKETS", "direct_abs_declarator : T_BRACKETS", "direct_abs_declarator : direct_abs_declarator '(' parameter_type_list ')'", "direct_abs_declarator : direct_abs_declarator '(' ')'", "direct_abs_declarator : '(' parameter_type_list ')'", "direct_abs_declarator : '(' ')'", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 1015 "grammar.y" /* lex.yy.c */ #define BEGIN yy_start = 1 + 2 * #define CPP1 1 #define INIT1 2 #define INIT2 3 #define CURLY 4 #define LEXYACC 5 #define ASM 6 #define CPP_INLINE 7 extern char *yytext; extern FILE *yyin, *yyout; static int curly; /* number of curly brace nesting levels */ static int ly_count; /* number of occurrences of %% */ static int inc_depth; /* include nesting level */ static SymbolTable *included_files; /* files already included */ static int yy_start = 0; /* start state number */ #define grammar_error(s) yaccError(s) static void yaccError (const char *msg) { func_params = NULL; put_error(); /* tell what line we're on, and what file */ fprintf(stderr, "%s at token '%s'\n", msg, yytext); } /* Initialize the table of type qualifier keywords recognized by the lexical * analyzer. */ void init_parser (void) { static const char *keywords[] = { "const", "restrict", "volatile", "interrupt", #ifdef vms "noshare", "readonly", #endif #if defined(MSDOS) || defined(OS2) "__cdecl", "__export", "__far", "__fastcall", "__fortran", "__huge", "__inline", "__interrupt", "__loadds", "__near", "__pascal", "__saveregs", "__segment", "__stdcall", "__syscall", "_cdecl", "_cs", "_ds", "_es", "_export", "_far", "_fastcall", "_fortran", "_huge", "_interrupt", "_loadds", "_near", "_pascal", "_saveregs", "_seg", "_segment", "_ss", "cdecl", "far", "huge", "near", "pascal", #ifdef OS2 "__far16", #endif #endif #ifdef __GNUC__ /* gcc aliases */ "__builtin_va_arg", "__builtin_va_list", "__const", "__const__", "__inline", "__inline__", "__restrict", "__restrict__", "__volatile", "__volatile__", #endif }; unsigned i; /* Initialize type qualifier table. */ type_qualifiers = new_symbol_table(); for (i = 0; i < sizeof(keywords)/sizeof(keywords[0]); ++i) { new_symbol(type_qualifiers, keywords[i], NULL, DS_NONE); } } /* Process the C source file. Write function prototypes to the standard * output. Convert function definitions and write the converted source * code to a temporary file. */ void process_file (FILE *infile, char *name) { char *s; if (strlen(name) > 2) { s = name + strlen(name) - 2; if (*s == '.') { ++s; if (*s == 'l' || *s == 'y') BEGIN LEXYACC; #if defined(MSDOS) || defined(OS2) if (*s == 'L' || *s == 'Y') BEGIN LEXYACC; #endif } } included_files = new_symbol_table(); typedef_names = new_symbol_table(); define_names = new_symbol_table(); inc_depth = -1; curly = 0; ly_count = 0; func_params = NULL; yyin = infile; include_file(strcpy(base_file, name), func_style != FUNC_NONE); if (file_comments) { #if OPT_LINTLIBRARY if (lintLibrary()) { put_blankline(stdout); begin_tracking(); } #endif put_string(stdout, "/* "); put_string(stdout, cur_file_name()); put_string(stdout, " */\n"); } yyparse(); free_symbol_table(define_names); free_symbol_table(typedef_names); free_symbol_table(included_files); } #ifdef NO_LEAKS void free_parser(void) { free_symbol_table (type_qualifiers); #ifdef FLEX_SCANNER if (yy_current_buffer != 0) yy_delete_buffer(yy_current_buffer); #endif } #endif #line 1351 "grammar.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 10: #line 378 "grammar.y" { yyerrok; } #line 2026 "grammar.tab.c" break; case 11: #line 382 "grammar.y" { yyerrok; } #line 2033 "grammar.tab.c" break; case 13: #line 393 "grammar.y" { /* Provide an empty action here so bison will not complain about * incompatible types in the default action it normally would * have generated. */ } #line 2043 "grammar.tab.c" break; case 14: #line 400 "grammar.y" { /* empty */ } #line 2050 "grammar.tab.c" break; case 15: #line 407 "grammar.y" { #if OPT_LINTLIBRARY if (types_out && want_typedef()) { gen_declarations(&yystack.l_mark[-1].decl_spec, (DeclaratorList *)0); flush_varargs(); } #endif free_decl_spec(&yystack.l_mark[-1].decl_spec); end_typedef(); } #line 2064 "grammar.tab.c" break; case 16: #line 418 "grammar.y" { if (func_params != NULL) { set_param_types(func_params, &yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list); } else { gen_declarations(&yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list); #if OPT_LINTLIBRARY flush_varargs(); #endif free_decl_list(&yystack.l_mark[-1].decl_list); } free_decl_spec(&yystack.l_mark[-2].decl_spec); end_typedef(); } #line 2081 "grammar.tab.c" break; case 17: #line 432 "grammar.y" { cur_decl_spec_flags = yystack.l_mark[0].decl_spec.flags; free_decl_spec(&yystack.l_mark[0].decl_spec); } #line 2089 "grammar.tab.c" break; case 18: #line 437 "grammar.y" { end_typedef(); } #line 2096 "grammar.tab.c" break; case 19: #line 444 "grammar.y" { begin_typedef(); } #line 2103 "grammar.tab.c" break; case 20: #line 448 "grammar.y" { begin_typedef(); } #line 2110 "grammar.tab.c" break; case 23: #line 460 "grammar.y" { int flags = cur_decl_spec_flags; /* If the typedef is a pointer type, then reset the short type * flags so it does not get promoted. */ if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0) flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT); new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags); free_declarator(yystack.l_mark[0].declarator); } #line 2125 "grammar.tab.c" break; case 24: #line 472 "grammar.y" { int flags = cur_decl_spec_flags; if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0) flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT); new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags); free_declarator(yystack.l_mark[0].declarator); } #line 2137 "grammar.tab.c" break; case 25: #line 484 "grammar.y" { check_untagged(&yystack.l_mark[-1].decl_spec); if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) { yyerror("syntax error"); YYERROR; } func_params = &(yystack.l_mark[0].declarator->head->params); func_params->begin_comment = cur_file->begin_comment; func_params->end_comment = cur_file->end_comment; } #line 2151 "grammar.tab.c" break; case 26: #line 495 "grammar.y" { /* If we're converting to K&R and we've got a nominally K&R * function which has a parameter which is ANSI (i.e., a prototyped * function pointer), then we must override the deciphered value of * 'func_def' so that the parameter will be converted. */ if (func_style == FUNC_TRADITIONAL && haveAnsiParam() && yystack.l_mark[-3].declarator->head->func_def == func_style) { yystack.l_mark[-3].declarator->head->func_def = FUNC_BOTH; } func_params = NULL; if (cur_file->convert) gen_func_definition(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator); gen_prototype(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator); #if OPT_LINTLIBRARY flush_varargs(); #endif free_decl_spec(&yystack.l_mark[-4].decl_spec); free_declarator(yystack.l_mark[-3].declarator); } #line 2178 "grammar.tab.c" break; case 28: #line 520 "grammar.y" { if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) { yyerror("syntax error"); YYERROR; } func_params = &(yystack.l_mark[0].declarator->head->params); func_params->begin_comment = cur_file->begin_comment; func_params->end_comment = cur_file->end_comment; } #line 2191 "grammar.tab.c" break; case 29: #line 530 "grammar.y" { DeclSpec decl_spec; func_params = NULL; new_decl_spec(&decl_spec, dft_decl_spec(), yystack.l_mark[-4].declarator->begin, DS_NONE); if (cur_file->convert) gen_func_definition(&decl_spec, yystack.l_mark[-4].declarator); gen_prototype(&decl_spec, yystack.l_mark[-4].declarator); #if OPT_LINTLIBRARY flush_varargs(); #endif free_decl_spec(&decl_spec); free_declarator(yystack.l_mark[-4].declarator); } #line 2210 "grammar.tab.c" break; case 36: #line 561 "grammar.y" { join_decl_specs(&yyval.decl_spec, &yystack.l_mark[-1].decl_spec, &yystack.l_mark[0].decl_spec); free(yystack.l_mark[-1].decl_spec.text); free(yystack.l_mark[0].decl_spec.text); } #line 2219 "grammar.tab.c" break; case 40: #line 576 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 2226 "grammar.tab.c" break; case 41: #line 580 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_EXTERN); } #line 2233 "grammar.tab.c" break; case 42: #line 584 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 2240 "grammar.tab.c" break; case 43: #line 588 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_STATIC); } #line 2247 "grammar.tab.c" break; case 44: #line 592 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_INLINE); } #line 2254 "grammar.tab.c" break; case 45: #line 596 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_JUNK); } #line 2261 "grammar.tab.c" break; case 46: #line 603 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR); } #line 2268 "grammar.tab.c" break; case 47: #line 607 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 2275 "grammar.tab.c" break; case 48: #line 611 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_FLOAT); } #line 2282 "grammar.tab.c" break; case 49: #line 615 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 2289 "grammar.tab.c" break; case 50: #line 619 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 2296 "grammar.tab.c" break; case 51: #line 623 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_SHORT); } #line 2303 "grammar.tab.c" break; case 52: #line 627 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 2310 "grammar.tab.c" break; case 53: #line 631 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 2317 "grammar.tab.c" break; case 54: #line 635 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 2324 "grammar.tab.c" break; case 55: #line 639 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR); } #line 2331 "grammar.tab.c" break; case 56: #line 643 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 2338 "grammar.tab.c" break; case 57: #line 647 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 2345 "grammar.tab.c" break; case 58: #line 651 "grammar.y" { Symbol *s; s = find_symbol(typedef_names, yystack.l_mark[0].text.text); if (s != NULL) new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags); } #line 2355 "grammar.tab.c" break; case 61: #line 663 "grammar.y" { new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE); } #line 2362 "grammar.tab.c" break; case 62: #line 667 "grammar.y" { /* This rule allows the nonterminal to scan #define * names as if they were type modifiers. */ Symbol *s; s = find_symbol(define_names, yystack.l_mark[0].text.text); if (s != NULL) new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags); } #line 2375 "grammar.tab.c" break; case 63: #line 680 "grammar.y" { char *s; if ((s = implied_typedef()) == 0) (void)sprintf(s = buf, "%.*s %.*s", TEXT_LEN, yystack.l_mark[-2].text.text, TEXT_LEN, yystack.l_mark[-1].text.text); new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE); } #line 2385 "grammar.tab.c" break; case 64: #line 687 "grammar.y" { char *s; if ((s = implied_typedef()) == 0) (void)sprintf(s = buf, "%.*s {}", TEXT_LEN, yystack.l_mark[-1].text.text); new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE); } #line 2395 "grammar.tab.c" break; case 65: #line 694 "grammar.y" { (void)sprintf(buf, "%.*s %.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yystack.l_mark[0].text.text); new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE); } #line 2403 "grammar.tab.c" break; case 66: #line 702 "grammar.y" { imply_typedef(yyval.text.text); } #line 2410 "grammar.tab.c" break; case 67: #line 706 "grammar.y" { imply_typedef(yyval.text.text); } #line 2417 "grammar.tab.c" break; case 68: #line 713 "grammar.y" { new_decl_list(&yyval.decl_list, yystack.l_mark[0].declarator); } #line 2424 "grammar.tab.c" break; case 69: #line 717 "grammar.y" { add_decl_list(&yyval.decl_list, &yystack.l_mark[-2].decl_list, yystack.l_mark[0].declarator); } #line 2431 "grammar.tab.c" break; case 70: #line 724 "grammar.y" { if (yystack.l_mark[0].declarator->func_def != FUNC_NONE && func_params == NULL && func_style == FUNC_TRADITIONAL && cur_file->convert) { gen_func_declarator(yystack.l_mark[0].declarator); fputs(cur_text(), cur_file->tmp_file); } cur_declarator = yyval.declarator; } #line 2443 "grammar.tab.c" break; case 71: #line 733 "grammar.y" { if (yystack.l_mark[-1].declarator->func_def != FUNC_NONE && func_params == NULL && func_style == FUNC_TRADITIONAL && cur_file->convert) { gen_func_declarator(yystack.l_mark[-1].declarator); fputs(" =", cur_file->tmp_file); } } #line 2454 "grammar.tab.c" break; case 73: #line 745 "grammar.y" { char *s; if ((s = implied_typedef()) == 0) (void)sprintf(s = buf, "enum %.*s", TEXT_LEN, yystack.l_mark[-1].text.text); new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE); } #line 2464 "grammar.tab.c" break; case 74: #line 752 "grammar.y" { char *s; if ((s = implied_typedef()) == 0) (void)sprintf(s = buf, "%.*s {}", TEXT_LEN, yystack.l_mark[-1].text.text); new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE); } #line 2474 "grammar.tab.c" break; case 75: #line 759 "grammar.y" { (void)sprintf(buf, "enum %.*s", TEXT_LEN, yystack.l_mark[0].text.text); new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE); } #line 2482 "grammar.tab.c" break; case 76: #line 767 "grammar.y" { imply_typedef("enum"); yyval.text = yystack.l_mark[0].text; } #line 2490 "grammar.tab.c" break; case 79: #line 780 "grammar.y" { yyval.declarator = yystack.l_mark[0].declarator; (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yyval.declarator->text); free(yyval.declarator->text); yyval.declarator->text = xstrdup(buf); yyval.declarator->begin = yystack.l_mark[-1].text.begin; yyval.declarator->pointer = TRUE; } #line 2502 "grammar.tab.c" break; case 81: #line 793 "grammar.y" { yyval.declarator = new_declarator(yystack.l_mark[0].text.text, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin); } #line 2509 "grammar.tab.c" break; case 82: #line 797 "grammar.y" { yyval.declarator = yystack.l_mark[-1].declarator; (void)sprintf(buf, "(%.*s)", TEXT_LEN, yyval.declarator->text); free(yyval.declarator->text); yyval.declarator->text = xstrdup(buf); yyval.declarator->begin = yystack.l_mark[-2].text.begin; } #line 2520 "grammar.tab.c" break; case 83: #line 805 "grammar.y" { yyval.declarator = yystack.l_mark[-1].declarator; (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yyval.declarator->text, TEXT_LEN, yystack.l_mark[0].text.text); free(yyval.declarator->text); yyval.declarator->text = xstrdup(buf); } #line 2530 "grammar.tab.c" break; case 84: #line 812 "grammar.y" { yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin); yyval.declarator->params = yystack.l_mark[-1].param_list; yyval.declarator->func_stack = yystack.l_mark[-3].declarator; yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head; yyval.declarator->func_def = FUNC_ANSI; } #line 2541 "grammar.tab.c" break; case 85: #line 820 "grammar.y" { yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin); yyval.declarator->params = yystack.l_mark[-1].param_list; yyval.declarator->func_stack = yystack.l_mark[-3].declarator; yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head; yyval.declarator->func_def = FUNC_TRADITIONAL; } #line 2552 "grammar.tab.c" break; case 86: #line 831 "grammar.y" { (void)sprintf(yyval.text.text, "*%.*s", TEXT_LEN, yystack.l_mark[0].text.text); yyval.text.begin = yystack.l_mark[-1].text.begin; } #line 2560 "grammar.tab.c" break; case 87: #line 836 "grammar.y" { (void)sprintf(yyval.text.text, "*%.*s%.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yystack.l_mark[0].text.text); yyval.text.begin = yystack.l_mark[-2].text.begin; } #line 2568 "grammar.tab.c" break; case 88: #line 844 "grammar.y" { strcpy(yyval.text.text, ""); yyval.text.begin = 0L; } #line 2576 "grammar.tab.c" break; case 90: #line 853 "grammar.y" { (void)sprintf(yyval.text.text, "%s ", yystack.l_mark[0].decl_spec.text); yyval.text.begin = yystack.l_mark[0].decl_spec.begin; free(yystack.l_mark[0].decl_spec.text); } #line 2585 "grammar.tab.c" break; case 91: #line 859 "grammar.y" { (void)sprintf(yyval.text.text, "%.*s%.*s ", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yystack.l_mark[0].decl_spec.text); yyval.text.begin = yystack.l_mark[-1].text.begin; free(yystack.l_mark[0].decl_spec.text); } #line 2594 "grammar.tab.c" break; case 93: #line 869 "grammar.y" { add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, "..."); } #line 2601 "grammar.tab.c" break; case 94: #line 876 "grammar.y" { new_param_list(&yyval.param_list, yystack.l_mark[0].parameter); } #line 2608 "grammar.tab.c" break; case 95: #line 880 "grammar.y" { add_param_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].parameter); } #line 2615 "grammar.tab.c" break; case 96: #line 887 "grammar.y" { check_untagged(&yystack.l_mark[-1].decl_spec); yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator); } #line 2623 "grammar.tab.c" break; case 97: #line 892 "grammar.y" { check_untagged(&yystack.l_mark[-1].decl_spec); yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator); } #line 2631 "grammar.tab.c" break; case 98: #line 897 "grammar.y" { check_untagged(&yystack.l_mark[0].decl_spec); yyval.parameter = new_parameter(&yystack.l_mark[0].decl_spec, (Declarator *)0); } #line 2639 "grammar.tab.c" break; case 99: #line 905 "grammar.y" { new_ident_list(&yyval.param_list); } #line 2646 "grammar.tab.c" break; case 101: #line 913 "grammar.y" { new_ident_list(&yyval.param_list); add_ident_list(&yyval.param_list, &yyval.param_list, yystack.l_mark[0].text.text); } #line 2654 "grammar.tab.c" break; case 102: #line 918 "grammar.y" { add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].text.text); } #line 2661 "grammar.tab.c" break; case 103: #line 925 "grammar.y" { yyval.text = yystack.l_mark[0].text; } #line 2668 "grammar.tab.c" break; case 104: #line 929 "grammar.y" { #if OPT_LINTLIBRARY if (lintLibrary()) { /* Lint doesn't grok C++ ref variables */ yyval.text = yystack.l_mark[0].text; } else #endif (void)sprintf(yyval.text.text, "&%.*s", TEXT_LEN, yystack.l_mark[0].text.text); yyval.text.begin = yystack.l_mark[-1].text.begin; } #line 2681 "grammar.tab.c" break; case 105: #line 942 "grammar.y" { yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin); } #line 2688 "grammar.tab.c" break; case 106: #line 946 "grammar.y" { yyval.declarator = yystack.l_mark[0].declarator; (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yyval.declarator->text); free(yyval.declarator->text); yyval.declarator->text = xstrdup(buf); yyval.declarator->begin = yystack.l_mark[-1].text.begin; } #line 2699 "grammar.tab.c" break; case 108: #line 958 "grammar.y" { yyval.declarator = yystack.l_mark[-1].declarator; (void)sprintf(buf, "(%.*s)", TEXT_LEN, yyval.declarator->text); free(yyval.declarator->text); yyval.declarator->text = xstrdup(buf); yyval.declarator->begin = yystack.l_mark[-2].text.begin; } #line 2710 "grammar.tab.c" break; case 109: #line 966 "grammar.y" { yyval.declarator = yystack.l_mark[-1].declarator; (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yyval.declarator->text, TEXT_LEN, yystack.l_mark[0].text.text); free(yyval.declarator->text); yyval.declarator->text = xstrdup(buf); } #line 2720 "grammar.tab.c" break; case 110: #line 973 "grammar.y" { yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin); } #line 2727 "grammar.tab.c" break; case 111: #line 977 "grammar.y" { yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-3].declarator->begin); yyval.declarator->params = yystack.l_mark[-1].param_list; yyval.declarator->func_stack = yystack.l_mark[-3].declarator; yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head; yyval.declarator->func_def = FUNC_ANSI; } #line 2738 "grammar.tab.c" break; case 112: #line 985 "grammar.y" { yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].declarator->begin); yyval.declarator->func_stack = yystack.l_mark[-2].declarator; yyval.declarator->head = (yystack.l_mark[-2].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-2].declarator->head; yyval.declarator->func_def = FUNC_ANSI; } #line 2748 "grammar.tab.c" break; case 113: #line 992 "grammar.y" { Declarator *d; d = new_declarator("", "", yystack.l_mark[-2].text.begin); yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].text.begin); yyval.declarator->params = yystack.l_mark[-1].param_list; yyval.declarator->func_stack = d; yyval.declarator->head = yyval.declarator; yyval.declarator->func_def = FUNC_ANSI; } #line 2762 "grammar.tab.c" break; case 114: #line 1003 "grammar.y" { Declarator *d; d = new_declarator("", "", yystack.l_mark[-1].text.begin); yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-1].text.begin); yyval.declarator->func_stack = d; yyval.declarator->head = yyval.declarator; yyval.declarator->func_def = FUNC_ANSI; } #line 2775 "grammar.tab.c" break; #line 2777 "grammar.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_syntax7.tab.h0000644000000000000000000000000012314147323017145 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax14.tab.h0000644000000000000000000000000012314147323017223 0ustar rootrootbyacc-20221106/test/btyacc/err_inherit1.tab.c0000644000000000000000000000067213726503203017266 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/calc_code_requires.tab.c0000644000000000000000000013671014104035275020511 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse calc_code_requires_parse #endif /* yyparse */ #ifndef yylex #define yylex calc_code_requires_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc_code_requires_error #endif /* yyerror */ #ifndef yychar #define yychar calc_code_requires_char #endif /* yychar */ #ifndef yyval #define yyval calc_code_requires_val #endif /* yyval */ #ifndef yylval #define yylval calc_code_requires_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc_code_requires_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc_code_requires_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc_code_requires_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc_code_requires_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc_code_requires_len #endif /* yylen */ #ifndef yydefred #define yydefred calc_code_requires_defred #endif /* yydefred */ #ifndef yystos #define yystos calc_code_requires_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto calc_code_requires_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc_code_requires_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc_code_requires_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc_code_requires_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc_code_requires_table #endif /* yytable */ #ifndef yycheck #define yycheck calc_code_requires_check #endif /* yycheck */ #ifndef yyname #define yyname calc_code_requires_name #endif /* yyname */ #ifndef yyrule #define yyrule calc_code_requires_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex calc_code_requires_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable calc_code_requires_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "calc_code_requires_" #define YYPURE 0 #line 5 "calc_code_requires.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 131 "calc_code_requires.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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc_code_requires_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc_code_requires_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc_code_requires_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT calc_code_requires_stos[] = { 0, 261, 256, 257, 258, 45, 40, 262, 263, 264, 10, 61, 258, 263, 263, 10, 124, 38, 43, 45, 42, 47, 37, 257, 263, 41, 263, 263, 263, 263, 263, 263, 263, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT calc_code_requires_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc_code_requires_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc_code_requires_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; #if YYBTYACC static const YYINT calc_code_requires_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT calc_code_requires_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc_code_requires_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc_code_requires_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #if YYBTYACC static const YYINT calc_code_requires_ctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc_code_requires_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number", "illegal-symbol", }; static const char *const calc_code_requires_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif /* %code "requires" block start */ #line 1 "calc_code_requires.y" /* CODE-REQUIRES */ #line 2 "calc_code_requires.y" /* CODE-REQUIRES2 */ /* %code "requires" block end */ #line 363 "calc_code_requires.tab.c" #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 69 "calc_code_requires.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 519 "calc_code_requires.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 31 "calc_code_requires.y" { yyerrok ; } #line 1192 "calc_code_requires.tab.c" break; case 4: #line 35 "calc_code_requires.y" { printf("%d\n",yystack.l_mark[0]);} #line 1197 "calc_code_requires.tab.c" break; case 5: #line 37 "calc_code_requires.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1202 "calc_code_requires.tab.c" break; case 6: #line 41 "calc_code_requires.y" { yyval = yystack.l_mark[-1]; } #line 1207 "calc_code_requires.tab.c" break; case 7: #line 43 "calc_code_requires.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1212 "calc_code_requires.tab.c" break; case 8: #line 45 "calc_code_requires.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1217 "calc_code_requires.tab.c" break; case 9: #line 47 "calc_code_requires.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1222 "calc_code_requires.tab.c" break; case 10: #line 49 "calc_code_requires.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1227 "calc_code_requires.tab.c" break; case 11: #line 51 "calc_code_requires.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1232 "calc_code_requires.tab.c" break; case 12: #line 53 "calc_code_requires.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1237 "calc_code_requires.tab.c" break; case 13: #line 55 "calc_code_requires.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1242 "calc_code_requires.tab.c" break; case 14: #line 57 "calc_code_requires.y" { yyval = - yystack.l_mark[0]; } #line 1247 "calc_code_requires.tab.c" break; case 15: #line 59 "calc_code_requires.y" { yyval = regs[yystack.l_mark[0]]; } #line 1252 "calc_code_requires.tab.c" break; case 17: #line 64 "calc_code_requires.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1257 "calc_code_requires.tab.c" break; case 18: #line 66 "calc_code_requires.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1262 "calc_code_requires.tab.c" break; #line 1264 "calc_code_requires.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_syntax27.tab.c0000644000000000000000000000067213726503203017242 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/defines1.error0000644000000000000000000000000013501474556016525 0ustar rootrootbyacc-20221106/test/btyacc/calc3.tab.c0000644000000000000000000013676614104035275015676 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse calc3_parse #endif /* yyparse */ #ifndef yylex #define yylex calc3_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc3_error #endif /* yyerror */ #ifndef yychar #define yychar calc3_char #endif /* yychar */ #ifndef yyval #define yyval calc3_val #endif /* yyval */ #ifndef yylval #define yylval calc3_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc3_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc3_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc3_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc3_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc3_len #endif /* yylen */ #ifndef yydefred #define yydefred calc3_defred #endif /* yydefred */ #ifndef yystos #define yystos calc3_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto calc3_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc3_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc3_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc3_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc3_table #endif /* yytable */ #ifndef yycheck #define yycheck calc3_check #endif /* yycheck */ #ifndef yyname #define yyname calc3_name #endif /* yyname */ #ifndef yyrule #define yyrule calc3_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex calc3_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable calc3_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "calc3_" #define YYPURE 1 #line 9 "calc3.y" # include # include #ifdef YYBISON #define YYSTYPE int #define YYLEX_PARAM base #define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM) #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) int YYLEX_DECL(); static void YYERROR_DECL(); #endif #line 134 "calc3.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(int regs[26], int *base) #endif /* Parameters sent to lex. */ #ifdef YYLEX_PARAM # ifdef YYLEX_PARAM_TYPE # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM) # else # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM) # endif # define YYLEX yylex(&yylval, YYLEX_PARAM) #else # define YYLEX_DECL() yylex(YYSTYPE *yylval, int *base) # define YYLEX yylex(&yylval, base) #endif /* Parameters sent to yyerror. */ #ifndef YYERROR_DECL #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) #endif #ifndef YYERROR_CALL #define YYERROR_CALL(msg) yyerror(regs, base, msg) #endif extern int YYPARSE_DECL(); #define DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc3_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc3_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc3_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT calc3_stos[] = { 0, 261, 256, 257, 258, 45, 40, 262, 263, 264, 10, 61, 258, 263, 263, 10, 124, 38, 43, 45, 42, 47, 37, 257, 263, 41, 263, 263, 263, 263, 263, 263, 263, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT calc3_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc3_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc3_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; #if YYBTYACC static const YYINT calc3_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT calc3_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc3_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc3_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #if YYBTYACC static const YYINT calc3_ctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc3_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number", "illegal-symbol", }; static const char *const calc3_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ #line 76 "calc3.y" /* start of programs */ #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main (void) { int regs[26]; int base = 10; while(!feof(stdin)) { yyparse(regs, &base); } return 0; } #define UNUSED(x) ((void)(x)) static void YYERROR_DECL() { UNUSED(regs); /* %parse-param regs is not actually used here */ UNUSED(base); /* %parse-param base is not actually used here */ fprintf(stderr, "%s\n", s); } int YYLEX_DECL() { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { *yylval = (c - 'a'); return ( LETTER ); } if( isdigit( c )) { *yylval = (c - '0') % (*base); return ( DIGIT ); } return( c ); } #line 477 "calc3.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif /* variables for the parser stack */ YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif yyerrflag = 0; yychar = 0; memset(&yyval, 0, sizeof(yyval)); memset(&yylval, 0, sizeof(yylval)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(&yyloc, 0, sizeof(yyloc)); memset(&yylloc, 0, sizeof(yylloc)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 38 "calc3.y" { yyerrok ; } #line 1211 "calc3.tab.c" break; case 4: #line 42 "calc3.y" { printf("%d\n",yystack.l_mark[0]);} #line 1216 "calc3.tab.c" break; case 5: #line 44 "calc3.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1221 "calc3.tab.c" break; case 6: #line 48 "calc3.y" { yyval = yystack.l_mark[-1]; } #line 1226 "calc3.tab.c" break; case 7: #line 50 "calc3.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1231 "calc3.tab.c" break; case 8: #line 52 "calc3.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1236 "calc3.tab.c" break; case 9: #line 54 "calc3.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1241 "calc3.tab.c" break; case 10: #line 56 "calc3.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1246 "calc3.tab.c" break; case 11: #line 58 "calc3.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1251 "calc3.tab.c" break; case 12: #line 60 "calc3.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1256 "calc3.tab.c" break; case 13: #line 62 "calc3.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1261 "calc3.tab.c" break; case 14: #line 64 "calc3.y" { yyval = - yystack.l_mark[0]; } #line 1266 "calc3.tab.c" break; case 15: #line 66 "calc3.y" { yyval = regs[yystack.l_mark[0]]; } #line 1271 "calc3.tab.c" break; case 17: #line 71 "calc3.y" { yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1276 "calc3.tab.c" break; case 18: #line 73 "calc3.y" { yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1281 "calc3.tab.c" break; #line 1283 "calc3.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/grammar.error0000644000000000000000000000007312313700136016451 0ustar rootrootYACC: 1 shift/reduce conflict, 29 reduce/reduce conflicts. byacc-20221106/test/btyacc/quote_calc2.tab.h0000644000000000000000000000056412312171122017070 0ustar rootroot#ifndef _quote_calc2__defines_h_ #define _quote_calc2__defines_h_ #define OP_ADD 257 #define ADD 258 #define OP_SUB 259 #define SUB 260 #define OP_MUL 261 #define MUL 262 #define OP_DIV 263 #define DIV 264 #define OP_MOD 265 #define MOD 266 #define OP_AND 267 #define AND 268 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #endif /* _quote_calc2__defines_h_ */ byacc-20221106/test/btyacc/err_syntax8a.error0000644000000000000000000000011512361053263017454 0ustar rootrootYACC: e - line 6 of "./err_syntax8a.y", illegal use of reserved symbol $$123 byacc-20221106/test/btyacc/err_syntax9.error0000644000000000000000000000013612361053263017317 0ustar rootrootYACC: e - line 7 of "./err_syntax9.y", the start symbol text cannot be declared to be a token byacc-20221106/test/btyacc/defines3.calc.c0000644000000000000000000013171214104035275016527 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #define YYPREFIX "yy" #define YYPURE 0 #line 2 "calc.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 34 "prefix.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 #if !(defined(yylex) || defined(YYSTATE)) int YYLEX_DECL(); #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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT yylhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT yylen[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT yydefred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT yystos[] = { 0, 261, 256, 257, 258, 45, 40, 262, 263, 264, 10, 61, 258, 263, 263, 10, 124, 38, 43, 45, 42, 47, 37, 257, 263, 41, 263, 263, 263, 263, 263, 263, 263, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT yydgoto[] = { 1, 7, 8, 9, }; static const YYINT yysindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT yyrindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; #if YYBTYACC static const YYINT yycindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT yygindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT yytable[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT yycheck[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #if YYBTYACC static const YYINT yyctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const yyname[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number", "illegal-symbol", }; static const char *const yyrule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 66 "calc.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 418 "prefix.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 28 "calc.y" { yyerrok ; } #line 1091 "prefix.tab.c" break; case 4: #line 32 "calc.y" { printf("%d\n",yystack.l_mark[0]);} #line 1096 "prefix.tab.c" break; case 5: #line 34 "calc.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1101 "prefix.tab.c" break; case 6: #line 38 "calc.y" { yyval = yystack.l_mark[-1]; } #line 1106 "prefix.tab.c" break; case 7: #line 40 "calc.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1111 "prefix.tab.c" break; case 8: #line 42 "calc.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1116 "prefix.tab.c" break; case 9: #line 44 "calc.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1121 "prefix.tab.c" break; case 10: #line 46 "calc.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1126 "prefix.tab.c" break; case 11: #line 48 "calc.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1131 "prefix.tab.c" break; case 12: #line 50 "calc.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1136 "prefix.tab.c" break; case 13: #line 52 "calc.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1141 "prefix.tab.c" break; case 14: #line 54 "calc.y" { yyval = - yystack.l_mark[0]; } #line 1146 "prefix.tab.c" break; case 15: #line 56 "calc.y" { yyval = regs[yystack.l_mark[0]]; } #line 1151 "prefix.tab.c" break; case 17: #line 61 "calc.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1156 "prefix.tab.c" break; case 18: #line 63 "calc.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1161 "prefix.tab.c" break; #line 1163 "prefix.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_syntax18.output0000644000000000000000000000113112314147323017601 0ustar rootroot 0 $accept : expr $end 1 expr : '(' expr ')' state 0 $accept : . expr $end (0) '(' shift 1 . error expr goto 2 state 1 expr : '(' . expr ')' (1) '(' shift 1 . error expr goto 3 state 2 $accept : expr . $end (0) $end accept state 3 expr : '(' expr . ')' (1) ')' shift 4 . error state 4 expr : '(' expr ')' . (1) . reduce 1 4 terminals, 2 nonterminals 2 grammar rules, 5 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 40 '(' 3 41 ')' 4 257 $accept 5 258 expr byacc-20221106/test/btyacc/inherit2.error0000644000000000000000000000000012315230212016530 0ustar rootrootbyacc-20221106/test/btyacc/err_inherit2.tab.c0000644000000000000000000000067213726503203017267 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/err_syntax19.tab.h0000644000000000000000000000000012314147323017230 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax8a.tab.h0000644000000000000000000000000012314147323017307 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax1.tab.h0000644000000000000000000000000012314147323017137 0ustar rootrootbyacc-20221106/test/btyacc/quote_calc.error0000644000000000000000000000004112313700136017135 0ustar rootrootYACC: 54 shift/reduce conflicts. byacc-20221106/test/btyacc/quote_calc3.tab.c0000644000000000000000000013745414104035275017106 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse quote_calc3_parse #endif /* yyparse */ #ifndef yylex #define yylex quote_calc3_lex #endif /* yylex */ #ifndef yyerror #define yyerror quote_calc3_error #endif /* yyerror */ #ifndef yychar #define yychar quote_calc3_char #endif /* yychar */ #ifndef yyval #define yyval quote_calc3_val #endif /* yyval */ #ifndef yylval #define yylval quote_calc3_lval #endif /* yylval */ #ifndef yydebug #define yydebug quote_calc3_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs quote_calc3_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag quote_calc3_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs quote_calc3_lhs #endif /* yylhs */ #ifndef yylen #define yylen quote_calc3_len #endif /* yylen */ #ifndef yydefred #define yydefred quote_calc3_defred #endif /* yydefred */ #ifndef yystos #define yystos quote_calc3_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto quote_calc3_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex quote_calc3_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex quote_calc3_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex quote_calc3_gindex #endif /* yygindex */ #ifndef yytable #define yytable quote_calc3_table #endif /* yytable */ #ifndef yycheck #define yycheck quote_calc3_check #endif /* yycheck */ #ifndef yyname #define yyname quote_calc3_name #endif /* yyname */ #ifndef yyrule #define yyrule quote_calc3_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex quote_calc3_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable quote_calc3_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "quote_calc3_" #define YYPURE 0 #line 2 "quote_calc3.y" # include # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); #line 131 "quote_calc3.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 OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #define YYERRCODE 256 typedef int YYINT; static const YYINT quote_calc3_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT quote_calc3_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT quote_calc3_defred[] = { 1, 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, 0, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT quote_calc3_stos[] = { 0, 273, 256, 259, 269, 270, 40, 274, 275, 276, 10, 270, 275, 61, 275, 10, 257, 259, 261, 263, 265, 267, 124, 269, 275, 41, 275, 275, 275, 275, 275, 275, 275, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT quote_calc3_dgoto[] = { 1, 7, 8, 9, }; static const YYINT quote_calc3_sindex[] = { 0, -38, 5, -36, 0, -51, -36, 7, -121, -248, 0, 0, -243, -36, -22, 0, -36, -36, -36, -36, -36, -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, -121, -243, }; static const YYINT quote_calc3_rindex[] = { 0, 0, 0, 0, 0, -9, 0, 0, 13, -10, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, -3, -2, -1, 1, 2, 3, -4, }; #if YYBTYACC static const YYINT quote_calc3_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT quote_calc3_gindex[] = { 0, 0, 42, 0, }; #define YYTABLESIZE 258 static const YYINT quote_calc3_table[] = { 16, 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, 10, 11, 12, 16, 10, 17, 15, 18, 25, 19, 23, 20, 4, 21, 5, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, }; static const YYINT quote_calc3_check[] = { 10, 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, 10, 10, 10, 257, 10, 259, 10, 261, 41, 263, 269, 265, 10, 267, 10, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, 19, 20, 21, 22, -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, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, -1, 259, -1, 261, -1, 263, -1, 265, -1, 267, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, 259, -1, 259, -1, -1, -1, -1, -1, -1, -1, 269, 270, 269, 270, 257, -1, 259, -1, 261, -1, 263, -1, 265, -1, 267, -1, 257, 257, 259, 259, 261, 261, 263, 263, 265, 265, 267, 267, }; #if YYBTYACC static const YYINT quote_calc3_ctable[] = { -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, -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, -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, -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, -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, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 271 #define YYUNDFTOKEN 277 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const quote_calc3_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL", "\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"", "OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS","$accept","list","stat", "expr","number","illegal-symbol", }; static const char *const quote_calc3_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr OP_ADD expr", "expr : expr OP_SUB expr", "expr : expr OP_MUL expr", "expr : expr OP_DIV expr", "expr : expr OP_MOD expr", "expr : expr OP_AND expr", "expr : expr '|' expr", "expr : OP_SUB expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 73 "quote_calc3.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 530 "quote_calc3.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 35 "quote_calc3.y" { yyerrok ; } #line 1203 "quote_calc3.tab.c" break; case 4: #line 39 "quote_calc3.y" { printf("%d\n",yystack.l_mark[0]);} #line 1208 "quote_calc3.tab.c" break; case 5: #line 41 "quote_calc3.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1213 "quote_calc3.tab.c" break; case 6: #line 45 "quote_calc3.y" { yyval = yystack.l_mark[-1]; } #line 1218 "quote_calc3.tab.c" break; case 7: #line 47 "quote_calc3.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1223 "quote_calc3.tab.c" break; case 8: #line 49 "quote_calc3.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1228 "quote_calc3.tab.c" break; case 9: #line 51 "quote_calc3.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1233 "quote_calc3.tab.c" break; case 10: #line 53 "quote_calc3.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1238 "quote_calc3.tab.c" break; case 11: #line 55 "quote_calc3.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1243 "quote_calc3.tab.c" break; case 12: #line 57 "quote_calc3.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1248 "quote_calc3.tab.c" break; case 13: #line 59 "quote_calc3.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1253 "quote_calc3.tab.c" break; case 14: #line 61 "quote_calc3.y" { yyval = - yystack.l_mark[0]; } #line 1258 "quote_calc3.tab.c" break; case 15: #line 63 "quote_calc3.y" { yyval = regs[yystack.l_mark[0]]; } #line 1263 "quote_calc3.tab.c" break; case 17: #line 68 "quote_calc3.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1268 "quote_calc3.tab.c" break; case 18: #line 70 "quote_calc3.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1273 "quote_calc3.tab.c" break; #line 1275 "quote_calc3.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/calc_code_top.tab.c0000644000000000000000000013616314104035275017456 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 /* %code "top" block start */ #line 1 "calc_code_top.y" /* CODE-TOP */ #line 2 "calc_code_top.y" /* CODE-TOP2 */ /* %code "top" block end */ #line 24 "calc_code_top.tab.c" #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse calc_code_top_parse #endif /* yyparse */ #ifndef yylex #define yylex calc_code_top_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc_code_top_error #endif /* yyerror */ #ifndef yychar #define yychar calc_code_top_char #endif /* yychar */ #ifndef yyval #define yyval calc_code_top_val #endif /* yyval */ #ifndef yylval #define yylval calc_code_top_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc_code_top_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc_code_top_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc_code_top_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc_code_top_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc_code_top_len #endif /* yylen */ #ifndef yydefred #define yydefred calc_code_top_defred #endif /* yydefred */ #ifndef yystos #define yystos calc_code_top_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto calc_code_top_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc_code_top_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc_code_top_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc_code_top_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc_code_top_table #endif /* yytable */ #ifndef yycheck #define yycheck calc_code_top_check #endif /* yycheck */ #ifndef yyname #define yyname calc_code_top_name #endif /* yyname */ #ifndef yyrule #define yyrule calc_code_top_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex calc_code_top_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable calc_code_top_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "calc_code_top_" #define YYPURE 0 #line 5 "calc_code_top.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 139 "calc_code_top.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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc_code_top_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc_code_top_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc_code_top_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT calc_code_top_stos[] = { 0, 261, 256, 257, 258, 45, 40, 262, 263, 264, 10, 61, 258, 263, 263, 10, 124, 38, 43, 45, 42, 47, 37, 257, 263, 41, 263, 263, 263, 263, 263, 263, 263, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT calc_code_top_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc_code_top_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc_code_top_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; #if YYBTYACC static const YYINT calc_code_top_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT calc_code_top_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc_code_top_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc_code_top_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #if YYBTYACC static const YYINT calc_code_top_ctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc_code_top_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number", "illegal-symbol", }; static const char *const calc_code_top_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 69 "calc_code_top.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 519 "calc_code_top.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 31 "calc_code_top.y" { yyerrok ; } #line 1192 "calc_code_top.tab.c" break; case 4: #line 35 "calc_code_top.y" { printf("%d\n",yystack.l_mark[0]);} #line 1197 "calc_code_top.tab.c" break; case 5: #line 37 "calc_code_top.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1202 "calc_code_top.tab.c" break; case 6: #line 41 "calc_code_top.y" { yyval = yystack.l_mark[-1]; } #line 1207 "calc_code_top.tab.c" break; case 7: #line 43 "calc_code_top.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1212 "calc_code_top.tab.c" break; case 8: #line 45 "calc_code_top.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1217 "calc_code_top.tab.c" break; case 9: #line 47 "calc_code_top.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1222 "calc_code_top.tab.c" break; case 10: #line 49 "calc_code_top.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1227 "calc_code_top.tab.c" break; case 11: #line 51 "calc_code_top.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1232 "calc_code_top.tab.c" break; case 12: #line 53 "calc_code_top.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1237 "calc_code_top.tab.c" break; case 13: #line 55 "calc_code_top.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1242 "calc_code_top.tab.c" break; case 14: #line 57 "calc_code_top.y" { yyval = - yystack.l_mark[0]; } #line 1247 "calc_code_top.tab.c" break; case 15: #line 59 "calc_code_top.y" { yyval = regs[yystack.l_mark[0]]; } #line 1252 "calc_code_top.tab.c" break; case 17: #line 64 "calc_code_top.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1257 "calc_code_top.tab.c" break; case 18: #line 66 "calc_code_top.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1262 "calc_code_top.tab.c" break; #line 1264 "calc_code_top.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_inherit5.error0000644000000000000000000000010412361053263017422 0ustar rootrootYACC: e - line 74 of "./err_inherit5.y", illegal @$ or @N reference byacc-20221106/test/btyacc/err_syntax2.tab.c0000644000000000000000000000067213726503203017153 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/no_include.output0000644000000000000000000000000013501467273017353 0ustar rootrootbyacc-20221106/test/btyacc/no_graph.output0000644000000000000000000000000013501467273017031 0ustar rootrootbyacc-20221106/test/btyacc/stdin2.calc.c0000644000000000000000000013173414104035275016236 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #define YYPREFIX "yy" #define YYPURE 0 #line 2 "calc.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 34 "stdin2.calc.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 #if !(defined(yylex) || defined(YYSTATE)) int YYLEX_DECL(); #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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT yylhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT yylen[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT yydefred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT yystos[] = { 0, 261, 256, 257, 258, 45, 40, 262, 263, 264, 10, 61, 258, 263, 263, 10, 124, 38, 43, 45, 42, 47, 37, 257, 263, 41, 263, 263, 263, 263, 263, 263, 263, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT yydgoto[] = { 1, 7, 8, 9, }; static const YYINT yysindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT yyrindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; #if YYBTYACC static const YYINT yycindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT yygindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT yytable[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT yycheck[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #if YYBTYACC static const YYINT yyctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const yyname[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number", "illegal-symbol", }; static const char *const yyrule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 66 "calc.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 418 "stdin2.calc.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 28 "calc.y" { yyerrok ; } #line 1091 "stdin2.calc.c" break; case 4: #line 32 "calc.y" { printf("%d\n",yystack.l_mark[0]);} #line 1096 "stdin2.calc.c" break; case 5: #line 34 "calc.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1101 "stdin2.calc.c" break; case 6: #line 38 "calc.y" { yyval = yystack.l_mark[-1]; } #line 1106 "stdin2.calc.c" break; case 7: #line 40 "calc.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1111 "stdin2.calc.c" break; case 8: #line 42 "calc.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1116 "stdin2.calc.c" break; case 9: #line 44 "calc.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1121 "stdin2.calc.c" break; case 10: #line 46 "calc.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1126 "stdin2.calc.c" break; case 11: #line 48 "calc.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1131 "stdin2.calc.c" break; case 12: #line 50 "calc.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1136 "stdin2.calc.c" break; case 13: #line 52 "calc.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1141 "stdin2.calc.c" break; case 14: #line 54 "calc.y" { yyval = - yystack.l_mark[0]; } #line 1146 "stdin2.calc.c" break; case 15: #line 56 "calc.y" { yyval = regs[yystack.l_mark[0]]; } #line 1151 "stdin2.calc.c" break; case 17: #line 61 "calc.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1156 "stdin2.calc.c" break; case 18: #line 63 "calc.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1161 "stdin2.calc.c" break; #line 1163 "stdin2.calc.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/calc2.tab.h0000644000000000000000000000022012312171121015637 0ustar rootroot#ifndef _calc2__defines_h_ #define _calc2__defines_h_ #define DIGIT 257 #define LETTER 258 #define UMINUS 259 #endif /* _calc2__defines_h_ */ byacc-20221106/test/btyacc/err_syntax16.tab.h0000644000000000000000000000000012314147323017225 0ustar rootrootbyacc-20221106/test/btyacc/btyacc_destroy3.output0000644000000000000000000000653112414015057020343 0ustar rootroot 0 $accept : declaration $end 1 declaration : class type namelist '(' class ',' type ')' 2 | type locnamelist '(' class ')' 3 class : GLOBAL 4 | LOCAL 5 type : REAL 6 | INTEGER 7 namelist : namelist NAME 8 | NAME 9 locnamelist : namelist '(' LOCAL ',' type ')' state 0 $accept : . declaration $end (0) GLOBAL shift 1 LOCAL shift 2 REAL shift 3 INTEGER shift 4 . error declaration goto 5 class goto 6 type goto 7 state 1 class : GLOBAL . (3) . reduce 3 state 2 class : LOCAL . (4) . reduce 4 state 3 type : REAL . (5) . reduce 5 state 4 type : INTEGER . (6) . reduce 6 state 5 $accept : declaration . $end (0) $end accept state 6 declaration : class . type namelist '(' class ',' type ')' (1) REAL shift 3 INTEGER shift 4 . error type goto 8 state 7 declaration : type . locnamelist '(' class ')' (2) NAME shift 9 . error locnamelist goto 10 namelist goto 11 state 8 declaration : class type . namelist '(' class ',' type ')' (1) NAME shift 9 . error namelist goto 12 state 9 namelist : NAME . (8) . reduce 8 state 10 declaration : type locnamelist . '(' class ')' (2) '(' shift 13 . error state 11 namelist : namelist . NAME (7) locnamelist : namelist . '(' LOCAL ',' type ')' (9) NAME shift 14 '(' shift 15 . error state 12 declaration : class type namelist . '(' class ',' type ')' (1) namelist : namelist . NAME (7) NAME shift 14 '(' shift 16 . error state 13 declaration : type locnamelist '(' . class ')' (2) GLOBAL shift 1 LOCAL shift 2 . error class goto 17 state 14 namelist : namelist NAME . (7) . reduce 7 state 15 locnamelist : namelist '(' . LOCAL ',' type ')' (9) LOCAL shift 18 . error state 16 declaration : class type namelist '(' . class ',' type ')' (1) GLOBAL shift 1 LOCAL shift 2 . error class goto 19 state 17 declaration : type locnamelist '(' class . ')' (2) ')' shift 20 . error state 18 locnamelist : namelist '(' LOCAL . ',' type ')' (9) ',' shift 21 . error state 19 declaration : class type namelist '(' class . ',' type ')' (1) ',' shift 22 . error state 20 declaration : type locnamelist '(' class ')' . (2) . reduce 2 state 21 locnamelist : namelist '(' LOCAL ',' . type ')' (9) REAL shift 3 INTEGER shift 4 . error type goto 23 state 22 declaration : class type namelist '(' class ',' . type ')' (1) REAL shift 3 INTEGER shift 4 . error type goto 24 state 23 locnamelist : namelist '(' LOCAL ',' type . ')' (9) ')' shift 25 . error state 24 declaration : class type namelist '(' class ',' type . ')' (1) ')' shift 26 . error state 25 locnamelist : namelist '(' LOCAL ',' type ')' . (9) . reduce 9 state 26 declaration : class type namelist '(' class ',' type ')' . (1) . reduce 1 10 terminals, 6 nonterminals 10 grammar rules, 27 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 GLOBAL 3 258 LOCAL 4 259 REAL 5 260 INTEGER 6 261 NAME 7 40 '(' 8 44 ',' 9 41 ')' 10 262 $accept 11 263 declaration 12 264 locnamelist 13 265 class 14 266 type 15 267 namelist byacc-20221106/test/btyacc/calc_code_all.tab.h0000644000000000000000000000067613565110447017435 0ustar rootroot#ifndef _calc_code_all__defines_h_ #define _calc_code_all__defines_h_ /* %code "requires" block start */ #line 3 "calc_code_all.y" /* CODE-REQUIRES */ /* %code "requires" block end */ #define DIGIT 257 #define LETTER 258 #define UMINUS 259 /* %code "provides" block start */ #line 4 "calc_code_all.y" /* CODE-PROVIDES */ #line 6 "calc_code_all.y" /* CODE-PROVIDES2 */ /* %code "provides" block end */ #endif /* _calc_code_all__defines_h_ */ byacc-20221106/test/btyacc/err_inherit3.error0000644000000000000000000000222312361053263017424 0ustar rootrootYACC: w - line 64 of "./err_inherit3.y", number of arguments of namelist doesn't agree with previous declaration YACC: w - line 64 of "./err_inherit3.y", wrong number of arguments for namelist namelist: namelist($c) NAME ^ YACC: w - line 64 of "./err_inherit3.y", unknown argument $c YACC: w - line 64 of "./err_inherit3.y", untyped argument $c YACC: w - line 65 of "./err_inherit3.y", unknown argument $t { $$->s = mksymbol($t, $c, $2); ^ YACC: w - line 65 of "./err_inherit3.y", unknown argument $c { $$->s = mksymbol($t, $c, $2); ^ YACC: w - line 69 of "./err_inherit3.y", unknown argument $t { $$->s = mksymbol($t, $c, $1); ^ YACC: w - line 69 of "./err_inherit3.y", untyped argument $t YACC: w - line 69 of "./err_inherit3.y", unknown argument $c { $$->s = mksymbol($t, $c, $1); ^ YACC: w - line 69 of "./err_inherit3.y", untyped argument $c YACC: w - line 0 of "./err_inherit3.y", start symbol declaration requires arguments YACC: 1 rule never reduced YACC: 3 shift/reduce conflicts. byacc-20221106/test/btyacc/err_syntax15.tab.c0000644000000000000000000000067213726503203017237 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/quote_calc-s.output0000644000000000000000000002747212312171122017621 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr OP_ADD expr 8 | expr OP_SUB expr 9 | expr OP_MUL expr 10 | expr OP_DIV expr 11 | expr OP_MOD expr 12 | expr OP_AND expr 13 | expr '|' expr 14 | OP_SUB expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 OP_SUB shift 3 DIGIT shift 4 LETTER shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 expr : OP_SUB . expr (14) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 12 number goto 9 state 4 number : DIGIT . (17) . reduce 17 state 5 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 13 OP_ADD reduce 15 OP_SUB reduce 15 OP_MUL reduce 15 OP_DIV reduce 15 OP_MOD reduce 15 OP_AND reduce 15 '|' reduce 15 '\n' reduce 15 state 6 expr : '(' . expr ')' (6) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 OP_ADD reduce 16 OP_SUB reduce 16 OP_MUL reduce 16 OP_DIV reduce 16 OP_MOD reduce 16 OP_AND reduce 16 '|' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 expr : LETTER . (15) . reduce 15 12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD 12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB 12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL 12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV 12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD 12: shift/reduce conflict (shift 21, reduce 14) on OP_AND state 12 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) expr : OP_SUB expr . (14) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' reduce 14 '\n' reduce 14 ')' reduce 14 state 13 stat : LETTER '=' . expr (5) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 24 number goto 9 state 14 expr : '(' expr . ')' (6) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr OP_ADD . expr (7) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr OP_SUB . expr (8) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr OP_MUL . expr (9) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr OP_DIV . expr (10) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr OP_MOD . expr (11) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr OP_AND . expr (12) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '|' . expr (13) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD 26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB 26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL 26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV 26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD 26: shift/reduce conflict (shift 21, reduce 7) on OP_AND 26: shift/reduce conflict (shift 22, reduce 7) on '|' state 26 expr : expr . OP_ADD expr (7) expr : expr OP_ADD expr . (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 7 ')' reduce 7 27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD 27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB 27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL 27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV 27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD 27: shift/reduce conflict (shift 21, reduce 8) on OP_AND 27: shift/reduce conflict (shift 22, reduce 8) on '|' state 27 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr OP_SUB expr . (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 8 ')' reduce 8 28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD 28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB 28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL 28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV 28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD 28: shift/reduce conflict (shift 21, reduce 9) on OP_AND 28: shift/reduce conflict (shift 22, reduce 9) on '|' state 28 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr OP_MUL expr . (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 9 ')' reduce 9 29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD 29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB 29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL 29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV 29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD 29: shift/reduce conflict (shift 21, reduce 10) on OP_AND 29: shift/reduce conflict (shift 22, reduce 10) on '|' state 29 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr OP_DIV expr . (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 10 ')' reduce 10 30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD 30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB 30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL 30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV 30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD 30: shift/reduce conflict (shift 21, reduce 11) on OP_AND 30: shift/reduce conflict (shift 22, reduce 11) on '|' state 30 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr OP_MOD expr . (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 11 ')' reduce 11 31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD 31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB 31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL 31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV 31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD 31: shift/reduce conflict (shift 21, reduce 12) on OP_AND 31: shift/reduce conflict (shift 22, reduce 12) on '|' state 31 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr OP_AND expr . (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 12 ')' reduce 12 32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD 32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB 32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL 32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV 32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD 32: shift/reduce conflict (shift 21, reduce 13) on OP_AND state 32 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' reduce 13 '\n' reduce 13 ')' reduce 13 State 12 contains 6 shift/reduce conflicts. State 26 contains 7 shift/reduce conflicts. State 27 contains 7 shift/reduce conflicts. State 28 contains 7 shift/reduce conflicts. State 29 contains 7 shift/reduce conflicts. State 30 contains 7 shift/reduce conflicts. State 31 contains 7 shift/reduce conflicts. State 32 contains 6 shift/reduce conflicts. 28 terminals, 5 nonterminals 19 grammar rules, 33 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 OP_ADD 3 258 "ADD" 4 259 OP_SUB 5 260 "SUB" 6 261 OP_MUL 7 262 "MUL" 8 263 OP_DIV 9 264 "DIV" 10 265 OP_MOD 11 266 "MOD" 12 267 OP_AND 13 268 "AND" 14 269 DIGIT 15 270 LETTER 16 124 '|' 17 38 '&' 18 43 '+' 19 45 '-' 20 42 '*' 21 47 '/' 22 37 '%' 23 271 UMINUS 24 10 '\n' 25 61 '=' 26 40 '(' 27 41 ')' 28 272 $accept 29 273 list 30 274 stat 31 275 expr 32 276 number byacc-20221106/test/btyacc/calc.error0000644000000000000000000000000012315230211015705 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax8.output0000644000000000000000000000000012314147323017512 0ustar rootrootbyacc-20221106/test/btyacc/code_calc.tab.c0000644000000000000000000001633314051574134016573 0ustar rootroot#undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" typedef int YYINT; const YYINT calc_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; const YYINT calc_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; const YYINT calc_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) const YYINT calc_stos[] = { 0, 261, 256, 257, 258, 45, 40, 262, 263, 264, 10, 61, 258, 263, 263, 10, 124, 38, 43, 45, 42, 47, 37, 257, 263, 41, 263, 263, 263, 263, 263, 263, 263, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ const YYINT calc_dgoto[] = { 1, 7, 8, 9, }; const YYINT calc_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; const YYINT calc_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; #if YYBTYACC const YYINT calc_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif const YYINT calc_gindex[] = { 0, 0, 65, 0, }; const YYINT calc_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; const YYINT calc_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #if YYBTYACC const YYINT calc_ctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, }; #endif #ifndef YYDEBUG #define YYDEBUG 0 #endif const char *const calc_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number", "illegal-symbol", }; #if YYDEBUG const char *const calc_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif byacc-20221106/test/btyacc/calc3.output0000644000000000000000000001630312312171121016215 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 DIGIT 3 258 LETTER 4 124 '|' 5 38 '&' 6 43 '+' 7 45 '-' 8 42 '*' 9 47 '/' 10 37 '%' 11 259 UMINUS 12 10 '\n' 13 61 '=' 14 40 '(' 15 41 ')' 16 260 $accept 17 261 list 18 262 stat 19 263 expr 20 264 number byacc-20221106/test/btyacc/calc_code_imports.output0000644000000000000000000001630313565110447020720 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr '+' expr 8 | expr '-' expr 9 | expr '*' expr 10 | expr '/' expr 11 | expr '%' expr 12 | expr '&' expr 13 | expr '|' expr 14 | '-' expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 DIGIT shift 3 LETTER shift 4 '-' shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 number : DIGIT . (17) . reduce 17 state 4 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 11 '|' reduce 15 '&' reduce 15 '+' reduce 15 '-' reduce 15 '*' reduce 15 '/' reduce 15 '%' reduce 15 '\n' reduce 15 state 5 expr : '-' . expr (14) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 13 number goto 9 state 6 expr : '(' . expr ')' (6) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 '|' reduce 16 '&' reduce 16 '+' reduce 16 '-' reduce 16 '*' reduce 16 '/' reduce 16 '%' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 stat : LETTER '=' . expr (5) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 24 number goto 9 state 12 expr : LETTER . (15) . reduce 15 state 13 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : '-' expr . (14) . reduce 14 state 14 expr : '(' expr . ')' (6) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr '|' . expr (13) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr '&' . expr (12) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr '+' . expr (7) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr '-' . expr (8) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr '*' . expr (9) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr '/' . expr (10) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '%' . expr (11) DIGIT shift 3 LETTER shift 12 '-' shift 5 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '|' shift 16 '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 state 26 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) '&' shift 17 '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 13 '\n' reduce 13 ')' reduce 13 state 27 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr '&' expr . (12) expr : expr . '|' expr (13) '+' shift 18 '-' shift 19 '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 12 '&' reduce 12 '\n' reduce 12 ')' reduce 12 state 28 expr : expr . '+' expr (7) expr : expr '+' expr . (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 7 '&' reduce 7 '+' reduce 7 '-' reduce 7 '\n' reduce 7 ')' reduce 7 state 29 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr '-' expr . (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) '*' shift 20 '/' shift 21 '%' shift 22 '|' reduce 8 '&' reduce 8 '+' reduce 8 '-' reduce 8 '\n' reduce 8 ')' reduce 8 state 30 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr '*' expr . (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 9 state 31 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr '/' expr . (10) expr : expr . '%' expr (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 10 state 32 expr : expr . '+' expr (7) expr : expr . '-' expr (8) expr : expr . '*' expr (9) expr : expr . '/' expr (10) expr : expr . '%' expr (11) expr : expr '%' expr . (11) expr : expr . '&' expr (12) expr : expr . '|' expr (13) . reduce 11 16 terminals, 5 nonterminals 19 grammar rules, 33 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 DIGIT 3 258 LETTER 4 124 '|' 5 38 '&' 6 43 '+' 7 45 '-' 8 42 '*' 9 47 '/' 10 37 '%' 11 259 UMINUS 12 10 '\n' 13 61 '=' 14 40 '(' 15 41 ')' 16 260 $accept 17 261 list 18 262 stat 19 263 expr 20 264 number byacc-20221106/test/btyacc/error.output0000644000000000000000000000060512312171121016357 0ustar rootroot 0 $accept : S $end 1 S : error state 0 $accept : . S $end (0) error shift 1 . error S goto 2 state 1 S : error . (1) . reduce 1 state 2 $accept : S . $end (0) $end accept 2 terminals, 2 nonterminals 2 grammar rules, 3 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 $accept 3 258 S byacc-20221106/test/btyacc/err_syntax15.error0000644000000000000000000000010612361053263017371 0ustar rootrootYACC: e - line 9 of "./err_syntax15.y", no grammar has been specified byacc-20221106/test/btyacc/err_syntax24.error0000644000000000000000000000023512723664634017410 0ustar rootrootYACC: w - line 21 of "./err_syntax24.y", the default action for expr assigns an undefined value to $$ YACC: e - line 22 of "./err_syntax24.y", $$ is untyped byacc-20221106/test/btyacc/err_syntax23.tab.h0000644000000000000000000000000012314147323017223 0ustar rootrootbyacc-20221106/test/btyacc/no_p_opt1.output0000644000000000000000000000000013501467273017132 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax5.error0000644000000000000000000000012212361053263017306 0ustar rootrootYACC: e - line 6 of "./err_syntax5.y", unterminated %union declaration %union { ^ byacc-20221106/test/btyacc/calc1.tab.h0000644000000000000000000000066214030125513015653 0ustar rootroot#ifndef _calc1__defines_h_ #define _calc1__defines_h_ #define DREG 257 #define VREG 258 #define CONST 259 #define UMINUS 260 #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 typedef union YYSTYPE { int ival; double dval; INTERVAL vval; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ extern YYSTYPE calc1_lval; #endif /* _calc1__defines_h_ */ byacc-20221106/test/btyacc/big_l.error0000644000000000000000000000233414102077543016110 0ustar rootrootUsage: YACC [options] filename Options: -b file_prefix set filename prefix (default "y.") -B create a backtracking parser -d write definitions (.tab.h) -h print this help-message -H defines_file write definitions to defines_file -i write interface (y.tab.i) -g write a graphical description -l suppress #line directives -L enable position processing, e.g., "%locations" -o output_file (default ".tab.c") -p symbol_prefix set symbol prefix (default "yy") -P create a reentrant parser, e.g., "%pure-parser" -r produce separate code and table files (y.code.c) -s suppress #define's for quoted names in %token lines -t add debugging support -v write description (y.output) -V show version information and exit Long options: --defines -H --file-prefix -b --graph -g --help -h --name-prefix -p --no-lines -l --output -o --version -V byacc-20221106/test/btyacc/err_syntax2.error0000644000000000000000000000007712361053263017314 0ustar rootrootYACC: e - line 1 of "./err_syntax2.y", unmatched /* %{ /* ^ byacc-20221106/test/btyacc/err_syntax11.tab.c0000644000000000000000000011572514104035275017241 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse err_syntax11_parse #endif /* yyparse */ #ifndef yylex #define yylex err_syntax11_lex #endif /* yylex */ #ifndef yyerror #define yyerror err_syntax11_error #endif /* yyerror */ #ifndef yychar #define yychar err_syntax11_char #endif /* yychar */ #ifndef yyval #define yyval err_syntax11_val #endif /* yyval */ #ifndef yylval #define yylval err_syntax11_lval #endif /* yylval */ #ifndef yydebug #define yydebug err_syntax11_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs err_syntax11_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag err_syntax11_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs err_syntax11_lhs #endif /* yylhs */ #ifndef yylen #define yylen err_syntax11_len #endif /* yylen */ #ifndef yydefred #define yydefred err_syntax11_defred #endif /* yydefred */ #ifndef yystos #define yystos err_syntax11_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto err_syntax11_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex err_syntax11_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex err_syntax11_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex err_syntax11_gindex #endif /* yygindex */ #ifndef yytable #define yytable err_syntax11_table #endif /* yytable */ #ifndef yycheck #define yycheck err_syntax11_check #endif /* yycheck */ #ifndef yyname #define yyname err_syntax11_name #endif /* yyname */ #ifndef yyrule #define yyrule err_syntax11_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex err_syntax11_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable err_syntax11_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "err_syntax11_" #define YYPURE 0 #line 2 "err_syntax11.y" int yylex(void); static void yyerror(const char *); #line 124 "err_syntax11.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 YYERRCODE 256 typedef int YYINT; static const YYINT err_syntax11_lhs[] = { -1, 0, }; static const YYINT err_syntax11_len[] = { 2, 1, }; static const YYINT err_syntax11_defred[] = { 0, 1, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT err_syntax11_stos[] = { 0, 256, 258, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT err_syntax11_dgoto[] = { 2, }; static const YYINT err_syntax11_sindex[] = { -256, 0, 0, }; static const YYINT err_syntax11_rindex[] = { 0, 0, 0, }; #if YYBTYACC static const YYINT err_syntax11_cindex[] = { 0, 0, 0, }; #endif static const YYINT err_syntax11_gindex[] = { 0, }; #define YYTABLESIZE 0 static const YYINT err_syntax11_table[] = { 1, }; static const YYINT err_syntax11_check[] = { 256, }; #if YYBTYACC static const YYINT err_syntax11_ctable[] = { -1, }; #endif #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 256 #define YYUNDFTOKEN 259 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const err_syntax11_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","$accept","S", "illegal-symbol", }; static const char *const err_syntax11_rule[] = { "$accept : S", "S : error", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 12 "err_syntax11.y" #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } #line 378 "err_syntax11.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/no_include.error0000644000000000000000000000004513501467273017155 0ustar rootrootYACC: f - cannot open "nosuchfile.i" byacc-20221106/test/btyacc/varsyntax_calc1.tab.h0000644000000000000000000000105614030125516017773 0ustar rootroot#ifndef _varsyntax_calc1__defines_h_ #define _varsyntax_calc1__defines_h_ #define DREG 257 #define VREG 258 #define CONST 259 #define UMINUS 260 #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 typedef union YYSTYPE { int ival; /* dreg & vreg array index values*/ double dval; /* floating point values*/ INTERVAL vval; /* interval values*/ } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ extern YYSTYPE varsyntax_calc1_lval; #endif /* _varsyntax_calc1__defines_h_ */ byacc-20221106/test/btyacc/err_syntax7.error0000644000000000000000000000013712361053263017316 0ustar rootrootYACC: e - line 6 of "./err_syntax7.y", illegal character %token '\777' ^ byacc-20221106/test/btyacc/quote_calc2-s.tab.c0000644000000000000000000013746214104035275017344 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse quote_calc2_parse #endif /* yyparse */ #ifndef yylex #define yylex quote_calc2_lex #endif /* yylex */ #ifndef yyerror #define yyerror quote_calc2_error #endif /* yyerror */ #ifndef yychar #define yychar quote_calc2_char #endif /* yychar */ #ifndef yyval #define yyval quote_calc2_val #endif /* yyval */ #ifndef yylval #define yylval quote_calc2_lval #endif /* yylval */ #ifndef yydebug #define yydebug quote_calc2_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs quote_calc2_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag quote_calc2_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs quote_calc2_lhs #endif /* yylhs */ #ifndef yylen #define yylen quote_calc2_len #endif /* yylen */ #ifndef yydefred #define yydefred quote_calc2_defred #endif /* yydefred */ #ifndef yystos #define yystos quote_calc2_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto quote_calc2_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex quote_calc2_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex quote_calc2_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex quote_calc2_gindex #endif /* yygindex */ #ifndef yytable #define yytable quote_calc2_table #endif /* yytable */ #ifndef yycheck #define yycheck quote_calc2_check #endif /* yycheck */ #ifndef yyname #define yyname quote_calc2_name #endif /* yyname */ #ifndef yyrule #define yyrule quote_calc2_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex quote_calc2_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable quote_calc2_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "quote_calc2_" #define YYPURE 0 #line 2 "quote_calc2.y" # include # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); #line 131 "quote_calc2-s.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 OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #define YYERRCODE 256 typedef int YYINT; static const YYINT quote_calc2_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT quote_calc2_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT quote_calc2_defred[] = { 1, 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, 0, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT quote_calc2_stos[] = { 0, 273, 256, 260, 269, 270, 40, 274, 275, 276, 10, 270, 275, 61, 275, 10, 258, 260, 262, 264, 266, 268, 124, 269, 275, 41, 275, 275, 275, 275, 275, 275, 275, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT quote_calc2_dgoto[] = { 1, 7, 8, 9, }; static const YYINT quote_calc2_sindex[] = { 0, -38, 4, -36, 0, -51, -36, 6, -121, -249, 0, 0, -243, -36, -23, 0, -36, -36, -36, -36, -36, -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, -121, -243, }; static const YYINT quote_calc2_rindex[] = { 0, 0, 0, 0, 0, -9, 0, 0, 12, -10, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, -3, -2, -1, 1, 2, 3, -4, }; #if YYBTYACC static const YYINT quote_calc2_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT quote_calc2_gindex[] = { 0, 0, 42, 0, }; #define YYTABLESIZE 259 static const YYINT quote_calc2_table[] = { 16, 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, 10, 11, 12, 10, 16, 15, 17, 25, 18, 23, 19, 4, 20, 5, 21, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, }; static const YYINT quote_calc2_check[] = { 10, 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, 10, 10, 10, 10, 258, 10, 260, 41, 262, 269, 264, 10, 266, 10, 268, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, 19, 20, 21, 22, -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, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 258, -1, 260, -1, 262, -1, 264, -1, 266, -1, 268, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 260, -1, 260, -1, -1, -1, -1, -1, -1, 269, 270, 269, 270, 258, -1, 260, -1, 262, -1, 264, -1, 266, -1, 268, -1, -1, 258, 258, 260, 260, 262, 262, 264, 264, 266, 266, 268, 268, }; #if YYBTYACC static const YYINT quote_calc2_ctable[] = { -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, -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, -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, -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, -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, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 271 #define YYUNDFTOKEN 277 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const quote_calc2_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV", "\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS", "$accept","list","stat","expr","number","illegal-symbol", }; static const char *const quote_calc2_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr \"ADD\" expr", "expr : expr \"SUB\" expr", "expr : expr \"MUL\" expr", "expr : expr \"DIV\" expr", "expr : expr \"MOD\" expr", "expr : expr \"AND\" expr", "expr : expr '|' expr", "expr : \"SUB\" expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 73 "quote_calc2.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 529 "quote_calc2-s.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 35 "quote_calc2.y" { yyerrok ; } #line 1202 "quote_calc2-s.tab.c" break; case 4: #line 39 "quote_calc2.y" { printf("%d\n",yystack.l_mark[0]);} #line 1207 "quote_calc2-s.tab.c" break; case 5: #line 41 "quote_calc2.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1212 "quote_calc2-s.tab.c" break; case 6: #line 45 "quote_calc2.y" { yyval = yystack.l_mark[-1]; } #line 1217 "quote_calc2-s.tab.c" break; case 7: #line 47 "quote_calc2.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1222 "quote_calc2-s.tab.c" break; case 8: #line 49 "quote_calc2.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1227 "quote_calc2-s.tab.c" break; case 9: #line 51 "quote_calc2.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1232 "quote_calc2-s.tab.c" break; case 10: #line 53 "quote_calc2.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1237 "quote_calc2-s.tab.c" break; case 11: #line 55 "quote_calc2.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1242 "quote_calc2-s.tab.c" break; case 12: #line 57 "quote_calc2.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1247 "quote_calc2-s.tab.c" break; case 13: #line 59 "quote_calc2.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1252 "quote_calc2-s.tab.c" break; case 14: #line 61 "quote_calc2.y" { yyval = - yystack.l_mark[0]; } #line 1257 "quote_calc2-s.tab.c" break; case 15: #line 63 "quote_calc2.y" { yyval = regs[yystack.l_mark[0]]; } #line 1262 "quote_calc2-s.tab.c" break; case 17: #line 68 "quote_calc2.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1267 "quote_calc2-s.tab.c" break; case 18: #line 70 "quote_calc2.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1272 "quote_calc2-s.tab.c" break; #line 1274 "quote_calc2-s.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/error.tab.c0000644000000000000000000011537514104035275016033 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse error_parse #endif /* yyparse */ #ifndef yylex #define yylex error_lex #endif /* yylex */ #ifndef yyerror #define yyerror error_error #endif /* yyerror */ #ifndef yychar #define yychar error_char #endif /* yychar */ #ifndef yyval #define yyval error_val #endif /* yyval */ #ifndef yylval #define yylval error_lval #endif /* yylval */ #ifndef yydebug #define yydebug error_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs error_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag error_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs error_lhs #endif /* yylhs */ #ifndef yylen #define yylen error_len #endif /* yylen */ #ifndef yydefred #define yydefred error_defred #endif /* yydefred */ #ifndef yystos #define yystos error_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto error_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex error_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex error_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex error_gindex #endif /* yygindex */ #ifndef yytable #define yytable error_table #endif /* yytable */ #ifndef yycheck #define yycheck error_check #endif /* yycheck */ #ifndef yyname #define yyname error_name #endif /* yyname */ #ifndef yyrule #define yyrule error_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex error_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable error_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "error_" #define YYPURE 0 #line 2 "error.y" int yylex(void); static void yyerror(const char *); #line 124 "error.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 YYERRCODE 256 typedef int YYINT; static const YYINT error_lhs[] = { -1, 0, }; static const YYINT error_len[] = { 2, 1, }; static const YYINT error_defred[] = { 0, 1, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT error_stos[] = { 0, 256, 258, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT error_dgoto[] = { 2, }; static const YYINT error_sindex[] = { -256, 0, 0, }; static const YYINT error_rindex[] = { 0, 0, 0, }; #if YYBTYACC static const YYINT error_cindex[] = { 0, 0, 0, }; #endif static const YYINT error_gindex[] = { 0, }; #define YYTABLESIZE 0 static const YYINT error_table[] = { 1, }; static const YYINT error_check[] = { 256, }; #if YYBTYACC static const YYINT error_ctable[] = { -1, }; #endif #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 256 #define YYUNDFTOKEN 259 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const error_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","$accept","S","illegal-symbol", }; static const char *const error_rule[] = { "$accept : S", "S : error", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 8 "error.y" #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } #line 377 "error.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/quote_calc4.tab.c0000644000000000000000000013760414104035275017104 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse quote_calc4_parse #endif /* yyparse */ #ifndef yylex #define yylex quote_calc4_lex #endif /* yylex */ #ifndef yyerror #define yyerror quote_calc4_error #endif /* yyerror */ #ifndef yychar #define yychar quote_calc4_char #endif /* yychar */ #ifndef yyval #define yyval quote_calc4_val #endif /* yyval */ #ifndef yylval #define yylval quote_calc4_lval #endif /* yylval */ #ifndef yydebug #define yydebug quote_calc4_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs quote_calc4_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag quote_calc4_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs quote_calc4_lhs #endif /* yylhs */ #ifndef yylen #define yylen quote_calc4_len #endif /* yylen */ #ifndef yydefred #define yydefred quote_calc4_defred #endif /* yydefred */ #ifndef yystos #define yystos quote_calc4_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto quote_calc4_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex quote_calc4_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex quote_calc4_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex quote_calc4_gindex #endif /* yygindex */ #ifndef yytable #define yytable quote_calc4_table #endif /* yytable */ #ifndef yycheck #define yycheck quote_calc4_check #endif /* yycheck */ #ifndef yyname #define yyname quote_calc4_name #endif /* yyname */ #ifndef yyrule #define yyrule quote_calc4_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex quote_calc4_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable quote_calc4_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "quote_calc4_" #define YYPURE 0 #line 2 "quote_calc4.y" # include # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); #line 131 "quote_calc4.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 OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #define YYERRCODE 256 typedef int YYINT; static const YYINT quote_calc4_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT quote_calc4_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT quote_calc4_defred[] = { 1, 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, 0, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT quote_calc4_stos[] = { 0, 273, 256, 260, 269, 270, 40, 274, 275, 276, 10, 270, 275, 61, 275, 10, 258, 260, 262, 264, 266, 268, 124, 269, 275, 41, 275, 275, 275, 275, 275, 275, 275, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT quote_calc4_dgoto[] = { 1, 7, 8, 9, }; static const YYINT quote_calc4_sindex[] = { 0, -38, 4, -36, 0, -51, -36, 6, -121, -249, 0, 0, -243, -36, -23, 0, -36, -36, -36, -36, -36, -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, -121, -243, }; static const YYINT quote_calc4_rindex[] = { 0, 0, 0, 0, 0, -9, 0, 0, 12, -10, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, -3, -2, -1, 1, 2, 3, -4, }; #if YYBTYACC static const YYINT quote_calc4_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT quote_calc4_gindex[] = { 0, 0, 42, 0, }; #define YYTABLESIZE 259 static const YYINT quote_calc4_table[] = { 16, 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, 10, 11, 12, 10, 16, 15, 17, 25, 18, 23, 19, 4, 20, 5, 21, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, }; static const YYINT quote_calc4_check[] = { 10, 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, 10, 10, 10, 10, 258, 10, 260, 41, 262, 269, 264, 10, 266, 10, 268, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, 19, 20, 21, 22, -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, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 258, -1, 260, -1, 262, -1, 264, -1, 266, -1, 268, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 260, -1, 260, -1, -1, -1, -1, -1, -1, 269, 270, 269, 270, 258, -1, 260, -1, 262, -1, 264, -1, 266, -1, 268, -1, -1, 258, 258, 260, 260, 262, 262, 264, 264, 266, 266, 268, 268, }; #if YYBTYACC static const YYINT quote_calc4_ctable[] = { -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, -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, -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, -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, -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, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 271 #define YYUNDFTOKEN 277 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const quote_calc4_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL", "\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"", "OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS","$accept","list","stat", "expr","number","illegal-symbol", }; static const char *const quote_calc4_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr \"ADD-operator\" expr", "expr : expr \"SUB-operator\" expr", "expr : expr \"MUL-operator\" expr", "expr : expr \"DIV-operator\" expr", "expr : expr \"MOD-operator\" expr", "expr : expr \"AND-operator\" expr", "expr : expr '|' expr", "expr : \"SUB-operator\" expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 73 "quote_calc4.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 530 "quote_calc4.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 35 "quote_calc4.y" { yyerrok ; } #line 1203 "quote_calc4.tab.c" break; case 4: #line 39 "quote_calc4.y" { printf("%d\n",yystack.l_mark[0]);} #line 1208 "quote_calc4.tab.c" break; case 5: #line 41 "quote_calc4.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1213 "quote_calc4.tab.c" break; case 6: #line 45 "quote_calc4.y" { yyval = yystack.l_mark[-1]; } #line 1218 "quote_calc4.tab.c" break; case 7: #line 47 "quote_calc4.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1223 "quote_calc4.tab.c" break; case 8: #line 49 "quote_calc4.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1228 "quote_calc4.tab.c" break; case 9: #line 51 "quote_calc4.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1233 "quote_calc4.tab.c" break; case 10: #line 53 "quote_calc4.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1238 "quote_calc4.tab.c" break; case 11: #line 55 "quote_calc4.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1243 "quote_calc4.tab.c" break; case 12: #line 57 "quote_calc4.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1248 "quote_calc4.tab.c" break; case 13: #line 59 "quote_calc4.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1253 "quote_calc4.tab.c" break; case 14: #line 61 "quote_calc4.y" { yyval = - yystack.l_mark[0]; } #line 1258 "quote_calc4.tab.c" break; case 15: #line 63 "quote_calc4.y" { yyval = regs[yystack.l_mark[0]]; } #line 1263 "quote_calc4.tab.c" break; case 17: #line 68 "quote_calc4.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1268 "quote_calc4.tab.c" break; case 18: #line 70 "quote_calc4.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1273 "quote_calc4.tab.c" break; #line 1275 "quote_calc4.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/empty.tab.h0000644000000000000000000000013012312171121016011 0ustar rootroot#ifndef _empty__defines_h_ #define _empty__defines_h_ #endif /* _empty__defines_h_ */ byacc-20221106/test/btyacc/err_inherit3.output0000644000000000000000000000544512723664633017657 0ustar rootroot 0 $accept : declaration $end 1 $$1 : 2 $$2 : 3 declaration : class type $$1 $$2 namelist 4 | type locnamelist 5 class : GLOBAL 6 | LOCAL 7 type : REAL 8 | INTEGER 9 $$3 : 10 namelist : $$3 namelist NAME 11 | NAME 12 $$4 : 13 locnamelist : $$4 $$2 namelist state 0 $accept : . declaration $end (0) GLOBAL shift 1 LOCAL shift 2 REAL shift 3 INTEGER shift 4 . error declaration goto 5 class goto 6 type goto 7 state 1 class : GLOBAL . (5) . reduce 5 state 2 class : LOCAL . (6) . reduce 6 state 3 type : REAL . (7) . reduce 7 state 4 type : INTEGER . (8) . reduce 8 state 5 $accept : declaration . $end (0) $end accept state 6 declaration : class . type $$1 $$2 namelist (3) REAL shift 3 INTEGER shift 4 . error type goto 8 state 7 declaration : type . locnamelist (4) $$4 : . (12) . reduce 12 locnamelist goto 9 $$4 goto 10 state 8 declaration : class type . $$1 $$2 namelist (3) $$1 : . (1) . reduce 1 $$1 goto 11 state 9 declaration : type locnamelist . (4) . reduce 4 state 10 locnamelist : $$4 . $$2 namelist (13) $$2 : . (2) . reduce 2 $$2 goto 12 state 11 declaration : class type $$1 . $$2 namelist (3) $$2 : . (2) . reduce 2 $$2 goto 13 12: shift/reduce conflict (shift 14, reduce 9) on NAME state 12 locnamelist : $$4 $$2 . namelist (13) $$3 : . (9) NAME shift 14 namelist goto 15 $$3 goto 16 13: shift/reduce conflict (shift 14, reduce 9) on NAME state 13 declaration : class type $$1 $$2 . namelist (3) $$3 : . (9) NAME shift 14 namelist goto 17 $$3 goto 16 state 14 namelist : NAME . (11) . reduce 11 state 15 locnamelist : $$4 $$2 namelist . (13) . reduce 13 16: shift/reduce conflict (shift 14, reduce 9) on NAME state 16 namelist : $$3 . namelist NAME (10) $$3 : . (9) NAME shift 14 namelist goto 18 $$3 goto 16 state 17 declaration : class type $$1 $$2 namelist . (3) . reduce 3 state 18 namelist : $$3 namelist . NAME (10) NAME shift 19 . error state 19 namelist : $$3 namelist NAME . (10) . reduce 10 Rules never reduced: $$3 : (9) State 12 contains 1 shift/reduce conflict. State 13 contains 1 shift/reduce conflict. State 16 contains 1 shift/reduce conflict. 7 terminals, 10 nonterminals 14 grammar rules, 20 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 GLOBAL 3 258 LOCAL 4 259 REAL 5 260 INTEGER 6 261 NAME 7 262 $accept 8 263 declaration 9 264 namelist 10 265 locnamelist 11 266 class 12 267 type 13 268 $$1 14 269 $$2 15 270 $$3 16 271 $$4 byacc-20221106/test/btyacc/err_syntax4.tab.h0000644000000000000000000000000012314147323017142 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax22.error0000644000000000000000000000007712361053263017376 0ustar rootrootYACC: e - line 17 of "./err_syntax22.y", $2 (recur) is untyped byacc-20221106/test/btyacc/calc_code_imports.error0000644000000000000000000000000013565110447020474 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax17.error0000644000000000000000000000011412361053263017372 0ustar rootrootYACC: e - line 8 of "./err_syntax17.y", unterminated action S: { error ^ byacc-20221106/test/btyacc/stdin1.output0000644000000000000000000000000013501467273016436 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax17.output0000644000000000000000000000000012314147323017572 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax14.tab.c0000644000000000000000000000067213726503203017236 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/expr.oxout.tab.h0000644000000000000000000000070014164132002017013 0ustar rootroot#ifndef _expr_oxout__defines_h_ #define _expr_oxout__defines_h_ #define ID 257 #define CONST 258 #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 typedef union YYSTYPE { struct yyyOxAttrbs { struct yyyStackItem *yyyOxStackItem; } yyyOxAttrbs; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ extern YYSTYPE expr_oxout_lval; #endif /* _expr_oxout__defines_h_ */ byacc-20221106/test/btyacc/err_syntax7b.tab.c0000644000000000000000000000067213726503203017322 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/calc3.tab.h0000644000000000000000000000022012312171121015640 0ustar rootroot#ifndef _calc3__defines_h_ #define _calc3__defines_h_ #define DIGIT 257 #define LETTER 258 #define UMINUS 259 #endif /* _calc3__defines_h_ */ byacc-20221106/test/btyacc/err_syntax15.output0000644000000000000000000000000012314147323017570 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax21.output0000644000000000000000000000000012314147323017565 0ustar rootrootbyacc-20221106/test/btyacc/quote_calc2.output0000644000000000000000000002713212312171122017434 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr "ADD" expr 8 | expr "SUB" expr 9 | expr "MUL" expr 10 | expr "DIV" expr 11 | expr "MOD" expr 12 | expr "AND" expr 13 | expr '|' expr 14 | "SUB" expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 "SUB" shift 3 DIGIT shift 4 LETTER shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 expr : "SUB" . expr (14) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 12 number goto 9 state 4 number : DIGIT . (17) . reduce 17 state 5 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 13 "ADD" reduce 15 "SUB" reduce 15 "MUL" reduce 15 "DIV" reduce 15 "MOD" reduce 15 "AND" reduce 15 '|' reduce 15 '\n' reduce 15 state 6 expr : '(' . expr ')' (6) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 "ADD" reduce 16 "SUB" reduce 16 "MUL" reduce 16 "DIV" reduce 16 "MOD" reduce 16 "AND" reduce 16 '|' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 expr : LETTER . (15) . reduce 15 12: shift/reduce conflict (shift 16, reduce 14) on "ADD" 12: shift/reduce conflict (shift 17, reduce 14) on "SUB" 12: shift/reduce conflict (shift 18, reduce 14) on "MUL" 12: shift/reduce conflict (shift 19, reduce 14) on "DIV" 12: shift/reduce conflict (shift 20, reduce 14) on "MOD" 12: shift/reduce conflict (shift 21, reduce 14) on "AND" state 12 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) expr : "SUB" expr . (14) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' reduce 14 '\n' reduce 14 ')' reduce 14 state 13 stat : LETTER '=' . expr (5) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 24 number goto 9 state 14 expr : '(' expr . ')' (6) expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr "ADD" . expr (7) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr "SUB" . expr (8) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr "MUL" . expr (9) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr "DIV" . expr (10) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr "MOD" . expr (11) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr "AND" . expr (12) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '|' . expr (13) "SUB" shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 26: shift/reduce conflict (shift 16, reduce 7) on "ADD" 26: shift/reduce conflict (shift 17, reduce 7) on "SUB" 26: shift/reduce conflict (shift 18, reduce 7) on "MUL" 26: shift/reduce conflict (shift 19, reduce 7) on "DIV" 26: shift/reduce conflict (shift 20, reduce 7) on "MOD" 26: shift/reduce conflict (shift 21, reduce 7) on "AND" 26: shift/reduce conflict (shift 22, reduce 7) on '|' state 26 expr : expr . "ADD" expr (7) expr : expr "ADD" expr . (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 7 ')' reduce 7 27: shift/reduce conflict (shift 16, reduce 8) on "ADD" 27: shift/reduce conflict (shift 17, reduce 8) on "SUB" 27: shift/reduce conflict (shift 18, reduce 8) on "MUL" 27: shift/reduce conflict (shift 19, reduce 8) on "DIV" 27: shift/reduce conflict (shift 20, reduce 8) on "MOD" 27: shift/reduce conflict (shift 21, reduce 8) on "AND" 27: shift/reduce conflict (shift 22, reduce 8) on '|' state 27 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr "SUB" expr . (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 8 ')' reduce 8 28: shift/reduce conflict (shift 16, reduce 9) on "ADD" 28: shift/reduce conflict (shift 17, reduce 9) on "SUB" 28: shift/reduce conflict (shift 18, reduce 9) on "MUL" 28: shift/reduce conflict (shift 19, reduce 9) on "DIV" 28: shift/reduce conflict (shift 20, reduce 9) on "MOD" 28: shift/reduce conflict (shift 21, reduce 9) on "AND" 28: shift/reduce conflict (shift 22, reduce 9) on '|' state 28 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr "MUL" expr . (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 9 ')' reduce 9 29: shift/reduce conflict (shift 16, reduce 10) on "ADD" 29: shift/reduce conflict (shift 17, reduce 10) on "SUB" 29: shift/reduce conflict (shift 18, reduce 10) on "MUL" 29: shift/reduce conflict (shift 19, reduce 10) on "DIV" 29: shift/reduce conflict (shift 20, reduce 10) on "MOD" 29: shift/reduce conflict (shift 21, reduce 10) on "AND" 29: shift/reduce conflict (shift 22, reduce 10) on '|' state 29 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr "DIV" expr . (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 10 ')' reduce 10 30: shift/reduce conflict (shift 16, reduce 11) on "ADD" 30: shift/reduce conflict (shift 17, reduce 11) on "SUB" 30: shift/reduce conflict (shift 18, reduce 11) on "MUL" 30: shift/reduce conflict (shift 19, reduce 11) on "DIV" 30: shift/reduce conflict (shift 20, reduce 11) on "MOD" 30: shift/reduce conflict (shift 21, reduce 11) on "AND" 30: shift/reduce conflict (shift 22, reduce 11) on '|' state 30 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr "MOD" expr . (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 11 ')' reduce 11 31: shift/reduce conflict (shift 16, reduce 12) on "ADD" 31: shift/reduce conflict (shift 17, reduce 12) on "SUB" 31: shift/reduce conflict (shift 18, reduce 12) on "MUL" 31: shift/reduce conflict (shift 19, reduce 12) on "DIV" 31: shift/reduce conflict (shift 20, reduce 12) on "MOD" 31: shift/reduce conflict (shift 21, reduce 12) on "AND" 31: shift/reduce conflict (shift 22, reduce 12) on '|' state 31 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr "AND" expr . (12) expr : expr . '|' expr (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' shift 22 '\n' reduce 12 ')' reduce 12 32: shift/reduce conflict (shift 16, reduce 13) on "ADD" 32: shift/reduce conflict (shift 17, reduce 13) on "SUB" 32: shift/reduce conflict (shift 18, reduce 13) on "MUL" 32: shift/reduce conflict (shift 19, reduce 13) on "DIV" 32: shift/reduce conflict (shift 20, reduce 13) on "MOD" 32: shift/reduce conflict (shift 21, reduce 13) on "AND" state 32 expr : expr . "ADD" expr (7) expr : expr . "SUB" expr (8) expr : expr . "MUL" expr (9) expr : expr . "DIV" expr (10) expr : expr . "MOD" expr (11) expr : expr . "AND" expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) "ADD" shift 16 "SUB" shift 17 "MUL" shift 18 "DIV" shift 19 "MOD" shift 20 "AND" shift 21 '|' reduce 13 '\n' reduce 13 ')' reduce 13 State 12 contains 6 shift/reduce conflicts. State 26 contains 7 shift/reduce conflicts. State 27 contains 7 shift/reduce conflicts. State 28 contains 7 shift/reduce conflicts. State 29 contains 7 shift/reduce conflicts. State 30 contains 7 shift/reduce conflicts. State 31 contains 7 shift/reduce conflicts. State 32 contains 6 shift/reduce conflicts. 28 terminals, 5 nonterminals 19 grammar rules, 33 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 OP_ADD 3 258 "ADD" 4 259 OP_SUB 5 260 "SUB" 6 261 OP_MUL 7 262 "MUL" 8 263 OP_DIV 9 264 "DIV" 10 265 OP_MOD 11 266 "MOD" 12 267 OP_AND 13 268 "AND" 14 269 DIGIT 15 270 LETTER 16 124 '|' 17 38 '&' 18 43 '+' 19 45 '-' 20 42 '*' 21 47 '/' 22 37 '%' 23 271 UMINUS 24 10 '\n' 25 61 '=' 26 40 '(' 27 41 ')' 28 272 $accept 29 273 list 30 274 stat 31 275 expr 32 276 number byacc-20221106/test/btyacc/calc_code_provides.tab.c0000644000000000000000000013671014104035275020505 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse calc_code_provides_parse #endif /* yyparse */ #ifndef yylex #define yylex calc_code_provides_lex #endif /* yylex */ #ifndef yyerror #define yyerror calc_code_provides_error #endif /* yyerror */ #ifndef yychar #define yychar calc_code_provides_char #endif /* yychar */ #ifndef yyval #define yyval calc_code_provides_val #endif /* yyval */ #ifndef yylval #define yylval calc_code_provides_lval #endif /* yylval */ #ifndef yydebug #define yydebug calc_code_provides_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs calc_code_provides_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag calc_code_provides_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs calc_code_provides_lhs #endif /* yylhs */ #ifndef yylen #define yylen calc_code_provides_len #endif /* yylen */ #ifndef yydefred #define yydefred calc_code_provides_defred #endif /* yydefred */ #ifndef yystos #define yystos calc_code_provides_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto calc_code_provides_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex calc_code_provides_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex calc_code_provides_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex calc_code_provides_gindex #endif /* yygindex */ #ifndef yytable #define yytable calc_code_provides_table #endif /* yytable */ #ifndef yycheck #define yycheck calc_code_provides_check #endif /* yycheck */ #ifndef yyname #define yyname calc_code_provides_name #endif /* yyname */ #ifndef yyrule #define yyrule calc_code_provides_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex calc_code_provides_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable calc_code_provides_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "calc_code_provides_" #define YYPURE 0 #line 5 "calc_code_provides.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 131 "calc_code_provides.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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT calc_code_provides_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT calc_code_provides_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT calc_code_provides_defred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT calc_code_provides_stos[] = { 0, 261, 256, 257, 258, 45, 40, 262, 263, 264, 10, 61, 258, 263, 263, 10, 124, 38, 43, 45, 42, 47, 37, 257, 263, 41, 263, 263, 263, 263, 263, 263, 263, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT calc_code_provides_dgoto[] = { 1, 7, 8, 9, }; static const YYINT calc_code_provides_sindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT calc_code_provides_rindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; #if YYBTYACC static const YYINT calc_code_provides_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT calc_code_provides_gindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT calc_code_provides_table[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT calc_code_provides_check[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #if YYBTYACC static const YYINT calc_code_provides_ctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const calc_code_provides_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number", "illegal-symbol", }; static const char *const calc_code_provides_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ /* %code "provides" block start */ #line 1 "calc_code_provides.y" /* CODE-PROVIDES */ #line 2 "calc_code_provides.y" /* CODE-PROVIDES2 */ /* %code "provides" block end */ #line 476 "calc_code_provides.tab.c" #line 69 "calc_code_provides.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 519 "calc_code_provides.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 31 "calc_code_provides.y" { yyerrok ; } #line 1192 "calc_code_provides.tab.c" break; case 4: #line 35 "calc_code_provides.y" { printf("%d\n",yystack.l_mark[0]);} #line 1197 "calc_code_provides.tab.c" break; case 5: #line 37 "calc_code_provides.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1202 "calc_code_provides.tab.c" break; case 6: #line 41 "calc_code_provides.y" { yyval = yystack.l_mark[-1]; } #line 1207 "calc_code_provides.tab.c" break; case 7: #line 43 "calc_code_provides.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1212 "calc_code_provides.tab.c" break; case 8: #line 45 "calc_code_provides.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1217 "calc_code_provides.tab.c" break; case 9: #line 47 "calc_code_provides.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1222 "calc_code_provides.tab.c" break; case 10: #line 49 "calc_code_provides.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1227 "calc_code_provides.tab.c" break; case 11: #line 51 "calc_code_provides.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1232 "calc_code_provides.tab.c" break; case 12: #line 53 "calc_code_provides.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1237 "calc_code_provides.tab.c" break; case 13: #line 55 "calc_code_provides.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1242 "calc_code_provides.tab.c" break; case 14: #line 57 "calc_code_provides.y" { yyval = - yystack.l_mark[0]; } #line 1247 "calc_code_provides.tab.c" break; case 15: #line 59 "calc_code_provides.y" { yyval = regs[yystack.l_mark[0]]; } #line 1252 "calc_code_provides.tab.c" break; case 17: #line 64 "calc_code_provides.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1257 "calc_code_provides.tab.c" break; case 18: #line 66 "calc_code_provides.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1262 "calc_code_provides.tab.c" break; #line 1264 "calc_code_provides.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/help.error0000644000000000000000000000236014102077543015763 0ustar rootrootYACC: error message Usage: YACC [options] filename Options: -b file_prefix set filename prefix (default "y.") -B create a backtracking parser -d write definitions (.tab.h) -h print this help-message -H defines_file write definitions to defines_file -i write interface (y.tab.i) -g write a graphical description -l suppress #line directives -L enable position processing, e.g., "%locations" -o output_file (default ".tab.c") -p symbol_prefix set symbol prefix (default "yy") -P create a reentrant parser, e.g., "%pure-parser" -r produce separate code and table files (y.code.c) -s suppress #define's for quoted names in %token lines -t add debugging support -v write description (y.output) -V show version information and exit Long options: --defines -H --file-prefix -b --graph -g --help -h --name-prefix -p --no-lines -l --output -o --version -V byacc-20221106/test/btyacc/rename_debug.h0000644000000000000000000000014212321224351016532 0ustar rootroot#ifndef _yy_defines_h_ #define _yy_defines_h_ #define YYERRCODE 256 #endif /* _yy_defines_h_ */ byacc-20221106/test/btyacc/err_inherit1.output0000644000000000000000000000000012315230211017605 0ustar rootrootbyacc-20221106/test/btyacc/defines1.calc.c0000644000000000000000000013156014104035275016526 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #define YYPREFIX "yy" #define YYPURE 0 #line 2 "calc.y" # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); #line 34 "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 #if !(defined(yylex) || defined(YYSTATE)) int YYLEX_DECL(); #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 DIGIT 257 #define LETTER 258 #define UMINUS 259 #define YYERRCODE 256 typedef int YYINT; static const YYINT yylhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT yylen[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT yydefred[] = { 1, 0, 0, 17, 0, 0, 0, 0, 0, 0, 3, 0, 15, 14, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 9, 10, 11, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT yystos[] = { 0, 261, 256, 257, 258, 45, 40, 262, 263, 264, 10, 61, 258, 263, 263, 10, 124, 38, 43, 45, 42, 47, 37, 257, 263, 41, 263, 263, 263, 263, 263, 263, 263, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT yydgoto[] = { 1, 7, 8, 9, }; static const YYINT yysindex[] = { 0, -40, -7, 0, -55, -38, -38, 1, -29, -247, 0, -38, 0, 0, 22, 0, -38, -38, -38, -38, -38, -38, -38, 0, -29, 0, 51, 60, -20, -20, 0, 0, 0, }; static const YYINT yyrindex[] = { 0, 0, 0, 0, 2, 0, 0, 0, 9, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, -6, 14, 5, 13, 0, 0, 0, }; #if YYBTYACC static const YYINT yycindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT yygindex[] = { 0, 0, 65, 0, }; #define YYTABLESIZE 220 static const YYINT yytable[] = { 6, 16, 6, 10, 13, 5, 11, 5, 22, 17, 23, 15, 15, 20, 18, 7, 19, 22, 21, 4, 5, 0, 20, 8, 12, 0, 0, 21, 16, 16, 0, 0, 16, 16, 16, 13, 16, 0, 16, 15, 15, 0, 0, 7, 15, 15, 7, 15, 7, 15, 7, 8, 12, 0, 8, 12, 8, 0, 8, 22, 17, 0, 0, 25, 20, 18, 0, 19, 0, 21, 13, 14, 0, 0, 0, 0, 24, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 22, 17, 0, 0, 0, 20, 18, 16, 19, 22, 21, 0, 0, 0, 20, 18, 0, 19, 0, 21, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 8, 12, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 3, 12, }; static const YYINT yycheck[] = { 40, 10, 40, 10, 10, 45, 61, 45, 37, 38, 257, 10, 10, 42, 43, 10, 45, 37, 47, 10, 10, -1, 42, 10, 10, -1, -1, 47, 37, 38, -1, -1, 41, 42, 43, 41, 45, -1, 47, 37, 38, -1, -1, 38, 42, 43, 41, 45, 43, 47, 45, 38, 38, -1, 41, 41, 43, -1, 45, 37, 38, -1, -1, 41, 42, 43, -1, 45, -1, 47, 5, 6, -1, -1, -1, -1, 11, -1, -1, -1, -1, 16, 17, 18, 19, 20, 21, 22, 37, 38, -1, -1, -1, 42, 43, 124, 45, 37, 47, -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, 257, 258, 257, 258, }; #if YYBTYACC static const YYINT yyctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 259 #define YYUNDFTOKEN 265 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const yyname[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number", "illegal-symbol", }; static const char *const yyrule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : expr '%' expr", "expr : expr '&' expr", "expr : expr '|' expr", "expr : '-' expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 66 "calc.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 418 "y.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 28 "calc.y" { yyerrok ; } #line 1091 "y.tab.c" break; case 4: #line 32 "calc.y" { printf("%d\n",yystack.l_mark[0]);} #line 1096 "y.tab.c" break; case 5: #line 34 "calc.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1101 "y.tab.c" break; case 6: #line 38 "calc.y" { yyval = yystack.l_mark[-1]; } #line 1106 "y.tab.c" break; case 7: #line 40 "calc.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1111 "y.tab.c" break; case 8: #line 42 "calc.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1116 "y.tab.c" break; case 9: #line 44 "calc.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1121 "y.tab.c" break; case 10: #line 46 "calc.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1126 "y.tab.c" break; case 11: #line 48 "calc.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1131 "y.tab.c" break; case 12: #line 50 "calc.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1136 "y.tab.c" break; case 13: #line 52 "calc.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1141 "y.tab.c" break; case 14: #line 54 "calc.y" { yyval = - yystack.l_mark[0]; } #line 1146 "y.tab.c" break; case 15: #line 56 "calc.y" { yyval = regs[yystack.l_mark[0]]; } #line 1151 "y.tab.c" break; case 17: #line 61 "calc.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1156 "y.tab.c" break; case 18: #line 63 "calc.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1161 "y.tab.c" break; #line 1163 "y.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/grammar.dot0000644000000000000000000027343212313700136016121 0ustar rootrootdigraph test-grammar { edge [fontsize=10]; node [shape=box,fontsize=10]; orientation=landscape; rankdir=LR; /* margin=0.2; page="8.27,11.69"; // for A4 printing ratio=auto; */ q0 [label="0:\l $accept -> . program $end\l program -> . { $end }\l program -> . translation_unit\l translation_unit -> . external_declaration\l translation_unit -> . translation_unit external_declaration\l external_declaration -> . declaration\l external_declaration -> . function_definition\l external_declaration -> . ';'\l external_declaration -> . linkage_specification\l external_declaration -> . T_ASM T_ASMARG ';'\l external_declaration -> . error T_MATCHRBRACE\l external_declaration -> . error ';'\l linkage_specification -> . T_EXTERN T_STRING_LITERAL braces\l linkage_specification -> . T_EXTERN T_STRING_LITERAL declaration\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l function_definition -> . decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l function_definition -> . declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; q1 [label="1:\l external_declaration -> error . T_MATCHRBRACE\l external_declaration -> error . ';'\l"]; q2 [label="2:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> '(' . declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; q3 [label="3:\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l pointer -> '*' . opt_type_qualifiers\l pointer -> '*' . opt_type_qualifiers pointer\l opt_type_qualifiers -> . { ')' ',' T_BRACKETS T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l opt_type_qualifiers -> . type_qualifier_list\l type_qualifier_list -> . type_qualifier\l type_qualifier_list -> . type_qualifier_list type_qualifier\l"]; q4 [label="4:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l identifier_or_ref -> '&' . any_id\l"]; q5 [label="5:\l any_id -> T_IDENTIFIER . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q6 [label="6:\l type_specifier -> T_TYPEDEF_NAME . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l any_id -> T_TYPEDEF_NAME . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; q7 [label="7:\l type_qualifier -> T_DEFINE_NAME . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q8 [label="8:\l storage_class -> T_AUTO . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q9 [label="9:\l linkage_specification -> T_EXTERN . T_STRING_LITERAL braces\l linkage_specification -> T_EXTERN . T_STRING_LITERAL declaration\l storage_class -> T_EXTERN . { ';' T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q10 [label="10:\l storage_class -> T_REGISTER . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q11 [label="11:\l storage_class -> T_STATIC . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q12 [label="12:\l any_typedef -> T_TYPEDEF . { T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l"]; q13 [label="13:\l storage_class -> T_INLINE . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q14 [label="14:\l any_typedef -> T_EXTENSION . T_TYPEDEF\l storage_class -> T_EXTENSION . { ';' T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q15 [label="15:\l type_specifier -> T_CHAR . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q16 [label="16:\l type_specifier -> T_DOUBLE . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q17 [label="17:\l type_specifier -> T_FLOAT . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q18 [label="18:\l type_specifier -> T_INT . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q19 [label="19:\l type_specifier -> T_VOID . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q20 [label="20:\l type_specifier -> T_LONG . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q21 [label="21:\l type_specifier -> T_SHORT . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q22 [label="22:\l type_specifier -> T_SIGNED . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q23 [label="23:\l type_specifier -> T_UNSIGNED . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q24 [label="24:\l enumeration -> T_ENUM . { T_LBRACE T_TYPEDEF_NAME T_IDENTIFIER }\l"]; q25 [label="25:\l struct_or_union -> T_STRUCT . { T_LBRACE T_TYPEDEF_NAME T_IDENTIFIER }\l"]; q26 [label="26:\l struct_or_union -> T_UNION . { T_LBRACE T_TYPEDEF_NAME T_IDENTIFIER }\l"]; q27 [label="27:\l type_specifier -> T_Bool . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q28 [label="28:\l type_specifier -> T_Complex . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q29 [label="29:\l type_specifier -> T_Imaginary . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q30 [label="30:\l type_qualifier -> T_TYPE_QUALIFIER . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q31 [label="31:\l external_declaration -> T_ASM . T_ASMARG ';'\l"]; q32 [label="32:\l external_declaration -> ';' . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q33 [label="33:\l $accept -> program . $end\l"]; q34 [label="34:\l declaration -> decl_specifiers . ';'\l declaration -> decl_specifiers . init_declarator_list ';'\l function_definition -> decl_specifiers . declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l decl_specifiers -> decl_specifiers . decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l init_declarator_list -> . init_declarator\l init_declarator_list -> . init_declarator_list ',' init_declarator\l init_declarator -> . declarator\l init_declarator -> . declarator '=' $$5 T_INITIALIZER\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; q35 [label="35:\l decl_specifiers -> decl_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q36 [label="36:\l decl_specifier -> storage_class . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q37 [label="37:\l decl_specifier -> type_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q38 [label="38:\l decl_specifier -> type_qualifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q39 [label="39:\l type_specifier -> struct_or_union_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q40 [label="40:\l type_specifier -> enum_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q41 [label="41:\l $$4 -> . { T_VA_DCL T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l function_definition -> declarator . $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE\l"]; q42 [label="42:\l declarator -> direct_declarator . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l direct_declarator -> direct_declarator . T_BRACKETS\l direct_declarator -> direct_declarator . '(' parameter_type_list ')'\l direct_declarator -> direct_declarator . '(' opt_identifier_list ')'\l"]; q43 [label="43:\l braces -> . T_LBRACE T_MATCHRBRACE\l struct_or_union_specifier -> struct_or_union . any_id braces\l struct_or_union_specifier -> struct_or_union . braces\l struct_or_union_specifier -> struct_or_union . any_id\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l"]; q44 [label="44:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> pointer . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; q45 [label="45:\l identifier_or_ref -> any_id . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; q46 [label="46:\l direct_declarator -> identifier_or_ref . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; q47 [label="47:\l braces -> . T_LBRACE T_MATCHRBRACE\l enum_specifier -> enumeration . any_id braces\l enum_specifier -> enumeration . braces\l enum_specifier -> enumeration . any_id\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l"]; q48 [label="48:\l program -> translation_unit . { $end }\l translation_unit -> translation_unit . external_declaration\l external_declaration -> . declaration\l external_declaration -> . function_definition\l external_declaration -> . ';'\l external_declaration -> . linkage_specification\l external_declaration -> . T_ASM T_ASMARG ';'\l external_declaration -> . error T_MATCHRBRACE\l external_declaration -> . error ';'\l linkage_specification -> . T_EXTERN T_STRING_LITERAL braces\l linkage_specification -> . T_EXTERN T_STRING_LITERAL declaration\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l function_definition -> . decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l function_definition -> . declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; q49 [label="49:\l translation_unit -> external_declaration . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q50 [label="50:\l external_declaration -> declaration . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q51 [label="51:\l external_declaration -> function_definition . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q52 [label="52:\l external_declaration -> linkage_specification . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q53 [label="53:\l declaration -> any_typedef . decl_specifiers $$1 opt_declarator_list ';'\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"]; q54 [label="54:\l external_declaration -> error T_MATCHRBRACE . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q55 [label="55:\l external_declaration -> error ';' . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q56 [label="56:\l any_id -> T_TYPEDEF_NAME . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q57 [label="57:\l direct_declarator -> '(' declarator . ')'\l"]; q58 [label="58:\l type_qualifier_list -> type_qualifier . { ')' ',' T_BRACKETS T_TYPE_QUALIFIER T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q59 [label="59:\l pointer -> . '*' opt_type_qualifiers\l pointer -> '*' opt_type_qualifiers . { ')' ',' T_BRACKETS T_TYPEDEF_NAME T_IDENTIFIER '&' '(' }\l pointer -> . '*' opt_type_qualifiers pointer\l pointer -> '*' opt_type_qualifiers . pointer\l"]; q60 [label="60:\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l opt_type_qualifiers -> type_qualifier_list . { ')' ',' T_BRACKETS T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l type_qualifier_list -> type_qualifier_list . type_qualifier\l"]; q61 [label="61:\l identifier_or_ref -> '&' any_id . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; q62 [label="62:\l braces -> . T_LBRACE T_MATCHRBRACE\l linkage_specification -> T_EXTERN T_STRING_LITERAL . braces\l linkage_specification -> T_EXTERN T_STRING_LITERAL . declaration\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"]; q63 [label="63:\l any_typedef -> T_EXTENSION T_TYPEDEF . { T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l"]; q64 [label="64:\l external_declaration -> T_ASM T_ASMARG . ';'\l"]; q65 [label="65:\l storage_class -> T_EXTERN . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q66 [label="66:\l storage_class -> T_EXTENSION . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q67 [label="67:\l declaration -> decl_specifiers ';' . { ';' T_ASM T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q68 [label="68:\l decl_specifiers -> decl_specifiers decl_specifier . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q69 [label="69:\l declaration -> decl_specifiers init_declarator_list . ';'\l init_declarator_list -> init_declarator_list . ',' init_declarator\l"]; q70 [label="70:\l init_declarator_list -> init_declarator . { ',' ';' }\l"]; q71 [label="71:\l $$2 -> . { T_VA_DCL T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l function_definition -> decl_specifiers declarator . $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l init_declarator -> declarator . { ',' ';' }\l init_declarator -> declarator . '=' $$5 T_INITIALIZER\l"]; q72 [label="72:\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l function_definition -> declarator $$4 . opt_declaration_list T_LBRACE T_MATCHRBRACE\l opt_declaration_list -> . { T_LBRACE }\l opt_declaration_list -> . T_VA_DCL\l opt_declaration_list -> . declaration_list\l declaration_list -> . declaration\l declaration_list -> . declaration_list declaration\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"]; q73 [label="73:\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l direct_declarator -> direct_declarator '(' . parameter_type_list ')'\l direct_declarator -> direct_declarator '(' . opt_identifier_list ')'\l parameter_type_list -> . parameter_list\l parameter_type_list -> . parameter_list ',' T_ELLIPSIS\l parameter_list -> . parameter_declaration\l parameter_list -> . parameter_list ',' parameter_declaration\l parameter_declaration -> . decl_specifiers declarator\l parameter_declaration -> . decl_specifiers abs_declarator\l parameter_declaration -> . decl_specifiers\l opt_identifier_list -> . { ')' }\l opt_identifier_list -> . identifier_list\l identifier_list -> . any_id\l identifier_list -> . identifier_list ',' any_id\l"]; q74 [label="74:\l direct_declarator -> direct_declarator T_BRACKETS . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; q75 [label="75:\l braces -> T_LBRACE . T_MATCHRBRACE\l"]; q76 [label="76:\l braces -> . T_LBRACE T_MATCHRBRACE\l struct_or_union_specifier -> struct_or_union any_id . braces\l struct_or_union_specifier -> struct_or_union any_id . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q77 [label="77:\l struct_or_union_specifier -> struct_or_union braces . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q78 [label="78:\l declarator -> pointer direct_declarator . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l direct_declarator -> direct_declarator . T_BRACKETS\l direct_declarator -> direct_declarator . '(' parameter_type_list ')'\l direct_declarator -> direct_declarator . '(' opt_identifier_list ')'\l"]; q79 [label="79:\l braces -> . T_LBRACE T_MATCHRBRACE\l enum_specifier -> enumeration any_id . braces\l enum_specifier -> enumeration any_id . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q80 [label="80:\l enum_specifier -> enumeration braces . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q81 [label="81:\l translation_unit -> translation_unit external_declaration . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q82 [label="82:\l type_specifier -> T_TYPEDEF_NAME . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q83 [label="83:\l $$1 -> . { ';' T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l declaration -> any_typedef decl_specifiers . $$1 opt_declarator_list ';'\l decl_specifiers -> decl_specifiers . decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"]; q84 [label="84:\l direct_declarator -> '(' declarator ')' . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; q85 [label="85:\l pointer -> '*' opt_type_qualifiers pointer . { ')' ',' T_BRACKETS T_TYPEDEF_NAME T_IDENTIFIER '&' '(' }\l"]; q86 [label="86:\l type_qualifier_list -> type_qualifier_list type_qualifier . { ')' ',' T_BRACKETS T_TYPE_QUALIFIER T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q87 [label="87:\l declaration -> decl_specifiers . ';'\l declaration -> decl_specifiers . init_declarator_list ';'\l decl_specifiers -> decl_specifiers . decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l init_declarator_list -> . init_declarator\l init_declarator_list -> . init_declarator_list ',' init_declarator\l init_declarator -> . declarator\l init_declarator -> . declarator '=' $$5 T_INITIALIZER\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; q88 [label="88:\l linkage_specification -> T_EXTERN T_STRING_LITERAL declaration . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q89 [label="89:\l linkage_specification -> T_EXTERN T_STRING_LITERAL braces . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q90 [label="90:\l external_declaration -> T_ASM T_ASMARG ';' . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q91 [label="91:\l declaration -> decl_specifiers init_declarator_list ';' . { ';' T_ASM T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q92 [label="92:\l init_declarator_list -> init_declarator_list ',' . init_declarator\l init_declarator -> . declarator\l init_declarator -> . declarator '=' $$5 T_INITIALIZER\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; q93 [label="93:\l $$5 -> . { T_INITIALIZER }\l init_declarator -> declarator '=' . $$5 T_INITIALIZER\l"]; q94 [label="94:\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l function_definition -> decl_specifiers declarator $$2 . opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE\l opt_declaration_list -> . { T_LBRACE }\l opt_declaration_list -> . T_VA_DCL\l opt_declaration_list -> . declaration_list\l declaration_list -> . declaration\l declaration_list -> . declaration_list declaration\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"]; q95 [label="95:\l opt_declaration_list -> T_VA_DCL . { T_LBRACE }\l"]; q96 [label="96:\l declaration_list -> declaration . { T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l"]; q97 [label="97:\l function_definition -> declarator $$4 opt_declaration_list . T_LBRACE T_MATCHRBRACE\l"]; q98 [label="98:\l declaration -> . decl_specifiers ';'\l declaration -> . decl_specifiers init_declarator_list ';'\l declaration -> . any_typedef decl_specifiers $$1 opt_declarator_list ';'\l any_typedef -> . T_EXTENSION T_TYPEDEF\l any_typedef -> . T_TYPEDEF\l opt_declaration_list -> declaration_list . { T_LBRACE }\l declaration_list -> declaration_list . declaration\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l"]; q99 [label="99:\l decl_specifiers -> decl_specifiers . decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l parameter_declaration -> decl_specifiers . declarator\l parameter_declaration -> decl_specifiers . abs_declarator\l parameter_declaration -> decl_specifiers . { ')' ',' }\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l abs_declarator -> . pointer\l abs_declarator -> . pointer direct_abs_declarator\l abs_declarator -> . direct_abs_declarator\l direct_abs_declarator -> . '(' abs_declarator ')'\l direct_abs_declarator -> . direct_abs_declarator T_BRACKETS\l direct_abs_declarator -> . T_BRACKETS\l direct_abs_declarator -> . direct_abs_declarator '(' parameter_type_list ')'\l direct_abs_declarator -> . direct_abs_declarator '(' ')'\l direct_abs_declarator -> . '(' parameter_type_list ')'\l direct_abs_declarator -> . '(' ')'\l"]; q100 [label="100:\l direct_declarator -> direct_declarator '(' parameter_type_list . ')'\l"]; q101 [label="101:\l parameter_type_list -> parameter_list . { ')' }\l parameter_type_list -> parameter_list . ',' T_ELLIPSIS\l parameter_list -> parameter_list . ',' parameter_declaration\l"]; q102 [label="102:\l parameter_list -> parameter_declaration . { ')' ',' }\l"]; q103 [label="103:\l direct_declarator -> direct_declarator '(' opt_identifier_list . ')'\l"]; q104 [label="104:\l opt_identifier_list -> identifier_list . { ')' }\l identifier_list -> identifier_list . ',' any_id\l"]; q105 [label="105:\l identifier_list -> any_id . { ')' ',' }\l"]; q106 [label="106:\l braces -> T_LBRACE T_MATCHRBRACE . { ')' ',' ';' T_ASM T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q107 [label="107:\l struct_or_union_specifier -> struct_or_union any_id braces . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q108 [label="108:\l enum_specifier -> enumeration any_id braces . { ')' ',' ';' T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' }\l"]; q109 [label="109:\l declaration -> any_typedef decl_specifiers $$1 . opt_declarator_list ';'\l opt_declarator_list -> . { ';' }\l opt_declarator_list -> . declarator_list\l declarator_list -> . declarator\l declarator_list -> . declarator_list ',' declarator\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; q110 [label="110:\l init_declarator -> declarator . { ',' ';' }\l init_declarator -> declarator . '=' $$5 T_INITIALIZER\l"]; q111 [label="111:\l init_declarator_list -> init_declarator_list ',' init_declarator . { ',' ';' }\l"]; q112 [label="112:\l init_declarator -> declarator '=' $$5 . T_INITIALIZER\l"]; q113 [label="113:\l function_definition -> decl_specifiers declarator $$2 opt_declaration_list . T_LBRACE $$3 T_MATCHRBRACE\l"]; q114 [label="114:\l function_definition -> declarator $$4 opt_declaration_list T_LBRACE . T_MATCHRBRACE\l"]; q115 [label="115:\l declaration_list -> declaration_list declaration . { T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME }\l"]; q116 [label="116:\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> '(' . declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l parameter_type_list -> . parameter_list\l parameter_type_list -> . parameter_list ',' T_ELLIPSIS\l parameter_list -> . parameter_declaration\l parameter_list -> . parameter_list ',' parameter_declaration\l parameter_declaration -> . decl_specifiers declarator\l parameter_declaration -> . decl_specifiers abs_declarator\l parameter_declaration -> . decl_specifiers\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l abs_declarator -> . pointer\l abs_declarator -> . pointer direct_abs_declarator\l abs_declarator -> . direct_abs_declarator\l direct_abs_declarator -> . '(' abs_declarator ')'\l direct_abs_declarator -> '(' . abs_declarator ')'\l direct_abs_declarator -> . direct_abs_declarator T_BRACKETS\l direct_abs_declarator -> . T_BRACKETS\l direct_abs_declarator -> . direct_abs_declarator '(' parameter_type_list ')'\l direct_abs_declarator -> . direct_abs_declarator '(' ')'\l direct_abs_declarator -> . '(' parameter_type_list ')'\l direct_abs_declarator -> '(' . parameter_type_list ')'\l direct_abs_declarator -> . '(' ')'\l direct_abs_declarator -> '(' . ')'\l"]; q117 [label="117:\l direct_abs_declarator -> T_BRACKETS . { ')' ',' T_BRACKETS '(' }\l"]; q118 [label="118:\l parameter_declaration -> decl_specifiers declarator . { ')' ',' }\l"]; q119 [label="119:\l parameter_declaration -> decl_specifiers abs_declarator . { ')' ',' }\l"]; q120 [label="120:\l abs_declarator -> direct_abs_declarator . { ')' ',' }\l direct_abs_declarator -> direct_abs_declarator . T_BRACKETS\l direct_abs_declarator -> direct_abs_declarator . '(' parameter_type_list ')'\l direct_abs_declarator -> direct_abs_declarator . '(' ')'\l"]; q121 [label="121:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> pointer . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l abs_declarator -> pointer . { ')' ',' }\l abs_declarator -> pointer . direct_abs_declarator\l direct_abs_declarator -> . '(' abs_declarator ')'\l direct_abs_declarator -> . direct_abs_declarator T_BRACKETS\l direct_abs_declarator -> . T_BRACKETS\l direct_abs_declarator -> . direct_abs_declarator '(' parameter_type_list ')'\l direct_abs_declarator -> . direct_abs_declarator '(' ')'\l direct_abs_declarator -> . '(' parameter_type_list ')'\l direct_abs_declarator -> . '(' ')'\l"]; q122 [label="122:\l direct_declarator -> direct_declarator '(' parameter_type_list ')' . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; q123 [label="123:\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l parameter_type_list -> parameter_list ',' . T_ELLIPSIS\l parameter_list -> parameter_list ',' . parameter_declaration\l parameter_declaration -> . decl_specifiers declarator\l parameter_declaration -> . decl_specifiers abs_declarator\l parameter_declaration -> . decl_specifiers\l"]; q124 [label="124:\l direct_declarator -> direct_declarator '(' opt_identifier_list ')' . { ')' '=' ',' ';' T_VA_DCL T_LBRACE T_BRACKETS T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME '(' }\l"]; q125 [label="125:\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l identifier_list -> identifier_list ',' . any_id\l"]; q126 [label="126:\l declarator_list -> declarator . { ',' ';' }\l"]; q127 [label="127:\l declaration -> any_typedef decl_specifiers $$1 opt_declarator_list . ';'\l"]; q128 [label="128:\l opt_declarator_list -> declarator_list . { ';' }\l declarator_list -> declarator_list . ',' declarator\l"]; q129 [label="129:\l init_declarator -> declarator '=' $$5 T_INITIALIZER . { ',' ';' }\l"]; q130 [label="130:\l $$3 -> . { T_MATCHRBRACE }\l function_definition -> decl_specifiers declarator $$2 opt_declaration_list T_LBRACE . $$3 T_MATCHRBRACE\l"]; q131 [label="131:\l function_definition -> declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q132 [label="132:\l direct_abs_declarator -> '(' ')' . { ')' ',' T_BRACKETS '(' }\l"]; q133 [label="133:\l direct_abs_declarator -> '(' abs_declarator . ')'\l"]; q134 [label="134:\l direct_abs_declarator -> '(' parameter_type_list . ')'\l"]; q135 [label="135:\l decl_specifiers -> . decl_specifier\l decl_specifiers -> . decl_specifiers decl_specifier\l decl_specifier -> . storage_class\l decl_specifier -> . type_specifier\l decl_specifier -> . type_qualifier\l storage_class -> . T_AUTO\l storage_class -> . T_EXTERN\l storage_class -> . T_REGISTER\l storage_class -> . T_STATIC\l storage_class -> . T_INLINE\l storage_class -> . T_EXTENSION\l type_specifier -> . T_CHAR\l type_specifier -> . T_DOUBLE\l type_specifier -> . T_FLOAT\l type_specifier -> . T_INT\l type_specifier -> . T_LONG\l type_specifier -> . T_SHORT\l type_specifier -> . T_SIGNED\l type_specifier -> . T_UNSIGNED\l type_specifier -> . T_VOID\l type_specifier -> . T_Bool\l type_specifier -> . T_Complex\l type_specifier -> . T_Imaginary\l type_specifier -> . T_TYPEDEF_NAME\l type_specifier -> . struct_or_union_specifier\l type_specifier -> . enum_specifier\l type_qualifier -> . T_TYPE_QUALIFIER\l type_qualifier -> . T_DEFINE_NAME\l struct_or_union_specifier -> . struct_or_union any_id braces\l struct_or_union_specifier -> . struct_or_union braces\l struct_or_union_specifier -> . struct_or_union any_id\l struct_or_union -> . T_STRUCT\l struct_or_union -> . T_UNION\l enum_specifier -> . enumeration any_id braces\l enum_specifier -> . enumeration braces\l enum_specifier -> . enumeration any_id\l enumeration -> . T_ENUM\l parameter_type_list -> . parameter_list\l parameter_type_list -> . parameter_list ',' T_ELLIPSIS\l parameter_list -> . parameter_declaration\l parameter_list -> . parameter_list ',' parameter_declaration\l parameter_declaration -> . decl_specifiers declarator\l parameter_declaration -> . decl_specifiers abs_declarator\l parameter_declaration -> . decl_specifiers\l direct_abs_declarator -> direct_abs_declarator '(' . parameter_type_list ')'\l direct_abs_declarator -> direct_abs_declarator '(' . ')'\l"]; q136 [label="136:\l direct_abs_declarator -> direct_abs_declarator T_BRACKETS . { ')' ',' T_BRACKETS '(' }\l"]; q137 [label="137:\l abs_declarator -> pointer direct_abs_declarator . { ')' ',' }\l direct_abs_declarator -> direct_abs_declarator . T_BRACKETS\l direct_abs_declarator -> direct_abs_declarator . '(' parameter_type_list ')'\l direct_abs_declarator -> direct_abs_declarator . '(' ')'\l"]; q138 [label="138:\l parameter_type_list -> parameter_list ',' T_ELLIPSIS . { ')' }\l"]; q139 [label="139:\l parameter_list -> parameter_list ',' parameter_declaration . { ')' ',' }\l"]; q140 [label="140:\l identifier_list -> identifier_list ',' any_id . { ')' ',' }\l"]; q141 [label="141:\l declaration -> any_typedef decl_specifiers $$1 opt_declarator_list ';' . { ';' T_ASM T_LBRACE T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q142 [label="142:\l declarator_list -> declarator_list ',' . declarator\l any_id -> . T_IDENTIFIER\l any_id -> . T_TYPEDEF_NAME\l declarator -> . pointer direct_declarator\l declarator -> . direct_declarator\l direct_declarator -> . identifier_or_ref\l direct_declarator -> . '(' declarator ')'\l direct_declarator -> . direct_declarator T_BRACKETS\l direct_declarator -> . direct_declarator '(' parameter_type_list ')'\l direct_declarator -> . direct_declarator '(' opt_identifier_list ')'\l pointer -> . '*' opt_type_qualifiers\l pointer -> . '*' opt_type_qualifiers pointer\l identifier_or_ref -> . any_id\l identifier_or_ref -> . '&' any_id\l"]; q143 [label="143:\l function_definition -> decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 . T_MATCHRBRACE\l"]; q144 [label="144:\l direct_abs_declarator -> '(' abs_declarator ')' . { ')' ',' T_BRACKETS '(' }\l"]; q145 [label="145:\l direct_abs_declarator -> '(' parameter_type_list ')' . { ')' ',' T_BRACKETS '(' }\l"]; q146 [label="146:\l direct_abs_declarator -> direct_abs_declarator '(' ')' . { ')' ',' T_BRACKETS '(' }\l"]; q147 [label="147:\l direct_abs_declarator -> direct_abs_declarator '(' parameter_type_list . ')'\l"]; q148 [label="148:\l declarator_list -> declarator_list ',' declarator . { ',' ';' }\l"]; q149 [label="149:\l function_definition -> decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE . { ';' T_ASM T_TYPE_QUALIFIER T_Imaginary T_Complex T_Bool T_UNION T_STRUCT T_ENUM T_UNSIGNED T_SIGNED T_SHORT T_LONG T_VOID T_INT T_FLOAT T_DOUBLE T_CHAR T_EXTENSION T_INLINE T_TYPEDEF T_STATIC T_REGISTER T_EXTERN T_AUTO T_DEFINE_NAME T_TYPEDEF_NAME T_IDENTIFIER '&' '*' '(' error $end }\l"]; q150 [label="150:\l direct_abs_declarator -> direct_abs_declarator '(' parameter_type_list ')' . { ')' ',' T_BRACKETS '(' }\l"]; q0 -> q1 [label="error"]; q0 -> q2 [label="'('"]; q0 -> q3 [label="'*'"]; q0 -> q4 [label="'&'"]; q0 -> q5 [label="T_IDENTIFIER"]; q0 -> q6 [label="T_TYPEDEF_NAME"]; q0 -> q7 [label="T_DEFINE_NAME"]; q0 -> q8 [label="T_AUTO"]; q0 -> q9 [label="T_EXTERN"]; q0 -> q10 [label="T_REGISTER"]; q0 -> q11 [label="T_STATIC"]; q0 -> q12 [label="T_TYPEDEF"]; q0 -> q13 [label="T_INLINE"]; q0 -> q14 [label="T_EXTENSION"]; q0 -> q15 [label="T_CHAR"]; q0 -> q16 [label="T_DOUBLE"]; q0 -> q17 [label="T_FLOAT"]; q0 -> q18 [label="T_INT"]; q0 -> q19 [label="T_VOID"]; q0 -> q20 [label="T_LONG"]; q0 -> q21 [label="T_SHORT"]; q0 -> q22 [label="T_SIGNED"]; q0 -> q23 [label="T_UNSIGNED"]; q0 -> q24 [label="T_ENUM"]; q0 -> q25 [label="T_STRUCT"]; q0 -> q26 [label="T_UNION"]; q0 -> q27 [label="T_Bool"]; q0 -> q28 [label="T_Complex"]; q0 -> q29 [label="T_Imaginary"]; q0 -> q30 [label="T_TYPE_QUALIFIER"]; q0 -> q31 [label="T_ASM"]; q0 -> q32 [label="';'"]; q0 -> q33 [label="program"]; q0 -> q34 [label="decl_specifiers"]; q0 -> q35 [label="decl_specifier"]; q0 -> q36 [label="storage_class"]; q0 -> q37 [label="type_specifier"]; q0 -> q38 [label="type_qualifier"]; q0 -> q39 [label="struct_or_union_specifier"]; q0 -> q40 [label="enum_specifier"]; q0 -> q41 [label="declarator"]; q0 -> q42 [label="direct_declarator"]; q0 -> q43 [label="struct_or_union"]; q0 -> q44 [label="pointer"]; q0 -> q45 [label="any_id"]; q0 -> q46 [label="identifier_or_ref"]; q0 -> q47 [label="enumeration"]; q0 -> q48 [label="translation_unit"]; q0 -> q49 [label="external_declaration"]; q0 -> q50 [label="declaration"]; q0 -> q51 [label="function_definition"]; q0 -> q52 [label="linkage_specification"]; q0 -> q53 [label="any_typedef"]; q1 -> q54 [label="T_MATCHRBRACE"]; q1 -> q55 [label="';'"]; q2 -> q2 [label="'('"]; q2 -> q3 [label="'*'"]; q2 -> q4 [label="'&'"]; q2 -> q5 [label="T_IDENTIFIER"]; q2 -> q56 [label="T_TYPEDEF_NAME"]; q2 -> q57 [label="declarator"]; q2 -> q42 [label="direct_declarator"]; q2 -> q44 [label="pointer"]; q2 -> q45 [label="any_id"]; q2 -> q46 [label="identifier_or_ref"]; q3 -> q7 [label="T_DEFINE_NAME"]; q3 -> q30 [label="T_TYPE_QUALIFIER"]; q3 -> q58 [label="type_qualifier"]; q3 -> q59 [label="opt_type_qualifiers"]; q3 -> q60 [label="type_qualifier_list"]; q4 -> q5 [label="T_IDENTIFIER"]; q4 -> q56 [label="T_TYPEDEF_NAME"]; q4 -> q61 [label="any_id"]; q9 -> q62 [label="T_STRING_LITERAL"]; q14 -> q63 [label="T_TYPEDEF"]; q31 -> q64 [label="T_ASMARG"]; q34 -> q2 [label="'('"]; q34 -> q3 [label="'*'"]; q34 -> q4 [label="'&'"]; q34 -> q5 [label="T_IDENTIFIER"]; q34 -> q6 [label="T_TYPEDEF_NAME"]; q34 -> q7 [label="T_DEFINE_NAME"]; q34 -> q8 [label="T_AUTO"]; q34 -> q65 [label="T_EXTERN"]; q34 -> q10 [label="T_REGISTER"]; q34 -> q11 [label="T_STATIC"]; q34 -> q13 [label="T_INLINE"]; q34 -> q66 [label="T_EXTENSION"]; q34 -> q15 [label="T_CHAR"]; q34 -> q16 [label="T_DOUBLE"]; q34 -> q17 [label="T_FLOAT"]; q34 -> q18 [label="T_INT"]; q34 -> q19 [label="T_VOID"]; q34 -> q20 [label="T_LONG"]; q34 -> q21 [label="T_SHORT"]; q34 -> q22 [label="T_SIGNED"]; q34 -> q23 [label="T_UNSIGNED"]; q34 -> q24 [label="T_ENUM"]; q34 -> q25 [label="T_STRUCT"]; q34 -> q26 [label="T_UNION"]; q34 -> q27 [label="T_Bool"]; q34 -> q28 [label="T_Complex"]; q34 -> q29 [label="T_Imaginary"]; q34 -> q30 [label="T_TYPE_QUALIFIER"]; q34 -> q67 [label="';'"]; q34 -> q68 [label="decl_specifier"]; q34 -> q36 [label="storage_class"]; q34 -> q37 [label="type_specifier"]; q34 -> q38 [label="type_qualifier"]; q34 -> q39 [label="struct_or_union_specifier"]; q34 -> q40 [label="enum_specifier"]; q34 -> q69 [label="init_declarator_list"]; q34 -> q70 [label="init_declarator"]; q34 -> q71 [label="declarator"]; q34 -> q42 [label="direct_declarator"]; q34 -> q43 [label="struct_or_union"]; q34 -> q44 [label="pointer"]; q34 -> q45 [label="any_id"]; q34 -> q46 [label="identifier_or_ref"]; q34 -> q47 [label="enumeration"]; q41 -> q72 [label="$$4"]; q42 -> q73 [label="'('"]; q42 -> q74 [label="T_BRACKETS"]; q43 -> q5 [label="T_IDENTIFIER"]; q43 -> q56 [label="T_TYPEDEF_NAME"]; q43 -> q75 [label="T_LBRACE"]; q43 -> q76 [label="any_id"]; q43 -> q77 [label="braces"]; q44 -> q2 [label="'('"]; q44 -> q4 [label="'&'"]; q44 -> q5 [label="T_IDENTIFIER"]; q44 -> q56 [label="T_TYPEDEF_NAME"]; q44 -> q78 [label="direct_declarator"]; q44 -> q45 [label="any_id"]; q44 -> q46 [label="identifier_or_ref"]; q47 -> q5 [label="T_IDENTIFIER"]; q47 -> q56 [label="T_TYPEDEF_NAME"]; q47 -> q75 [label="T_LBRACE"]; q47 -> q79 [label="any_id"]; q47 -> q80 [label="braces"]; q48 -> q1 [label="error"]; q48 -> q2 [label="'('"]; q48 -> q3 [label="'*'"]; q48 -> q4 [label="'&'"]; q48 -> q5 [label="T_IDENTIFIER"]; q48 -> q6 [label="T_TYPEDEF_NAME"]; q48 -> q7 [label="T_DEFINE_NAME"]; q48 -> q8 [label="T_AUTO"]; q48 -> q9 [label="T_EXTERN"]; q48 -> q10 [label="T_REGISTER"]; q48 -> q11 [label="T_STATIC"]; q48 -> q12 [label="T_TYPEDEF"]; q48 -> q13 [label="T_INLINE"]; q48 -> q14 [label="T_EXTENSION"]; q48 -> q15 [label="T_CHAR"]; q48 -> q16 [label="T_DOUBLE"]; q48 -> q17 [label="T_FLOAT"]; q48 -> q18 [label="T_INT"]; q48 -> q19 [label="T_VOID"]; q48 -> q20 [label="T_LONG"]; q48 -> q21 [label="T_SHORT"]; q48 -> q22 [label="T_SIGNED"]; q48 -> q23 [label="T_UNSIGNED"]; q48 -> q24 [label="T_ENUM"]; q48 -> q25 [label="T_STRUCT"]; q48 -> q26 [label="T_UNION"]; q48 -> q27 [label="T_Bool"]; q48 -> q28 [label="T_Complex"]; q48 -> q29 [label="T_Imaginary"]; q48 -> q30 [label="T_TYPE_QUALIFIER"]; q48 -> q31 [label="T_ASM"]; q48 -> q32 [label="';'"]; q48 -> q34 [label="decl_specifiers"]; q48 -> q35 [label="decl_specifier"]; q48 -> q36 [label="storage_class"]; q48 -> q37 [label="type_specifier"]; q48 -> q38 [label="type_qualifier"]; q48 -> q39 [label="struct_or_union_specifier"]; q48 -> q40 [label="enum_specifier"]; q48 -> q41 [label="declarator"]; q48 -> q42 [label="direct_declarator"]; q48 -> q43 [label="struct_or_union"]; q48 -> q44 [label="pointer"]; q48 -> q45 [label="any_id"]; q48 -> q46 [label="identifier_or_ref"]; q48 -> q47 [label="enumeration"]; q48 -> q81 [label="external_declaration"]; q48 -> q50 [label="declaration"]; q48 -> q51 [label="function_definition"]; q48 -> q52 [label="linkage_specification"]; q48 -> q53 [label="any_typedef"]; q53 -> q82 [label="T_TYPEDEF_NAME"]; q53 -> q7 [label="T_DEFINE_NAME"]; q53 -> q8 [label="T_AUTO"]; q53 -> q65 [label="T_EXTERN"]; q53 -> q10 [label="T_REGISTER"]; q53 -> q11 [label="T_STATIC"]; q53 -> q13 [label="T_INLINE"]; q53 -> q66 [label="T_EXTENSION"]; q53 -> q15 [label="T_CHAR"]; q53 -> q16 [label="T_DOUBLE"]; q53 -> q17 [label="T_FLOAT"]; q53 -> q18 [label="T_INT"]; q53 -> q19 [label="T_VOID"]; q53 -> q20 [label="T_LONG"]; q53 -> q21 [label="T_SHORT"]; q53 -> q22 [label="T_SIGNED"]; q53 -> q23 [label="T_UNSIGNED"]; q53 -> q24 [label="T_ENUM"]; q53 -> q25 [label="T_STRUCT"]; q53 -> q26 [label="T_UNION"]; q53 -> q27 [label="T_Bool"]; q53 -> q28 [label="T_Complex"]; q53 -> q29 [label="T_Imaginary"]; q53 -> q30 [label="T_TYPE_QUALIFIER"]; q53 -> q83 [label="decl_specifiers"]; q53 -> q35 [label="decl_specifier"]; q53 -> q36 [label="storage_class"]; q53 -> q37 [label="type_specifier"]; q53 -> q38 [label="type_qualifier"]; q53 -> q39 [label="struct_or_union_specifier"]; q53 -> q40 [label="enum_specifier"]; q53 -> q43 [label="struct_or_union"]; q53 -> q47 [label="enumeration"]; q57 -> q84 [label="')'"]; q59 -> q3 [label="'*'"]; q59 -> q85 [label="pointer"]; q60 -> q7 [label="T_DEFINE_NAME"]; q60 -> q30 [label="T_TYPE_QUALIFIER"]; q60 -> q86 [label="type_qualifier"]; q62 -> q82 [label="T_TYPEDEF_NAME"]; q62 -> q7 [label="T_DEFINE_NAME"]; q62 -> q8 [label="T_AUTO"]; q62 -> q65 [label="T_EXTERN"]; q62 -> q10 [label="T_REGISTER"]; q62 -> q11 [label="T_STATIC"]; q62 -> q12 [label="T_TYPEDEF"]; q62 -> q13 [label="T_INLINE"]; q62 -> q14 [label="T_EXTENSION"]; q62 -> q15 [label="T_CHAR"]; q62 -> q16 [label="T_DOUBLE"]; q62 -> q17 [label="T_FLOAT"]; q62 -> q18 [label="T_INT"]; q62 -> q19 [label="T_VOID"]; q62 -> q20 [label="T_LONG"]; q62 -> q21 [label="T_SHORT"]; q62 -> q22 [label="T_SIGNED"]; q62 -> q23 [label="T_UNSIGNED"]; q62 -> q24 [label="T_ENUM"]; q62 -> q25 [label="T_STRUCT"]; q62 -> q26 [label="T_UNION"]; q62 -> q27 [label="T_Bool"]; q62 -> q28 [label="T_Complex"]; q62 -> q29 [label="T_Imaginary"]; q62 -> q30 [label="T_TYPE_QUALIFIER"]; q62 -> q75 [label="T_LBRACE"]; q62 -> q87 [label="decl_specifiers"]; q62 -> q35 [label="decl_specifier"]; q62 -> q36 [label="storage_class"]; q62 -> q37 [label="type_specifier"]; q62 -> q38 [label="type_qualifier"]; q62 -> q39 [label="struct_or_union_specifier"]; q62 -> q40 [label="enum_specifier"]; q62 -> q43 [label="struct_or_union"]; q62 -> q47 [label="enumeration"]; q62 -> q88 [label="declaration"]; q62 -> q89 [label="braces"]; q62 -> q53 [label="any_typedef"]; q64 -> q90 [label="';'"]; q69 -> q91 [label="';'"]; q69 -> q92 [label="','"]; q71 -> q93 [label="'='"]; q71 -> q94 [label="$$2"]; q72 -> q82 [label="T_TYPEDEF_NAME"]; q72 -> q7 [label="T_DEFINE_NAME"]; q72 -> q8 [label="T_AUTO"]; q72 -> q65 [label="T_EXTERN"]; q72 -> q10 [label="T_REGISTER"]; q72 -> q11 [label="T_STATIC"]; q72 -> q12 [label="T_TYPEDEF"]; q72 -> q13 [label="T_INLINE"]; q72 -> q14 [label="T_EXTENSION"]; q72 -> q15 [label="T_CHAR"]; q72 -> q16 [label="T_DOUBLE"]; q72 -> q17 [label="T_FLOAT"]; q72 -> q18 [label="T_INT"]; q72 -> q19 [label="T_VOID"]; q72 -> q20 [label="T_LONG"]; q72 -> q21 [label="T_SHORT"]; q72 -> q22 [label="T_SIGNED"]; q72 -> q23 [label="T_UNSIGNED"]; q72 -> q24 [label="T_ENUM"]; q72 -> q25 [label="T_STRUCT"]; q72 -> q26 [label="T_UNION"]; q72 -> q27 [label="T_Bool"]; q72 -> q28 [label="T_Complex"]; q72 -> q29 [label="T_Imaginary"]; q72 -> q30 [label="T_TYPE_QUALIFIER"]; q72 -> q95 [label="T_VA_DCL"]; q72 -> q87 [label="decl_specifiers"]; q72 -> q35 [label="decl_specifier"]; q72 -> q36 [label="storage_class"]; q72 -> q37 [label="type_specifier"]; q72 -> q38 [label="type_qualifier"]; q72 -> q39 [label="struct_or_union_specifier"]; q72 -> q40 [label="enum_specifier"]; q72 -> q43 [label="struct_or_union"]; q72 -> q47 [label="enumeration"]; q72 -> q96 [label="declaration"]; q72 -> q53 [label="any_typedef"]; q72 -> q97 [label="opt_declaration_list"]; q72 -> q98 [label="declaration_list"]; q73 -> q5 [label="T_IDENTIFIER"]; q73 -> q6 [label="T_TYPEDEF_NAME"]; q73 -> q7 [label="T_DEFINE_NAME"]; q73 -> q8 [label="T_AUTO"]; q73 -> q65 [label="T_EXTERN"]; q73 -> q10 [label="T_REGISTER"]; q73 -> q11 [label="T_STATIC"]; q73 -> q13 [label="T_INLINE"]; q73 -> q66 [label="T_EXTENSION"]; q73 -> q15 [label="T_CHAR"]; q73 -> q16 [label="T_DOUBLE"]; q73 -> q17 [label="T_FLOAT"]; q73 -> q18 [label="T_INT"]; q73 -> q19 [label="T_VOID"]; q73 -> q20 [label="T_LONG"]; q73 -> q21 [label="T_SHORT"]; q73 -> q22 [label="T_SIGNED"]; q73 -> q23 [label="T_UNSIGNED"]; q73 -> q24 [label="T_ENUM"]; q73 -> q25 [label="T_STRUCT"]; q73 -> q26 [label="T_UNION"]; q73 -> q27 [label="T_Bool"]; q73 -> q28 [label="T_Complex"]; q73 -> q29 [label="T_Imaginary"]; q73 -> q30 [label="T_TYPE_QUALIFIER"]; q73 -> q99 [label="decl_specifiers"]; q73 -> q35 [label="decl_specifier"]; q73 -> q36 [label="storage_class"]; q73 -> q37 [label="type_specifier"]; q73 -> q38 [label="type_qualifier"]; q73 -> q39 [label="struct_or_union_specifier"]; q73 -> q40 [label="enum_specifier"]; q73 -> q100 [label="parameter_type_list"]; q73 -> q101 [label="parameter_list"]; q73 -> q102 [label="parameter_declaration"]; q73 -> q103 [label="opt_identifier_list"]; q73 -> q104 [label="identifier_list"]; q73 -> q43 [label="struct_or_union"]; q73 -> q105 [label="any_id"]; q73 -> q47 [label="enumeration"]; q75 -> q106 [label="T_MATCHRBRACE"]; q76 -> q75 [label="T_LBRACE"]; q76 -> q107 [label="braces"]; q78 -> q73 [label="'('"]; q78 -> q74 [label="T_BRACKETS"]; q79 -> q75 [label="T_LBRACE"]; q79 -> q108 [label="braces"]; q83 -> q82 [label="T_TYPEDEF_NAME"]; q83 -> q7 [label="T_DEFINE_NAME"]; q83 -> q8 [label="T_AUTO"]; q83 -> q65 [label="T_EXTERN"]; q83 -> q10 [label="T_REGISTER"]; q83 -> q11 [label="T_STATIC"]; q83 -> q13 [label="T_INLINE"]; q83 -> q66 [label="T_EXTENSION"]; q83 -> q15 [label="T_CHAR"]; q83 -> q16 [label="T_DOUBLE"]; q83 -> q17 [label="T_FLOAT"]; q83 -> q18 [label="T_INT"]; q83 -> q19 [label="T_VOID"]; q83 -> q20 [label="T_LONG"]; q83 -> q21 [label="T_SHORT"]; q83 -> q22 [label="T_SIGNED"]; q83 -> q23 [label="T_UNSIGNED"]; q83 -> q24 [label="T_ENUM"]; q83 -> q25 [label="T_STRUCT"]; q83 -> q26 [label="T_UNION"]; q83 -> q27 [label="T_Bool"]; q83 -> q28 [label="T_Complex"]; q83 -> q29 [label="T_Imaginary"]; q83 -> q30 [label="T_TYPE_QUALIFIER"]; q83 -> q68 [label="decl_specifier"]; q83 -> q36 [label="storage_class"]; q83 -> q37 [label="type_specifier"]; q83 -> q38 [label="type_qualifier"]; q83 -> q39 [label="struct_or_union_specifier"]; q83 -> q40 [label="enum_specifier"]; q83 -> q43 [label="struct_or_union"]; q83 -> q47 [label="enumeration"]; q83 -> q109 [label="$$1"]; q87 -> q2 [label="'('"]; q87 -> q3 [label="'*'"]; q87 -> q4 [label="'&'"]; q87 -> q5 [label="T_IDENTIFIER"]; q87 -> q6 [label="T_TYPEDEF_NAME"]; q87 -> q7 [label="T_DEFINE_NAME"]; q87 -> q8 [label="T_AUTO"]; q87 -> q65 [label="T_EXTERN"]; q87 -> q10 [label="T_REGISTER"]; q87 -> q11 [label="T_STATIC"]; q87 -> q13 [label="T_INLINE"]; q87 -> q66 [label="T_EXTENSION"]; q87 -> q15 [label="T_CHAR"]; q87 -> q16 [label="T_DOUBLE"]; q87 -> q17 [label="T_FLOAT"]; q87 -> q18 [label="T_INT"]; q87 -> q19 [label="T_VOID"]; q87 -> q20 [label="T_LONG"]; q87 -> q21 [label="T_SHORT"]; q87 -> q22 [label="T_SIGNED"]; q87 -> q23 [label="T_UNSIGNED"]; q87 -> q24 [label="T_ENUM"]; q87 -> q25 [label="T_STRUCT"]; q87 -> q26 [label="T_UNION"]; q87 -> q27 [label="T_Bool"]; q87 -> q28 [label="T_Complex"]; q87 -> q29 [label="T_Imaginary"]; q87 -> q30 [label="T_TYPE_QUALIFIER"]; q87 -> q67 [label="';'"]; q87 -> q68 [label="decl_specifier"]; q87 -> q36 [label="storage_class"]; q87 -> q37 [label="type_specifier"]; q87 -> q38 [label="type_qualifier"]; q87 -> q39 [label="struct_or_union_specifier"]; q87 -> q40 [label="enum_specifier"]; q87 -> q69 [label="init_declarator_list"]; q87 -> q70 [label="init_declarator"]; q87 -> q110 [label="declarator"]; q87 -> q42 [label="direct_declarator"]; q87 -> q43 [label="struct_or_union"]; q87 -> q44 [label="pointer"]; q87 -> q45 [label="any_id"]; q87 -> q46 [label="identifier_or_ref"]; q87 -> q47 [label="enumeration"]; q92 -> q2 [label="'('"]; q92 -> q3 [label="'*'"]; q92 -> q4 [label="'&'"]; q92 -> q5 [label="T_IDENTIFIER"]; q92 -> q56 [label="T_TYPEDEF_NAME"]; q92 -> q111 [label="init_declarator"]; q92 -> q110 [label="declarator"]; q92 -> q42 [label="direct_declarator"]; q92 -> q44 [label="pointer"]; q92 -> q45 [label="any_id"]; q92 -> q46 [label="identifier_or_ref"]; q93 -> q112 [label="$$5"]; q94 -> q82 [label="T_TYPEDEF_NAME"]; q94 -> q7 [label="T_DEFINE_NAME"]; q94 -> q8 [label="T_AUTO"]; q94 -> q65 [label="T_EXTERN"]; q94 -> q10 [label="T_REGISTER"]; q94 -> q11 [label="T_STATIC"]; q94 -> q12 [label="T_TYPEDEF"]; q94 -> q13 [label="T_INLINE"]; q94 -> q14 [label="T_EXTENSION"]; q94 -> q15 [label="T_CHAR"]; q94 -> q16 [label="T_DOUBLE"]; q94 -> q17 [label="T_FLOAT"]; q94 -> q18 [label="T_INT"]; q94 -> q19 [label="T_VOID"]; q94 -> q20 [label="T_LONG"]; q94 -> q21 [label="T_SHORT"]; q94 -> q22 [label="T_SIGNED"]; q94 -> q23 [label="T_UNSIGNED"]; q94 -> q24 [label="T_ENUM"]; q94 -> q25 [label="T_STRUCT"]; q94 -> q26 [label="T_UNION"]; q94 -> q27 [label="T_Bool"]; q94 -> q28 [label="T_Complex"]; q94 -> q29 [label="T_Imaginary"]; q94 -> q30 [label="T_TYPE_QUALIFIER"]; q94 -> q95 [label="T_VA_DCL"]; q94 -> q87 [label="decl_specifiers"]; q94 -> q35 [label="decl_specifier"]; q94 -> q36 [label="storage_class"]; q94 -> q37 [label="type_specifier"]; q94 -> q38 [label="type_qualifier"]; q94 -> q39 [label="struct_or_union_specifier"]; q94 -> q40 [label="enum_specifier"]; q94 -> q43 [label="struct_or_union"]; q94 -> q47 [label="enumeration"]; q94 -> q96 [label="declaration"]; q94 -> q53 [label="any_typedef"]; q94 -> q113 [label="opt_declaration_list"]; q94 -> q98 [label="declaration_list"]; q97 -> q114 [label="T_LBRACE"]; q98 -> q82 [label="T_TYPEDEF_NAME"]; q98 -> q7 [label="T_DEFINE_NAME"]; q98 -> q8 [label="T_AUTO"]; q98 -> q65 [label="T_EXTERN"]; q98 -> q10 [label="T_REGISTER"]; q98 -> q11 [label="T_STATIC"]; q98 -> q12 [label="T_TYPEDEF"]; q98 -> q13 [label="T_INLINE"]; q98 -> q14 [label="T_EXTENSION"]; q98 -> q15 [label="T_CHAR"]; q98 -> q16 [label="T_DOUBLE"]; q98 -> q17 [label="T_FLOAT"]; q98 -> q18 [label="T_INT"]; q98 -> q19 [label="T_VOID"]; q98 -> q20 [label="T_LONG"]; q98 -> q21 [label="T_SHORT"]; q98 -> q22 [label="T_SIGNED"]; q98 -> q23 [label="T_UNSIGNED"]; q98 -> q24 [label="T_ENUM"]; q98 -> q25 [label="T_STRUCT"]; q98 -> q26 [label="T_UNION"]; q98 -> q27 [label="T_Bool"]; q98 -> q28 [label="T_Complex"]; q98 -> q29 [label="T_Imaginary"]; q98 -> q30 [label="T_TYPE_QUALIFIER"]; q98 -> q87 [label="decl_specifiers"]; q98 -> q35 [label="decl_specifier"]; q98 -> q36 [label="storage_class"]; q98 -> q37 [label="type_specifier"]; q98 -> q38 [label="type_qualifier"]; q98 -> q39 [label="struct_or_union_specifier"]; q98 -> q40 [label="enum_specifier"]; q98 -> q43 [label="struct_or_union"]; q98 -> q47 [label="enumeration"]; q98 -> q115 [label="declaration"]; q98 -> q53 [label="any_typedef"]; q99 -> q116 [label="'('"]; q99 -> q3 [label="'*'"]; q99 -> q4 [label="'&'"]; q99 -> q5 [label="T_IDENTIFIER"]; q99 -> q6 [label="T_TYPEDEF_NAME"]; q99 -> q7 [label="T_DEFINE_NAME"]; q99 -> q8 [label="T_AUTO"]; q99 -> q65 [label="T_EXTERN"]; q99 -> q10 [label="T_REGISTER"]; q99 -> q11 [label="T_STATIC"]; q99 -> q13 [label="T_INLINE"]; q99 -> q66 [label="T_EXTENSION"]; q99 -> q15 [label="T_CHAR"]; q99 -> q16 [label="T_DOUBLE"]; q99 -> q17 [label="T_FLOAT"]; q99 -> q18 [label="T_INT"]; q99 -> q19 [label="T_VOID"]; q99 -> q20 [label="T_LONG"]; q99 -> q21 [label="T_SHORT"]; q99 -> q22 [label="T_SIGNED"]; q99 -> q23 [label="T_UNSIGNED"]; q99 -> q24 [label="T_ENUM"]; q99 -> q25 [label="T_STRUCT"]; q99 -> q26 [label="T_UNION"]; q99 -> q27 [label="T_Bool"]; q99 -> q28 [label="T_Complex"]; q99 -> q29 [label="T_Imaginary"]; q99 -> q30 [label="T_TYPE_QUALIFIER"]; q99 -> q117 [label="T_BRACKETS"]; q99 -> q68 [label="decl_specifier"]; q99 -> q36 [label="storage_class"]; q99 -> q37 [label="type_specifier"]; q99 -> q38 [label="type_qualifier"]; q99 -> q39 [label="struct_or_union_specifier"]; q99 -> q40 [label="enum_specifier"]; q99 -> q118 [label="declarator"]; q99 -> q42 [label="direct_declarator"]; q99 -> q119 [label="abs_declarator"]; q99 -> q120 [label="direct_abs_declarator"]; q99 -> q43 [label="struct_or_union"]; q99 -> q121 [label="pointer"]; q99 -> q45 [label="any_id"]; q99 -> q46 [label="identifier_or_ref"]; q99 -> q47 [label="enumeration"]; q100 -> q122 [label="')'"]; q101 -> q123 [label="','"]; q103 -> q124 [label="')'"]; q104 -> q125 [label="','"]; q109 -> q2 [label="'('"]; q109 -> q3 [label="'*'"]; q109 -> q4 [label="'&'"]; q109 -> q5 [label="T_IDENTIFIER"]; q109 -> q56 [label="T_TYPEDEF_NAME"]; q109 -> q126 [label="declarator"]; q109 -> q42 [label="direct_declarator"]; q109 -> q44 [label="pointer"]; q109 -> q45 [label="any_id"]; q109 -> q46 [label="identifier_or_ref"]; q109 -> q127 [label="opt_declarator_list"]; q109 -> q128 [label="declarator_list"]; q110 -> q93 [label="'='"]; q112 -> q129 [label="T_INITIALIZER"]; q113 -> q130 [label="T_LBRACE"]; q114 -> q131 [label="T_MATCHRBRACE"]; q116 -> q116 [label="'('"]; q116 -> q3 [label="'*'"]; q116 -> q4 [label="'&'"]; q116 -> q5 [label="T_IDENTIFIER"]; q116 -> q6 [label="T_TYPEDEF_NAME"]; q116 -> q7 [label="T_DEFINE_NAME"]; q116 -> q8 [label="T_AUTO"]; q116 -> q65 [label="T_EXTERN"]; q116 -> q10 [label="T_REGISTER"]; q116 -> q11 [label="T_STATIC"]; q116 -> q13 [label="T_INLINE"]; q116 -> q66 [label="T_EXTENSION"]; q116 -> q15 [label="T_CHAR"]; q116 -> q16 [label="T_DOUBLE"]; q116 -> q17 [label="T_FLOAT"]; q116 -> q18 [label="T_INT"]; q116 -> q19 [label="T_VOID"]; q116 -> q20 [label="T_LONG"]; q116 -> q21 [label="T_SHORT"]; q116 -> q22 [label="T_SIGNED"]; q116 -> q23 [label="T_UNSIGNED"]; q116 -> q24 [label="T_ENUM"]; q116 -> q25 [label="T_STRUCT"]; q116 -> q26 [label="T_UNION"]; q116 -> q27 [label="T_Bool"]; q116 -> q28 [label="T_Complex"]; q116 -> q29 [label="T_Imaginary"]; q116 -> q30 [label="T_TYPE_QUALIFIER"]; q116 -> q117 [label="T_BRACKETS"]; q116 -> q132 [label="')'"]; q116 -> q99 [label="decl_specifiers"]; q116 -> q35 [label="decl_specifier"]; q116 -> q36 [label="storage_class"]; q116 -> q37 [label="type_specifier"]; q116 -> q38 [label="type_qualifier"]; q116 -> q39 [label="struct_or_union_specifier"]; q116 -> q40 [label="enum_specifier"]; q116 -> q57 [label="declarator"]; q116 -> q42 [label="direct_declarator"]; q116 -> q133 [label="abs_declarator"]; q116 -> q120 [label="direct_abs_declarator"]; q116 -> q134 [label="parameter_type_list"]; q116 -> q101 [label="parameter_list"]; q116 -> q102 [label="parameter_declaration"]; q116 -> q43 [label="struct_or_union"]; q116 -> q121 [label="pointer"]; q116 -> q45 [label="any_id"]; q116 -> q46 [label="identifier_or_ref"]; q116 -> q47 [label="enumeration"]; q120 -> q135 [label="'('"]; q120 -> q136 [label="T_BRACKETS"]; q121 -> q116 [label="'('"]; q121 -> q4 [label="'&'"]; q121 -> q5 [label="T_IDENTIFIER"]; q121 -> q56 [label="T_TYPEDEF_NAME"]; q121 -> q117 [label="T_BRACKETS"]; q121 -> q78 [label="direct_declarator"]; q121 -> q137 [label="direct_abs_declarator"]; q121 -> q45 [label="any_id"]; q121 -> q46 [label="identifier_or_ref"]; q123 -> q82 [label="T_TYPEDEF_NAME"]; q123 -> q7 [label="T_DEFINE_NAME"]; q123 -> q8 [label="T_AUTO"]; q123 -> q65 [label="T_EXTERN"]; q123 -> q10 [label="T_REGISTER"]; q123 -> q11 [label="T_STATIC"]; q123 -> q13 [label="T_INLINE"]; q123 -> q66 [label="T_EXTENSION"]; q123 -> q15 [label="T_CHAR"]; q123 -> q16 [label="T_DOUBLE"]; q123 -> q17 [label="T_FLOAT"]; q123 -> q18 [label="T_INT"]; q123 -> q19 [label="T_VOID"]; q123 -> q20 [label="T_LONG"]; q123 -> q21 [label="T_SHORT"]; q123 -> q22 [label="T_SIGNED"]; q123 -> q23 [label="T_UNSIGNED"]; q123 -> q24 [label="T_ENUM"]; q123 -> q25 [label="T_STRUCT"]; q123 -> q26 [label="T_UNION"]; q123 -> q27 [label="T_Bool"]; q123 -> q28 [label="T_Complex"]; q123 -> q29 [label="T_Imaginary"]; q123 -> q30 [label="T_TYPE_QUALIFIER"]; q123 -> q138 [label="T_ELLIPSIS"]; q123 -> q99 [label="decl_specifiers"]; q123 -> q35 [label="decl_specifier"]; q123 -> q36 [label="storage_class"]; q123 -> q37 [label="type_specifier"]; q123 -> q38 [label="type_qualifier"]; q123 -> q39 [label="struct_or_union_specifier"]; q123 -> q40 [label="enum_specifier"]; q123 -> q139 [label="parameter_declaration"]; q123 -> q43 [label="struct_or_union"]; q123 -> q47 [label="enumeration"]; q125 -> q5 [label="T_IDENTIFIER"]; q125 -> q56 [label="T_TYPEDEF_NAME"]; q125 -> q140 [label="any_id"]; q127 -> q141 [label="';'"]; q128 -> q142 [label="','"]; q130 -> q143 [label="$$3"]; q133 -> q144 [label="')'"]; q134 -> q145 [label="')'"]; q135 -> q82 [label="T_TYPEDEF_NAME"]; q135 -> q7 [label="T_DEFINE_NAME"]; q135 -> q8 [label="T_AUTO"]; q135 -> q65 [label="T_EXTERN"]; q135 -> q10 [label="T_REGISTER"]; q135 -> q11 [label="T_STATIC"]; q135 -> q13 [label="T_INLINE"]; q135 -> q66 [label="T_EXTENSION"]; q135 -> q15 [label="T_CHAR"]; q135 -> q16 [label="T_DOUBLE"]; q135 -> q17 [label="T_FLOAT"]; q135 -> q18 [label="T_INT"]; q135 -> q19 [label="T_VOID"]; q135 -> q20 [label="T_LONG"]; q135 -> q21 [label="T_SHORT"]; q135 -> q22 [label="T_SIGNED"]; q135 -> q23 [label="T_UNSIGNED"]; q135 -> q24 [label="T_ENUM"]; q135 -> q25 [label="T_STRUCT"]; q135 -> q26 [label="T_UNION"]; q135 -> q27 [label="T_Bool"]; q135 -> q28 [label="T_Complex"]; q135 -> q29 [label="T_Imaginary"]; q135 -> q30 [label="T_TYPE_QUALIFIER"]; q135 -> q146 [label="')'"]; q135 -> q99 [label="decl_specifiers"]; q135 -> q35 [label="decl_specifier"]; q135 -> q36 [label="storage_class"]; q135 -> q37 [label="type_specifier"]; q135 -> q38 [label="type_qualifier"]; q135 -> q39 [label="struct_or_union_specifier"]; q135 -> q40 [label="enum_specifier"]; q135 -> q147 [label="parameter_type_list"]; q135 -> q101 [label="parameter_list"]; q135 -> q102 [label="parameter_declaration"]; q135 -> q43 [label="struct_or_union"]; q135 -> q47 [label="enumeration"]; q137 -> q135 [label="'('"]; q137 -> q136 [label="T_BRACKETS"]; q142 -> q2 [label="'('"]; q142 -> q3 [label="'*'"]; q142 -> q4 [label="'&'"]; q142 -> q5 [label="T_IDENTIFIER"]; q142 -> q56 [label="T_TYPEDEF_NAME"]; q142 -> q148 [label="declarator"]; q142 -> q42 [label="direct_declarator"]; q142 -> q44 [label="pointer"]; q142 -> q45 [label="any_id"]; q142 -> q46 [label="identifier_or_ref"]; q143 -> q149 [label="T_MATCHRBRACE"]; q147 -> q150 [label="')'"]; } byacc-20221106/test/btyacc/quote_calc3-s.tab.h0000644000000000000000000000042412312171122017324 0ustar rootroot#ifndef _quote_calc3__defines_h_ #define _quote_calc3__defines_h_ #define OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #endif /* _quote_calc3__defines_h_ */ byacc-20221106/test/btyacc/no_p_opt1.error0000644000000000000000000000004513501467273016734 0ustar rootrootYACC: f - cannot open "nosuchfile.c" byacc-20221106/test/btyacc/err_inherit3.tab.h0000644000000000000000000000077314030125514017271 0ustar rootroot#ifndef _err_inherit3__defines_h_ #define _err_inherit3__defines_h_ #define GLOBAL 257 #define LOCAL 258 #define REAL 259 #define INTEGER 260 #define NAME 261 #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 typedef union YYSTYPE { class cval; type tval; namelist * nlist; name id; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ extern YYSTYPE err_inherit3_lval; #endif /* _err_inherit3__defines_h_ */ byacc-20221106/test/btyacc/err_syntax7b.output0000644000000000000000000000000012314147323017653 0ustar rootrootbyacc-20221106/test/btyacc/no_p_opt.error0000644000000000000000000000236014102077544016651 0ustar rootrootYACC: error message Usage: YACC [options] filename Options: -b file_prefix set filename prefix (default "y.") -B create a backtracking parser -d write definitions (.tab.h) -h print this help-message -H defines_file write definitions to defines_file -i write interface (y.tab.i) -g write a graphical description -l suppress #line directives -L enable position processing, e.g., "%locations" -o output_file (default ".tab.c") -p symbol_prefix set symbol prefix (default "yy") -P create a reentrant parser, e.g., "%pure-parser" -r produce separate code and table files (y.code.c) -s suppress #define's for quoted names in %token lines -t add debugging support -v write description (y.output) -V show version information and exit Long options: --defines -H --file-prefix -b --graph -g --help -h --name-prefix -p --no-lines -l --output -o --version -V byacc-20221106/test/btyacc/err_syntax21.tab.h0000644000000000000000000000000012314147323017221 0ustar rootrootbyacc-20221106/test/btyacc/btyacc_destroy3.tab.h0000644000000000000000000000075314030125513017772 0ustar rootroot#ifndef _destroy3__defines_h_ #define _destroy3__defines_h_ #define GLOBAL 257 #define LOCAL 258 #define REAL 259 #define INTEGER 260 #define NAME 261 #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 typedef union YYSTYPE { class cval; type tval; namelist * nlist; name id; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ extern YYSTYPE destroy3_lval; #endif /* _destroy3__defines_h_ */ byacc-20221106/test/btyacc/stdin2.error0000644000000000000000000000000013501467273016230 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax8a.output0000644000000000000000000000000012314147323017653 0ustar rootrootbyacc-20221106/test/btyacc/varsyntax_calc1.tab.c0000644000000000000000000015117014104035275017775 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #ident "check variant syntax features" #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse varsyntax_calc1_parse #endif /* yyparse */ #ifndef yylex #define yylex varsyntax_calc1_lex #endif /* yylex */ #ifndef yyerror #define yyerror varsyntax_calc1_error #endif /* yyerror */ #ifndef yychar #define yychar varsyntax_calc1_char #endif /* yychar */ #ifndef yyval #define yyval varsyntax_calc1_val #endif /* yyval */ #ifndef yylval #define yylval varsyntax_calc1_lval #endif /* yylval */ #ifndef yydebug #define yydebug varsyntax_calc1_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs varsyntax_calc1_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag varsyntax_calc1_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs varsyntax_calc1_lhs #endif /* yylhs */ #ifndef yylen #define yylen varsyntax_calc1_len #endif /* yylen */ #ifndef yydefred #define yydefred varsyntax_calc1_defred #endif /* yydefred */ #ifndef yystos #define yystos varsyntax_calc1_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto varsyntax_calc1_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex varsyntax_calc1_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex varsyntax_calc1_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex varsyntax_calc1_gindex #endif /* yygindex */ #ifndef yytable #define yytable varsyntax_calc1_table #endif /* yytable */ #ifndef yycheck #define yycheck varsyntax_calc1_check #endif /* yycheck */ #ifndef yyname #define yyname varsyntax_calc1_name #endif /* yyname */ #ifndef yyrule #define yyrule varsyntax_calc1_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex varsyntax_calc1_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable varsyntax_calc1_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "varsyntax_calc1_" #define YYPURE 0 #line 3 "varsyntax_calc1.y" /* http://dinosaur.compilertools.net/yacc/index.html * /*/ #include #include #include #include typedef struct interval { double lo, hi; } INTERVAL; INTERVAL vmul(double, double, INTERVAL); INTERVAL vdiv(double, double, INTERVAL); extern int yylex(void); static void yyerror(const char *s); int dcheck(INTERVAL); double dreg[26]; INTERVAL vreg[26]; #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #line 32 "varsyntax_calc1.y" typedef union YYSTYPE { int ival; /* dreg & vreg array index values*/ double dval; /* floating point values*/ INTERVAL vval; /* interval values*/ } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 162 "varsyntax_calc1.tab.c" /* 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 DREG 257 #define VREG 258 #define CONST 259 #define UMINUS 260 #define YYERRCODE 256 typedef int YYINT; static const YYINT varsyntax_calc1_lhs[] = { -1, 3, 3, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; static const YYINT varsyntax_calc1_len[] = { 2, 0, 2, 2, 2, 4, 4, 2, 1, 1, 3, 3, 3, 3, 2, 3, 1, 5, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, }; static const YYINT varsyntax_calc1_defred[] = { 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 7, 0, 0, 9, 18, 14, 27, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 15, 0, 28, 0, 0, 0, 0, 12, 24, 13, 26, 0, 0, 23, 25, 14, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, 12, 13, 17, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT varsyntax_calc1_stos[] = { 0, 256, 257, 258, 259, 45, 40, 262, 263, 264, 10, 61, 61, 257, 258, 263, 264, 263, 264, 43, 45, 42, 47, 10, 43, 45, 42, 47, 10, 45, 40, 263, 263, 264, 41, 44, 41, 263, 264, 263, 264, 263, 264, 263, 264, 264, 264, 264, 264, 263, 263, 43, 45, 42, 47, 10, 10, 263, 263, 263, 263, 263, 41, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT varsyntax_calc1_dgoto[] = { 7, 32, 9, 0, }; static const YYINT varsyntax_calc1_sindex[] = { -40, -8, -48, -47, 0, -37, -37, 0, 2, 17, 0, -34, -37, 0, 0, 0, 0, -25, 90, -37, -37, -37, -37, 0, -37, -37, -37, -37, 0, -34, -34, 25, 125, 31, 0, -34, 0, -11, 37, -11, 37, 0, 0, 0, 0, 37, 37, 0, 0, 0, 111, -34, -34, -34, -34, 0, 0, 118, 69, 69, 0, 0, 0, }; static const YYINT varsyntax_calc1_rindex[] = { 0, 0, 38, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9, 0, 0, 0, 0, 51, -3, 56, 61, 0, 0, 0, 0, 67, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 83, 0, 0, 0, }; #if YYBTYACC static const YYINT varsyntax_calc1_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT varsyntax_calc1_gindex[] = { 0, 4, 124, 0, }; #define YYTABLESIZE 225 static const YYINT varsyntax_calc1_table[] = { 6, 16, 10, 6, 8, 5, 30, 20, 5, 15, 17, 29, 23, 11, 12, 31, 34, 21, 19, 35, 20, 0, 22, 37, 39, 41, 43, 28, 0, 0, 0, 21, 16, 49, 50, 55, 22, 0, 20, 57, 20, 56, 20, 0, 21, 19, 0, 20, 9, 22, 0, 0, 0, 0, 18, 58, 59, 60, 61, 26, 24, 10, 25, 0, 27, 0, 11, 53, 51, 0, 52, 22, 54, 26, 24, 0, 25, 19, 27, 26, 9, 9, 21, 9, 27, 9, 18, 18, 10, 18, 0, 18, 10, 11, 10, 10, 10, 11, 0, 11, 11, 11, 22, 0, 22, 0, 22, 0, 19, 0, 19, 53, 19, 21, 0, 21, 54, 21, 0, 10, 0, 10, 0, 10, 11, 0, 11, 0, 11, 16, 18, 36, 26, 24, 0, 25, 33, 27, 0, 0, 0, 0, 0, 38, 40, 42, 44, 0, 45, 46, 47, 48, 34, 53, 51, 0, 52, 0, 54, 62, 53, 51, 0, 52, 0, 54, 0, 21, 19, 0, 20, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 13, 14, 4, 13, 0, 4, }; static const YYINT varsyntax_calc1_check[] = { 40, 10, 10, 40, 0, 45, 40, 10, 45, 5, 6, 45, 10, 61, 61, 11, 41, 42, 43, 44, 45, -1, 47, 19, 20, 21, 22, 10, -1, -1, -1, 42, 41, 29, 30, 10, 47, -1, 41, 35, 43, 10, 45, -1, 42, 43, -1, 45, 10, 47, -1, -1, -1, -1, 10, 51, 52, 53, 54, 42, 43, 10, 45, -1, 47, -1, 10, 42, 43, -1, 45, 10, 47, 42, 43, -1, 45, 10, 47, 42, 42, 43, 10, 45, 47, 47, 42, 43, 10, 45, -1, 47, 41, 10, 43, 44, 45, 41, -1, 43, 44, 45, 41, -1, 43, -1, 45, -1, 41, -1, 43, 42, 45, 41, -1, 43, 47, 45, -1, 41, -1, 43, -1, 45, 41, -1, 43, -1, 45, 5, 6, 41, 42, 43, -1, 45, 12, 47, -1, -1, -1, -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, 41, 42, 43, -1, 45, -1, 47, 41, 42, 43, -1, 45, -1, 47, -1, 42, 43, -1, 45, -1, 47, -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, 256, 257, 258, 259, 257, 258, 259, 257, -1, 259, }; #if YYBTYACC static const YYINT varsyntax_calc1_ctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; #endif #define YYFINAL 7 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 260 #define YYUNDFTOKEN 266 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const varsyntax_calc1_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0, 0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, "error","DREG","VREG","CONST","UMINUS","$accept","line","dexp","vexp","lines", "illegal-symbol", }; static const char *const varsyntax_calc1_rule[] = { "$accept : line", "lines :", "lines : lines line", "line : dexp '\\n'", "line : vexp '\\n'", "line : DREG '=' dexp '\\n'", "line : VREG '=' vexp '\\n'", "line : error '\\n'", "dexp : CONST", "dexp : DREG", "dexp : dexp '+' dexp", "dexp : dexp '-' dexp", "dexp : dexp '*' dexp", "dexp : dexp '/' dexp", "dexp : '-' dexp", "dexp : '(' dexp ')'", "vexp : dexp", "vexp : '(' dexp ',' dexp ')'", "vexp : VREG", "vexp : vexp '+' vexp", "vexp : dexp '+' vexp", "vexp : vexp '-' vexp", "vexp : dexp '-' vexp", "vexp : vexp '*' vexp", "vexp : dexp '*' vexp", "vexp : vexp '/' vexp", "vexp : dexp '/' vexp", "vexp : '-' vexp", "vexp : '(' vexp ')'", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 178 "varsyntax_calc1.y" /* beginning of subroutines section */ #define BSZ 50 /* buffer size for floating point numbers */ /* lexical analysis */ static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { int c; while ((c = getchar()) == ' ') { /* skip over blanks */ } if (isupper(c)) { yylval.ival = c - 'A'; return (VREG); } if (islower(c)) { yylval.ival = c - 'a'; return (DREG); } if (isdigit(c) || c == '.') { /* gobble up digits, points, exponents */ char buf[BSZ + 1], *cp = buf; int dot = 0, expr = 0; for (; (cp - buf) < BSZ; ++cp, c = getchar()) { *cp = (char) c; if (isdigit(c)) continue; if (c == '.') { if (dot++ || expr) return ('.'); /* will cause syntax error */ continue; } if (c == 'e') { if (expr++) return ('e'); /* will cause syntax error */ continue; } /* end of number */ break; } *cp = '\0'; if ((cp - buf) >= BSZ) printf("constant too long: truncated\n"); else ungetc(c, stdin); /* push back last char read */ yylval.dval = atof(buf); return (CONST); } return (c); } static INTERVAL hilo(double a, double b, double c, double d) { /* returns the smallest interval containing a, b, c, and d */ /* used by *, / routines */ INTERVAL v; if (a > b) { v.hi = a; v.lo = b; } else { v.hi = b; v.lo = a; } if (c > d) { if (c > v.hi) v.hi = c; if (d < v.lo) v.lo = d; } else { if (d > v.hi) v.hi = d; if (c < v.lo) v.lo = c; } return (v); } INTERVAL vmul(double a, double b, INTERVAL v) { return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo)); } int dcheck(INTERVAL v) { if (v.hi >= 0. && v.lo <= 0.) { printf("divisor interval contains 0.\n"); return (1); } return (0); } INTERVAL vdiv(double a, double b, INTERVAL v) { return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo)); } #line 656 "varsyntax_calc1.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 59 "varsyntax_calc1.y" { (void) printf("%15.8f\n", yystack.l_mark[-1].dval); } #line 1331 "varsyntax_calc1.tab.c" break; case 4: #line 63 "varsyntax_calc1.y" { (void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi); } #line 1338 "varsyntax_calc1.tab.c" break; case 5: #line 67 "varsyntax_calc1.y" { dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval; } #line 1345 "varsyntax_calc1.tab.c" break; case 6: #line 71 "varsyntax_calc1.y" { vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval; } #line 1352 "varsyntax_calc1.tab.c" break; case 7: #line 75 "varsyntax_calc1.y" { yyerrok; } #line 1359 "varsyntax_calc1.tab.c" break; case 9: #line 82 "varsyntax_calc1.y" { yyval.dval = dreg[yystack.l_mark[0].ival]; /* $$ & $1 are sufficient here*/ } #line 1366 "varsyntax_calc1.tab.c" break; case 10: #line 86 "varsyntax_calc1.y" { yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval; } #line 1373 "varsyntax_calc1.tab.c" break; case 11: #line 90 "varsyntax_calc1.y" { yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval; } #line 1380 "varsyntax_calc1.tab.c" break; case 12: #line 94 "varsyntax_calc1.y" { yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval; } #line 1387 "varsyntax_calc1.tab.c" break; case 13: #line 98 "varsyntax_calc1.y" { yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval; } #line 1394 "varsyntax_calc1.tab.c" break; case 14: #line 102 "varsyntax_calc1.y" { yyval.dval = -yystack.l_mark[0].dval; } #line 1401 "varsyntax_calc1.tab.c" break; case 15: #line 106 "varsyntax_calc1.y" { yyval.dval = yystack.l_mark[-1].dval; } #line 1408 "varsyntax_calc1.tab.c" break; case 16: #line 112 "varsyntax_calc1.y" { yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval; } #line 1415 "varsyntax_calc1.tab.c" break; case 17: #line 116 "varsyntax_calc1.y" { yyval.vval.lo = yystack.l_mark[-3].dval; yyval.vval.hi = yystack.l_mark[-1].dval; if ( yyval.vval.lo > yyval.vval.hi ) { (void) printf("interval out of order\n"); YYERROR; } } #line 1428 "varsyntax_calc1.tab.c" break; case 18: #line 126 "varsyntax_calc1.y" { yyval.vval = vreg[yystack.l_mark[0].ival]; } #line 1435 "varsyntax_calc1.tab.c" break; case 19: #line 130 "varsyntax_calc1.y" { yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi; yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo; } #line 1443 "varsyntax_calc1.tab.c" break; case 20: #line 135 "varsyntax_calc1.y" { yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi; yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo; } #line 1451 "varsyntax_calc1.tab.c" break; case 21: #line 140 "varsyntax_calc1.y" { yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo; yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi; } #line 1459 "varsyntax_calc1.tab.c" break; case 22: #line 145 "varsyntax_calc1.y" { yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo; yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi; } #line 1467 "varsyntax_calc1.tab.c" break; case 23: #line 150 "varsyntax_calc1.y" { yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); } #line 1474 "varsyntax_calc1.tab.c" break; case 24: #line 154 "varsyntax_calc1.y" { yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); } #line 1481 "varsyntax_calc1.tab.c" break; case 25: #line 158 "varsyntax_calc1.y" { if (dcheck(yystack.l_mark[0].vval)) YYERROR; yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval ); } #line 1489 "varsyntax_calc1.tab.c" break; case 26: #line 163 "varsyntax_calc1.y" { if (dcheck ( yystack.l_mark[0].vval )) YYERROR; yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval ); } #line 1497 "varsyntax_calc1.tab.c" break; case 27: #line 168 "varsyntax_calc1.y" { yyval.vval.hi = -yystack.l_mark[0].vval.lo; yyval.vval.lo = -yystack.l_mark[0].vval.hi; } #line 1505 "varsyntax_calc1.tab.c" break; case 28: #line 173 "varsyntax_calc1.y" { yyval.vval = yystack.l_mark[-1].vval; } #line 1512 "varsyntax_calc1.tab.c" break; #line 1514 "varsyntax_calc1.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/varsyntax_calc1.output0000644000000000000000000003661412313713311020345 0ustar rootroot 0 $accept : line $end 1 lines : 2 | lines line 3 line : dexp '\n' 4 | vexp '\n' 5 | DREG '=' dexp '\n' 6 | VREG '=' vexp '\n' 7 | error '\n' 8 dexp : CONST 9 | DREG 10 | dexp '+' dexp 11 | dexp '-' dexp 12 | dexp '*' dexp 13 | dexp '/' dexp 14 | '-' dexp 15 | '(' dexp ')' 16 vexp : dexp 17 | '(' dexp ',' dexp ')' 18 | VREG 19 | vexp '+' vexp 20 | dexp '+' vexp 21 | vexp '-' vexp 22 | dexp '-' vexp 23 | vexp '*' vexp 24 | dexp '*' vexp 25 | vexp '/' vexp 26 | dexp '/' vexp 27 | '-' vexp 28 | '(' vexp ')' state 0 $accept : . line $end (0) error shift 1 DREG shift 2 VREG shift 3 CONST shift 4 '-' shift 5 '(' shift 6 . error line goto 7 dexp goto 8 vexp goto 9 state 1 line : error . '\n' (7) '\n' shift 10 . error state 2 line : DREG . '=' dexp '\n' (5) dexp : DREG . (9) '=' shift 11 '+' reduce 9 '-' reduce 9 '*' reduce 9 '/' reduce 9 '\n' reduce 9 state 3 line : VREG . '=' vexp '\n' (6) vexp : VREG . (18) '=' shift 12 '+' reduce 18 '-' reduce 18 '*' reduce 18 '/' reduce 18 '\n' reduce 18 state 4 dexp : CONST . (8) . reduce 8 state 5 dexp : '-' . dexp (14) vexp : '-' . vexp (27) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 15 vexp goto 16 state 6 dexp : '(' . dexp ')' (15) vexp : '(' . dexp ',' dexp ')' (17) vexp : '(' . vexp ')' (28) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 17 vexp goto 18 state 7 $accept : line . $end (0) $end accept 8: shift/reduce conflict (shift 19, reduce 16) on '+' 8: shift/reduce conflict (shift 20, reduce 16) on '-' 8: shift/reduce conflict (shift 21, reduce 16) on '*' 8: shift/reduce conflict (shift 22, reduce 16) on '/' 8: shift/reduce conflict (shift 23, reduce 16) on '\n' state 8 line : dexp . '\n' (3) dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '+' shift 19 '-' shift 20 '*' shift 21 '/' shift 22 '\n' shift 23 state 9 line : vexp . '\n' (4) vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '+' shift 24 '-' shift 25 '*' shift 26 '/' shift 27 '\n' shift 28 . error state 10 line : error '\n' . (7) . reduce 7 state 11 line : DREG '=' . dexp '\n' (5) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 31 state 12 line : VREG '=' . vexp '\n' (6) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 33 state 13 dexp : DREG . (9) . reduce 9 state 14 vexp : VREG . (18) . reduce 18 15: reduce/reduce conflict (reduce 14, reduce 16) on '+' 15: reduce/reduce conflict (reduce 14, reduce 16) on '-' 15: reduce/reduce conflict (reduce 14, reduce 16) on '*' 15: reduce/reduce conflict (reduce 14, reduce 16) on '/' 15: reduce/reduce conflict (reduce 14, reduce 16) on '\n' 15: reduce/reduce conflict (reduce 14, reduce 16) on ')' state 15 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '-' dexp . (14) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) . reduce 14 state 16 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : '-' vexp . (27) . reduce 27 17: shift/reduce conflict (shift 19, reduce 16) on '+' 17: shift/reduce conflict (shift 20, reduce 16) on '-' 17: shift/reduce conflict (shift 21, reduce 16) on '*' 17: shift/reduce conflict (shift 22, reduce 16) on '/' 17: shift/reduce conflict (shift 34, reduce 16) on ')' state 17 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '(' dexp . ')' (15) vexp : dexp . (16) vexp : '(' dexp . ',' dexp ')' (17) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '+' shift 19 '-' shift 20 '*' shift 21 '/' shift 22 ')' shift 34 ',' shift 35 state 18 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : '(' vexp . ')' (28) '+' shift 24 '-' shift 25 '*' shift 26 '/' shift 27 ')' shift 36 . error state 19 dexp : dexp '+' . dexp (10) vexp : dexp '+' . vexp (20) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 37 vexp goto 38 state 20 dexp : dexp '-' . dexp (11) vexp : dexp '-' . vexp (22) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 39 vexp goto 40 state 21 dexp : dexp '*' . dexp (12) vexp : dexp '*' . vexp (24) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 41 vexp goto 42 state 22 dexp : dexp '/' . dexp (13) vexp : dexp '/' . vexp (26) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 43 vexp goto 44 state 23 line : dexp '\n' . (3) . reduce 3 state 24 vexp : vexp '+' . vexp (19) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 45 state 25 vexp : vexp '-' . vexp (21) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 46 state 26 vexp : vexp '*' . vexp (23) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 47 state 27 vexp : vexp '/' . vexp (25) DREG shift 13 VREG shift 14 CONST shift 4 '-' shift 5 '(' shift 6 . error dexp goto 32 vexp goto 48 state 28 line : vexp '\n' . (4) . reduce 4 state 29 dexp : '-' . dexp (14) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 49 state 30 dexp : '(' . dexp ')' (15) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 50 state 31 line : DREG '=' dexp . '\n' (5) dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) '+' shift 51 '-' shift 52 '*' shift 53 '/' shift 54 '\n' shift 55 . error 32: shift/reduce conflict (shift 19, reduce 16) on '+' 32: shift/reduce conflict (shift 20, reduce 16) on '-' 32: shift/reduce conflict (shift 21, reduce 16) on '*' 32: shift/reduce conflict (shift 22, reduce 16) on '/' state 32 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '+' shift 19 '-' shift 20 '*' shift 21 '/' shift 22 '\n' reduce 16 ')' reduce 16 state 33 line : VREG '=' vexp . '\n' (6) vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '+' shift 24 '-' shift 25 '*' shift 26 '/' shift 27 '\n' shift 56 . error state 34 dexp : '(' dexp ')' . (15) . reduce 15 state 35 vexp : '(' dexp ',' . dexp ')' (17) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 57 state 36 vexp : '(' vexp ')' . (28) . reduce 28 37: reduce/reduce conflict (reduce 10, reduce 16) on '+' 37: reduce/reduce conflict (reduce 10, reduce 16) on '-' 37: shift/reduce conflict (shift 21, reduce 16) on '*' 37: shift/reduce conflict (shift 22, reduce 16) on '/' 37: reduce/reduce conflict (reduce 10, reduce 16) on '\n' 37: reduce/reduce conflict (reduce 10, reduce 16) on ')' state 37 dexp : dexp . '+' dexp (10) dexp : dexp '+' dexp . (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '*' shift 21 '/' shift 22 '+' reduce 10 '-' reduce 10 '\n' reduce 10 ')' reduce 10 ',' reduce 10 state 38 vexp : vexp . '+' vexp (19) vexp : dexp '+' vexp . (20) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 20 '-' reduce 20 '\n' reduce 20 ')' reduce 20 39: reduce/reduce conflict (reduce 11, reduce 16) on '+' 39: reduce/reduce conflict (reduce 11, reduce 16) on '-' 39: shift/reduce conflict (shift 21, reduce 16) on '*' 39: shift/reduce conflict (shift 22, reduce 16) on '/' 39: reduce/reduce conflict (reduce 11, reduce 16) on '\n' 39: reduce/reduce conflict (reduce 11, reduce 16) on ')' state 39 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp '-' dexp . (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '*' shift 21 '/' shift 22 '+' reduce 11 '-' reduce 11 '\n' reduce 11 ')' reduce 11 ',' reduce 11 state 40 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : dexp '-' vexp . (22) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 22 '-' reduce 22 '\n' reduce 22 ')' reduce 22 41: reduce/reduce conflict (reduce 12, reduce 16) on '+' 41: reduce/reduce conflict (reduce 12, reduce 16) on '-' 41: reduce/reduce conflict (reduce 12, reduce 16) on '*' 41: reduce/reduce conflict (reduce 12, reduce 16) on '/' 41: reduce/reduce conflict (reduce 12, reduce 16) on '\n' 41: reduce/reduce conflict (reduce 12, reduce 16) on ')' state 41 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp '*' dexp . (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) . reduce 12 state 42 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : dexp '*' vexp . (24) vexp : vexp . '/' vexp (25) . reduce 24 43: reduce/reduce conflict (reduce 13, reduce 16) on '+' 43: reduce/reduce conflict (reduce 13, reduce 16) on '-' 43: reduce/reduce conflict (reduce 13, reduce 16) on '*' 43: reduce/reduce conflict (reduce 13, reduce 16) on '/' 43: reduce/reduce conflict (reduce 13, reduce 16) on '\n' 43: reduce/reduce conflict (reduce 13, reduce 16) on ')' state 43 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : dexp '/' dexp . (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) . reduce 13 state 44 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : dexp '/' vexp . (26) . reduce 26 state 45 vexp : vexp . '+' vexp (19) vexp : vexp '+' vexp . (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 19 '-' reduce 19 '\n' reduce 19 ')' reduce 19 state 46 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp '-' vexp . (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 21 '-' reduce 21 '\n' reduce 21 ')' reduce 21 state 47 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp '*' vexp . (23) vexp : vexp . '/' vexp (25) . reduce 23 state 48 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : vexp '/' vexp . (25) . reduce 25 state 49 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '-' dexp . (14) . reduce 14 state 50 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '(' dexp . ')' (15) '+' shift 51 '-' shift 52 '*' shift 53 '/' shift 54 ')' shift 34 . error state 51 dexp : dexp '+' . dexp (10) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 58 state 52 dexp : dexp '-' . dexp (11) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 59 state 53 dexp : dexp '*' . dexp (12) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 60 state 54 dexp : dexp '/' . dexp (13) DREG shift 13 CONST shift 4 '-' shift 29 '(' shift 30 . error dexp goto 61 state 55 line : DREG '=' dexp '\n' . (5) . reduce 5 state 56 line : VREG '=' vexp '\n' . (6) . reduce 6 state 57 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : '(' dexp ',' dexp . ')' (17) '+' shift 51 '-' shift 52 '*' shift 53 '/' shift 54 ')' shift 62 . error state 58 dexp : dexp . '+' dexp (10) dexp : dexp '+' dexp . (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) '*' shift 53 '/' shift 54 '+' reduce 10 '-' reduce 10 '\n' reduce 10 ')' reduce 10 state 59 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp '-' dexp . (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) '*' shift 53 '/' shift 54 '+' reduce 11 '-' reduce 11 '\n' reduce 11 ')' reduce 11 state 60 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp '*' dexp . (12) dexp : dexp . '/' dexp (13) . reduce 12 state 61 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : dexp '/' dexp . (13) . reduce 13 state 62 vexp : '(' dexp ',' dexp ')' . (17) . reduce 17 Rules never reduced: lines : (1) lines : lines line (2) State 8 contains 5 shift/reduce conflicts. State 15 contains 6 reduce/reduce conflicts. State 17 contains 5 shift/reduce conflicts. State 32 contains 4 shift/reduce conflicts. State 37 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts. State 39 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts. State 41 contains 6 reduce/reduce conflicts. State 43 contains 6 reduce/reduce conflicts. 15 terminals, 5 nonterminals 29 grammar rules, 63 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 DREG 3 258 VREG 4 259 CONST 5 43 '+' 6 45 '-' 7 42 '*' 8 47 '/' 9 260 UMINUS 10 10 '\n' 11 61 '=' 12 40 '(' 13 41 ')' 14 44 ',' 15 261 $accept 16 262 line 17 263 dexp 18 264 vexp 19 265 lines byacc-20221106/test/btyacc/err_syntax27.error0000644000000000000000000000006412361053263017377 0ustar rootrootYACC: e - line 3 of "./err_syntax27.y", missing '}' byacc-20221106/test/btyacc/err_syntax20.tab.h0000644000000000000000000000017712314147323017237 0ustar rootroot#ifndef _err_syntax20__defines_h_ #define _err_syntax20__defines_h_ #define recur 257 #endif /* _err_syntax20__defines_h_ */ byacc-20221106/test/btyacc/err_syntax26.tab.h0000644000000000000000000000000012314147323017226 0ustar rootrootbyacc-20221106/test/btyacc/quote_calc3-s.error0000644000000000000000000000004112313700137017461 0ustar rootrootYACC: 54 shift/reduce conflicts. byacc-20221106/test/btyacc/no_verbose.output0000644000000000000000000000000013501467273017375 0ustar rootrootbyacc-20221106/test/btyacc/quote_calc4-s.tab.h0000644000000000000000000000042412312171122017325 0ustar rootroot#ifndef _quote_calc4__defines_h_ #define _quote_calc4__defines_h_ #define OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #endif /* _quote_calc4__defines_h_ */ byacc-20221106/test/btyacc/btyacc_calc1.tab.h0000644000000000000000000000062714030125513017201 0ustar rootroot#ifndef _calc1__defines_h_ #define _calc1__defines_h_ #define DREG 257 #define VREG 258 #define CONST 259 #define UMINUS 260 #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 typedef union YYSTYPE { int ival; double dval; INTERVAL vval; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #endif /* _calc1__defines_h_ */ byacc-20221106/test/btyacc/err_inherit5.tab.c0000644000000000000000000000067213726503203017272 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/calc2.error0000644000000000000000000000000012313700134015773 0ustar rootrootbyacc-20221106/test/btyacc/calc_code_top.error0000644000000000000000000000000013565110447017601 0ustar rootrootbyacc-20221106/test/btyacc/quote_calc.output0000644000000000000000000002747212312171122017361 0ustar rootroot 0 $accept : list $end 1 list : 2 | list stat '\n' 3 | list error '\n' 4 stat : expr 5 | LETTER '=' expr 6 expr : '(' expr ')' 7 | expr OP_ADD expr 8 | expr OP_SUB expr 9 | expr OP_MUL expr 10 | expr OP_DIV expr 11 | expr OP_MOD expr 12 | expr OP_AND expr 13 | expr '|' expr 14 | OP_SUB expr 15 | LETTER 16 | number 17 number : DIGIT 18 | number DIGIT state 0 $accept : . list $end (0) list : . (1) . reduce 1 list goto 1 state 1 $accept : list . $end (0) list : list . stat '\n' (2) list : list . error '\n' (3) $end accept error shift 2 OP_SUB shift 3 DIGIT shift 4 LETTER shift 5 '(' shift 6 . error stat goto 7 expr goto 8 number goto 9 state 2 list : list error . '\n' (3) '\n' shift 10 . error state 3 expr : OP_SUB . expr (14) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 12 number goto 9 state 4 number : DIGIT . (17) . reduce 17 state 5 stat : LETTER . '=' expr (5) expr : LETTER . (15) '=' shift 13 OP_ADD reduce 15 OP_SUB reduce 15 OP_MUL reduce 15 OP_DIV reduce 15 OP_MOD reduce 15 OP_AND reduce 15 '|' reduce 15 '\n' reduce 15 state 6 expr : '(' . expr ')' (6) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 14 number goto 9 state 7 list : list stat . '\n' (2) '\n' shift 15 . error state 8 stat : expr . (4) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 4 state 9 expr : number . (16) number : number . DIGIT (18) DIGIT shift 23 OP_ADD reduce 16 OP_SUB reduce 16 OP_MUL reduce 16 OP_DIV reduce 16 OP_MOD reduce 16 OP_AND reduce 16 '|' reduce 16 '\n' reduce 16 ')' reduce 16 state 10 list : list error '\n' . (3) . reduce 3 state 11 expr : LETTER . (15) . reduce 15 12: shift/reduce conflict (shift 16, reduce 14) on OP_ADD 12: shift/reduce conflict (shift 17, reduce 14) on OP_SUB 12: shift/reduce conflict (shift 18, reduce 14) on OP_MUL 12: shift/reduce conflict (shift 19, reduce 14) on OP_DIV 12: shift/reduce conflict (shift 20, reduce 14) on OP_MOD 12: shift/reduce conflict (shift 21, reduce 14) on OP_AND state 12 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) expr : OP_SUB expr . (14) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' reduce 14 '\n' reduce 14 ')' reduce 14 state 13 stat : LETTER '=' . expr (5) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 24 number goto 9 state 14 expr : '(' expr . ')' (6) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 ')' shift 25 . error state 15 list : list stat '\n' . (2) . reduce 2 state 16 expr : expr OP_ADD . expr (7) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 26 number goto 9 state 17 expr : expr OP_SUB . expr (8) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 27 number goto 9 state 18 expr : expr OP_MUL . expr (9) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 28 number goto 9 state 19 expr : expr OP_DIV . expr (10) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 29 number goto 9 state 20 expr : expr OP_MOD . expr (11) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 30 number goto 9 state 21 expr : expr OP_AND . expr (12) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 31 number goto 9 state 22 expr : expr '|' . expr (13) OP_SUB shift 3 DIGIT shift 4 LETTER shift 11 '(' shift 6 . error expr goto 32 number goto 9 state 23 number : number DIGIT . (18) . reduce 18 state 24 stat : LETTER '=' expr . (5) expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 5 state 25 expr : '(' expr ')' . (6) . reduce 6 26: shift/reduce conflict (shift 16, reduce 7) on OP_ADD 26: shift/reduce conflict (shift 17, reduce 7) on OP_SUB 26: shift/reduce conflict (shift 18, reduce 7) on OP_MUL 26: shift/reduce conflict (shift 19, reduce 7) on OP_DIV 26: shift/reduce conflict (shift 20, reduce 7) on OP_MOD 26: shift/reduce conflict (shift 21, reduce 7) on OP_AND 26: shift/reduce conflict (shift 22, reduce 7) on '|' state 26 expr : expr . OP_ADD expr (7) expr : expr OP_ADD expr . (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 7 ')' reduce 7 27: shift/reduce conflict (shift 16, reduce 8) on OP_ADD 27: shift/reduce conflict (shift 17, reduce 8) on OP_SUB 27: shift/reduce conflict (shift 18, reduce 8) on OP_MUL 27: shift/reduce conflict (shift 19, reduce 8) on OP_DIV 27: shift/reduce conflict (shift 20, reduce 8) on OP_MOD 27: shift/reduce conflict (shift 21, reduce 8) on OP_AND 27: shift/reduce conflict (shift 22, reduce 8) on '|' state 27 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr OP_SUB expr . (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 8 ')' reduce 8 28: shift/reduce conflict (shift 16, reduce 9) on OP_ADD 28: shift/reduce conflict (shift 17, reduce 9) on OP_SUB 28: shift/reduce conflict (shift 18, reduce 9) on OP_MUL 28: shift/reduce conflict (shift 19, reduce 9) on OP_DIV 28: shift/reduce conflict (shift 20, reduce 9) on OP_MOD 28: shift/reduce conflict (shift 21, reduce 9) on OP_AND 28: shift/reduce conflict (shift 22, reduce 9) on '|' state 28 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr OP_MUL expr . (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 9 ')' reduce 9 29: shift/reduce conflict (shift 16, reduce 10) on OP_ADD 29: shift/reduce conflict (shift 17, reduce 10) on OP_SUB 29: shift/reduce conflict (shift 18, reduce 10) on OP_MUL 29: shift/reduce conflict (shift 19, reduce 10) on OP_DIV 29: shift/reduce conflict (shift 20, reduce 10) on OP_MOD 29: shift/reduce conflict (shift 21, reduce 10) on OP_AND 29: shift/reduce conflict (shift 22, reduce 10) on '|' state 29 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr OP_DIV expr . (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 10 ')' reduce 10 30: shift/reduce conflict (shift 16, reduce 11) on OP_ADD 30: shift/reduce conflict (shift 17, reduce 11) on OP_SUB 30: shift/reduce conflict (shift 18, reduce 11) on OP_MUL 30: shift/reduce conflict (shift 19, reduce 11) on OP_DIV 30: shift/reduce conflict (shift 20, reduce 11) on OP_MOD 30: shift/reduce conflict (shift 21, reduce 11) on OP_AND 30: shift/reduce conflict (shift 22, reduce 11) on '|' state 30 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr OP_MOD expr . (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 11 ')' reduce 11 31: shift/reduce conflict (shift 16, reduce 12) on OP_ADD 31: shift/reduce conflict (shift 17, reduce 12) on OP_SUB 31: shift/reduce conflict (shift 18, reduce 12) on OP_MUL 31: shift/reduce conflict (shift 19, reduce 12) on OP_DIV 31: shift/reduce conflict (shift 20, reduce 12) on OP_MOD 31: shift/reduce conflict (shift 21, reduce 12) on OP_AND 31: shift/reduce conflict (shift 22, reduce 12) on '|' state 31 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr OP_AND expr . (12) expr : expr . '|' expr (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' shift 22 '\n' reduce 12 ')' reduce 12 32: shift/reduce conflict (shift 16, reduce 13) on OP_ADD 32: shift/reduce conflict (shift 17, reduce 13) on OP_SUB 32: shift/reduce conflict (shift 18, reduce 13) on OP_MUL 32: shift/reduce conflict (shift 19, reduce 13) on OP_DIV 32: shift/reduce conflict (shift 20, reduce 13) on OP_MOD 32: shift/reduce conflict (shift 21, reduce 13) on OP_AND state 32 expr : expr . OP_ADD expr (7) expr : expr . OP_SUB expr (8) expr : expr . OP_MUL expr (9) expr : expr . OP_DIV expr (10) expr : expr . OP_MOD expr (11) expr : expr . OP_AND expr (12) expr : expr . '|' expr (13) expr : expr '|' expr . (13) OP_ADD shift 16 OP_SUB shift 17 OP_MUL shift 18 OP_DIV shift 19 OP_MOD shift 20 OP_AND shift 21 '|' reduce 13 '\n' reduce 13 ')' reduce 13 State 12 contains 6 shift/reduce conflicts. State 26 contains 7 shift/reduce conflicts. State 27 contains 7 shift/reduce conflicts. State 28 contains 7 shift/reduce conflicts. State 29 contains 7 shift/reduce conflicts. State 30 contains 7 shift/reduce conflicts. State 31 contains 7 shift/reduce conflicts. State 32 contains 6 shift/reduce conflicts. 28 terminals, 5 nonterminals 19 grammar rules, 33 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 OP_ADD 3 258 "ADD" 4 259 OP_SUB 5 260 "SUB" 6 261 OP_MUL 7 262 "MUL" 8 263 OP_DIV 9 264 "DIV" 10 265 OP_MOD 11 266 "MOD" 12 267 OP_AND 13 268 "AND" 14 269 DIGIT 15 270 LETTER 16 124 '|' 17 38 '&' 18 43 '+' 19 45 '-' 20 42 '*' 21 47 '/' 22 37 '%' 23 271 UMINUS 24 10 '\n' 25 61 '=' 26 40 '(' 27 41 ')' 28 272 $accept 29 273 list 30 274 stat 31 275 expr 32 276 number byacc-20221106/test/btyacc/no_code_c.error0000644000000000000000000000004513501467273016746 0ustar rootrootYACC: f - cannot open "nosuchfile.c" byacc-20221106/test/btyacc/err_syntax8.tab.h0000644000000000000000000000000012314147323017146 0ustar rootrootbyacc-20221106/test/btyacc/btyacc_calc1.output0000644000000000000000000004175712312172065017563 0ustar rootroot 0 $accept : lines $end 1 lines : 2 | lines line '\n' 3 | lines error '\n' 4 line : dexp 5 | vexp 6 | DREG '=' dexp 7 | VREG '=' vexp 8 dexp : CONST 9 | DREG 10 | dexp '+' dexp 11 | dexp '-' dexp 12 | dexp '*' dexp 13 | dexp '/' dexp 14 | '-' dexp 15 | '(' dexp ')' 16 vexp : dexp 17 | '(' dexp ',' dexp ')' 18 | VREG 19 | vexp '+' vexp 20 | dexp '+' vexp 21 | vexp '-' vexp 22 | dexp '-' vexp 23 | vexp '*' vexp 24 | dexp '*' vexp 25 | vexp '/' vexp 26 | dexp '/' vexp 27 | '-' vexp 28 | '(' vexp ')' state 0 $accept : . lines $end (0) lines : . (1) . reduce 1 lines goto 1 state 1 $accept : lines . $end (0) lines : lines . line '\n' (2) lines : lines . error '\n' (3) $end accept error shift 2 DREG shift 3 VREG shift 4 CONST shift 5 '-' shift 6 '(' shift 7 . error dexp goto 8 vexp goto 9 line goto 10 state 2 lines : lines error . '\n' (3) '\n' shift 11 . error state 3 line : DREG . '=' dexp (6) dexp : DREG . (9) '=' shift 12 '+' reduce 9 '-' reduce 9 '*' reduce 9 '/' reduce 9 '\n' reduce 9 state 4 line : VREG . '=' vexp (7) vexp : VREG . (18) '=' shift 13 '+' reduce 18 '-' reduce 18 '*' reduce 18 '/' reduce 18 '\n' reduce 18 state 5 dexp : CONST . (8) . reduce 8 state 6 dexp : '-' . dexp (14) vexp : '-' . vexp (27) DREG shift 14 VREG shift 15 CONST shift 5 '-' shift 6 '(' shift 7 . error dexp goto 16 vexp goto 17 state 7 dexp : '(' . dexp ')' (15) vexp : '(' . dexp ',' dexp ')' (17) vexp : '(' . vexp ')' (28) DREG shift 14 VREG shift 15 CONST shift 5 '-' shift 6 '(' shift 7 . error dexp goto 18 vexp goto 19 8: shift/reduce conflict (shift 20, reduce 16) on '+' 8: shift/reduce conflict (shift 21, reduce 16) on '-' 8: shift/reduce conflict (shift 22, reduce 16) on '*' 8: shift/reduce conflict (shift 23, reduce 16) on '/' 8: reduce/reduce conflict (reduce 4, reduce 16) on '\n' state 8 line : dexp . (4) dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '+' [trial] shift 20 '-' [trial] shift 21 '*' [trial] shift 22 '/' [trial] shift 23 '+' [trial] reduce 16 '-' [trial] reduce 16 '*' [trial] reduce 16 '/' [trial] reduce 16 '\n' [trial] reduce 4 '\n' [trial] reduce 16 state 9 line : vexp . (5) vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '+' shift 24 '-' shift 25 '*' shift 26 '/' shift 27 '\n' reduce 5 state 10 lines : lines line . '\n' (2) '\n' shift 28 . error state 11 lines : lines error '\n' . (3) . reduce 3 state 12 line : DREG '=' . dexp (6) DREG shift 14 CONST shift 5 '-' shift 29 '(' shift 30 . error dexp goto 31 state 13 line : VREG '=' . vexp (7) DREG shift 14 VREG shift 15 CONST shift 5 '-' shift 6 '(' shift 7 . error dexp goto 32 vexp goto 33 state 14 dexp : DREG . (9) . reduce 9 state 15 vexp : VREG . (18) . reduce 18 16: reduce/reduce conflict (reduce 14, reduce 16) on '+' 16: reduce/reduce conflict (reduce 14, reduce 16) on '-' 16: reduce/reduce conflict (reduce 14, reduce 16) on '*' 16: reduce/reduce conflict (reduce 14, reduce 16) on '/' 16: reduce/reduce conflict (reduce 14, reduce 16) on '\n' 16: reduce/reduce conflict (reduce 14, reduce 16) on ')' state 16 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '-' dexp . (14) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '+' [trial] reduce 14 '+' [trial] reduce 16 '-' [trial] reduce 14 '-' [trial] reduce 16 '*' [trial] reduce 14 '*' [trial] reduce 16 '/' [trial] reduce 14 '/' [trial] reduce 16 '\n' [trial] reduce 14 '\n' [trial] reduce 16 ')' [trial] reduce 14 ')' [trial] reduce 16 ',' reduce 14 state 17 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : '-' vexp . (27) . reduce 27 18: shift/reduce conflict (shift 20, reduce 16) on '+' 18: shift/reduce conflict (shift 21, reduce 16) on '-' 18: shift/reduce conflict (shift 22, reduce 16) on '*' 18: shift/reduce conflict (shift 23, reduce 16) on '/' 18: shift/reduce conflict (shift 34, reduce 16) on ')' state 18 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '(' dexp . ')' (15) vexp : dexp . (16) vexp : '(' dexp . ',' dexp ')' (17) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '+' [trial] shift 20 '-' [trial] shift 21 '*' [trial] shift 22 '/' [trial] shift 23 ')' [trial] shift 34 ',' shift 35 '+' [trial] reduce 16 '-' [trial] reduce 16 '*' [trial] reduce 16 '/' [trial] reduce 16 ')' [trial] reduce 16 state 19 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : '(' vexp . ')' (28) '+' shift 24 '-' shift 25 '*' shift 26 '/' shift 27 ')' shift 36 . error state 20 dexp : dexp '+' . dexp (10) vexp : dexp '+' . vexp (20) DREG shift 14 VREG shift 15 CONST shift 5 '-' shift 6 '(' shift 7 . error dexp goto 37 vexp goto 38 state 21 dexp : dexp '-' . dexp (11) vexp : dexp '-' . vexp (22) DREG shift 14 VREG shift 15 CONST shift 5 '-' shift 6 '(' shift 7 . error dexp goto 39 vexp goto 40 state 22 dexp : dexp '*' . dexp (12) vexp : dexp '*' . vexp (24) DREG shift 14 VREG shift 15 CONST shift 5 '-' shift 6 '(' shift 7 . error dexp goto 41 vexp goto 42 state 23 dexp : dexp '/' . dexp (13) vexp : dexp '/' . vexp (26) DREG shift 14 VREG shift 15 CONST shift 5 '-' shift 6 '(' shift 7 . error dexp goto 43 vexp goto 44 state 24 vexp : vexp '+' . vexp (19) DREG shift 14 VREG shift 15 CONST shift 5 '-' shift 6 '(' shift 7 . error dexp goto 32 vexp goto 45 state 25 vexp : vexp '-' . vexp (21) DREG shift 14 VREG shift 15 CONST shift 5 '-' shift 6 '(' shift 7 . error dexp goto 32 vexp goto 46 state 26 vexp : vexp '*' . vexp (23) DREG shift 14 VREG shift 15 CONST shift 5 '-' shift 6 '(' shift 7 . error dexp goto 32 vexp goto 47 state 27 vexp : vexp '/' . vexp (25) DREG shift 14 VREG shift 15 CONST shift 5 '-' shift 6 '(' shift 7 . error dexp goto 32 vexp goto 48 state 28 lines : lines line '\n' . (2) . reduce 2 state 29 dexp : '-' . dexp (14) DREG shift 14 CONST shift 5 '-' shift 29 '(' shift 30 . error dexp goto 49 state 30 dexp : '(' . dexp ')' (15) DREG shift 14 CONST shift 5 '-' shift 29 '(' shift 30 . error dexp goto 50 state 31 line : DREG '=' dexp . (6) dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) '+' shift 51 '-' shift 52 '*' shift 53 '/' shift 54 '\n' reduce 6 32: shift/reduce conflict (shift 20, reduce 16) on '+' 32: shift/reduce conflict (shift 21, reduce 16) on '-' 32: shift/reduce conflict (shift 22, reduce 16) on '*' 32: shift/reduce conflict (shift 23, reduce 16) on '/' state 32 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '+' [trial] shift 20 '-' [trial] shift 21 '*' [trial] shift 22 '/' [trial] shift 23 '+' [trial] reduce 16 '-' [trial] reduce 16 '*' [trial] reduce 16 '/' [trial] reduce 16 '\n' reduce 16 ')' reduce 16 state 33 line : VREG '=' vexp . (7) vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '+' shift 24 '-' shift 25 '*' shift 26 '/' shift 27 '\n' reduce 7 state 34 dexp : '(' dexp ')' . (15) . reduce 15 state 35 vexp : '(' dexp ',' . dexp ')' (17) DREG shift 14 CONST shift 5 '-' shift 29 '(' shift 30 . error dexp goto 55 state 36 vexp : '(' vexp ')' . (28) . reduce 28 37: reduce/reduce conflict (reduce 10, reduce 16) on '+' 37: reduce/reduce conflict (reduce 10, reduce 16) on '-' 37: shift/reduce conflict (shift 22, reduce 16) on '*' 37: shift/reduce conflict (shift 23, reduce 16) on '/' 37: reduce/reduce conflict (reduce 10, reduce 16) on '\n' 37: reduce/reduce conflict (reduce 10, reduce 16) on ')' state 37 dexp : dexp . '+' dexp (10) dexp : dexp '+' dexp . (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '*' [trial] shift 22 '/' [trial] shift 23 '+' [trial] reduce 10 '+' [trial] reduce 16 '-' [trial] reduce 10 '-' [trial] reduce 16 '*' [trial] reduce 16 '/' [trial] reduce 16 '\n' [trial] reduce 10 '\n' [trial] reduce 16 ')' [trial] reduce 10 ')' [trial] reduce 16 ',' reduce 10 state 38 vexp : vexp . '+' vexp (19) vexp : dexp '+' vexp . (20) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 20 '-' reduce 20 '\n' reduce 20 ')' reduce 20 39: reduce/reduce conflict (reduce 11, reduce 16) on '+' 39: reduce/reduce conflict (reduce 11, reduce 16) on '-' 39: shift/reduce conflict (shift 22, reduce 16) on '*' 39: shift/reduce conflict (shift 23, reduce 16) on '/' 39: reduce/reduce conflict (reduce 11, reduce 16) on '\n' 39: reduce/reduce conflict (reduce 11, reduce 16) on ')' state 39 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp '-' dexp . (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '*' [trial] shift 22 '/' [trial] shift 23 '+' [trial] reduce 11 '+' [trial] reduce 16 '-' [trial] reduce 11 '-' [trial] reduce 16 '*' [trial] reduce 16 '/' [trial] reduce 16 '\n' [trial] reduce 11 '\n' [trial] reduce 16 ')' [trial] reduce 11 ')' [trial] reduce 16 ',' reduce 11 state 40 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : dexp '-' vexp . (22) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 22 '-' reduce 22 '\n' reduce 22 ')' reduce 22 41: reduce/reduce conflict (reduce 12, reduce 16) on '+' 41: reduce/reduce conflict (reduce 12, reduce 16) on '-' 41: reduce/reduce conflict (reduce 12, reduce 16) on '*' 41: reduce/reduce conflict (reduce 12, reduce 16) on '/' 41: reduce/reduce conflict (reduce 12, reduce 16) on '\n' 41: reduce/reduce conflict (reduce 12, reduce 16) on ')' state 41 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp '*' dexp . (12) dexp : dexp . '/' dexp (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '+' [trial] reduce 12 '+' [trial] reduce 16 '-' [trial] reduce 12 '-' [trial] reduce 16 '*' [trial] reduce 12 '*' [trial] reduce 16 '/' [trial] reduce 12 '/' [trial] reduce 16 '\n' [trial] reduce 12 '\n' [trial] reduce 16 ')' [trial] reduce 12 ')' [trial] reduce 16 ',' reduce 12 state 42 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : dexp '*' vexp . (24) vexp : vexp . '/' vexp (25) . reduce 24 43: reduce/reduce conflict (reduce 13, reduce 16) on '+' 43: reduce/reduce conflict (reduce 13, reduce 16) on '-' 43: reduce/reduce conflict (reduce 13, reduce 16) on '*' 43: reduce/reduce conflict (reduce 13, reduce 16) on '/' 43: reduce/reduce conflict (reduce 13, reduce 16) on '\n' 43: reduce/reduce conflict (reduce 13, reduce 16) on ')' state 43 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : dexp '/' dexp . (13) vexp : dexp . (16) vexp : dexp . '+' vexp (20) vexp : dexp . '-' vexp (22) vexp : dexp . '*' vexp (24) vexp : dexp . '/' vexp (26) '+' [trial] reduce 13 '+' [trial] reduce 16 '-' [trial] reduce 13 '-' [trial] reduce 16 '*' [trial] reduce 13 '*' [trial] reduce 16 '/' [trial] reduce 13 '/' [trial] reduce 16 '\n' [trial] reduce 13 '\n' [trial] reduce 16 ')' [trial] reduce 13 ')' [trial] reduce 16 ',' reduce 13 state 44 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : dexp '/' vexp . (26) . reduce 26 state 45 vexp : vexp . '+' vexp (19) vexp : vexp '+' vexp . (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 19 '-' reduce 19 '\n' reduce 19 ')' reduce 19 state 46 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp '-' vexp . (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) '*' shift 26 '/' shift 27 '+' reduce 21 '-' reduce 21 '\n' reduce 21 ')' reduce 21 state 47 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp '*' vexp . (23) vexp : vexp . '/' vexp (25) . reduce 23 state 48 vexp : vexp . '+' vexp (19) vexp : vexp . '-' vexp (21) vexp : vexp . '*' vexp (23) vexp : vexp . '/' vexp (25) vexp : vexp '/' vexp . (25) . reduce 25 state 49 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '-' dexp . (14) . reduce 14 state 50 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : '(' dexp . ')' (15) '+' shift 51 '-' shift 52 '*' shift 53 '/' shift 54 ')' shift 34 . error state 51 dexp : dexp '+' . dexp (10) DREG shift 14 CONST shift 5 '-' shift 29 '(' shift 30 . error dexp goto 56 state 52 dexp : dexp '-' . dexp (11) DREG shift 14 CONST shift 5 '-' shift 29 '(' shift 30 . error dexp goto 57 state 53 dexp : dexp '*' . dexp (12) DREG shift 14 CONST shift 5 '-' shift 29 '(' shift 30 . error dexp goto 58 state 54 dexp : dexp '/' . dexp (13) DREG shift 14 CONST shift 5 '-' shift 29 '(' shift 30 . error dexp goto 59 state 55 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) vexp : '(' dexp ',' dexp . ')' (17) '+' shift 51 '-' shift 52 '*' shift 53 '/' shift 54 ')' shift 60 . error state 56 dexp : dexp . '+' dexp (10) dexp : dexp '+' dexp . (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) '*' shift 53 '/' shift 54 '+' reduce 10 '-' reduce 10 '\n' reduce 10 ')' reduce 10 state 57 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp '-' dexp . (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) '*' shift 53 '/' shift 54 '+' reduce 11 '-' reduce 11 '\n' reduce 11 ')' reduce 11 state 58 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp '*' dexp . (12) dexp : dexp . '/' dexp (13) . reduce 12 state 59 dexp : dexp . '+' dexp (10) dexp : dexp . '-' dexp (11) dexp : dexp . '*' dexp (12) dexp : dexp . '/' dexp (13) dexp : dexp '/' dexp . (13) . reduce 13 state 60 vexp : '(' dexp ',' dexp ')' . (17) . reduce 17 State 8 contains 4 shift/reduce conflicts, 1 reduce/reduce conflict. State 16 contains 6 reduce/reduce conflicts. State 18 contains 5 shift/reduce conflicts. State 32 contains 4 shift/reduce conflicts. State 37 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts. State 39 contains 2 shift/reduce conflicts, 4 reduce/reduce conflicts. State 41 contains 6 reduce/reduce conflicts. State 43 contains 6 reduce/reduce conflicts. 15 terminals, 5 nonterminals 29 grammar rules, 61 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 DREG 3 258 VREG 4 259 CONST 5 43 '+' 6 45 '-' 7 42 '*' 8 47 '/' 9 260 UMINUS 10 10 '\n' 11 61 '=' 12 40 '(' 13 41 ')' 14 44 ',' 15 261 $accept 16 262 lines 17 263 dexp 18 264 vexp 19 265 line byacc-20221106/test/btyacc/no_output1.error0000644000000000000000000000005213501467273017151 0ustar rootrootYACC: f - cannot open "nosuchfile.output" byacc-20221106/test/btyacc/err_syntax1.tab.c0000644000000000000000000000067213726503203017152 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/btyacc_calc1.error0000644000000000000000000000007512313700133017332 0ustar rootrootYACC: 17 shift/reduce conflicts, 27 reduce/reduce conflicts. byacc-20221106/test/btyacc/err_syntax9.tab.c0000644000000000000000000000067213726503203017162 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/err_syntax6.error0000644000000000000000000000012512361053263017312 0ustar rootrootYACC: e - line 6 of "./err_syntax6.y", illegal tag %token # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); #line 131 "quote_calc4-s.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 OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #define YYERRCODE 256 typedef int YYINT; static const YYINT quote_calc4_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT quote_calc4_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT quote_calc4_defred[] = { 1, 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, 0, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT quote_calc4_stos[] = { 0, 273, 256, 260, 269, 270, 40, 274, 275, 276, 10, 270, 275, 61, 275, 10, 258, 260, 262, 264, 266, 268, 124, 269, 275, 41, 275, 275, 275, 275, 275, 275, 275, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT quote_calc4_dgoto[] = { 1, 7, 8, 9, }; static const YYINT quote_calc4_sindex[] = { 0, -38, 4, -36, 0, -51, -36, 6, -121, -249, 0, 0, -243, -36, -23, 0, -36, -36, -36, -36, -36, -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, -121, -243, }; static const YYINT quote_calc4_rindex[] = { 0, 0, 0, 0, 0, -9, 0, 0, 12, -10, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, -3, -2, -1, 1, 2, 3, -4, }; #if YYBTYACC static const YYINT quote_calc4_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT quote_calc4_gindex[] = { 0, 0, 42, 0, }; #define YYTABLESIZE 259 static const YYINT quote_calc4_table[] = { 16, 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, 10, 11, 12, 10, 16, 15, 17, 25, 18, 23, 19, 4, 20, 5, 21, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, }; static const YYINT quote_calc4_check[] = { 10, 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, 10, 10, 10, 10, 258, 10, 260, 41, 262, 269, 264, 10, 266, 10, 268, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, 19, 20, 21, 22, -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, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 258, -1, 260, -1, 262, -1, 264, -1, 266, -1, 268, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 260, -1, 260, -1, -1, -1, -1, -1, -1, 269, 270, 269, 270, 258, -1, 260, -1, 262, -1, 264, -1, 266, -1, 268, -1, -1, 258, 258, 260, 260, 262, 262, 264, 264, 266, 266, 268, 268, }; #if YYBTYACC static const YYINT quote_calc4_ctable[] = { -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, -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, -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, -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, -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, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 271 #define YYUNDFTOKEN 277 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const quote_calc4_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL", "\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"", "OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS","$accept","list","stat", "expr","number","illegal-symbol", }; static const char *const quote_calc4_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr \"ADD-operator\" expr", "expr : expr \"SUB-operator\" expr", "expr : expr \"MUL-operator\" expr", "expr : expr \"DIV-operator\" expr", "expr : expr \"MOD-operator\" expr", "expr : expr \"AND-operator\" expr", "expr : expr '|' expr", "expr : \"SUB-operator\" expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 73 "quote_calc4.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 530 "quote_calc4-s.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 35 "quote_calc4.y" { yyerrok ; } #line 1203 "quote_calc4-s.tab.c" break; case 4: #line 39 "quote_calc4.y" { printf("%d\n",yystack.l_mark[0]);} #line 1208 "quote_calc4-s.tab.c" break; case 5: #line 41 "quote_calc4.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1213 "quote_calc4-s.tab.c" break; case 6: #line 45 "quote_calc4.y" { yyval = yystack.l_mark[-1]; } #line 1218 "quote_calc4-s.tab.c" break; case 7: #line 47 "quote_calc4.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1223 "quote_calc4-s.tab.c" break; case 8: #line 49 "quote_calc4.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1228 "quote_calc4-s.tab.c" break; case 9: #line 51 "quote_calc4.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1233 "quote_calc4-s.tab.c" break; case 10: #line 53 "quote_calc4.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1238 "quote_calc4-s.tab.c" break; case 11: #line 55 "quote_calc4.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1243 "quote_calc4-s.tab.c" break; case 12: #line 57 "quote_calc4.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1248 "quote_calc4-s.tab.c" break; case 13: #line 59 "quote_calc4.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1253 "quote_calc4-s.tab.c" break; case 14: #line 61 "quote_calc4.y" { yyval = - yystack.l_mark[0]; } #line 1258 "quote_calc4-s.tab.c" break; case 15: #line 63 "quote_calc4.y" { yyval = regs[yystack.l_mark[0]]; } #line 1263 "quote_calc4-s.tab.c" break; case 17: #line 68 "quote_calc4.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1268 "quote_calc4-s.tab.c" break; case 18: #line 70 "quote_calc4.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1273 "quote_calc4-s.tab.c" break; #line 1275 "quote_calc4-s.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_inherit1.error0000644000000000000000000000013612361053263017423 0ustar rootrootYACC: e - line 64 of "./err_inherit1.y", unterminated argument list namelist($c, $t ^ byacc-20221106/test/btyacc/err_syntax16.output0000644000000000000000000000000012314147323017571 0ustar rootrootbyacc-20221106/test/btyacc/btyacc_destroy1.tab.h0000644000000000000000000000075314030125513017770 0ustar rootroot#ifndef _destroy1__defines_h_ #define _destroy1__defines_h_ #define GLOBAL 257 #define LOCAL 258 #define REAL 259 #define INTEGER 260 #define NAME 261 #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 typedef union YYSTYPE { class cval; type tval; namelist * nlist; name id; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ extern YYSTYPE destroy1_lval; #endif /* _destroy1__defines_h_ */ byacc-20221106/test/btyacc/no_b_opt1.error0000644000000000000000000000004513501467273016716 0ustar rootrootYACC: f - cannot open "nosuchfile.c" byacc-20221106/test/btyacc/err_syntax23.output0000644000000000000000000000000012314147323017567 0ustar rootrootbyacc-20221106/test/btyacc/defines2.calc.h0000644000000000000000000000020413501474556016533 0ustar rootroot#ifndef _yy_defines_h_ #define _yy_defines_h_ #define DIGIT 257 #define LETTER 258 #define UMINUS 259 #endif /* _yy_defines_h_ */ byacc-20221106/test/btyacc/stdin2.output0000644000000000000000000000000013501467273016437 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax3.tab.h0000644000000000000000000000000012314147323017141 0ustar rootrootbyacc-20221106/test/btyacc/expr.oxout.error0000644000000000000000000000011013044507462017157 0ustar rootrootYACC: w - line 6 of "expr.Y", the precedence of '*' has been redeclared byacc-20221106/test/btyacc/err_syntax11.tab.h0000644000000000000000000000015512314147323017233 0ustar rootroot#ifndef _err_syntax11__defines_h_ #define _err_syntax11__defines_h_ #endif /* _err_syntax11__defines_h_ */ byacc-20221106/test/btyacc/err_syntax15.tab.h0000644000000000000000000000000012314147323017224 0ustar rootrootbyacc-20221106/test/btyacc/inherit0.output0000644000000000000000000000404312315230212016750 0ustar rootroot 0 $accept : declaration $end 1 declaration : class type namelist 2 | type locnamelist 3 class : GLOBAL 4 | LOCAL 5 type : REAL 6 | INTEGER 7 namelist : namelist NAME 8 | NAME 9 $$1 : 10 $$2 : 11 locnamelist : $$1 $$2 namelist state 0 $accept : . declaration $end (0) GLOBAL shift 1 LOCAL shift 2 REAL shift 3 INTEGER shift 4 . error declaration goto 5 class goto 6 type goto 7 state 1 class : GLOBAL . (3) . reduce 3 state 2 class : LOCAL . (4) . reduce 4 state 3 type : REAL . (5) . reduce 5 state 4 type : INTEGER . (6) . reduce 6 state 5 $accept : declaration . $end (0) $end accept state 6 declaration : class . type namelist (1) REAL shift 3 INTEGER shift 4 . error type goto 8 state 7 declaration : type . locnamelist (2) $$1 : . (9) . reduce 9 locnamelist goto 9 $$1 goto 10 state 8 declaration : class type . namelist (1) NAME shift 11 . error namelist goto 12 state 9 declaration : type locnamelist . (2) . reduce 2 state 10 locnamelist : $$1 . $$2 namelist (11) $$2 : . (10) . reduce 10 $$2 goto 13 state 11 namelist : NAME . (8) . reduce 8 state 12 declaration : class type namelist . (1) namelist : namelist . NAME (7) NAME shift 14 $end reduce 1 state 13 locnamelist : $$1 $$2 . namelist (11) NAME shift 11 . error namelist goto 15 state 14 namelist : namelist NAME . (7) . reduce 7 state 15 namelist : namelist . NAME (7) locnamelist : $$1 $$2 namelist . (11) NAME shift 14 $end reduce 11 7 terminals, 8 nonterminals 12 grammar rules, 16 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 GLOBAL 3 258 LOCAL 4 259 REAL 5 260 INTEGER 6 261 NAME 7 262 $accept 8 263 declaration 9 264 class 10 265 type 11 266 namelist 12 267 locnamelist 13 268 $$1 14 269 $$2 byacc-20221106/test/btyacc/err_syntax23.error0000644000000000000000000000006712361053263017376 0ustar rootrootYACC: e - line 18 of "./err_syntax23.y", $$ is untyped byacc-20221106/test/btyacc/btyacc_destroy1.tab.c0000644000000000000000000013530014104035275017767 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 1 #define YYDEBUGSTR (yytrial ? YYPREFIX "debug(trial)" : YYPREFIX "debug") #ifndef yyparse #define yyparse destroy1_parse #endif /* yyparse */ #ifndef yylex #define yylex destroy1_lex #endif /* yylex */ #ifndef yyerror #define yyerror destroy1_error #endif /* yyerror */ #ifndef yychar #define yychar destroy1_char #endif /* yychar */ #ifndef yyval #define yyval destroy1_val #endif /* yyval */ #ifndef yylval #define yylval destroy1_lval #endif /* yylval */ #ifndef yydebug #define yydebug destroy1_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs destroy1_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag destroy1_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs destroy1_lhs #endif /* yylhs */ #ifndef yylen #define yylen destroy1_len #endif /* yylen */ #ifndef yydefred #define yydefred destroy1_defred #endif /* yydefred */ #ifndef yystos #define yystos destroy1_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto destroy1_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex destroy1_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex destroy1_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex destroy1_gindex #endif /* yygindex */ #ifndef yytable #define yytable destroy1_table #endif /* yytable */ #ifndef yycheck #define yycheck destroy1_check #endif /* yycheck */ #ifndef yyname #define yyname destroy1_name #endif /* yyname */ #ifndef yyrule #define yyrule destroy1_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex destroy1_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable destroy1_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "destroy1_" #define YYPURE 0 #line 4 "btyacc_destroy1.y" #include typedef enum {cGLOBAL, cLOCAL} class; typedef enum {tREAL, tINTEGER} type; typedef char * name; struct symbol { class c; type t; name id; }; typedef struct symbol symbol; struct namelist { symbol *s; struct namelist *next; }; typedef struct namelist namelist; struct parser_param { int *rtrn; symbol ss; }; extern symbol *mksymbol(type t, class c, name id); #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) #endif #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #line 50 "btyacc_destroy1.y" typedef union YYSTYPE { class cval; type tval; namelist * nlist; name id; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 160 "btyacc_destroy1.tab.c" /* 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(struct parser_param *param, int flag) #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(struct parser_param *param, int flag, const char *s) #endif #ifndef YYERROR_CALL #define YYERROR_CALL(msg) yyerror(param, flag, msg) #endif #ifndef YYDESTRUCT_DECL #define YYDESTRUCT_DECL() yydestruct(const char *msg, int psymb, YYSTYPE *val, struct parser_param *param, int flag) #endif #ifndef YYDESTRUCT_CALL #define YYDESTRUCT_CALL(msg, psymb, val) yydestruct(msg, psymb, val, param, flag) #endif extern int YYPARSE_DECL(); #define GLOBAL 257 #define LOCAL 258 #define REAL 259 #define INTEGER 260 #define NAME 261 #define YYERRCODE 256 typedef int YYINT; static const YYINT destroy1_lhs[] = { -1, 0, 0, 2, 2, 3, 3, 4, 4, 1, }; static const YYINT destroy1_len[] = { 2, 8, 5, 1, 1, 1, 1, 2, 1, 6, }; static const YYINT destroy1_defred[] = { 0, 3, 4, 5, 6, 0, 0, 0, 0, 8, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 9, 1, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT destroy1_stos[] = { 0, 257, 258, 259, 260, 263, 265, 266, 266, 261, 264, 267, 267, 40, 261, 40, 40, 265, 258, 265, 41, 44, 44, 266, 266, 41, 41, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT destroy1_dgoto[] = { 5, 10, 6, 7, 11, }; static const YYINT destroy1_sindex[] = { -254, 0, 0, 0, 0, 0, -251, -248, -248, 0, -26, -40, -39, -246, 0, -243, -246, -25, -24, -23, 0, -251, -251, -22, -19, 0, 0, }; static const YYINT destroy1_rindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #if YYBTYACC static const YYINT destroy1_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT destroy1_gindex[] = { 0, 0, -6, -4, 15, }; #define YYTABLESIZE 222 static const YYINT destroy1_table[] = { 15, 16, 8, 1, 2, 3, 4, 17, 3, 4, 19, 1, 2, 9, 13, 18, 20, 23, 24, 25, 21, 22, 26, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, }; static const YYINT destroy1_check[] = { 40, 40, 6, 257, 258, 259, 260, 13, 259, 260, 16, 257, 258, 261, 40, 258, 41, 21, 22, 41, 44, 44, 41, 8, -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, -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, -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, -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, 261, 261, }; #if YYBTYACC static const YYINT destroy1_ctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, -1, -1, }; #endif #define YYFINAL 5 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 261 #define YYUNDFTOKEN 268 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const destroy1_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'('","')'",0,0,"','",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","GLOBAL","LOCAL", "REAL","INTEGER","NAME","$accept","declaration","locnamelist","class","type", "namelist","illegal-symbol", }; static const char *const destroy1_rule[] = { "$accept : declaration", "declaration : class type namelist '(' class ',' type ')'", "declaration : type locnamelist '(' class ')'", "class : GLOBAL", "class : LOCAL", "type : REAL", "type : INTEGER", "namelist : namelist NAME", "namelist : NAME", "locnamelist : namelist '(' LOCAL ',' type ')'", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 89 "btyacc_destroy1.y" extern int YYLEX_DECL(); extern void YYERROR_DECL(); #line 492 "btyacc_destroy1.tab.c" /* Release memory associated with symbol. */ #if ! defined YYDESTRUCT_IS_DECLARED static void YYDESTRUCT_DECL() { switch (psymb) { case 263: #line 41 "btyacc_destroy1.y" { namelist *p = (*val).nlist; while (p != NULL) { namelist *pp = p; p = p->next; free(pp->s); free(pp); } } #line 511 "btyacc_destroy1.tab.c" break; } } #define YYDESTRUCT_IS_DECLARED 1 #endif /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 1: if (!yytrial) #line 62 "btyacc_destroy1.y" { yyval.nlist = yystack.l_mark[-5].nlist; } #line 1190 "btyacc_destroy1.tab.c" break; case 2: if (!yytrial) #line 64 "btyacc_destroy1.y" { yyval.nlist = yystack.l_mark[-3].nlist; } #line 1196 "btyacc_destroy1.tab.c" break; case 3: if (!yytrial) #line 67 "btyacc_destroy1.y" { yyval.cval = cGLOBAL; } #line 1202 "btyacc_destroy1.tab.c" break; case 4: if (!yytrial) #line 68 "btyacc_destroy1.y" { yyval.cval = cLOCAL; } #line 1208 "btyacc_destroy1.tab.c" break; case 5: if (!yytrial) #line 71 "btyacc_destroy1.y" { yyval.tval = tREAL; } #line 1214 "btyacc_destroy1.tab.c" break; case 6: if (!yytrial) #line 72 "btyacc_destroy1.y" { yyval.tval = tINTEGER; } #line 1220 "btyacc_destroy1.tab.c" break; case 7: if (!yytrial) #line 76 "btyacc_destroy1.y" { yyval.nlist->s = mksymbol(yystack.l_mark[-2].tval, yystack.l_mark[-2].cval, yystack.l_mark[0].id); yyval.nlist->next = yystack.l_mark[-1].nlist; } #line 1228 "btyacc_destroy1.tab.c" break; case 8: if (!yytrial) #line 80 "btyacc_destroy1.y" { yyval.nlist->s = mksymbol(0, 0, yystack.l_mark[0].id); yyval.nlist->next = NULL; } #line 1236 "btyacc_destroy1.tab.c" break; case 9: if (!yytrial) #line 86 "btyacc_destroy1.y" { yyval.nlist = yystack.l_mark[-5].nlist; } #line 1242 "btyacc_destroy1.tab.c" break; #line 1244 "btyacc_destroy1.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/quote_calc2.tab.c0000644000000000000000000013755614104035275017110 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse quote_calc2_parse #endif /* yyparse */ #ifndef yylex #define yylex quote_calc2_lex #endif /* yylex */ #ifndef yyerror #define yyerror quote_calc2_error #endif /* yyerror */ #ifndef yychar #define yychar quote_calc2_char #endif /* yychar */ #ifndef yyval #define yyval quote_calc2_val #endif /* yyval */ #ifndef yylval #define yylval quote_calc2_lval #endif /* yylval */ #ifndef yydebug #define yydebug quote_calc2_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs quote_calc2_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag quote_calc2_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs quote_calc2_lhs #endif /* yylhs */ #ifndef yylen #define yylen quote_calc2_len #endif /* yylen */ #ifndef yydefred #define yydefred quote_calc2_defred #endif /* yydefred */ #ifndef yystos #define yystos quote_calc2_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto quote_calc2_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex quote_calc2_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex quote_calc2_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex quote_calc2_gindex #endif /* yygindex */ #ifndef yytable #define yytable quote_calc2_table #endif /* yytable */ #ifndef yycheck #define yycheck quote_calc2_check #endif /* yycheck */ #ifndef yyname #define yyname quote_calc2_name #endif /* yyname */ #ifndef yyrule #define yyrule quote_calc2_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex quote_calc2_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable quote_calc2_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "quote_calc2_" #define YYPURE 0 #line 2 "quote_calc2.y" # include # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); #line 131 "quote_calc2.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 OP_ADD 257 #define ADD 258 #define OP_SUB 259 #define SUB 260 #define OP_MUL 261 #define MUL 262 #define OP_DIV 263 #define DIV 264 #define OP_MOD 265 #define MOD 266 #define OP_AND 267 #define AND 268 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #define YYERRCODE 256 typedef int YYINT; static const YYINT quote_calc2_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT quote_calc2_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT quote_calc2_defred[] = { 1, 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, 0, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT quote_calc2_stos[] = { 0, 273, 256, 260, 269, 270, 40, 274, 275, 276, 10, 270, 275, 61, 275, 10, 258, 260, 262, 264, 266, 268, 124, 269, 275, 41, 275, 275, 275, 275, 275, 275, 275, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT quote_calc2_dgoto[] = { 1, 7, 8, 9, }; static const YYINT quote_calc2_sindex[] = { 0, -38, 4, -36, 0, -51, -36, 6, -121, -249, 0, 0, -243, -36, -23, 0, -36, -36, -36, -36, -36, -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, -121, -243, }; static const YYINT quote_calc2_rindex[] = { 0, 0, 0, 0, 0, -9, 0, 0, 12, -10, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, -3, -2, -1, 1, 2, 3, -4, }; #if YYBTYACC static const YYINT quote_calc2_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT quote_calc2_gindex[] = { 0, 0, 42, 0, }; #define YYTABLESIZE 259 static const YYINT quote_calc2_table[] = { 16, 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, 10, 11, 12, 10, 16, 15, 17, 25, 18, 23, 19, 4, 20, 5, 21, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, }; static const YYINT quote_calc2_check[] = { 10, 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, 10, 10, 10, 10, 258, 10, 260, 41, 262, 269, 264, 10, 266, 10, 268, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, 19, 20, 21, 22, -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, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 258, -1, 260, -1, 262, -1, 264, -1, 266, -1, 268, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 260, -1, 260, -1, -1, -1, -1, -1, -1, 269, 270, 269, 270, 258, -1, 260, -1, 262, -1, 264, -1, 266, -1, 268, -1, -1, 258, 258, 260, 260, 262, 262, 264, 264, 266, 266, 268, 268, }; #if YYBTYACC static const YYINT quote_calc2_ctable[] = { -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, -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, -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, -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, -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, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 271 #define YYUNDFTOKEN 277 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const quote_calc2_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV", "\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS", "$accept","list","stat","expr","number","illegal-symbol", }; static const char *const quote_calc2_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr \"ADD\" expr", "expr : expr \"SUB\" expr", "expr : expr \"MUL\" expr", "expr : expr \"DIV\" expr", "expr : expr \"MOD\" expr", "expr : expr \"AND\" expr", "expr : expr '|' expr", "expr : \"SUB\" expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 73 "quote_calc2.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 535 "quote_calc2.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 35 "quote_calc2.y" { yyerrok ; } #line 1208 "quote_calc2.tab.c" break; case 4: #line 39 "quote_calc2.y" { printf("%d\n",yystack.l_mark[0]);} #line 1213 "quote_calc2.tab.c" break; case 5: #line 41 "quote_calc2.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1218 "quote_calc2.tab.c" break; case 6: #line 45 "quote_calc2.y" { yyval = yystack.l_mark[-1]; } #line 1223 "quote_calc2.tab.c" break; case 7: #line 47 "quote_calc2.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1228 "quote_calc2.tab.c" break; case 8: #line 49 "quote_calc2.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1233 "quote_calc2.tab.c" break; case 9: #line 51 "quote_calc2.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1238 "quote_calc2.tab.c" break; case 10: #line 53 "quote_calc2.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1243 "quote_calc2.tab.c" break; case 11: #line 55 "quote_calc2.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1248 "quote_calc2.tab.c" break; case 12: #line 57 "quote_calc2.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1253 "quote_calc2.tab.c" break; case 13: #line 59 "quote_calc2.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1258 "quote_calc2.tab.c" break; case 14: #line 61 "quote_calc2.y" { yyval = - yystack.l_mark[0]; } #line 1263 "quote_calc2.tab.c" break; case 15: #line 63 "quote_calc2.y" { yyval = regs[yystack.l_mark[0]]; } #line 1268 "quote_calc2.tab.c" break; case 17: #line 68 "quote_calc2.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1273 "quote_calc2.tab.c" break; case 18: #line 70 "quote_calc2.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1278 "quote_calc2.tab.c" break; #line 1280 "quote_calc2.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/quote_calc3-s.tab.c0000644000000000000000000013752014104035275017340 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse quote_calc3_parse #endif /* yyparse */ #ifndef yylex #define yylex quote_calc3_lex #endif /* yylex */ #ifndef yyerror #define yyerror quote_calc3_error #endif /* yyerror */ #ifndef yychar #define yychar quote_calc3_char #endif /* yychar */ #ifndef yyval #define yyval quote_calc3_val #endif /* yyval */ #ifndef yylval #define yylval quote_calc3_lval #endif /* yylval */ #ifndef yydebug #define yydebug quote_calc3_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs quote_calc3_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag quote_calc3_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs quote_calc3_lhs #endif /* yylhs */ #ifndef yylen #define yylen quote_calc3_len #endif /* yylen */ #ifndef yydefred #define yydefred quote_calc3_defred #endif /* yydefred */ #ifndef yystos #define yystos quote_calc3_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto quote_calc3_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex quote_calc3_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex quote_calc3_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex quote_calc3_gindex #endif /* yygindex */ #ifndef yytable #define yytable quote_calc3_table #endif /* yytable */ #ifndef yycheck #define yycheck quote_calc3_check #endif /* yycheck */ #ifndef yyname #define yyname quote_calc3_name #endif /* yyname */ #ifndef yyrule #define yyrule quote_calc3_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex quote_calc3_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable quote_calc3_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "quote_calc3_" #define YYPURE 0 #line 2 "quote_calc3.y" # include # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); #line 131 "quote_calc3-s.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 OP_ADD 257 #define OP_SUB 259 #define OP_MUL 261 #define OP_DIV 263 #define OP_MOD 265 #define OP_AND 267 #define DIGIT 269 #define LETTER 270 #define UMINUS 271 #define YYERRCODE 256 typedef int YYINT; static const YYINT quote_calc3_lhs[] = { -1, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, }; static const YYINT quote_calc3_len[] = { 2, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 1, 2, }; static const YYINT quote_calc3_defred[] = { 1, 0, 0, 0, 17, 0, 0, 0, 0, 0, 3, 15, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 18, 0, 6, 0, 0, 0, 0, 0, 0, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT quote_calc3_stos[] = { 0, 273, 256, 259, 269, 270, 40, 274, 275, 276, 10, 270, 275, 61, 275, 10, 257, 259, 261, 263, 265, 267, 124, 269, 275, 41, 275, 275, 275, 275, 275, 275, 275, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT quote_calc3_dgoto[] = { 1, 7, 8, 9, }; static const YYINT quote_calc3_sindex[] = { 0, -38, 5, -36, 0, -51, -36, 7, -121, -248, 0, 0, -243, -36, -22, 0, -36, -36, -36, -36, -36, -36, -36, 0, -121, 0, -121, -121, -121, -121, -121, -121, -243, }; static const YYINT quote_calc3_rindex[] = { 0, 0, 0, 0, 0, -9, 0, 0, 13, -10, 0, 0, -5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, -3, -2, -1, 1, 2, 3, -4, }; #if YYBTYACC static const YYINT quote_calc3_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT quote_calc3_gindex[] = { 0, 0, 42, 0, }; #define YYTABLESIZE 258 static const YYINT quote_calc3_table[] = { 16, 15, 6, 22, 6, 14, 13, 7, 8, 9, 13, 10, 11, 12, 16, 10, 17, 15, 18, 25, 19, 23, 20, 4, 21, 5, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 14, 13, 7, 8, 9, 0, 10, 11, 12, 12, 0, 0, 14, 0, 0, 0, 0, 0, 0, 24, 0, 0, 26, 27, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 15, 0, 0, 0, 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 5, 4, 11, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, 16, 15, }; static const YYINT quote_calc3_check[] = { 10, 10, 40, 124, 40, 10, 10, 10, 10, 10, 61, 10, 10, 10, 257, 10, 259, 10, 261, 41, 263, 269, 265, 10, 267, 10, -1, -1, -1, -1, -1, 41, -1, -1, -1, -1, 41, 41, 41, 41, 41, -1, 41, 41, 41, 3, -1, -1, 6, -1, -1, -1, -1, -1, -1, 13, -1, -1, 16, 17, 18, 19, 20, 21, 22, -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, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 124, -1, -1, -1, 124, 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, -1, 259, -1, 261, -1, 263, -1, 265, -1, 267, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, 259, -1, 259, -1, -1, -1, -1, -1, -1, -1, 269, 270, 269, 270, 257, -1, 259, -1, 261, -1, 263, -1, 265, -1, 267, -1, 257, 257, 259, 259, 261, 261, 263, 263, 265, 265, 267, 267, }; #if YYBTYACC static const YYINT quote_calc3_ctable[] = { -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, -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, -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, -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, -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, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 271 #define YYUNDFTOKEN 277 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const quote_calc3_name[] = { "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0, 0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"error","OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL", "\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"", "OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS","$accept","list","stat", "expr","number","illegal-symbol", }; static const char *const quote_calc3_rule[] = { "$accept : list", "list :", "list : list stat '\\n'", "list : list error '\\n'", "stat : expr", "stat : LETTER '=' expr", "expr : '(' expr ')'", "expr : expr OP_ADD expr", "expr : expr OP_SUB expr", "expr : expr OP_MUL expr", "expr : expr OP_DIV expr", "expr : expr OP_MOD expr", "expr : expr OP_AND expr", "expr : expr '|' expr", "expr : OP_SUB expr", "expr : LETTER", "expr : number", "number : DIGIT", "number : number DIGIT", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 73 "quote_calc3.y" /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } #line 530 "quote_calc3-s.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 3: #line 35 "quote_calc3.y" { yyerrok ; } #line 1203 "quote_calc3-s.tab.c" break; case 4: #line 39 "quote_calc3.y" { printf("%d\n",yystack.l_mark[0]);} #line 1208 "quote_calc3-s.tab.c" break; case 5: #line 41 "quote_calc3.y" { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } #line 1213 "quote_calc3-s.tab.c" break; case 6: #line 45 "quote_calc3.y" { yyval = yystack.l_mark[-1]; } #line 1218 "quote_calc3-s.tab.c" break; case 7: #line 47 "quote_calc3.y" { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } #line 1223 "quote_calc3-s.tab.c" break; case 8: #line 49 "quote_calc3.y" { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } #line 1228 "quote_calc3-s.tab.c" break; case 9: #line 51 "quote_calc3.y" { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } #line 1233 "quote_calc3-s.tab.c" break; case 10: #line 53 "quote_calc3.y" { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } #line 1238 "quote_calc3-s.tab.c" break; case 11: #line 55 "quote_calc3.y" { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } #line 1243 "quote_calc3-s.tab.c" break; case 12: #line 57 "quote_calc3.y" { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } #line 1248 "quote_calc3-s.tab.c" break; case 13: #line 59 "quote_calc3.y" { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } #line 1253 "quote_calc3-s.tab.c" break; case 14: #line 61 "quote_calc3.y" { yyval = - yystack.l_mark[0]; } #line 1258 "quote_calc3-s.tab.c" break; case 15: #line 63 "quote_calc3.y" { yyval = regs[yystack.l_mark[0]]; } #line 1263 "quote_calc3-s.tab.c" break; case 17: #line 68 "quote_calc3.y" { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } #line 1268 "quote_calc3-s.tab.c" break; case 18: #line 70 "quote_calc3.y" { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } #line 1273 "quote_calc3-s.tab.c" break; #line 1275 "quote_calc3-s.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_syntax19.output0000644000000000000000000000000012314147323017574 0ustar rootrootbyacc-20221106/test/btyacc/no_defines.error0000644000000000000000000000004513501467273017147 0ustar rootrootYACC: f - cannot open "nosuchfile.h" byacc-20221106/test/btyacc/err_syntax10.tab.c0000644000000000000000000011546514104035275017241 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse err_syntax10_parse #endif /* yyparse */ #ifndef yylex #define yylex err_syntax10_lex #endif /* yylex */ #ifndef yyerror #define yyerror err_syntax10_error #endif /* yyerror */ #ifndef yychar #define yychar err_syntax10_char #endif /* yychar */ #ifndef yyval #define yyval err_syntax10_val #endif /* yyval */ #ifndef yylval #define yylval err_syntax10_lval #endif /* yylval */ #ifndef yydebug #define yydebug err_syntax10_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs err_syntax10_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag err_syntax10_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs err_syntax10_lhs #endif /* yylhs */ #ifndef yylen #define yylen err_syntax10_len #endif /* yylen */ #ifndef yydefred #define yydefred err_syntax10_defred #endif /* yydefred */ #ifndef yystos #define yystos err_syntax10_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto err_syntax10_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex err_syntax10_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex err_syntax10_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex err_syntax10_gindex #endif /* yygindex */ #ifndef yytable #define yytable err_syntax10_table #endif /* yytable */ #ifndef yycheck #define yycheck err_syntax10_check #endif /* yycheck */ #ifndef yyname #define yyname err_syntax10_name #endif /* yyname */ #ifndef yyrule #define yyrule err_syntax10_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex err_syntax10_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable err_syntax10_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "err_syntax10_" #define YYPURE 0 #line 2 "err_syntax10.y" int yylex(void); static void yyerror(const char *); #line 124 "err_syntax10.tab.c" /* 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 YYERRCODE 256 typedef int YYINT; static const YYINT err_syntax10_lhs[] = { -1, 0, }; static const YYINT err_syntax10_len[] = { 2, 1, }; static const YYINT err_syntax10_defred[] = { 0, 1, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT err_syntax10_stos[] = { 0, 256, 258, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT err_syntax10_dgoto[] = { 2, }; static const YYINT err_syntax10_sindex[] = { -256, 0, 0, }; static const YYINT err_syntax10_rindex[] = { 0, 0, 0, }; #if YYBTYACC static const YYINT err_syntax10_cindex[] = { 0, 0, 0, }; #endif static const YYINT err_syntax10_gindex[] = { 0, }; #define YYTABLESIZE 0 static const YYINT err_syntax10_table[] = { 1, }; static const YYINT err_syntax10_check[] = { 256, }; #if YYBTYACC static const YYINT err_syntax10_ctable[] = { -1, }; #endif #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 256 #define YYUNDFTOKEN 259 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const err_syntax10_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,"'&'",0,"'('",0,"'*'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","$accept","S", "illegal-symbol", }; static const char *const err_syntax10_rule[] = { "$accept : S", "S : error", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 12 "err_syntax10.y" #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } #line 372 "err_syntax10.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/defines3.output0000644000000000000000000000000013501474556016736 0ustar rootrootbyacc-20221106/test/btyacc/pure_error.tab.c0000644000000000000000000011701514104035275017057 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse error_parse #endif /* yyparse */ #ifndef yylex #define yylex error_lex #endif /* yylex */ #ifndef yyerror #define yyerror error_error #endif /* yyerror */ #ifndef yychar #define yychar error_char #endif /* yychar */ #ifndef yyval #define yyval error_val #endif /* yyval */ #ifndef yylval #define yylval error_lval #endif /* yylval */ #ifndef yydebug #define yydebug error_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs error_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag error_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs error_lhs #endif /* yylhs */ #ifndef yylen #define yylen error_len #endif /* yylen */ #ifndef yydefred #define yydefred error_defred #endif /* yydefred */ #ifndef yystos #define yystos error_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto error_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex error_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex error_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex error_gindex #endif /* yygindex */ #ifndef yytable #define yytable error_table #endif /* yytable */ #ifndef yycheck #define yycheck error_check #endif /* yycheck */ #ifndef yyname #define yyname error_name #endif /* yyname */ #ifndef yyrule #define yyrule error_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex error_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable error_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "error_" #define YYPURE 1 #line 2 "pure_error.y" #ifdef YYBISON #define YYSTYPE int #define YYLEX_PARAM &yylval #define YYLEX_DECL() yylex(YYSTYPE *yylval) #define YYERROR_DECL() yyerror(const char *s) int YYLEX_DECL(); static void YYERROR_DECL(); #endif #line 132 "pure_error.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 # ifdef YYLEX_PARAM_TYPE # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM) # else # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM) # endif # define YYLEX yylex(&yylval, YYLEX_PARAM) #else # define YYLEX_DECL() yylex(YYSTYPE *yylval) # define YYLEX yylex(&yylval) #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 YYERRCODE 256 typedef int YYINT; static const YYINT error_lhs[] = { -1, 0, }; static const YYINT error_len[] = { 2, 1, }; static const YYINT error_defred[] = { 0, 1, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT error_stos[] = { 0, 256, 258, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT error_dgoto[] = { 2, }; static const YYINT error_sindex[] = { -256, 0, 0, }; static const YYINT error_rindex[] = { 0, 0, 0, }; #if YYBTYACC static const YYINT error_cindex[] = { 0, 0, 0, }; #endif static const YYINT error_gindex[] = { 0, }; #define YYTABLESIZE 0 static const YYINT error_table[] = { 1, }; static const YYINT error_check[] = { 256, }; #if YYBTYACC static const YYINT error_ctable[] = { -1, }; #endif #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 256 #define YYUNDFTOKEN 259 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const error_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","$accept","S","illegal-symbol", }; static const char *const error_rule[] = { "$accept : S", "S : error", }; #endif #if YYDEBUG int yydebug; #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ #line 17 "pure_error.y" #include #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(YYSTYPE *value) { return value ? 0 : -1; } static void yyerror(const char* s) { printf("%s\n", s); } #line 341 "pure_error.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif /* variables for the parser stack */ YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif yyerrflag = 0; yychar = 0; memset(&yyval, 0, sizeof(yyval)); memset(&yylval, 0, sizeof(yylval)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(&yyloc, 0, sizeof(yyloc)); memset(&yylloc, 0, sizeof(yylloc)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/empty.tab.c0000644000000000000000000011537314104035275016036 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #ifndef yyparse #define yyparse empty_parse #endif /* yyparse */ #ifndef yylex #define yylex empty_lex #endif /* yylex */ #ifndef yyerror #define yyerror empty_error #endif /* yyerror */ #ifndef yychar #define yychar empty_char #endif /* yychar */ #ifndef yyval #define yyval empty_val #endif /* yyval */ #ifndef yylval #define yylval empty_lval #endif /* yylval */ #ifndef yydebug #define yydebug empty_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs empty_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag empty_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs empty_lhs #endif /* yylhs */ #ifndef yylen #define yylen empty_len #endif /* yylen */ #ifndef yydefred #define yydefred empty_defred #endif /* yydefred */ #ifndef yystos #define yystos empty_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto empty_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex empty_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex empty_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex empty_gindex #endif /* yygindex */ #ifndef yytable #define yytable empty_table #endif /* yytable */ #ifndef yycheck #define yycheck empty_check #endif /* yycheck */ #ifndef yyname #define yyname empty_name #endif /* yyname */ #ifndef yyrule #define yyrule empty_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex empty_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable empty_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "empty_" #define YYPURE 0 #line 2 "empty.y" #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) static int YYLEX_DECL(); static void YYERROR_DECL(); #endif #line 128 "empty.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 YYERRCODE 256 typedef int YYINT; static const YYINT empty_lhs[] = { -1, 0, }; static const YYINT empty_len[] = { 2, 0, }; static const YYINT empty_defred[] = { 1, 0, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT empty_stos[] = { 0, 258, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT empty_dgoto[] = { 1, }; static const YYINT empty_sindex[] = { 0, 0, }; static const YYINT empty_rindex[] = { 0, 0, }; #if YYBTYACC static const YYINT empty_cindex[] = { 0, 0, }; #endif static const YYINT empty_gindex[] = { 0, }; #define YYTABLESIZE 0 static const YYINT empty_table[] = { 0, }; static const YYINT empty_check[] = { -1, }; #if YYBTYACC static const YYINT empty_ctable[] = { -1, }; #endif #define YYFINAL 1 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 256 #define YYUNDFTOKEN 259 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const empty_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","$accept","start", "illegal-symbol", }; static const char *const empty_rule[] = { "$accept : start", "start :", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 13 "empty.y" #include static int YYLEX_DECL() { return -1; } static void YYERROR_DECL() { printf("%s\n",s); } #line 373 "empty.tab.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_syntax23.tab.c0000644000000000000000000000067213726503203017236 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/btyacc/err_syntax8.error0000644000000000000000000000011012361053263017306 0ustar rootrootYACC: e - line 6 of "./err_syntax8.y", illegal use of reserved symbol . byacc-20221106/test/btyacc/err_syntax12.error0000644000000000000000000000011612361053263017367 0ustar rootrootYACC: w - line 7 of "./err_syntax12.y", the value of text has been redeclared byacc-20221106/test/btyacc/btyacc_destroy2.tab.c0000644000000000000000000013530014104035275017770 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 1 #define YYDEBUGSTR (yytrial ? YYPREFIX "debug(trial)" : YYPREFIX "debug") #ifndef yyparse #define yyparse destroy2_parse #endif /* yyparse */ #ifndef yylex #define yylex destroy2_lex #endif /* yylex */ #ifndef yyerror #define yyerror destroy2_error #endif /* yyerror */ #ifndef yychar #define yychar destroy2_char #endif /* yychar */ #ifndef yyval #define yyval destroy2_val #endif /* yyval */ #ifndef yylval #define yylval destroy2_lval #endif /* yylval */ #ifndef yydebug #define yydebug destroy2_debug #endif /* yydebug */ #ifndef yynerrs #define yynerrs destroy2_nerrs #endif /* yynerrs */ #ifndef yyerrflag #define yyerrflag destroy2_errflag #endif /* yyerrflag */ #ifndef yylhs #define yylhs destroy2_lhs #endif /* yylhs */ #ifndef yylen #define yylen destroy2_len #endif /* yylen */ #ifndef yydefred #define yydefred destroy2_defred #endif /* yydefred */ #ifndef yystos #define yystos destroy2_stos #endif /* yystos */ #ifndef yydgoto #define yydgoto destroy2_dgoto #endif /* yydgoto */ #ifndef yysindex #define yysindex destroy2_sindex #endif /* yysindex */ #ifndef yyrindex #define yyrindex destroy2_rindex #endif /* yyrindex */ #ifndef yygindex #define yygindex destroy2_gindex #endif /* yygindex */ #ifndef yytable #define yytable destroy2_table #endif /* yytable */ #ifndef yycheck #define yycheck destroy2_check #endif /* yycheck */ #ifndef yyname #define yyname destroy2_name #endif /* yyname */ #ifndef yyrule #define yyrule destroy2_rule #endif /* yyrule */ #if YYBTYACC #ifndef yycindex #define yycindex destroy2_cindex #endif /* yycindex */ #ifndef yyctable #define yyctable destroy2_ctable #endif /* yyctable */ #endif /* YYBTYACC */ #define YYPREFIX "destroy2_" #define YYPURE 0 #line 4 "btyacc_destroy2.y" #include typedef enum {cGLOBAL, cLOCAL} class; typedef enum {tREAL, tINTEGER} type; typedef char * name; struct symbol { class c; type t; name id; }; typedef struct symbol symbol; struct namelist { symbol *s; struct namelist *next; }; typedef struct namelist namelist; struct parser_param { int *rtrn; symbol ss; }; extern symbol *mksymbol(type t, class c, name id); #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) #endif #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #line 50 "btyacc_destroy2.y" typedef union YYSTYPE { class cval; type tval; namelist * nlist; name id; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 160 "btyacc_destroy2.tab.c" /* 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(struct parser_param *param, int flag) #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(struct parser_param *param, int flag, const char *s) #endif #ifndef YYERROR_CALL #define YYERROR_CALL(msg) yyerror(param, flag, msg) #endif #ifndef YYDESTRUCT_DECL #define YYDESTRUCT_DECL() yydestruct(const char *msg, int psymb, YYSTYPE *val, struct parser_param *param, int flag) #endif #ifndef YYDESTRUCT_CALL #define YYDESTRUCT_CALL(msg, psymb, val) yydestruct(msg, psymb, val, param, flag) #endif extern int YYPARSE_DECL(); #define GLOBAL 257 #define LOCAL 258 #define REAL 259 #define INTEGER 260 #define NAME 261 #define YYERRCODE 256 typedef int YYINT; static const YYINT destroy2_lhs[] = { -1, 0, 0, 2, 2, 3, 3, 4, 4, 1, }; static const YYINT destroy2_len[] = { 2, 8, 5, 1, 1, 1, 1, 2, 1, 6, }; static const YYINT destroy2_defred[] = { 0, 3, 4, 5, 6, 0, 0, 0, 0, 8, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 9, 1, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT destroy2_stos[] = { 0, 257, 258, 259, 260, 263, 265, 266, 266, 261, 264, 267, 267, 40, 261, 40, 40, 265, 258, 265, 41, 44, 44, 266, 266, 41, 41, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT destroy2_dgoto[] = { 5, 10, 6, 7, 11, }; static const YYINT destroy2_sindex[] = { -254, 0, 0, 0, 0, 0, -251, -248, -248, 0, -26, -40, -39, -246, 0, -243, -246, -25, -24, -23, 0, -251, -251, -22, -19, 0, 0, }; static const YYINT destroy2_rindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #if YYBTYACC static const YYINT destroy2_cindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT destroy2_gindex[] = { 0, 0, -6, -4, 15, }; #define YYTABLESIZE 222 static const YYINT destroy2_table[] = { 15, 16, 8, 1, 2, 3, 4, 17, 3, 4, 19, 1, 2, 9, 13, 18, 20, 23, 24, 25, 21, 22, 26, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, }; static const YYINT destroy2_check[] = { 40, 40, 6, 257, 258, 259, 260, 13, 259, 260, 16, 257, 258, 261, 40, 258, 41, 21, 22, 41, 44, 44, 41, 8, -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, -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, -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, -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, 261, 261, }; #if YYBTYACC static const YYINT destroy2_ctable[] = { -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, -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, -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, -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, -1, -1, -1, -1, -1, -1, }; #endif #define YYFINAL 5 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 261 #define YYUNDFTOKEN 268 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG static const char *const destroy2_name[] = { "$end",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'('","')'",0,0,"','",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"error","GLOBAL","LOCAL", "REAL","INTEGER","NAME","$accept","declaration","locnamelist","class","type", "namelist","illegal-symbol", }; static const char *const destroy2_rule[] = { "$accept : declaration", "declaration : class type namelist '(' class ',' type ')'", "declaration : type locnamelist '(' class ')'", "class : GLOBAL", "class : LOCAL", "type : REAL", "type : INTEGER", "namelist : namelist NAME", "namelist : NAME", "locnamelist : namelist '(' LOCAL ',' type ')'", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* 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 #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = 0; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = 0; /* Base of the lexical value queue */ static YYSTYPE *yylvals = 0; /* Current position at lexical value queue */ static YYSTYPE *yylvp = 0; /* End position of lexical value queue */ static YYSTYPE *yylve = 0; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = 0; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = 0; /* Current position at lexical position queue */ static YYLTYPE *yylpp = 0; /* End position of lexical position queue */ static YYLTYPE *yylpe = 0; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = 0; #endif /* Current position at lexical token queue */ static YYINT *yylexp = 0; static YYINT *yylexemes = 0; #endif /* YYBTYACC */ #line 89 "btyacc_destroy2.y" extern int YYLEX_DECL(); extern void YYERROR_DECL(); #line 492 "btyacc_destroy2.tab.c" /* Release memory associated with symbol. */ #if ! defined YYDESTRUCT_IS_DECLARED static void YYDESTRUCT_DECL() { switch (psymb) { case 263: #line 41 "btyacc_destroy2.y" { namelist *p = (*val).nlist; while (p != NULL) { namelist *pp = p; p = p->next; free(pp->s); free(pp); } } #line 511 "btyacc_destroy2.tab.c" break; } } #define YYDESTRUCT_IS_DECLARED 1 #endif /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* 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 defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == 0) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == 0) goto yyenomem; yyps->save = 0; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, 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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 1: if (!yytrial) #line 62 "btyacc_destroy2.y" { yyval.nlist = yystack.l_mark[-5].nlist; } #line 1190 "btyacc_destroy2.tab.c" break; case 2: if (!yytrial) #line 64 "btyacc_destroy2.y" { yyval.nlist = yystack.l_mark[-3].nlist; } #line 1196 "btyacc_destroy2.tab.c" break; case 3: if (!yytrial) #line 67 "btyacc_destroy2.y" { yyval.cval = cGLOBAL; } #line 1202 "btyacc_destroy2.tab.c" break; case 4: if (!yytrial) #line 68 "btyacc_destroy2.y" { yyval.cval = cLOCAL; } #line 1208 "btyacc_destroy2.tab.c" break; case 5: if (!yytrial) #line 71 "btyacc_destroy2.y" { yyval.tval = tREAL; } #line 1214 "btyacc_destroy2.tab.c" break; case 6: if (!yytrial) #line 72 "btyacc_destroy2.y" { yyval.tval = tINTEGER; } #line 1220 "btyacc_destroy2.tab.c" break; case 7: if (!yytrial) #line 76 "btyacc_destroy2.y" { yyval.nlist->s = mksymbol(yystack.l_mark[-2].tval, yystack.l_mark[-2].cval, yystack.l_mark[0].id); yyval.nlist->next = yystack.l_mark[-1].nlist; } #line 1228 "btyacc_destroy2.tab.c" break; case 8: if (!yytrial) #line 80 "btyacc_destroy2.y" { yyval.nlist->s = mksymbol(0, 0, yystack.l_mark[0].id); yyval.nlist->next = NULL; } #line 1236 "btyacc_destroy2.tab.c" break; case 9: if (!yytrial) #line 86 "btyacc_destroy2.y" { yyval.nlist = yystack.l_mark[-5].nlist; } #line 1242 "btyacc_destroy2.tab.c" break; #line 1244 "btyacc_destroy2.tab.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *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; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); } byacc-20221106/test/btyacc/err_syntax22.output0000644000000000000000000000000012314147323017566 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax7b.tab.h0000644000000000000000000000000012314147323017307 0ustar rootrootbyacc-20221106/test/btyacc/err_inherit4.output0000644000000000000000000000410612723664633017651 0ustar rootroot 0 $accept : declaration $end 1 $$1 : 2 $$2 : 3 declaration : class type $$1 $$2 namelist 4 | type locnamelist 5 class : GLOBAL 6 | LOCAL 7 type : REAL 8 | INTEGER 9 namelist : namelist NAME 10 | NAME 11 locnamelist : namelist state 0 $accept : . declaration $end (0) GLOBAL shift 1 LOCAL shift 2 REAL shift 3 INTEGER shift 4 . error declaration goto 5 class goto 6 type goto 7 state 1 class : GLOBAL . (5) . reduce 5 state 2 class : LOCAL . (6) . reduce 6 state 3 type : REAL . (7) . reduce 7 state 4 type : INTEGER . (8) . reduce 8 state 5 $accept : declaration . $end (0) $end accept state 6 declaration : class . type $$1 $$2 namelist (3) REAL shift 3 INTEGER shift 4 . error type goto 8 state 7 declaration : type . locnamelist (4) NAME shift 9 . error namelist goto 10 locnamelist goto 11 state 8 declaration : class type . $$1 $$2 namelist (3) $$1 : . (1) . reduce 1 $$1 goto 12 state 9 namelist : NAME . (10) . reduce 10 state 10 namelist : namelist . NAME (9) locnamelist : namelist . (11) NAME shift 13 $end reduce 11 state 11 declaration : type locnamelist . (4) . reduce 4 state 12 declaration : class type $$1 . $$2 namelist (3) $$2 : . (2) . reduce 2 $$2 goto 14 state 13 namelist : namelist NAME . (9) . reduce 9 state 14 declaration : class type $$1 $$2 . namelist (3) NAME shift 9 . error namelist goto 15 state 15 declaration : class type $$1 $$2 namelist . (3) namelist : namelist . NAME (9) NAME shift 13 $end reduce 3 7 terminals, 8 nonterminals 12 grammar rules, 16 states grammar parser grammar symbol# value# symbol 0 0 $end 1 256 error 2 257 GLOBAL 3 258 LOCAL 4 259 REAL 5 260 INTEGER 6 261 NAME 7 262 $accept 8 263 declaration 9 264 namelist 10 265 locnamelist 11 266 class 12 267 type 13 268 $$1 14 269 $$2 byacc-20221106/test/btyacc/no_opts.error0000644000000000000000000000004513501467273016517 0ustar rootrootYACC: f - cannot open "nosuchfile.y" byacc-20221106/test/btyacc/no_b_opt1.output0000644000000000000000000000000013501467273017114 0ustar rootrootbyacc-20221106/test/btyacc/no_b_opt.output0000644000000000000000000000000013501467273017033 0ustar rootrootbyacc-20221106/test/btyacc/err_syntax24.tab.c0000644000000000000000000000067213726503203017237 0ustar rootroot/* 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 2 #define YYMINOR 0 #define YYCHECK "yyyymmdd" #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 byacc-20221106/test/error.y0000644000000000000000000000041511704570611014034 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %% S: error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/err_syntax12.y0000644000000000000000000000045712313420234015242 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %token text 123 %token text 456 %% S: error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/inherit0.y0000644000000000000000000000143512315172054014426 0ustar rootroot%{ extern void mksymbol(int t, int c, int id); #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) extern int YYLEX_DECL(); extern void YYERROR_DECL(); #endif %} %token GLOBAL LOCAL %token REAL INTEGER %token NAME %start declaration %% declaration: class type namelist { $$ = $3; } | type locnamelist { $$ = $2; } ; class : GLOBAL { $$ = 1; } | LOCAL { $$ = 2; } ; type : REAL { $$ = 1; } | INTEGER { $$ = 2; } ; namelist: namelist NAME { mksymbol($0, $-1, $2); } | NAME { mksymbol($0, $-1, $1); } ; locnamelist: { $$ = 2; } /* set up semantic stack for : LOCAL */ { $$ = $-1; } /* copy to where expects it */ namelist { $$ = $3; } ; %% extern int YYLEX_DECL(); extern void YYERROR_DECL(); byacc-20221106/test/err_inherit5.y0000644000000000000000000000257312315171440015305 0ustar rootroot%{ #include typedef enum {cGLOBAL, cLOCAL} class; typedef enum {tREAL, tINTEGER} type; typedef char * name; struct symbol { class c; type t; name id; }; typedef struct symbol symbol; struct namelist { symbol *s; struct namelist *next; }; typedef struct namelist namelist; extern symbol *mksymbol(type t, class c, name id); #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) #endif %} %token GLOBAL LOCAL %token REAL INTEGER %token NAME %type declaration namelist(, ) locnamelist() %type class %type type %destructor { namelist *p = $$; while (p != NULL) { namelist *pp = p; p = p->next; free(pp->s); free(pp); } } %union { class cval; type tval; namelist * nlist; name id; } %start declaration %% declaration: class type namelist($1, $2) { $$ = $3; } | type locnamelist($1) { $$ = $2; } ; class : GLOBAL { $$ = cGLOBAL; } | LOCAL { $$ = cLOCAL; } ; type : REAL { $$ = tREAL; } | INTEGER { $$ = tINTEGER; } ; namelist($c, $t): namelist NAME { $$->s = mksymbol($t, $c, $2); $$->next = $1; } | NAME { $$->s = mksymbol($t, $c, $1); $$->next = NULL; } ; locnamelist($t): namelist(@1, $t) { $$ = $1; } ; %% extern int YYLEX_DECL(); extern void YYERROR_DECL(); byacc-20221106/test/calc3.y0000644000000000000000000000456712307445205013704 0ustar rootroot%pure-parser %parse-param { int regs[26] } %parse-param { int *base } %lex-param { int *base } %{ # include # include #ifdef YYBISON #define YYSTYPE int #define YYLEX_PARAM base #define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM) #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) int YYLEX_DECL(); static void YYERROR_DECL(); #endif %} %start list %token DIGIT LETTER %left '|' %left '&' %left '+' '-' %left '*' '/' '%' %left UMINUS /* supplies precedence for unary minus */ %% /* beginning of rules section */ list : /* empty */ | list stat '\n' | list error '\n' { yyerrok ; } ; stat : expr { printf("%d\n",$1);} | LETTER '=' expr { regs[$1] = $3; } ; expr : '(' expr ')' { $$ = $2; } | expr '+' expr { $$ = $1 + $3; } | expr '-' expr { $$ = $1 - $3; } | expr '*' expr { $$ = $1 * $3; } | expr '/' expr { $$ = $1 / $3; } | expr '%' expr { $$ = $1 % $3; } | expr '&' expr { $$ = $1 & $3; } | expr '|' expr { $$ = $1 | $3; } | '-' expr %prec UMINUS { $$ = - $2; } | LETTER { $$ = regs[$1]; } | number ; number: DIGIT { $$ = $1; (*base) = ($1==0) ? 8 : 10; } | number DIGIT { $$ = (*base) * $1 + $2; } ; %% /* start of programs */ #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main (void) { int regs[26]; int base = 10; while(!feof(stdin)) { yyparse(regs, &base); } return 0; } #define UNUSED(x) ((void)(x)) static void YYERROR_DECL() { UNUSED(regs); /* %parse-param regs is not actually used here */ UNUSED(base); /* %parse-param base is not actually used here */ fprintf(stderr, "%s\n", s); } int YYLEX_DECL() { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { *yylval = (c - 'a'); return ( LETTER ); } if( isdigit( c )) { *yylval = (c - '0') % (*base); return ( DIGIT ); } return( c ); } byacc-20221106/test/err_syntax20.y0000644000000000000000000000053312313666011015241 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %type expr %type recur %% expr : '(' recur ')' { $2 = 3; } ; %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/btyacc_destroy1.y0000644000000000000000000000307412414221767016012 0ustar rootroot%parse-param { struct parser_param *param , int flag } %{ #include typedef enum {cGLOBAL, cLOCAL} class; typedef enum {tREAL, tINTEGER} type; typedef char * name; struct symbol { class c; type t; name id; }; typedef struct symbol symbol; struct namelist { symbol *s; struct namelist *next; }; typedef struct namelist namelist; struct parser_param { int *rtrn; symbol ss; }; extern symbol *mksymbol(type t, class c, name id); #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) #endif %} %token GLOBAL LOCAL %token REAL INTEGER %token NAME %type declaration %type locnamelist %type class %type type %type namelist %destructor { if (!param->rtrn) close($$); } %destructor { namelist *p = $$; while (p != NULL) { namelist *pp = p; p = p->next; free(pp->s); free(pp); } } declaration %union { class cval; type tval; namelist * nlist; name id; } %start declaration %% declaration: class type namelist'(' class ',' type ')' { $$ = $3; } | type locnamelist '(' class ')' { $$ = $2; } ; class : GLOBAL { $$ = cGLOBAL; } | LOCAL { $$ = cLOCAL; } ; type : REAL { $$ = tREAL; } | INTEGER { $$ = tINTEGER; } ; namelist: namelist NAME { $$->s = mksymbol($0, $0, $2); $$->next = $1; } | NAME { $$->s = mksymbol(0, 0, $1); $$->next = NULL; } ; locnamelist: namelist '(' LOCAL ',' type ')' { $$ = $1; } ; %% extern int YYLEX_DECL(); extern void YYERROR_DECL(); byacc-20221106/test/err_syntax13.y0000644000000000000000000000045312313420535015243 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %token text 123 %start text %% S: error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/expr.oxout.y0000644000000000000000000007336314164144414015053 0ustar rootroot/* output from Ox version G1.04 */ #line 1 "expr.Y" #line 4 "expr.oxout.y" %{ #include #include %} #line 1 "expr.Y" /* Y-file for translation of infix expressions to prefix and postfix */ %token ID CONST %start yyyAugNonterm %left '+' '-' %left '*' '/' %nonassoc '*' %{ #include "expr.oxout.h" #include extern int yylex(void); extern void yyerror(const char *); %} #line 25 "expr.oxout.y" %{ #include #define yyyR USHRT_MAX %} %type yyyAugNonterm %union { struct yyyOxAttrbs { struct yyyStackItem *yyyOxStackItem; } yyyOxAttrbs; } %{ #include #include static int yyyYok = 1; extern yyyFT yyyRCIL[]; void yyyExecuteRRsection(yyyGNT *rootNode); void yyyYoxInit(void); void yyyDecorate(void); struct yyyOxAttrbs; /* hack required to compensate for 'msta' behavior */ void yyyGenIntNode(long yyyProdNum, int yyyRHSlength, int yyyNattrbs, struct yyyOxAttrbs *yyval_OxAttrbs, ...); void yyyAdjustINRC(long yyyProdNum, int yyyRHSlength, long startP, long stopP, struct yyyOxAttrbs *yyval_OxAttrbs, ...); void yyyCheckUnsolvedInstTrav(yyyGNT *rootNode,long *nNZrc,long *cycleSum); void yyyUnsolvedInstSearchTrav(yyyGNT *pNode); void yyyUnsolvedInstSearchTravAux(yyyGNT *pNode); void yyyabort(void); %} #line 20 "expr.Y" %% #line 63 "expr.oxout.y" yyyAugNonterm : {yyyYoxInit();} s { yyyDecorate(); yyyExecuteRRsection($2.yyyOxStackItem->node); } ; #line 21 "expr.Y" s : expr #line 73 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(1,1,0,&$$,&$1); yyyAdjustINRC(1,1,0,0,&$$,&$1);}} #line 27 "expr.Y" expr : expr '*' expr #line 80 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(2,3,0,&$$,&$1,&$2,&$3); yyyAdjustINRC(2,3,0,0,&$$,&$1,&$2,&$3);}} #line 31 "expr.Y" | expr '+' expr #line 87 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(3,3,0,&$$,&$1,&$2,&$3); yyyAdjustINRC(3,3,0,0,&$$,&$1,&$2,&$3);}} #line 35 "expr.Y" | expr '/' expr #line 94 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(4,3,0,&$$,&$1,&$2,&$3); yyyAdjustINRC(4,3,0,0,&$$,&$1,&$2,&$3);}} #line 39 "expr.Y" | expr '-' expr #line 101 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(5,3,0,&$$,&$1,&$2,&$3); yyyAdjustINRC(5,3,0,0,&$$,&$1,&$2,&$3);}} #line 43 "expr.Y" | '(' expr ')' #line 108 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(6,3,0,&$$,&$1,&$2,&$3); yyyAdjustINRC(6,3,0,0,&$$,&$1,&$2,&$3);}} #line 44 "expr.Y" | ID #line 114 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(7,1,0,&$$,&$1); yyyAdjustINRC(7,1,0,0,&$$,&$1);}} #line 48 "expr.Y" | CONST #line 121 "expr.oxout.y" {if(yyyYok){ yyyGenIntNode(8,1,0,&$$,&$1); yyyAdjustINRC(8,1,0,0,&$$,&$1);}} #line 52 "expr.Y" ; %% int yyparse(void); int main() {yyparse(); } #line 138 "expr.oxout.y" long yyySSALspaceSize = 20000; long yyyRSmaxSize = 1000; long yyyTravStackMaxSize = 2000; struct yyySolvedSAlistCell {yyyWAT attrbNum; long next; }; #define yyyLambdaSSAL 0 long yyySSALCfreeList = yyyLambdaSSAL; long yyyNewSSALC = 1; struct yyySolvedSAlistCell *yyySSALspace; long yyyNbytesStackStg; yyyFT yyyRCIL[1]; short yyyIIIEL[] = {0, 0,2,6,10,14,18,22,24, }; long yyyIIEL[] = { 0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0, 1,1, }; long yyyIEL[] = { 0,0,0, }; yyyFT yyyEntL[1]; void yyyfatal(char *msg) {fputs(msg,stderr);exit(-1);} #define yyySSALof 'S' #define yyyRSof 'q' #define yyyTSof 't' void yyyHandleOverflow(char which) {char *msg1 = "?", *msg2; long oldSize = 0, newSize; switch(which) { case yyySSALof : msg1 = "SSAL overflow: "; oldSize = yyySSALspaceSize; break; case yyyRSof : msg1 = "ready set overflow: "; oldSize = yyyRSmaxSize; break; case yyyTSof : msg1 = "traversal stack overflow: "; oldSize = yyyTravStackMaxSize; break; default :; } newSize = (3*oldSize)/2; if (newSize < 100) newSize = 100; fputs(msg1,stderr); fprintf(stderr,"size was %ld.\n",oldSize); msg2 = " Have to modify evaluator: -Y%c%ld.\n"; fprintf(stderr,msg2,which,newSize); exit(-1); } void yyySignalEnts(yyyGNT *node,long startP,long stopP) {yyyGNT *dumNode; while (startP < stopP) { if (!yyyEntL[startP]) dumNode = node; else dumNode = (node->cL)[yyyEntL[startP]-1]; if (!(--((dumNode->refCountList)[yyyEntL[startP+1]] ) ) ) { if (++yyyRSTop == yyyAfterRS) {yyyHandleOverflow(yyyRSof); break; } yyyRSTop->node = dumNode; yyyRSTop->whichSym = yyyEntL[startP]; yyyRSTop->wa = yyyEntL[startP+1]; } startP += 2; } } void yyySolveAndSignal() { long yyyiDum,*yyypL; int yyyws,yyywa; yyyGNT *yyyRSTopN,*yyyRefN; yyyParent yyyRSTopNp; yyyRSTopNp = (yyyRSTopN = yyyRSTop->node)->parent; yyyRefN= (yyyws = (yyyRSTop->whichSym))?yyyRSTopNp.noderef:yyyRSTopN; yyywa = yyyRSTop->wa; yyyRSTop--; switch(yyyRefN->prodNum) { case 1: /***yacc rule 1***/ switch (yyyws) { } break; case 2: /***yacc rule 2***/ switch (yyyws) { } break; case 3: /***yacc rule 3***/ switch (yyyws) { } break; case 4: /***yacc rule 4***/ switch (yyyws) { } break; case 5: /***yacc rule 5***/ switch (yyyws) { } break; case 6: /***yacc rule 6***/ switch (yyyws) { } break; case 7: /***yacc rule 7***/ switch (yyyws) { case 1: /**/ switch (yyywa) { } break; } break; case 8: /***yacc rule 8***/ switch (yyyws) { case 1: /**/ switch (yyywa) { } break; } break; } /* switch */ if (yyyws) /* the just-solved instance was inherited. */ {if (yyyRSTopN->prodNum) {yyyiDum = yyyIIEL[yyyIIIEL[yyyRSTopN->prodNum]] + yyywa; yyySignalEnts(yyyRSTopN,yyyIEL[yyyiDum], yyyIEL[yyyiDum+1] ); } } else /* the just-solved instance was synthesized. */ {if (!(yyyRSTopN->parentIsStack)) /* node has a parent. */ {yyyiDum = yyyIIEL[yyyIIIEL[yyyRSTopNp.noderef->prodNum] + yyyRSTopN->whichSym ] + yyywa; yyySignalEnts(yyyRSTopNp.noderef, yyyIEL[yyyiDum], yyyIEL[yyyiDum+1] ); } else /* node is still on the stack--it has no parent yet. */ {yyypL = &(yyyRSTopNp.stackref->solvedSAlist); if (yyySSALCfreeList == yyyLambdaSSAL) {yyySSALspace[yyyNewSSALC].next = *yyypL; if ((*yyypL = yyyNewSSALC++) == yyySSALspaceSize) yyyHandleOverflow(yyySSALof); } else {yyyiDum = yyySSALCfreeList; yyySSALCfreeList = yyySSALspace[yyySSALCfreeList].next; yyySSALspace[yyyiDum].next = *yyypL; *yyypL = yyyiDum; } yyySSALspace[*yyypL].attrbNum = yyywa; } } } /* yyySolveAndSignal */ #define condStg unsigned int conds; #define yyyClearConds {yyyTST->conds = 0;} #define yyySetCond(n) {yyyTST->conds += (1<<(n));} #define yyyCond(n) ((yyyTST->conds & (1<<(n)))?1:0) struct yyyTravStackItem {yyyGNT *node; char isReady; condStg }; void yyyDoTraversals(yyyGNT *rootNode) {struct yyyTravStackItem *yyyTravStack,*yyyTST,*yyyAfterTravStack; yyyGNT *yyyTSTn,**yyyCLptr2; int yyyi,yyyRL,yyyPass; int i; if (!yyyYok) return; if ((yyyTravStack = ((struct yyyTravStackItem *) calloc((size_t)yyyTravStackMaxSize, (size_t)sizeof(struct yyyTravStackItem) ) ) ) == (struct yyyTravStackItem *)NULL ) {fputs("malloc error in traversal stack allocation\n",stderr); exit(-1); } yyyAfterTravStack = yyyTravStack + yyyTravStackMaxSize; yyyTravStack++; for (yyyi=0; yyyi<2; yyyi++) { yyyTST = yyyTravStack; yyyTST->node = rootNode; yyyTST->isReady = 0; yyyClearConds while(yyyTST >= yyyTravStack) {yyyTSTn = yyyTST->node; if (yyyTST->isReady) {yyyPass = 1; goto yyyTravSwitch; yyyTpop: yyyTST--; } else {yyyPass = 0; goto yyyTravSwitch; yyyTpush: yyyTST->isReady = 1; if (yyyTSTn->prodNum) {if (yyyRL) {yyyCLptr2 = yyyTSTn->cL; i = yyyTSTn->cLlen; while (i--) {if (++yyyTST == yyyAfterTravStack) yyyHandleOverflow(yyyTSof); else {yyyTST->node = *yyyCLptr2; yyyTST->isReady = 0; yyyClearConds } yyyCLptr2++; } } /* right to left */ else /* left to right */ {i = yyyTSTn->cLlen; yyyCLptr2 = yyyTSTn->cL + i; while (i--) {yyyCLptr2--; if (++yyyTST == yyyAfterTravStack) yyyHandleOverflow(yyyTSof); else {yyyTST->node = *yyyCLptr2; yyyTST->isReady = 0; yyyClearConds } } } /* left to right */ } } /* else */ continue; yyyTravSwitch: switch(yyyTSTn->prodNum) { case 1: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) if (! #line 24 "expr.Y" (1) #line 444 "expr.oxout.y" ) yyySetCond(1) yyySetCond(2) case 1: if (yyyCond(0) != yyyPass) { #line 24 "expr.Y" #line 453 "expr.oxout.y" } if (yyyCond(1) != yyyPass) { #line 24 "expr.Y" printf("\n"); #line 459 "expr.oxout.y" } if (yyyCond(2) != yyyPass) { #line 25 "expr.Y" printf("prefix: "); #line 465 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; if ( #line 23 "expr.Y" (1) #line 477 "expr.oxout.y" ) yyySetCond(2) case 1: if (yyyCond(0) != yyyPass) { #line 22 "expr.Y" printf("\n"); #line 486 "expr.oxout.y" } if (yyyCond(1) != yyyPass) { #line 23 "expr.Y" #line 491 "expr.oxout.y" } if (yyyCond(2) != yyyPass) { #line 23 "expr.Y" printf("postfix: "); #line 497 "expr.oxout.y" } break; } break; } break; case 2: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) case 1: if (yyyCond(0) != yyyPass) { #line 29 "expr.Y" printf(" * "); #line 518 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: if (yyyCond(0) != yyyPass) { #line 28 "expr.Y" printf(" * "); #line 533 "expr.oxout.y" } break; } break; } break; case 3: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) case 1: if (yyyCond(0) != yyyPass) { #line 32 "expr.Y" printf(" + "); #line 554 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: if (yyyCond(0) != yyyPass) { #line 33 "expr.Y" printf(" + "); #line 569 "expr.oxout.y" } break; } break; } break; case 4: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) case 1: if (yyyCond(0) != yyyPass) { #line 37 "expr.Y" printf(" / "); #line 590 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: if (yyyCond(0) != yyyPass) { #line 36 "expr.Y" printf(" / "); #line 605 "expr.oxout.y" } break; } break; } break; case 5: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) case 1: if (yyyCond(0) != yyyPass) { #line 41 "expr.Y" printf(" - "); #line 626 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: if (yyyCond(0) != yyyPass) { #line 40 "expr.Y" printf(" - "); #line 641 "expr.oxout.y" } break; } break; } break; case 6: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0; case 1: break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: break; } break; } break; case 7: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) case 1: if (yyyCond(0) != yyyPass) { #line 46 "expr.Y" printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); #line 685 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: if (yyyCond(0) != yyyPass) { #line 45 "expr.Y" printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); #line 700 "expr.oxout.y" } break; } break; } break; case 8: switch(yyyi) { case 0: switch(yyyPass) { case 0: yyyRL = 0;yyySetCond(0) case 1: if (yyyCond(0) != yyyPass) { #line 50 "expr.Y" printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); #line 721 "expr.oxout.y" } break; } break; case 1: switch(yyyPass) { case 0: yyyRL = 0; case 1: if (yyyCond(0) != yyyPass) { #line 49 "expr.Y" printf(" %s ",yyyTSTn->cL[0]->yyyAttrbs.yyyAttrb1.lexeme); #line 736 "expr.oxout.y" } break; } break; } break; } /* switch */ if (yyyPass) goto yyyTpop; else goto yyyTpush; } /* while */ } /* for */ } /* yyyDoTraversals */ void yyyExecuteRRsection(yyyGNT *rootNode) { int yyyi; long cycleSum = 0; long nNZrc = 0; if (!yyyYok) return; yyyCheckUnsolvedInstTrav(rootNode,&nNZrc,&cycleSum); if (nNZrc) { fputs("\n\n\n**********\n",stderr); fputs("cycle detected in completed parse tree",stderr); fputs(" after decoration.\n",stderr); #if CYCLE_VERBOSE fprintf(stderr, "number of unsolved attribute instances == %ld.\n", nNZrc ); fprintf(stderr, "total number of remaining dependencies == %ld.\n", cycleSum ); fputs("average number of remaining dependencies\n",stderr); fprintf(stderr," per unsolved instance == %f.\n", ((float)(cycleSum)/(float)(nNZrc)) ); #endif fprintf(stderr, "searching parse tree for %ld unsolved instances:\n", nNZrc ); yyyUnsolvedInstSearchTravAux(rootNode); } yyyDoTraversals(rootNode); } /* yyyExecuteRRsection */ yyyWAT yyyLRCIL[2] = {0,0, }; void yyyYoxInit(void) { static int yyyInitDone = 0; if (yyyInitDone) return; if ((yyyRS = (yyyRSitem *) calloc((size_t)(yyyRSmaxSize+1), (size_t)sizeof(yyyRSitem)) ) == ((yyyRSitem *) NULL) ) yyyfatal("malloc error in ox ready set space allocation\n"); yyyRS++; yyyAfterRS = yyyRS + yyyRSmaxSize; if ((yyySSALspace = (struct yyySolvedSAlistCell *) calloc((size_t)(yyySSALspaceSize+1), (size_t)sizeof(struct yyySolvedSAlistCell)) ) == ((struct yyySolvedSAlistCell *) NULL) ) yyyfatal("malloc error in stack solved list space allocation\n"); yyyInitDone = 1; yyyRSTop = yyyRS - 1; } /* yyyYoxInit */ void yyyDecorate(void) { while (yyyRSTop >= yyyRS) yyySolveAndSignal(); } void yyyGenIntNode(long yyyProdNum, int yyyRHSlength, int yyyNattrbs, struct yyyOxAttrbs *yyval_OxAttrbs, ...) {yyyWST i; yyySIT **yyyOxStackItem = &yyval_OxAttrbs->yyyOxStackItem; yyyGNT *gnpDum; va_list ap; *yyyOxStackItem = (yyySIT *) malloc((size_t)sizeof(yyySIT)); if (*yyyOxStackItem == (yyySIT *) NULL) yyyfatal("malloc error in ox yacc semantic stack space allocation\n"); (*yyyOxStackItem)->node = (yyyGNT *) malloc((size_t)sizeof(yyyGNT)); if ((*yyyOxStackItem)->node == (yyyGNT *) NULL) yyyfatal("malloc error in ox node space allocation\n"); (*yyyOxStackItem)->solvedSAlist = yyyLambdaSSAL; (*yyyOxStackItem)->node->parent.stackref = *yyyOxStackItem; (*yyyOxStackItem)->node->parentIsStack = 1; (*yyyOxStackItem)->node->cLlen = yyyRHSlength; (*yyyOxStackItem)->node->cL = (yyyGNT **) calloc((size_t)yyyRHSlength, (size_t)sizeof(yyyGNT *)); if ((*yyyOxStackItem)->node->cL == (yyyGNT **) NULL) yyyfatal("malloc error in ox child list space allocation\n"); (*yyyOxStackItem)->node->refCountListLen = yyyNattrbs; (*yyyOxStackItem)->node->refCountList = (yyyRCT *) calloc((size_t)yyyNattrbs, (size_t)sizeof(yyyRCT)); if ((*yyyOxStackItem)->node->refCountList == (yyyRCT *) NULL) yyyfatal("malloc error in ox reference count list space allocation\n"); (*yyyOxStackItem)->node->prodNum = (int) yyyProdNum; va_start(ap, yyval_OxAttrbs); for (i=1;i<=yyyRHSlength;i++) {yyySIT *yaccStDum = va_arg(ap,struct yyyOxAttrbs *)->yyyOxStackItem; gnpDum = (*yyyOxStackItem)->node->cL[i-1] = yaccStDum->node; gnpDum->whichSym = i; gnpDum->parent.noderef = (*yyyOxStackItem)->node; gnpDum->parentIsStack = 0; } va_end(ap); } #define yyyDECORfREQ 50 void yyyAdjustINRC(long yyyProdNum, int yyyRHSlength, long startP, long stopP, struct yyyOxAttrbs *yyval_OxAttrbs, ...) {yyyWST i; yyySIT *yyyOxStackItem = yyval_OxAttrbs->yyyOxStackItem; long SSALptr,SSALptrHead,*cPtrPtr; long *pL; yyyGNT *gnpDum; long iTemp; long nextP; static unsigned short intNodeCount = yyyDECORfREQ; va_list ap; nextP = startP; while (nextP < stopP) {if (yyyRCIL[nextP] == yyyR) {(yyyOxStackItem->node->refCountList)[yyyRCIL[nextP+1]] = yyyRCIL[nextP+2]; } else {(((yyyOxStackItem->node->cL)[yyyRCIL[nextP]])->refCountList)[yyyRCIL[nextP+1]] = yyyRCIL[nextP+2]; } nextP += 3; } pL = yyyIIEL + yyyIIIEL[yyyProdNum]; va_start(ap, yyval_OxAttrbs); for (i=1;i<=yyyRHSlength;i++) {yyySIT *yaccStDum = va_arg(ap,struct yyyOxAttrbs *)->yyyOxStackItem; pL++; SSALptrHead = SSALptr = *(cPtrPtr = &(yaccStDum->solvedSAlist)); if (SSALptr != yyyLambdaSSAL) {*cPtrPtr = yyyLambdaSSAL; do { iTemp = (*pL+yyySSALspace[SSALptr].attrbNum); yyySignalEnts(yyyOxStackItem->node, yyyIEL[iTemp], yyyIEL[iTemp+1] ); SSALptr = *(cPtrPtr = &(yyySSALspace[SSALptr].next)); } while (SSALptr != yyyLambdaSSAL); *cPtrPtr = yyySSALCfreeList; yyySSALCfreeList = SSALptrHead; } } va_end(ap); nextP = startP + 2; while (nextP < stopP) {if (!yyyRCIL[nextP]) {if (yyyRCIL[nextP-2] == yyyR) {pL = &(yyyOxStackItem->solvedSAlist); if (yyySSALCfreeList == yyyLambdaSSAL) {yyySSALspace[yyyNewSSALC].next = *pL; if ((*pL = yyyNewSSALC++) == yyySSALspaceSize) yyyHandleOverflow(yyySSALof); } else {iTemp = yyySSALCfreeList; yyySSALCfreeList = yyySSALspace[yyySSALCfreeList].next; yyySSALspace[iTemp].next = *pL; *pL = iTemp; } yyySSALspace[*pL].attrbNum = yyyRCIL[nextP-1]; } else {if ((gnpDum = (yyyOxStackItem->node->cL)[yyyRCIL[nextP-2]])->prodNum != 0) { iTemp = yyyIIEL[yyyIIIEL[gnpDum->prodNum]] + yyyRCIL[nextP-1]; yyySignalEnts(gnpDum, yyyIEL[iTemp], yyyIEL[iTemp+1] ); } } } nextP += 3; } if (!--intNodeCount) {intNodeCount = yyyDECORfREQ; yyyDecorate(); } } void yyyGenLeaf(int nAttrbs,int typeNum,long startP,long stopP,YYSTYPE *mylval) {yyyRCT *rcPdum; yyySIT **yyyOxStackItem = &mylval->yyyOxAttrbs.yyyOxStackItem; (*yyyOxStackItem) = (yyySIT *) malloc((size_t)sizeof(yyySIT)); if ((*yyyOxStackItem) == (yyySIT *) NULL) yyyfatal("malloc error in ox yacc semantic stack space allocation\n"); (*yyyOxStackItem)->node = (yyyGNT *) malloc((size_t)sizeof(yyyGNT)) ; if ((*yyyOxStackItem)->node == (yyyGNT *) NULL) yyyfatal("malloc error in ox node space allocation\n"); (*yyyOxStackItem)->solvedSAlist = yyyLambdaSSAL; (*yyyOxStackItem)->node->parent.stackref = *yyyOxStackItem; (*yyyOxStackItem)->node->parentIsStack = 1; (*yyyOxStackItem)->node->cLlen = 0; (*yyyOxStackItem)->node->cL = (yyyGNT **)NULL; (*yyyOxStackItem)->node->refCountListLen = nAttrbs; rcPdum = (*yyyOxStackItem)->node->refCountList = (yyyRCT *) calloc((size_t)nAttrbs, (size_t)sizeof(yyyRCT)); if (rcPdum == (yyyRCT *) NULL) yyyfatal("malloc error in ox reference count list space allocation\n"); while (startP < stopP) rcPdum[yyyLRCIL[startP++]] = 0; (*yyyOxStackItem)->node->prodNum = 0; (*yyyOxStackItem)->node->whichSym = 0; } void yyyabort(void) {yyyYok = 0; } #define yyyLastProdNum 8 #define yyyNsorts 1 int yyyProdsInd[] = { 0, 0, 2, 6, 10, 14, 18, 22, 24, 26, }; int yyyProds[][2] = { { 116, 0},{ 462, 0},{ 462, 0},{ 462, 0},{ 412, 0}, { 462, 0},{ 462, 0},{ 462, 0},{ 420, 0},{ 462, 0}, { 462, 0},{ 462, 0},{ 452, 0},{ 462, 0},{ 462, 0}, { 462, 0},{ 436, 0},{ 462, 0},{ 462, 0},{ 396, 0}, { 462, 0},{ 404, 0},{ 462, 0},{ 619, 1},{ 462, 0}, { 567, 1}, }; int yyySortsInd[] = { 0, 0, 1, }; int yyySorts[] = { 413, }; char *yyyStringTab[] = { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,"s",0,0,0, 0,0,"y",0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,"LRpre",0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,"'('",0,0,0, 0,0,0,0,"')'", 0,0,0,0,0, 0,0,"'*'","lexeme",0, 0,0,0,0,0, "'+'",0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,"'-'",0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,"'/'",0,0, 0,0,0,0,0, 0,0,"expr",0,0, 0,0,0,0,0, 0,0,0,0,0, 0,"printf",0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,"CONST","LRpost",0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,"ID", 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0, }; #define yyySizeofProd(num) (yyyProdsInd[(num)+1] - yyyProdsInd[(num)]) #define yyyGSoccurStr(prodNum,symPos) \ (yyyStringTab[yyyProds[yyyProdsInd[(prodNum)] + (symPos)][0]]) #define yyySizeofSort(num) (yyySortsInd[(num)+1] - yyySortsInd[(num)]) #define yyySortOf(prodNum,symPos) \ (yyyProds[yyyProdsInd[(prodNum)] + (symPos)][1]) #define yyyAttrbStr(prodNum,symPos,attrbNum) \ (yyyStringTab[yyySorts[yyySortsInd[yyySortOf(prodNum,symPos)] + \ (attrbNum) \ ] \ ] \ ) void yyyShowProd(int i) {int j,nSyms; nSyms = yyySizeofProd(i); for (j=0; j\n",stderr); else putc('\n',stderr); } } } void yyyCheckNodeInstancesSolved(yyyGNT *np) {int mysort,sortSize,i,prodNum,symPos,inTerminalNode; int nUnsolvedInsts = 0; if (np->prodNum != 0) {inTerminalNode = 0; prodNum = np->prodNum; symPos = 0; } else {inTerminalNode = 1; prodNum = np->parent.noderef->prodNum; symPos = np->whichSym; } mysort = yyySortOf(prodNum,symPos); sortSize = yyySizeofSort(mysort); for (i=0; irefCountList)[i] != 0) nUnsolvedInsts += 1; if (nUnsolvedInsts) {fprintf(stderr, "\nFound node that has %d unsolved attribute instance(s).\n", nUnsolvedInsts ); fprintf(stderr,"Node is labeled \"%s\".\n", yyyGSoccurStr(prodNum,symPos)); if (inTerminalNode) {fputs("Node is terminal. Its parent production is:\n ",stderr); yyyShowProd(prodNum); } else {fputs("Node is nonterminal. ",stderr); if (!(np->parentIsStack)) {fprintf(stderr, "Node is %dth child in its parent production:\n ", np->whichSym ); yyyShowProd(np->parent.noderef->prodNum); } fputs("Node is on left hand side of this production:\n ",stderr); yyyShowProd(np->prodNum); } fputs("The following instances are unsolved:\n",stderr); for (i=0; irefCountList)[i] != 0) fprintf(stderr," %-16s still has %1d dependencies.\n", yyyAttrbStr(prodNum,symPos,i),(np->refCountList)[i]); } } void yyyCheckUnsolvedInstTrav(yyyGNT *pNode,long *nNZrc,long *cycleSum) {yyyGNT **yyyCLpdum; yyyRCT *rcp; int i; /* visit the refCountList of each node in the tree, and sum the non-zero refCounts */ rcp = pNode->refCountList; i = pNode->refCountListLen; while (i--) if (*rcp++) {*cycleSum += *(rcp - 1); (*nNZrc)++;} yyyCLpdum = pNode->cL; i = pNode->cLlen; while (i--) { yyyCheckUnsolvedInstTrav(*yyyCLpdum,nNZrc,cycleSum); yyyCLpdum++; } } void yyyUnsolvedInstSearchTravAux(yyyGNT *pNode) {yyyGNT **yyyCLpdum; int i; yyyCheckNodeInstancesSolved(pNode); yyyCLpdum = pNode->cL; i = pNode->cLlen; while (i--) { yyyUnsolvedInstSearchTravAux(*yyyCLpdum); yyyCLpdum++; } } void yyyUnsolvedInstSearchTrav(yyyGNT *pNode) {yyyGNT **yyyCLpdum; int i; yyyCLpdum = pNode->cL; i = pNode->cLlen; while (i--) { yyyUnsolvedInstSearchTravAux(*yyyCLpdum); yyyCLpdum++; } } byacc-20221106/test/calc_code_requires.y0000644000000000000000000000365513564641710016534 0ustar rootroot%code requires { /* CODE-REQUIRES */ } %code requires { /* CODE-REQUIRES2 */ } %{ # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); %} %start list %token DIGIT LETTER %left '|' %left '&' %left '+' '-' %left '*' '/' '%' %left UMINUS /* supplies precedence for unary minus */ %% /* beginning of rules section */ list : /* empty */ | list stat '\n' | list error '\n' { yyerrok ; } ; stat : expr { printf("%d\n",$1);} | LETTER '=' expr { regs[$1] = $3; } ; expr : '(' expr ')' { $$ = $2; } | expr '+' expr { $$ = $1 + $3; } | expr '-' expr { $$ = $1 - $3; } | expr '*' expr { $$ = $1 * $3; } | expr '/' expr { $$ = $1 / $3; } | expr '%' expr { $$ = $1 % $3; } | expr '&' expr { $$ = $1 & $3; } | expr '|' expr { $$ = $1 | $3; } | '-' expr %prec UMINUS { $$ = - $2; } | LETTER { $$ = regs[$1]; } | number ; number: DIGIT { $$ = $1; base = ($1==0) ? 8 : 10; } | number DIGIT { $$ = base * $1 + $2; } ; %% /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } byacc-20221106/test/err_syntax8a.y0000644000000000000000000000044312313161607015331 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %token $$123 '\777' %% S: error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/err_syntax11.y0000644000000000000000000000044412313417740015245 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %left '|' %right '|' %% S: error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/calc_code_default.y0000644000000000000000000000365313564642435016324 0ustar rootroot%code { /* CODE-DEFAULT */ } %code { /* CODE-DEFAULT2 */ } %{ # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); %} %start list %token DIGIT LETTER %left '|' %left '&' %left '+' '-' %left '*' '/' '%' %left UMINUS /* supplies precedence for unary minus */ %% /* beginning of rules section */ list : /* empty */ | list stat '\n' | list error '\n' { yyerrok ; } ; stat : expr { printf("%d\n",$1);} | LETTER '=' expr { regs[$1] = $3; } ; expr : '(' expr ')' { $$ = $2; } | expr '+' expr { $$ = $1 + $3; } | expr '-' expr { $$ = $1 - $3; } | expr '*' expr { $$ = $1 * $3; } | expr '/' expr { $$ = $1 / $3; } | expr '%' expr { $$ = $1 % $3; } | expr '&' expr { $$ = $1 & $3; } | expr '|' expr { $$ = $1 | $3; } | '-' expr %prec UMINUS { $$ = - $2; } | LETTER { $$ = regs[$1]; } | number ; number: DIGIT { $$ = $1; base = ($1==0) ? 8 : 10; } | number DIGIT { $$ = base * $1 + $2; } ; %% /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } byacc-20221106/test/err_syntax7b.y0000644000000000000000000000044312313161106015323 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %token '\x.' %% S: error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/empty.y0000644000000000000000000000044212307724740014045 0ustar rootroot%{ #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) static int YYLEX_DECL(); static void YYERROR_DECL(); #endif %} %% start: ; %% #include static int YYLEX_DECL() { return -1; } static void YYERROR_DECL() { printf("%s\n",s); } byacc-20221106/test/README0000644000000000000000000000021610031621470013360 0ustar rootroot-- $Id: README,v 1.1 2004/03/28 19:10:48 tom Exp $ The files in this directory are input (.y) and output (.output, .tab.c, .tab.h) examples. byacc-20221106/test/err_syntax24.y0000644000000000000000000000063712313700310015241 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %union { int ival; double dval; } %start expr %type expr %token NUMBER %% expr : '(' recur ')' ; recur : NUMBER { $$ = 1; } ; %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/code_debug.y0000644000000000000000000000052511704617046014771 0ustar rootroot%{ #ifdef YYBISON int yylex(void); static void yyerror(const char *); #endif %} %% S: error %% #include #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/inherit1.y0000644000000000000000000000261112315171740014425 0ustar rootroot%{ #include typedef enum {cGLOBAL, cLOCAL} class; typedef enum {tREAL, tINTEGER} type; typedef char * name; struct symbol { class c; type t; name id; }; typedef struct symbol symbol; struct namelist { symbol *s; struct namelist *next; }; typedef struct namelist namelist; extern symbol *mksymbol(type t, class c, name id); #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) extern int YYLEX_DECL(); extern void YYERROR_DECL(); #endif %} %token GLOBAL LOCAL %token REAL INTEGER %token NAME %type declaration namelist locnamelist %type class %type type %union { class cval; type tval; namelist * nlist; name id; } %start declaration %% declaration: class type namelist { $$ = $3; } | type locnamelist { $$ = $2; } ; class : GLOBAL { $$ = cGLOBAL; } | LOCAL { $$ = cLOCAL; } ; type : REAL { $$ = tREAL; } | INTEGER { $$ = tINTEGER; } ; namelist: namelist NAME { $$->s = mksymbol($0, $-1, $2); $$->next = $1; } | NAME { $$->s = mksymbol($0, $-1, $1); $$->next = NULL; } ; locnamelist: { $$ = cLOCAL; } /* set up semantic stack for = LOCAL */ { $$ = $-1; } /* copy to where expects it */ namelist { $$ = $3; } ; %% extern int YYLEX_DECL(); extern void YYERROR_DECL(); byacc-20221106/test/code_calc.y0000644000000000000000000000365212723664045014614 0ustar rootroot%token-table %{ # include # include int regs[26]; int base; #ifdef YYBISON int yylex(void); static void yyerror(const char *s); #endif %} %start list %token DIGIT LETTER %left '|' %left '&' %left '+' '-' %left '*' '/' '%' %left UMINUS /* supplies precedence for unary minus */ %% /* beginning of rules section */ list : /* empty */ | list stat '\n' | list error '\n' { yyerrok ; } ; stat : expr { printf("%d\n",$1);} | LETTER '=' expr { regs[$1] = $3; } ; expr : '(' expr ')' { $$ = $2; } | expr '+' expr { $$ = $1 + $3; } | expr '-' expr { $$ = $1 - $3; } | expr '*' expr { $$ = $1 * $3; } | expr '/' expr { $$ = $1 / $3; } | expr '%' expr { $$ = $1 % $3; } | expr '&' expr { $$ = $1 & $3; } | expr '|' expr { $$ = $1 | $3; } | '-' expr %prec UMINUS { $$ = - $2; } | LETTER { $$ = regs[$1]; } | number ; number: DIGIT { $$ = $1; base = ($1==0) ? 8 : 10; } | number DIGIT { $$ = base * $1 + $2; } ; %% /* start of programs */ #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } byacc-20221106/test/err_syntax7.y0000644000000000000000000000044412313160747015174 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %token '\777' %% S: error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/pure_calc.y0000644000000000000000000000403211704621622014636 0ustar rootroot%{ # include # include int regs[26]; int base; #ifdef YYBISON #define YYSTYPE int #define YYLEX_PARAM &yylval #define YYLEX_DECL() yylex(YYSTYPE *yylval) #define YYERROR_DECL() yyerror(const char *s) int YYLEX_DECL(); static void YYERROR_DECL(); #endif %} %start list %token DIGIT LETTER %left '|' %left '&' %left '+' '-' %left '*' '/' '%' %left UMINUS /* supplies precedence for unary minus */ %% /* beginning of rules section */ list : /* empty */ | list stat '\n' | list error '\n' { yyerrok ; } ; stat : expr { printf("%d\n",$1);} | LETTER '=' expr { regs[$1] = $3; } ; expr : '(' expr ')' { $$ = $2; } | expr '+' expr { $$ = $1 + $3; } | expr '-' expr { $$ = $1 - $3; } | expr '*' expr { $$ = $1 * $3; } | expr '/' expr { $$ = $1 / $3; } | expr '%' expr { $$ = $1 % $3; } | expr '&' expr { $$ = $1 & $3; } | expr '|' expr { $$ = $1 | $3; } | '-' expr %prec UMINUS { $$ = - $2; } | LETTER { $$ = regs[$1]; } | number ; number: DIGIT { $$ = $1; base = ($1==0) ? 8 : 10; } | number DIGIT { $$ = base * $1 + $2; } ; %% /* start of programs */ #ifdef YYBYACC static int YYLEX_DECL(); #endif int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void YYERROR_DECL() { fprintf(stderr, "%s\n", s); } int YYLEX_DECL() { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { *yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { *yylval = c - '0'; return ( DIGIT ); } return( c ); } byacc-20221106/test/err_inherit4.y0000644000000000000000000000264612723664045015320 0ustar rootroot%locations %{ #include typedef enum {cGLOBAL, cLOCAL} class; typedef enum {tREAL, tINTEGER} type; typedef char * name; struct symbol { class c; type t; name id; }; typedef struct symbol symbol; struct namelist { symbol *s; struct namelist *next; }; typedef struct namelist namelist; extern symbol *mksymbol(type t, class c, name id); #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) #endif %} %token GLOBAL LOCAL %token REAL INTEGER %token NAME %type declaration namelist(, ) locnamelist() %destructor { } %type class %type type %destructor { namelist *p = $$; while (p != NULL) { namelist *pp = p; p = p->next; free(pp->s); free(pp); } } %union { class cval; type tval; namelist * nlist; name id; } %start declaration %% declaration: class type namelist($1, $2) { $$ = $3; @$ = @3; } | type locnamelist($1) { $$ = $2; @$ = @-1; } ; class : GLOBAL { $$ = cGLOBAL; } | LOCAL { $$ = cLOCAL; } ; type : REAL { $$ = tREAL; } | INTEGER { $$ = tINTEGER; } ; namelist($c, $t): namelist NAME { $$->s = mksymbol($t, $c, $2); $$->next = $1; } | NAME { $$->s = mksymbol($t, $c, $1); $$->next = NULL; } ; locnamelist($t): namelist { $$ = $1; @$ = @2; } ; %% extern int YYLEX_DECL(); extern void YYERROR_DECL(); byacc-20221106/test/err_syntax15.y0000644000000000000000000000043612313421425015245 0ustar rootroot%% %{ int yylex(void); static void yyerror(const char *); %} %start text %% S: error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/err_syntax14.y0000644000000000000000000000045012313420753015243 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %start text %start text2 %% S: error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/err_syntax22.y0000644000000000000000000000063212313672367015256 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %union { int ival; double dval; } %token NUMBER %type expr %% expr : '(' recur ')' { foo( $$ = $2 ); } ; recur : NUMBER ; %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/err_inherit3.y0000644000000000000000000000260512315170222015274 0ustar rootroot%{ #include typedef enum {cGLOBAL, cLOCAL} class; typedef enum {tREAL, tINTEGER} type; typedef char * name; struct symbol { class c; type t; name id; }; typedef struct symbol symbol; struct namelist { symbol *s; struct namelist *next; }; typedef struct namelist namelist; extern symbol *mksymbol(type t, class c, name id); #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) #endif %} %token GLOBAL LOCAL %token REAL INTEGER %token NAME %type declaration() namelist(, ) locnamelist() %type class %type type %destructor { namelist *p = $$; while (p != NULL) { namelist *pp = p; p = p->next; free(pp->s); free(pp); } } %union { class cval; type tval; namelist * nlist; name id; } %start declaration %% declaration($d): class type namelist($1, $2) { $$ = $3; } | type locnamelist($1) { $$ = $2; } ; class : GLOBAL { $$ = cGLOBAL; } | LOCAL { $$ = cLOCAL; } ; type : REAL { $$ = tREAL; } | INTEGER { $$ = tINTEGER; } ; namelist: namelist($c) NAME { $$->s = mksymbol($t, $c, $2); $$->next = $1; } | NAME { $$->s = mksymbol($t, $c, $1); $$->next = NULL; } ; locnamelist($t): namelist(cLOCAL, $t) { $$ = $1; } ; %% extern int YYLEX_DECL(); extern void YYERROR_DECL(); byacc-20221106/test/calc_code_imports.y0000644000000000000000000000365313564642603016372 0ustar rootroot%code imports { /* CODE-IMPORTS */ } %code imports { /* CODE-IMPORTS2 */ } %{ # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); %} %start list %token DIGIT LETTER %left '|' %left '&' %left '+' '-' %left '*' '/' '%' %left UMINUS /* supplies precedence for unary minus */ %% /* beginning of rules section */ list : /* empty */ | list stat '\n' | list error '\n' { yyerrok ; } ; stat : expr { printf("%d\n",$1);} | LETTER '=' expr { regs[$1] = $3; } ; expr : '(' expr ')' { $$ = $2; } | expr '+' expr { $$ = $1 + $3; } | expr '-' expr { $$ = $1 - $3; } | expr '*' expr { $$ = $1 * $3; } | expr '/' expr { $$ = $1 / $3; } | expr '%' expr { $$ = $1 % $3; } | expr '&' expr { $$ = $1 & $3; } | expr '|' expr { $$ = $1 | $3; } | '-' expr %prec UMINUS { $$ = - $2; } | LETTER { $$ = regs[$1]; } | number ; number: DIGIT { $$ = $1; base = ($1==0) ? 8 : 10; } | number DIGIT { $$ = base * $1 + $2; } ; %% /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } byacc-20221106/test/varsyntax_calc1.y0000644000000000000000000001075312313713160016006 0ustar rootroot%IDENT "check variant syntax features" %{ // http://dinosaur.compilertools.net/yacc/index.html */ #include #include #include #include typedef struct interval { double lo, hi; } INTERVAL; INTERVAL vmul(double, double, INTERVAL); INTERVAL vdiv(double, double, INTERVAL); extern int yylex(void); static void yyerror(const char *s); int dcheck(INTERVAL); double dreg[26]; INTERVAL vreg[26]; %} %expect 18 %start line %union { int ival; // dreg & vreg array index values double dval; // floating point values INTERVAL vval; // interval values } %token DREG VREG // indices into dreg, vreg arrays */ %token CONST // floating point constant */ %type dexp // expression */ %type vexp // interval expression */ // precedence information about the operators */ %< '+' '-' // %< is an obsolete synonym for %left %< '*' '/' %> UMINUS // precedence for unary minus; // %> is an obsolete synonym for %right \\ // beginning of rules section; \\ is an obsolete synonym for %% lines : // empty */ | lines line ; line : dexp '\n' { (void) printf("%15.8f\n", $1); } | vexp '\n' { (void) printf("(%15.8f, %15.8f)\n", $1.lo, $1.hi); } | DREG '=' dexp '\n' { dreg[$1] = $3; } | VREG '=' vexp '\n' { vreg[$1] = $3; } | error '\n' { yyerrok; } ; dexp : CONST | DREG { $$ = dreg[$1]; // $$ & $1 are sufficient here } | dexp '+' dexp { $$ = $1 + $3; } | dexp '-' dexp { $$ = $1 - $3; } | dexp '*' dexp { $$ = $1 * $3; } | dexp '/' dexp { $$ = $1 / $3; } | '-' dexp %prec UMINUS { $$ = -$2; } | '(' dexp ')' { $$ = $2; } ; vexp : dexp { $$.hi = $$.lo = $1; } | '(' dexp ',' dexp ')' { $$.lo = $2; $$.hi = $4; if ( $$.lo > $$.hi ) { (void) printf("interval out of order\n"); YYERROR; } } | VREG { $$ = vreg[$1]; } | vexp '+' vexp { $$.hi = $1.hi + $3.hi; $$.lo = $1.lo + $3.lo; } | dexp '+' vexp { $$.hi = $1 + $3.hi; $$.lo = $1 + $3.lo; } | vexp '-' vexp { $$.hi = $1.hi - $3.lo; $$.lo = $1.lo - $3.hi; } | dexp '-' vexp { $$.hi = $1 - $3.lo; $$.lo = $1 - $3.hi; } | vexp '*' vexp { $$ = vmul( $1.lo, $1.hi, $3 ); } | dexp '*' vexp { $$ = vmul ($1, $1, $3 ); } | vexp '/' vexp { if (dcheck($3)) YYERROR; $$ = vdiv ( $1.lo, $1.hi, $3 ); } | dexp '/' vexp { if (dcheck ( $3 )) YYERROR; $$ = vdiv ($1, $1, $3 ); } | '-' vexp %prec UMINUS { $$.hi = -$2.lo; $$.lo = -$2.hi; } | '(' vexp ')' { $$ = $2; } ; \\ /* beginning of subroutines section */ #define BSZ 50 /* buffer size for floating point numbers */ /* lexical analysis */ static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { int c; while ((c = getchar()) == ' ') { /* skip over blanks */ } if (isupper(c)) { yylval.ival = c - 'A'; return (VREG); } if (islower(c)) { yylval.ival = c - 'a'; return (DREG); } if (isdigit(c) || c == '.') { /* gobble up digits, points, exponents */ char buf[BSZ + 1], *cp = buf; int dot = 0, expr = 0; for (; (cp - buf) < BSZ; ++cp, c = getchar()) { *cp = (char) c; if (isdigit(c)) continue; if (c == '.') { if (dot++ || expr) return ('.'); /* will cause syntax error */ continue; } if (c == 'e') { if (expr++) return ('e'); /* will cause syntax error */ continue; } /* end of number */ break; } *cp = '\0'; if ((cp - buf) >= BSZ) printf("constant too long: truncated\n"); else ungetc(c, stdin); /* push back last char read */ yylval.dval = atof(buf); return (CONST); } return (c); } static INTERVAL hilo(double a, double b, double c, double d) { /* returns the smallest interval containing a, b, c, and d */ /* used by *, / routines */ INTERVAL v; if (a > b) { v.hi = a; v.lo = b; } else { v.hi = b; v.lo = a; } if (c > d) { if (c > v.hi) v.hi = c; if (d < v.lo) v.lo = d; } else { if (d > v.hi) v.hi = d; if (c < v.lo) v.lo = c; } return (v); } INTERVAL vmul(double a, double b, INTERVAL v) { return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo)); } int dcheck(INTERVAL v) { if (v.hi >= 0. && v.lo <= 0.) { printf("divisor interval contains 0.\n"); return (1); } return (0); } INTERVAL vdiv(double a, double b, INTERVAL v) { return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo)); } byacc-20221106/test/quote_calc3.y0000644000000000000000000000403211704571702015106 0ustar rootroot%{ # include # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); %} %start list %token OP_ADD "ADD-operator" %token OP_SUB "SUB-operator" %token OP_MUL "MUL-operator" %token OP_DIV "DIV-operator" %token OP_MOD "MOD-operator" %token OP_AND "AND-operator" %token DIGIT LETTER %left '|' %left '&' %left '+' '-' %left '*' '/' '%' %left UMINUS /* supplies precedence for unary minus */ %% /* beginning of rules section */ list : /* empty */ | list stat '\n' | list error '\n' { yyerrok ; } ; stat : expr { printf("%d\n",$1);} | LETTER '=' expr { regs[$1] = $3; } ; expr : '(' expr ')' { $$ = $2; } | expr OP_ADD expr { $$ = $1 + $3; } | expr OP_SUB expr { $$ = $1 - $3; } | expr OP_MUL expr { $$ = $1 * $3; } | expr OP_DIV expr { $$ = $1 / $3; } | expr OP_MOD expr { $$ = $1 % $3; } | expr OP_AND expr { $$ = $1 & $3; } | expr '|' expr { $$ = $1 | $3; } | OP_SUB expr %prec UMINUS { $$ = - $2; } | LETTER { $$ = regs[$1]; } | number ; number: DIGIT { $$ = $1; base = ($1==0) ? 8 : 10; } | number DIGIT { $$ = base * $1 + $2; } ; %% /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } byacc-20221106/test/err_syntax1.y0000644000000000000000000000042012313151673015156 0ustar rootroot % { int yylex(void); static void yyerror(const char *); %} %% S: error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/err_syntax27.y0000644000000000000000000000456412320623001015246 0ustar rootroot%pure-parser %parse-param { int regs[26] %parse-param { int *base %lex-param { int *base %{ # include # include #ifdef YYBISON #define YYSTYPE int #define YYLEX_PARAM base #define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM) #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) int YYLEX_DECL(); static void YYERROR_DECL(); #endif %} %start list %token DIGIT LETTER %left '|' %left '&' %left '+' '-' %left '*' '/' '%' %left UMINUS /* supplies precedence for unary minus */ %% /* beginning of rules section */ list : /* empty */ | list stat '\n' | list error '\n' { yyerrok ; } ; stat : expr { printf("%d\n",$1);} | LETTER '=' expr { regs[$1] = $3; } ; expr : '(' expr ')' { $$ = $2; } | expr '+' expr { $$ = $1 + $3; } | expr '-' expr { $$ = $1 - $3; } | expr '*' expr { $$ = $1 * $3; } | expr '/' expr { $$ = $1 / $3; } | expr '%' expr { $$ = $1 % $3; } | expr '&' expr { $$ = $1 & $3; } | expr '|' expr { $$ = $1 | $3; } | '-' expr %prec UMINUS { $$ = - $2; } | LETTER { $$ = regs[$1]; } | number ; number: DIGIT { $$ = $1; (*base) = ($1==0) ? 8 : 10; } | number DIGIT { $$ = (*base) * $1 + $2; } ; %% /* start of programs */ #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main (void) { int regs[26]; int base = 10; while(!feof(stdin)) { yyparse(regs, &base); } return 0; } #define UNUSED(x) ((void)(x)) static void YYERROR_DECL() { UNUSED(regs); /* %parse-param regs is not actually used here */ UNUSED(base); /* %parse-param base is not actually used here */ fprintf(stderr, "%s\n", s); } int YYLEX_DECL() { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { *yylval = (c - 'a'); return ( LETTER ); } if( isdigit( c )) { *yylval = (c - '0') % (*base); return ( DIGIT ); } return( c ); } byacc-20221106/test/run_lint.sh0000755000000000000000000000103214332017612014673 0ustar rootroot#!/bin/sh # $Id: run_lint.sh,v 1.5 2022/11/06 20:56:42 tom Exp $ # vi:ts=4 sw=4: # run lint on each of the ".c" files in the test directory if test $# = 1 then PROG_DIR=`pwd` TEST_DIR=$1 else PROG_DIR=.. TEST_DIR=. fi : "${FGREP:=grep -F}" ifBTYACC=`$FGREP -l 'define YYBTYACC' config.h > /dev/null; test $? != 0; echo $?` if test "$ifBTYACC" = 0; then REF_DIR=${TEST_DIR}/yacc else REF_DIR=${TEST_DIR}/btyacc fi echo "** `date`" for i in ${REF_DIR}/*.c do make -f $PROG_DIR/makefile lint C_FILES="$i" srcdir="$PROG_DIR" done byacc-20221106/test/err_inherit1.y0000644000000000000000000000214112315170165015273 0ustar rootroot%{ #include typedef enum {cGLOBAL, cLOCAL} class; typedef enum {tREAL, tINTEGER} type; typedef char * name; struct symbol { class c; type t; name id; }; typedef struct symbol symbol; struct namelist { symbol *s; struct namelist *next; }; typedef struct namelist namelist; extern symbol *mksymbol(type t, class c, name id); #ifdef YYBISON #define YYLEX_DECL() yylex(void) #define YYERROR_DECL() yyerror(const char *s) #endif %} %token GLOBAL LOCAL %token REAL INTEGER %token NAME %type declaration namelist(, ) locnamelist() %type class %type type %destructor { namelist *p = $$; while (p != NULL) { namelist *pp = p; p = p->next; free(pp->s); free(pp); } } %union { class cval; type tval; namelist * nlist; name id; } %start declaration %% declaration: class type namelist($1, $2) { $$ = $3; } | type locnamelist($1) { $$ = $2; } ; class : GLOBAL { $$ = cGLOBAL; } | LOCAL { $$ = cLOCAL; } ; type : REAL { $$ = tREAL; } | INTEGER { $$ = tINTEGER; } ; namelist($c, $t byacc-20221106/test/btyacc_calc1.y0000644000000000000000000001065312313710274015216 0ustar rootroot%PURE_PARSER %{ /* http://dinosaur.compilertools.net/yacc/index.html */ #include #include #include #include typedef struct interval { double lo, hi; } INTERVAL; INTERVAL vmul(double, double, INTERVAL); INTERVAL vdiv(double, double, INTERVAL); int dcheck(INTERVAL); double dreg[26]; INTERVAL vreg[26]; %} %expect 17 %start lines %union { int ival; double dval; INTERVAL vval; } %token DREG VREG /* indices into dreg, vreg arrays */ %token CONST /* floating point constant */ %type dexp /* expression */ %type vexp /* interval expression */ /* precedence information about the operators */ %left '+' '-' %left '*' '/' %right UMINUS /* precedence for unary minus */ %% /* beginning of rules section */ lines : /* empty */ | lines line '\n' [YYVALID;] | lines error '\n' [YYVALID;] { yyerrok; } ; line : dexp { (void) printf("%15.8f\n", $1); } | vexp { (void) printf("(%15.8f, %15.8f)\n", $1.lo, $1.hi); } | DREG '=' dexp { dreg[$1] = $3; } | VREG '=' vexp { vreg[$1] = $3; } ; dexp : CONST | DREG { $$ = dreg[$1]; } | dexp '+' dexp { $$ = $1 + $3; } | dexp '-' dexp { $$ = $1 - $3; } | dexp '*' dexp { $$ = $1 * $3; } | dexp '/' dexp { $$ = $1 / $3; } | '-' dexp %prec UMINUS { $$ = -$2; } | '(' dexp ')' { $$ = $2; } ; vexp : dexp { $$.hi = $$.lo = $1; } | '(' dexp ',' dexp ')' { $$.lo = $2; $$.hi = $4; if ( $$.lo > $$.hi ) { (void) printf("interval out of order\n"); YYERROR; } } | VREG { $$ = vreg[$1]; } | vexp '+' vexp { $$.hi = $1.hi + $3.hi; $$.lo = $1.lo + $3.lo; } | dexp '+' vexp { $$.hi = $1 + $3.hi; $$.lo = $1 + $3.lo; } | vexp '-' vexp { $$.hi = $1.hi - $3.lo; $$.lo = $1.lo - $3.hi; } | dexp '-' vexp { $$.hi = $1 - $3.lo; $$.lo = $1 - $3.hi; } | vexp '*' vexp { $$ = vmul( $1.lo, $1.hi, $3 ); } | dexp '*' vexp { $$ = vmul ($1, $1, $3 ); } | vexp '/' vexp { if (dcheck($3)) YYERROR; $$ = vdiv ( $1.lo, $1.hi, $3 ); } | dexp '/' vexp { if (dcheck ( $3 )) YYERROR; $$ = vdiv ($1, $1, $3 ); } | '-' vexp %prec UMINUS { $$.hi = -$2.lo; $$.lo = -$2.hi; } | '(' vexp ')' { $$ = $2; } ; %% /* beginning of subroutines section */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } #define BSZ 50 /* buffer size for floating point numbers */ static void YYERROR_DECL() { fprintf(stderr, "%s\n", s); } /* lexical analysis */ static int YYLEX_DECL() { int c; while ((c = getchar()) == ' ') { /* skip over blanks */ } if (isupper(c)) { #if YYPURE (*yylval).ival = c - 'A'; #else yylval.ival = c - 'A'; #endif return (VREG); } if (islower(c)) { #if YYPURE (*yylval).ival = c - 'a'; #else yylval.ival = c - 'a'; #endif return (DREG); } if (isdigit(c) || c == '.') { /* gobble up digits, points, exponents */ char buf[BSZ + 1], *cp = buf; int dot = 0, expr = 0; for (; (cp - buf) < BSZ; ++cp, c = getchar()) { *cp = (char) c; if (isdigit(c)) continue; if (c == '.') { if (dot++ || expr) return ('.'); /* will cause syntax error */ continue; } if (c == 'e') { if (expr++) return ('e'); /* will cause syntax error */ continue; } /* end of number */ break; } *cp = '\0'; if ((cp - buf) >= BSZ) printf("constant too long: truncated\n"); else ungetc(c, stdin); /* push back last char read */ #if YYPURE (*yylval).dval = atof(buf); #else yylval.dval = atof(buf); #endif return (CONST); } return (c); } static INTERVAL hilo(double a, double b, double c, double d) { /* returns the smallest interval containing a, b, c, and d */ /* used by *, / routines */ INTERVAL v; if (a > b) { v.hi = a; v.lo = b; } else { v.hi = b; v.lo = a; } if (c > d) { if (c > v.hi) v.hi = c; if (d < v.lo) v.lo = d; } else { if (d > v.hi) v.hi = d; if (c < v.lo) v.lo = c; } return (v); } INTERVAL vmul(double a, double b, INTERVAL v) { return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo)); } int dcheck(INTERVAL v) { if (v.hi >= 0. && v.lo <= 0.) { printf("divisor interval contains 0.\n"); return (1); } return (0); } INTERVAL vdiv(double a, double b, INTERVAL v) { return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo)); } byacc-20221106/test/err_syntax17.y0000644000000000000000000000042112313535500015241 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %% S: { error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/calc.y0000644000000000000000000000353511704571100013605 0ustar rootroot%{ # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); %} %start list %token DIGIT LETTER %left '|' %left '&' %left '+' '-' %left '*' '/' '%' %left UMINUS /* supplies precedence for unary minus */ %% /* beginning of rules section */ list : /* empty */ | list stat '\n' | list error '\n' { yyerrok ; } ; stat : expr { printf("%d\n",$1);} | LETTER '=' expr { regs[$1] = $3; } ; expr : '(' expr ')' { $$ = $2; } | expr '+' expr { $$ = $1 + $3; } | expr '-' expr { $$ = $1 - $3; } | expr '*' expr { $$ = $1 * $3; } | expr '/' expr { $$ = $1 / $3; } | expr '%' expr { $$ = $1 % $3; } | expr '&' expr { $$ = $1 & $3; } | expr '|' expr { $$ = $1 | $3; } | '-' expr %prec UMINUS { $$ = - $2; } | LETTER { $$ = regs[$1]; } | number ; number: DIGIT { $$ = $1; base = ($1==0) ? 8 : 10; } | number DIGIT { $$ = base * $1 + $2; } ; %% /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } byacc-20221106/test/ok_syntax1.y0000644000000000000000000000566012321233675015014 0ustar rootroot%pure_parser %parse_param { int regs[26] } %parse_param { int *base } %lex_param { int *base } %{ # include # include #ifdef YYBISON #define YYSTYPE int #define YYLEX_PARAM base #define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM) #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s) int YYLEX_DECL(); static void YYERROR_DECL(); #endif %} %start list %token DIGIT LETTER %token OCT1 '\177' %token HEX1 '\xff' %token HEX2 '\xFF' %token HEX3 '\x7f' %token STR1 "\x7f\177\\\n" %token STR2 "\x7f\ \177\\\n" %token BELL '\a' %token BS '\b' %token NL '\n' %token LF '\f' %token CR '\r' %token TAB '\t' %token VT '\v' %union { char * cval; int ival; double dval; } %0 '@' %2 '~' %> '^' %< '#' %left '|' %left '&' %left '+' '-' %left '*' '/' '%' %left UMINUS /* supplies precedence for unary minus */ %% /* beginning of rules section */ list : /* empty */ | list stat '\n' | list error '\n' { yyerrok ; } ; stat : expr { printf("%d\n",$1);} | LETTER '=' expr { regs[$1] = $3; } ; expr : '(' expr ')' { $$ = $2; } | expr '+' expr { $$ = $1 + $3; } | expr '-' expr { $$ = $1 - $3; } | expr '*' expr { $$ = $1 * $3; } | expr '/' expr { $$ = $1 / $3; } | expr '%' expr { $$ = $1 % $3; } | expr '&' expr { $$ = $1 & $3; } | expr '|' expr { $$ = $1 | $3; } | '-' expr %prec UMINUS { $$ = - $2; } | LETTER { $$ = regs[$1]; } | number ; number: DIGIT { $$ = $1; (*base) = ($1==0) ? 8 : 10; } | number DIGIT { $$ = (*base) * $1 + $2; } ; %% /* start of programs */ #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main (void) { int regs[26]; int base = 10; while(!feof(stdin)) { yyparse(regs, &base); } return 0; } #define UNUSED(x) ((void)(x)) static void YYERROR_DECL() { UNUSED(regs); /* %parse-param regs is not actually used here */ UNUSED(base); /* %parse-param base is not actually used here */ fprintf(stderr, "%s\n", s); } int YYLEX_DECL() { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval->ival = (c - 'a'); return ( LETTER ); } if( isdigit( c )) { yylval->ival = (c - '0') % (*base); return ( DIGIT ); } return( c ); } byacc-20221106/test/err_syntax26.y0000644000000000000000000000010712313701072015241 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %type # include int regs[26]; int base; int yylex(void); static void yyerror(const char *s); %} %start list %token OP_ADD "ADD-operator" %token OP_SUB "SUB-operator" %token OP_MUL "MUL-operator" %token OP_DIV "DIV-operator" %token OP_MOD "MOD-operator" %token OP_AND "AND-operator" %token DIGIT LETTER %left '|' %left '&' %left '+' '-' %left '*' '/' '%' %left UMINUS /* supplies precedence for unary minus */ %% /* beginning of rules section */ list : /* empty */ | list stat '\n' | list error '\n' { yyerrok ; } ; stat : expr { printf("%d\n",$1);} | LETTER '=' expr { regs[$1] = $3; } ; expr : '(' expr ')' { $$ = $2; } | expr "ADD-operator" expr { $$ = $1 + $3; } | expr "SUB-operator" expr { $$ = $1 - $3; } | expr "MUL-operator" expr { $$ = $1 * $3; } | expr "DIV-operator" expr { $$ = $1 / $3; } | expr "MOD-operator" expr { $$ = $1 % $3; } | expr "AND-operator" expr { $$ = $1 & $3; } | expr '|' expr { $$ = $1 | $3; } | "SUB-operator" expr %prec UMINUS { $$ = - $2; } | LETTER { $$ = regs[$1]; } | number ; number: DIGIT { $$ = $1; base = ($1==0) ? 8 : 10; } | number DIGIT { $$ = base * $1 + $2; } ; %% /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } byacc-20221106/test/err_syntax6.y0000644000000000000000000000045012313157603015165 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %token int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/err_syntax2.y0000644000000000000000000000042012313152721015152 0ustar rootroot%{ /* int yylex(void); static void yyerror(const char *); %} %% S: error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/err_syntax10.y0000644000000000000000000000050312313416004015230 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %token '(' '*' '&' %token '(' '*' '&' %% S: error %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/pure_error.y0000644000000000000000000000076011704621672015076 0ustar rootroot%{ #ifdef YYBISON #define YYSTYPE int #define YYLEX_PARAM &yylval #define YYLEX_DECL() yylex(YYSTYPE *yylval) #define YYERROR_DECL() yyerror(const char *s) int YYLEX_DECL(); static void YYERROR_DECL(); #endif %} %% S: error %% #include #ifdef YYBYACC extern int YYLEX_DECL(); #endif int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(YYSTYPE *value) { return value ? 0 : -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/run_test.sh0000755000000000000000000001423214332026515014714 0ustar rootroot#!/bin/sh # $Id: run_test.sh,v 1.37 2022/11/06 21:55:25 tom Exp $ # vi:ts=4 sw=4: errors=0 # NEW is the file created by the testcase # REF is the reference file against which to compare test_diffs() { # echo "...test_diffs $NEW vs $REF" mv -f "$NEW" "${REF_DIR}/" CMP=${REF_DIR}/${NEW} if test ! -f "$CMP" then echo "...not found $CMP" errors=1 else sed -e "s,$NEW,$REF," \ -e "s%$YACC_escaped%YACC%" \ -e "s%^yacc\>%YACC%" \ -e "s%YACC:.*option.*$%YACC: error message%" \ -e "s%yacc:.*option.*$%YACC: error message%" \ -e "s%^Usage: yacc\>%Usage: YACC%" \ -e '/YYPATCH/s/[0-9][0-9]*/"yyyymmdd"/' \ -e '/#define YYPATCH/s/PATCH/CHECK/' \ -e 's,#line \([1-9][0-9]*\) "'"$REF_DIR"'/,#line \1 ",' \ -e 's,#line \([1-9][0-9]*\) "'"$TEST_DIR"'/,#line \1 ",' \ -e 's/^typedef \(short\|long\) YYINT;$/typedef int YYINT;/' \ -e 's,\(YACC:.* line [0-9][0-9]* of "\)'"$TEST_DIR/"',\1./,' \ < "$CMP" >"$tmpfile" \ && mv "$tmpfile" "$CMP" if test ! -f "$REF" then mv "$CMP" "$REF" echo "...saved $REF" elif ( cmp -s "$REF" "$CMP" ) then echo "...ok $REF" rm -f "$CMP" else echo "...diff $REF" diff -c "$REF" "$CMP" errors=1 fi fi } test_flags() { echo "** testing flags $*" root=$1 ROOT=test-$root shift 1 $YACC "$@" >"$ROOT.output" 2>"$ROOT.error" for type in .output .error do NEW=$ROOT$type REF=$REF_DIR/$root$type test_diffs done } test_stdin() { echo "** testing stdin $*" root=$1 ROOT=test-$root shift 1 opts="$1" shift 1 code=`echo "$1"|sed -e 's/y$/c/' -e "s,${TEST_DIR}/,,"` if test "x$opts" = "x-" then $YACC -o "$ROOT.$code" $opts <$1 >"$ROOT.output" 2>"$ROOT.error" else $YACC -o "$ROOT.$code" $opts $1 >"$ROOT.output" 2>"$ROOT.error" fi for type in .output .error .$code do NEW=$ROOT$type REF=$REF_DIR/$root$type test_diffs done } test_defines() { echo "** testing defines $*" root=$1 ROOT=test-$root shift 1 opts= while test $# != 1 do opts="$opts $1" shift 1 done head=`echo "$1"|sed -e 's/y$/h/' -e "s,${TEST_DIR}/,,"` code=`echo "$1"|sed -e 's/y$/c/' -e "s,${TEST_DIR}/,,"` $YACC $opts -H "$ROOT.$head" $1 >"$ROOT.output" 2>"$ROOT.error" for name in prefix.tab.c y.tab.c do if test -f $name then mv "$name" "$ROOT.$code" break fi done for name in .output .error .$head .$code do NEW=$ROOT$name REF=$REF_DIR/$root$name test_diffs done } if test $# = 1 then PROG_DIR=`pwd` TEST_DIR=$1 PROG_DIR=`echo "$PROG_DIR" | sed -e 's/ /\\\\ /g'` TEST_DIR=`echo "$TEST_DIR" | sed -e 's/ /\\\\ /g'` else PROG_DIR=.. TEST_DIR=. fi YACC=$PROG_DIR/yacc YACC_escaped=`echo "$PROG_DIR/yacc" | sed -e 's/\./\\\./g'` tmpfile=temp$$ : "${FGREP:=grep -F}" ifBTYACC=`$FGREP -l 'define YYBTYACC' $PROG_DIR/config.h > /dev/null; test $? != 0; echo $?` if test "$ifBTYACC" = 0; then REF_DIR=${TEST_DIR}/yacc else REF_DIR=${TEST_DIR}/btyacc fi rm -f ${REF_DIR}/test-* echo "** `date`" # Tests which do not need files MYFILE=nosuchfile test_flags help -z test_flags big_b -B test_flags big_l -L # Test attempts to read non-existent file rm -f $MYFILE.* test_flags nostdin - $MYFILE.y test_flags no_opts -- $MYFILE.y # Test attempts to write to readonly file touch $MYFILE.y touch $MYFILE.c chmod 444 $MYFILE.* test_flags no_b_opt -b test_flags no_b_opt1 -bBASE -o $MYFILE.c $MYFILE.y touch $MYFILE.c chmod 444 $MYFILE.* test_flags no_p_opt -p test_flags no_p_opt1 -pBASE -o $MYFILE.c $MYFILE.y rm -f BASE$MYFILE.c touch $MYFILE.dot chmod 444 $MYFILE.* test_flags no_graph -g -o $MYFILE.c $MYFILE.y rm -f $MYFILE.dot touch $MYFILE.output chmod 444 $MYFILE.* test_flags no_verbose -v -o $MYFILE.c $MYFILE.y test_flags no_output -o $MYFILE.output $MYFILE.y test_flags no_output1 -o$MYFILE.output $MYFILE.y test_flags no_output2 -o rm -f $MYFILE.output touch $MYFILE.h chmod 444 $MYFILE.* test_flags no_defines -d -o $MYFILE.c $MYFILE.y rm -f $MYFILE.h touch $MYFILE.i chmod 444 $MYFILE.* test_flags no_include -i -o $MYFILE.c $MYFILE.y rm -f $MYFILE.i touch $MYFILE.code.c chmod 444 $MYFILE.* test_flags no_code_c -r -o $MYFILE.c $MYFILE.y rm -f $MYFILE.code.c rm -f $MYFILE.* # Test special cases test_stdin stdin1 - ${TEST_DIR}/calc.y test_stdin stdin2 -- ${TEST_DIR}/calc.y test_defines defines1 ${TEST_DIR}/calc.y test_defines defines2 -d ${TEST_DIR}/calc.y test_defines defines3 -b prefix ${TEST_DIR}/calc.y for input in "${TEST_DIR}"/*.y do case $input in test-*) echo "?? ignored $input" ;; *) root=`basename "$input" .y` ROOT="test-$root" prefix=`echo "${root}_" | sed -e 's/[.]/_/g'` OPTS= OPT2= OOPT= TYPE=".error .output .tab.c .tab.h" case $input in ${TEST_DIR}/btyacc_*) if test "$ifBTYACC" = 0; then continue; fi OPTS="$OPTS -B" prefix=`echo "$prefix" | sed -e 's/^btyacc_//'` ;; ${TEST_DIR}/grammar*) OPTS="$OPTS -g" TYPE="$TYPE .dot" ;; ${TEST_DIR}/code_debug*) OPTS="$OPTS -t -i" OOPT=rename_debug.c TYPE="$TYPE .i" prefix= ;; ${TEST_DIR}/code_*) OPTS="$OPTS -r" TYPE="$TYPE .code.c" prefix=`echo "$prefix" | sed -e 's/^code_//'` ;; ${TEST_DIR}/pure_*) OPTS="$OPTS -P" prefix=`echo "$prefix" | sed -e 's/^pure_//'` ;; ${TEST_DIR}/quote_*) OPT2="-s" ;; ${TEST_DIR}/inherit*|\ ${TEST_DIR}/err_inherit*) if test "$ifBTYACC" = 0; then continue; fi ;; esac echo "** testing $input" test -n "$prefix" && prefix="-p $prefix" for opt2 in "" $OPT2 do output=$OOPT if test -n "$output" then output="-o $output" error=`basename "$OOPT" .c`.error else error=${ROOT}${opt2}.error fi $YACC $OPTS $opt2 -v -d $output $prefix -b "$ROOT${opt2}" "$input" 2>"$error" for type in $TYPE do REF=${REF_DIR}/${root}${opt2}${type} # handle renaming due to "-o" option if test -n "$OOPT" then case $type in *.tab.c) type=.c ;; *.tab.h) type=.h ;; *) ;; esac NEW=`basename "$OOPT" .c`${type} case $NEW in test-*) ;; *) if test -f "$NEW" then REF=${REF_DIR}/$NEW mv "$NEW" "test-$NEW" NEW="test-$NEW" fi ;; esac else NEW="${ROOT}${opt2}${type}" fi test_diffs done done ;; esac done exit $errors byacc-20221106/test/err_syntax21.y0000644000000000000000000000054312313665715015255 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %type expr %type recur %% expr : '(' recur ')' { foo( $$ = $0 ); } ; %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/err_syntax19.y0000644000000000000000000000050412313654150015250 0ustar rootroot%{ int yylex(void); static void yyerror(const char *); %} %% expr : '(' expr ')' { $$ = $; } ; %% #include int main(void) { printf("yyparse() = %d\n", yyparse()); return 0; } int yylex(void) { return -1; } static void yyerror(const char* s) { printf("%s\n", s); } byacc-20221106/test/calc_code_provides.y0000644000000000000000000000365513564642032016526 0ustar rootroot%code provides { /* CODE-PROVIDES */ } %code provides { /* CODE-PROVIDES2 */ } %{ # include # include int regs[26]; int base; extern int yylex(void); static void yyerror(const char *s); %} %start list %token DIGIT LETTER %left '|' %left '&' %left '+' '-' %left '*' '/' '%' %left UMINUS /* supplies precedence for unary minus */ %% /* beginning of rules section */ list : /* empty */ | list stat '\n' | list error '\n' { yyerrok ; } ; stat : expr { printf("%d\n",$1);} | LETTER '=' expr { regs[$1] = $3; } ; expr : '(' expr ')' { $$ = $2; } | expr '+' expr { $$ = $1 + $3; } | expr '-' expr { $$ = $1 - $3; } | expr '*' expr { $$ = $1 * $3; } | expr '/' expr { $$ = $1 / $3; } | expr '%' expr { $$ = $1 % $3; } | expr '&' expr { $$ = $1 & $3; } | expr '|' expr { $$ = $1 | $3; } | '-' expr %prec UMINUS { $$ = - $2; } | LETTER { $$ = regs[$1]; } | number ; number: DIGIT { $$ = $1; base = ($1==0) ? 8 : 10; } | number DIGIT { $$ = base * $1 + $2; } ; %% /* start of programs */ int main (void) { while(!feof(stdin)) { yyparse(); } return 0; } static void yyerror(const char *s) { fprintf(stderr, "%s\n", s); } int yylex(void) { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); } byacc-20221106/warshall.c0000644000000000000000000000215713732455674013536 0ustar rootroot/* $Id: warshall.c,v 1.9 2020/09/22 20:17:00 tom Exp $ */ #include "defs.h" static void transitive_closure(unsigned *R, int n) { int rowsize; unsigned i; unsigned *rowj; unsigned *rp; unsigned *rend; unsigned *relend; unsigned *cword; unsigned *rowi; rowsize = WORDSIZE(n); relend = R + n * rowsize; cword = R; i = 0; rowi = R; while (rowi < relend) { unsigned *ccol = cword; rowj = R; while (rowj < relend) { if (*ccol & (1U << i)) { rp = rowi; rend = rowj + rowsize; while (rowj < rend) *rowj++ |= *rp++; } else { rowj += rowsize; } ccol += rowsize; } if (++i >= BITS_PER_WORD) { i = 0; cword++; } rowi += rowsize; } } void reflexive_transitive_closure(unsigned *R, int n) { int rowsize; unsigned i; unsigned *rp; unsigned *relend; transitive_closure(R, n); rowsize = WORDSIZE(n); relend = R + n * rowsize; i = 0; rp = R; while (rp < relend) { *rp |= (1U << i); if (++i >= BITS_PER_WORD) { i = 0; rp++; } rp += rowsize; } } byacc-20221106/vmsbuild.com0000644000000000000000000001273412320323111014050 0ustar rootroot$! $Id: vmsbuild.com,v 1.2 2014/04/06 19:08:57 tom Exp $ $! VMS build-script for BYACC. Requires installed C compiler $! $! Screen Configurations $! --------------------- $! To build BYACC, type: $! $ @vmsbuild [BYACC [ [bld_target]]] $! $! where: $! :== { decc | vaxc } $! $! The default compiler on VAX hosts is vaxc, else decc (Alpha hosts). $! $! ----------------------------------------------------------- $ hlp = f$edit("''p1'", "UPCASE") $ if "''hlp'" .eqs. "HELP" .or. - "''hlp'" .eqs. "-H" .or. - "''hlp'" .eqs. "-?" .or. - "''hlp'" .eqs. "?" then gosub usage $ goto start $! $ vaxc_config: $ comp = "__vaxc__=1" $ CFLAGS = "/VAXC" $ DEFS = ",HAVE_STRERROR" $ using_vaxc = 1 $ return $! $ decc_config: $ comp = "__decc__=1" $ CFLAGS = "/DECC/prefix=all" $ DEFS = ",HAVE_ALARM,HAVE_STRERROR" $ return $! $ usage: $ write sys$output "usage: " $ write sys$output " $ @vmsbuild [BYACC [{decc | vaxc} []]]" $ exit 2 $! $ start: $! ----------------------------------------------------------- $! pickup user's compiler choice, if any $! ----------------------------------------------------------- $! $ comp = "" $ using_vaxc = 0 $ if "''p2'" .nes. "" $ then $ comp = f$edit(p2, "UPCASE") $ if "''comp'" .eqs. "VAXC" $ then $ gosub vaxc_config $ else $ if "''comp'" .eqs. "DECC" $ then $ gosub decc_config $ else $ gosub usage $ endif $ endif $ endif $! ----------------------------------------------------------- $! Build the option-file $! $ open/write optf vms_link.opt $ write optf "closure.obj" $ write optf "error.obj" $ write optf "lalr.obj" $ write optf "lr0.obj" $ write optf "mkpar.obj" $ write optf "output.obj" $ write optf "reader.obj" $ write optf "yaccpar.obj" $ write optf "symtab.obj" $ write optf "verbose.obj" $ write optf "warshall.obj" $! ---------------------------------- $! Look for the compiler used and specify architecture. $! $ CC = "CC" $ if f$getsyi("HW_MODEL").ge.1024 $ then $ arch = "__alpha__=1" $ if "''comp'" .eqs. "" then gosub decc_config $ else $ arch = "__vax__=1" $ if "''comp'" .nes. "" then goto screen_config $ if f$search("SYS$SYSTEM:VAXC.EXE").nes."" $ then $ gosub vaxc_config $ else $ if f$search("SYS$SYSTEM:DECC$COMPILER.EXE").nes."" $ then $ gosub decc_config $ else $ DEFS = ",HAVE_STRERROR" $ if f$trnlnm("GNU_CC").eqs."" $ then $ write sys$output "C compiler required to rebuild BYACC" $ close optf $ exit $ else $ write optf "gnu_cc:[000000]gcclib.olb/lib" $ comp = "__gcc__=1" $ CC = "GCC" $ endif $ endif $ endif $ endif $! $ screen_config: $! $ if using_vaxc .eq. 1 then write optf "sys$library:vaxcrtl.exe/share" $ close optf $! -------------- vms_link.opt is created ------------- $ if f$edit("''p1'", "UPCASE") .eqs. "VMS_LINK.OPT" $ then $! mms called this script to build vms_link.opt. all done $ exit $ endif $! $ if f$search("SYS$SYSTEM:MMS.EXE").eqs."" $ then $! can also use /Debug /Listing, /Show=All $ $ CFLAGS := 'CFLAGS/Diagnostics /Define=("''DEFS'") /Include=([]) $ $ if "''p3'" .nes. "" then goto 'p3 $! $! $ all : $! $ call make closure $ call make error $ call make lalr $ call make lr0 $ call make main $ call make mkpar $ call make output $ call make reader $ call make yaccpar $ call make symtab $ call make verbose $ call make warshall $! $ link /exec='target/map/cross main.obj, vms_link/opt $ goto build_last $! $ install : $ WRITE SYS$ERROR "** no rule for install" $ goto build_last $! $ clobber : $ if f$search("BYACC.com") .nes. "" then delete BYACC.com;* $ if f$search("*.exe") .nes. "" then delete *.exe;* $! fallthru $! $ clean : $ if f$search("*.obj") .nes. "" then delete *.obj;* $ if f$search("*.bak") .nes. "" then delete *.bak;* $ if f$search("*.lis") .nes. "" then delete *.lis;* $ if f$search("*.log") .nes. "" then delete *.log;* $ if f$search("*.map") .nes. "" then delete *.map;* $ if f$search("*.opt") .nes. "" then delete *.opt;* $! fallthru $! $ build_last : $ if f$search("*.dia") .nes. "" then delete *.dia;* $ if f$search("*.lis") .nes. "" then purge *.lis $ if f$search("*.obj") .nes. "" then purge *.obj $ if f$search("*.map") .nes. "" then purge *.map $ if f$search("*.opt") .nes. "" then purge *.opt $ if f$search("*.exe") .nes. "" then purge *.exe $ if f$search("*.log") .nes. "" then purge *.log $! fallthru $! $ vms_link_opt : $ exit 1 $! $! Runs BYACC from the current directory (used for testing) $ byacc_com : $ if "''f$search("BYACC.com")'" .nes. "" then delete BYACC.com;* $ copy nl: BYACC.com $ open/append test_script BYACC.com $ write test_script "$ temp = f$environment(""procedure"")" $ write test_script "$ temp = temp -" $ write test_script " - f$parse(temp,,,""version"",""syntax_only"") -" $ write test_script " - f$parse(temp,,,""type"",""syntax_only"")" $ write test_script "$ BYACC :== $ 'temp'.exe" $ write test_script "$ define/user_mode sys$input sys$command" $ write test_script "$ define/user_mode sys$output sys$command" $ write test_script "$ BYACC 'p1 'p2 'p3 'p4 'p5 'p6 'p7 'p8" $ close test_script $ write sys$output "** made BYACC.com" $ exit $! $ else $ mms/ignore=warning/macro=('comp','mmstar','arch') 'p3 $ endif $ exit $ make: subroutine $ if f$search("''p1'.obj") .eqs. "" $ then $ write sys$output "compiling ''p1'" $ 'CC 'CFLAGS 'p1.c $ if f$search("''p1'.dia") .nes. "" then delete 'p1.dia;* $ endif $exit $ return $ endsubroutine byacc-20221106/NEW_FEATURES0000644000000000000000000000400204650250364013402 0ustar rootroot The -r option has been implemented. The -r option tells Yacc to put the read-only tables in y.tab.c and the code and variables in y.code.c. Keith Bostic asked for this option so that :yyfix could be eliminated. The -l and -t options have been implemented. The -l option tells Yacc not to include #line directives in the code it produces. The -t option causes debugging code to be included in the compiled parser. The code for error recovery has been changed to implement the same algorithm as AT&T Yacc. There will still be differences in the way error recovery works because AT&T Yacc uses more default reductions than Berkeley Yacc. The environment variable TMPDIR determines the directory where temporary files will be created. If TMPDIR is defined, temporary files will be created in the directory whose pathname is the value of TMPDIR. By default, temporary files are created in /tmp. The keywords are now case-insensitive. For example, %nonassoc, %NONASSOC, %NonAssoc, and %nOnAsSoC are all equivalent. Commas and semicolons that are not part of C code are treated as commentary. Line-end comments, as in BCPL, are permitted. Line-end comments begin with // and end at the next end-of-line. Line-end comments are permitted in C code; they are converted to C comments on output. The form of y.output files has been changed to look more like those produced by AT&T Yacc. A new kind of declaration has been added. The form of the declaration is %ident string where string is a sequence of characters begining with a double quote and ending with either a double quote or the next end-of-line, whichever comes first. The declaration will cause a #ident directive to be written near the start of the output file. If a parser has been compiled with debugging code, that code can be enabled by setting an environment variable. If the environment variable YYDEBUG is set to 0, debugging output is suppressed. If it is set to 1, debugging output is written to standard output. byacc-20221106/Makefile.old0000644000000000000000000000241604744240025013751 0ustar rootrootDEST = . HDRS = defs.h CFLAGS = -O -DNDEBUG LDFLAGS = LIBS = LINKER = cc MAKEFILE = Makefile OBJS = closure.o \ error.o \ lalr.o \ lr0.o \ main.o \ mkpar.o \ output.o \ reader.o \ skeleton.o \ symtab.o \ verbose.o \ warshall.o PRINT = pr -f -l88 PROGRAM = yacc SRCS = closure.c \ error.c \ lalr.c \ lr0.c \ main.c \ mkpar.c \ output.c \ reader.c \ skeleton.c \ symtab.c \ verbose.c \ warshall.c all: $(PROGRAM) $(PROGRAM): $(OBJS) $(LIBS) @echo -n "Loading $(PROGRAM) ... " @$(LINKER) $(LDFLAGS) -o $(PROGRAM) $(OBJS) $(LIBS) @echo "done" clean:; @rm -f $(OBJS) clobber:; @rm -f $(OBJS) $(PROGRAM) depend:; @mkmf -f $(MAKEFILE) PROGRAM=$(PROGRAM) DEST=$(DEST) index:; @ctags -wx $(HDRS) $(SRCS) install: $(PROGRAM) @echo Installing $(PROGRAM) in $(DEST) @install -s $(PROGRAM) $(DEST) listing:; @$(PRINT) Makefile $(HDRS) $(SRCS) | lpr lint:; @lint $(SRCS) program: $(PROGRAM) tags: $(HDRS) $(SRCS); @ctags $(HDRS) $(SRCS) ### closure.o: defs.h error.o: defs.h lalr.o: defs.h lr0.o: defs.h main.o: defs.h mkpar.o: defs.h output.o: defs.h reader.o: defs.h skeleton.o: defs.h symtab.o: defs.h verbose.o: defs.h warshall.o: defs.h byacc-20221106/aclocal.m40000644000000000000000000016562014316422414013403 0ustar rootrootdnl $Id: aclocal.m4,v 1.57 2022/10/02 23:55:56 tom Exp $ dnl Macros for byacc configure script (Thomas E. Dickey) dnl --------------------------------------------------------------------------- dnl Copyright 2004-2021,2022 Thomas E. Dickey dnl dnl Permission is hereby granted, free of charge, to any person obtaining a dnl copy of this software and associated documentation files (the dnl "Software"), to deal in the Software without restriction, including dnl without limitation the rights to use, copy, modify, merge, publish, dnl distribute, distribute with modifications, sublicense, and/or sell dnl copies of the Software, and to permit persons to whom the Software is dnl furnished to do so, subject to the following conditions: dnl dnl The above copyright notice and this permission notice shall be included dnl in all copies or portions of the Software. dnl dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. dnl IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR dnl THE USE OR OTHER DEALINGS IN THE SOFTWARE. dnl dnl Except as contained in this notice, the name(s) of the above copyright dnl holders shall not be used in advertising or otherwise to promote the dnl sale, use or other dealings in this Software without prior written dnl authorization. dnl --------------------------------------------------------------------------- dnl --------------------------------------------------------------------------- dnl CF_ACVERSION_CHECK version: 5 updated: 2014/06/04 19:11:49 dnl ------------------ dnl Conditionally generate script according to whether we're using a given autoconf. dnl dnl $1 = version to compare against dnl $2 = code to use if AC_ACVERSION is at least as high as $1. dnl $3 = code to use if AC_ACVERSION is older than $1. define([CF_ACVERSION_CHECK], [ ifdef([AC_ACVERSION], ,[ifdef([AC_AUTOCONF_VERSION],[m4_copy([AC_AUTOCONF_VERSION],[AC_ACVERSION])],[m4_copy([m4_PACKAGE_VERSION],[AC_ACVERSION])])])dnl ifdef([m4_version_compare], [m4_if(m4_version_compare(m4_defn([AC_ACVERSION]), [$1]), -1, [$3], [$2])], [CF_ACVERSION_COMPARE( AC_PREREQ_CANON(AC_PREREQ_SPLIT([$1])), AC_PREREQ_CANON(AC_PREREQ_SPLIT(AC_ACVERSION)), AC_ACVERSION, [$2], [$3])])])dnl dnl --------------------------------------------------------------------------- dnl CF_ACVERSION_COMPARE version: 3 updated: 2012/10/03 18:39:53 dnl -------------------- dnl CF_ACVERSION_COMPARE(MAJOR1, MINOR1, TERNARY1, dnl MAJOR2, MINOR2, TERNARY2, dnl PRINTABLE2, not FOUND, FOUND) define([CF_ACVERSION_COMPARE], [ifelse(builtin([eval], [$2 < $5]), 1, [ifelse([$8], , ,[$8])], [ifelse([$9], , ,[$9])])])dnl dnl --------------------------------------------------------------------------- dnl CF_ADD_CFLAGS version: 15 updated: 2020/12/31 10:54:15 dnl ------------- dnl Copy non-preprocessor flags to $CFLAGS, preprocessor flags to $CPPFLAGS dnl $1 = flags to add dnl $2 = if given makes this macro verbose. dnl dnl Put any preprocessor definitions that use quoted strings in $EXTRA_CPPFLAGS, dnl to simplify use of $CPPFLAGS in compiler checks, etc., that are easily dnl confused by the quotes (which require backslashes to keep them usable). AC_DEFUN([CF_ADD_CFLAGS], [ cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $1 do case "$cf_fix_cppflags" in (no) case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case "$cf_add_cflags" in (-D*) cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[[^=]]*='\''\"[[^"]]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test "$cf_fix_cppflags" = yes ; then CF_APPEND_TEXT(cf_new_extra_cppflags,$cf_add_cflags) continue elif test "${cf_tst_cflags}" = "\"'" ; then CF_APPEND_TEXT(cf_new_extra_cppflags,$cf_add_cflags) continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,$cf_tst_cppflags) ;; esac CF_APPEND_TEXT(cf_new_cppflags,$cf_add_cflags) ;; esac ;; (*) CF_APPEND_TEXT(cf_new_cflags,$cf_add_cflags) ;; esac ;; (yes) CF_APPEND_TEXT(cf_new_extra_cppflags,$cf_add_cflags) cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[[^"]]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then ifelse([$2],,,[CF_VERBOSE(add to \$CFLAGS $cf_new_cflags)]) CF_APPEND_TEXT(CFLAGS,$cf_new_cflags) fi if test -n "$cf_new_cppflags" ; then ifelse([$2],,,[CF_VERBOSE(add to \$CPPFLAGS $cf_new_cppflags)]) CF_APPEND_TEXT(CPPFLAGS,$cf_new_cppflags) fi if test -n "$cf_new_extra_cppflags" ; then ifelse([$2],,,[CF_VERBOSE(add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags)]) CF_APPEND_TEXT(EXTRA_CPPFLAGS,$cf_new_extra_cppflags) fi AC_SUBST(EXTRA_CPPFLAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_APPEND_CFLAGS version: 3 updated: 2021/09/05 17:25:40 dnl ---------------- dnl Use CF_ADD_CFLAGS after first checking for potential redefinitions. dnl $1 = flags to add dnl $2 = if given makes this macro verbose. define([CF_APPEND_CFLAGS], [ for cf_add_cflags in $1 do case "x$cf_add_cflags" in (x-[[DU]]*) CF_REMOVE_CFLAGS($cf_add_cflags,CFLAGS,[$2]) CF_REMOVE_CFLAGS($cf_add_cflags,CPPFLAGS,[$2]) ;; esac CF_ADD_CFLAGS([$cf_add_cflags],[$2]) done ])dnl dnl --------------------------------------------------------------------------- dnl CF_APPEND_TEXT version: 1 updated: 2017/02/25 18:58:55 dnl -------------- dnl use this macro for appending text without introducing an extra blank at dnl the beginning define([CF_APPEND_TEXT], [ test -n "[$]$1" && $1="[$]$1 " $1="[$]{$1}$2" ])dnl dnl --------------------------------------------------------------------------- dnl CF_ARG_DISABLE version: 3 updated: 1999/03/30 17:24:31 dnl -------------- dnl Allow user to disable a normally-on option. AC_DEFUN([CF_ARG_DISABLE], [CF_ARG_OPTION($1,[$2],[$3],[$4],yes)])dnl dnl --------------------------------------------------------------------------- dnl CF_ARG_ENABLE version: 3 updated: 1999/03/30 17:24:31 dnl ------------- dnl Allow user to enable a normally-off option. AC_DEFUN([CF_ARG_ENABLE], [CF_ARG_OPTION($1,[$2],[$3],[$4],no)])dnl dnl --------------------------------------------------------------------------- dnl CF_ARG_OPTION version: 5 updated: 2015/05/10 19:52:14 dnl ------------- dnl Restricted form of AC_ARG_ENABLE that ensures user doesn't give bogus dnl values. dnl dnl Parameters: dnl $1 = option name dnl $2 = help-string dnl $3 = action to perform if option is not default dnl $4 = action if perform if option is default dnl $5 = default option value (either 'yes' or 'no') AC_DEFUN([CF_ARG_OPTION], [AC_ARG_ENABLE([$1],[$2],[test "$enableval" != ifelse([$5],no,yes,no) && enableval=ifelse([$5],no,no,yes) if test "$enableval" != "$5" ; then ifelse([$3],,[ :]dnl ,[ $3]) ifelse([$4],,,[ else $4]) fi],[enableval=$5 ifelse([$4],,,[ $4 ])dnl ])])dnl dnl --------------------------------------------------------------------------- dnl CF_C11_NORETURN version: 3 updated: 2021/03/28 11:36:23 dnl --------------- AC_DEFUN([CF_C11_NORETURN], [ AC_MSG_CHECKING(if you want to use C11 _Noreturn feature) CF_ARG_ENABLE(stdnoreturn, [ --enable-stdnoreturn enable C11 _Noreturn feature for diagnostics], [enable_stdnoreturn=yes], [enable_stdnoreturn=no]) AC_MSG_RESULT($enable_stdnoreturn) if test $enable_stdnoreturn = yes; then AC_CACHE_CHECK([for C11 _Noreturn feature], cf_cv_c11_noreturn, [AC_TRY_COMPILE([ #include #include #include static _Noreturn void giveup(void) { exit(0); } ], [if (feof(stdin)) giveup()], cf_cv_c11_noreturn=yes, cf_cv_c11_noreturn=no) ]) else cf_cv_c11_noreturn=no, fi if test "$cf_cv_c11_noreturn" = yes; then AC_DEFINE(HAVE_STDNORETURN_H, 1,[Define if header is available and working]) AC_DEFINE_UNQUOTED(STDC_NORETURN,_Noreturn,[Define if C11 _Noreturn keyword is supported]) HAVE_STDNORETURN_H=1 else HAVE_STDNORETURN_H=0 fi AC_SUBST(HAVE_STDNORETURN_H) AC_SUBST(STDC_NORETURN) ])dnl dnl --------------------------------------------------------------------------- dnl CF_CC_ENV_FLAGS version: 10 updated: 2020/12/31 18:40:20 dnl --------------- dnl Check for user's environment-breakage by stuffing CFLAGS/CPPFLAGS content dnl into CC. This will not help with broken scripts that wrap the compiler dnl with options, but eliminates a more common category of user confusion. dnl dnl In particular, it addresses the problem of being able to run the C dnl preprocessor in a consistent manner. dnl dnl Caveat: this also disallows blanks in the pathname for the compiler, but dnl the nuisance of having inconsistent settings for compiler and preprocessor dnl outweighs that limitation. AC_DEFUN([CF_CC_ENV_FLAGS], [ # This should have been defined by AC_PROG_CC : "${CC:=cc}" AC_MSG_CHECKING(\$CFLAGS variable) case "x$CFLAGS" in (*-[[IUD]]*) AC_MSG_RESULT(broken) AC_MSG_WARN(your environment uses the CFLAGS variable to hold CPPFLAGS options) cf_flags="$CFLAGS" CFLAGS= for cf_arg in $cf_flags do CF_ADD_CFLAGS($cf_arg) done ;; (*) AC_MSG_RESULT(ok) ;; esac AC_MSG_CHECKING(\$CC variable) case "$CC" in (*[[\ \ ]]-*) AC_MSG_RESULT(broken) AC_MSG_WARN(your environment uses the CC variable to hold CFLAGS/CPPFLAGS options) # humor him... cf_prog=`echo "$CC" | sed -e 's/ / /g' -e 's/[[ ]]* / /g' -e 's/[[ ]]*[[ ]]-[[^ ]].*//'` cf_flags=`echo "$CC" | ${AWK:-awk} -v prog="$cf_prog" '{ printf("%s", [substr]([$]0,1+length(prog))); }'` CC="$cf_prog" for cf_arg in $cf_flags do case "x$cf_arg" in (x-[[IUDfgOW]]*) CF_ADD_CFLAGS($cf_arg) ;; (*) CC="$CC $cf_arg" ;; esac done CF_VERBOSE(resulting CC: '$CC') CF_VERBOSE(resulting CFLAGS: '$CFLAGS') CF_VERBOSE(resulting CPPFLAGS: '$CPPFLAGS') ;; (*) AC_MSG_RESULT(ok) ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_CHECK_CACHE version: 13 updated: 2020/12/31 10:54:15 dnl -------------- dnl Check if we're accidentally using a cache from a different machine. dnl Derive the system name, as a check for reusing the autoconf cache. dnl dnl If we've packaged config.guess and config.sub, run that (since it does a dnl better job than uname). Normally we'll use AC_CANONICAL_HOST, but allow dnl an extra parameter that we may override, e.g., for AC_CANONICAL_SYSTEM dnl which is useful in cross-compiles. dnl dnl Note: we would use $ac_config_sub, but that is one of the places where dnl autoconf 2.5x broke compatibility with autoconf 2.13 AC_DEFUN([CF_CHECK_CACHE], [ if test -f "$srcdir/config.guess" || test -f "$ac_aux_dir/config.guess" ; then ifelse([$1],,[AC_CANONICAL_HOST],[$1]) system_name="$host_os" else system_name="`(uname -s -r) 2>/dev/null`" if test -z "$system_name" ; then system_name="`(hostname) 2>/dev/null`" fi fi test -n "$system_name" && AC_DEFINE_UNQUOTED(SYSTEM_NAME,"$system_name",[Define to the system name.]) AC_CACHE_VAL(cf_cv_system_name,[cf_cv_system_name="$system_name"]) test -z "$system_name" && system_name="$cf_cv_system_name" test -n "$cf_cv_system_name" && AC_MSG_RESULT(Configuring for $cf_cv_system_name) if test ".$system_name" != ".$cf_cv_system_name" ; then AC_MSG_RESULT(Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)) AC_MSG_ERROR("Please remove config.cache and try again.") fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_CLANG_COMPILER version: 8 updated: 2021/01/01 13:31:04 dnl ----------------- dnl Check if the given compiler is really clang. clang's C driver defines dnl __GNUC__ (fooling the configure script into setting $GCC to yes) but does dnl not ignore some gcc options. dnl dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to dnl ensure that it is not mistaken for gcc/g++. It is normally invoked from dnl the wrappers for gcc and g++ warnings. dnl dnl $1 = GCC (default) or GXX dnl $2 = CLANG_COMPILER (default) dnl $3 = CFLAGS (default) or CXXFLAGS AC_DEFUN([CF_CLANG_COMPILER],[ ifelse([$2],,CLANG_COMPILER,[$2])=no if test "$ifelse([$1],,[$1],GCC)" = yes ; then AC_MSG_CHECKING(if this is really Clang ifelse([$1],GXX,C++,C) compiler) cf_save_CFLAGS="$ifelse([$3],,CFLAGS,[$3])" AC_TRY_COMPILE([],[ #ifdef __clang__ #else make an error #endif ],[ifelse([$2],,CLANG_COMPILER,[$2])=yes ],[]) ifelse([$3],,CFLAGS,[$3])="$cf_save_CFLAGS" AC_MSG_RESULT($ifelse([$2],,CLANG_COMPILER,[$2])) fi CLANG_VERSION=none if test "x$ifelse([$2],,CLANG_COMPILER,[$2])" = "xyes" ; then case "$CC" in (c[[1-9]][[0-9]]|*/c[[1-9]][[0-9]]) AC_MSG_WARN(replacing broken compiler alias $CC) CFLAGS="$CFLAGS -std=`echo "$CC" | sed -e 's%.*/%%'`" CC=clang ;; esac AC_MSG_CHECKING(version of $CC) CLANG_VERSION="`$CC --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(CLANG[[^)]]*) //' -e 's/^.*(Debian[[^)]]*) //' -e 's/^[[^0-9.]]*//' -e 's/[[^0-9.]].*//'`" test -z "$CLANG_VERSION" && CLANG_VERSION=unknown AC_MSG_RESULT($CLANG_VERSION) for cf_clang_opt in \ -Qunused-arguments \ -Wno-error=implicit-function-declaration do AC_MSG_CHECKING(if option $cf_clang_opt works) cf_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $cf_clang_opt" AC_TRY_LINK([ #include ],[ printf("hello!\\n");],[ cf_clang_optok=yes],[ cf_clang_optok=no]) AC_MSG_RESULT($cf_clang_optok) CFLAGS="$cf_save_CFLAGS" if test "$cf_clang_optok" = yes; then CF_VERBOSE(adding option $cf_clang_opt) CF_APPEND_TEXT(CFLAGS,$cf_clang_opt) fi done fi ]) dnl --------------------------------------------------------------------------- dnl CF_CONST_X_STRING version: 7 updated: 2021/06/07 17:39:17 dnl ----------------- dnl The X11R4-X11R6 Xt specification uses an ambiguous String type for most dnl character-strings. dnl dnl It is ambiguous because the specification accommodated the pre-ANSI dnl compilers bundled by more than one vendor in lieu of providing a standard C dnl compiler other than by costly add-ons. Because of this, the specification dnl did not take into account the use of const for telling the compiler that dnl string literals would be in readonly memory. dnl dnl As a workaround, one could (starting with X11R5) define XTSTRINGDEFINES, to dnl let the compiler decide how to represent Xt's strings which were #define'd. dnl That does not solve the problem of using the block of Xt's strings which dnl are compiled into the library (and is less efficient than one might want). dnl dnl Xt specification 7 introduces the _CONST_X_STRING symbol which is used both dnl when compiling the library and compiling using the library, to tell the dnl compiler that String is const. AC_DEFUN([CF_CONST_X_STRING], [ AC_REQUIRE([AC_PATH_XTRA]) CF_SAVE_XTRA_FLAGS([CF_CONST_X_STRING]) AC_TRY_COMPILE( [ #include #include ], [String foo = malloc(1); free((void*)foo)],[ AC_CACHE_CHECK(for X11/Xt const-feature,cf_cv_const_x_string,[ AC_TRY_COMPILE( [ #define _CONST_X_STRING /* X11R7.8 (perhaps) */ #undef XTSTRINGDEFINES /* X11R5 and later */ #include #include ],[String foo = malloc(1); *foo = 0],[ cf_cv_const_x_string=no ],[ cf_cv_const_x_string=yes ]) ]) CF_RESTORE_XTRA_FLAGS([CF_CONST_X_STRING]) case "$cf_cv_const_x_string" in (no) CF_APPEND_TEXT(CPPFLAGS,-DXTSTRINGDEFINES) ;; (*) CF_APPEND_TEXT(CPPFLAGS,-D_CONST_X_STRING) ;; esac ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_DISABLE_ECHO version: 14 updated: 2021/09/04 06:35:04 dnl --------------- dnl You can always use "make -n" to see the actual options, but it is hard to dnl pick out/analyze warning messages when the compile-line is long. dnl dnl Sets: dnl ECHO_LT - symbol to control if libtool is verbose dnl ECHO_LD - symbol to prefix "cc -o" lines dnl RULE_CC - symbol to put before implicit "cc -c" lines (e.g., .c.o) dnl SHOW_CC - symbol to put before explicit "cc -c" lines dnl ECHO_CC - symbol to put before any "cc" line dnl AC_DEFUN([CF_DISABLE_ECHO],[ AC_MSG_CHECKING(if you want to see long compiling messages) CF_ARG_DISABLE(echo, [ --disable-echo do not display "compiling" commands], [ ECHO_LT='--silent' ECHO_LD='@echo linking [$]@;' RULE_CC='@echo compiling [$]<' SHOW_CC='@echo compiling [$]@' ECHO_CC='@' ],[ ECHO_LT='' ECHO_LD='' RULE_CC='' SHOW_CC='' ECHO_CC='' ]) AC_MSG_RESULT($enableval) AC_SUBST(ECHO_LT) AC_SUBST(ECHO_LD) AC_SUBST(RULE_CC) AC_SUBST(SHOW_CC) AC_SUBST(ECHO_CC) ])dnl dnl --------------------------------------------------------------------------- dnl CF_DISABLE_LEAKS version: 9 updated: 2021/04/03 16:41:50 dnl ---------------- dnl Combine no-leak checks with the libraries or tools that are used for the dnl checks. AC_DEFUN([CF_DISABLE_LEAKS],[ AC_REQUIRE([CF_WITH_DMALLOC]) AC_REQUIRE([CF_WITH_DBMALLOC]) AC_REQUIRE([CF_WITH_VALGRIND]) AC_MSG_CHECKING(if you want to perform memory-leak testing) AC_ARG_ENABLE(leaks, [ --disable-leaks test: free permanent memory, analyze leaks], [enable_leaks=$enableval], [enable_leaks=yes]) dnl with_no_leaks is more readable... if test "x$enable_leaks" = xno; then with_no_leaks=yes; else with_no_leaks=no; fi AC_MSG_RESULT($with_no_leaks) if test "$enable_leaks" = no ; then AC_DEFINE(NO_LEAKS,1,[Define to 1 if you want to perform memory-leak testing.]) AC_DEFINE(YY_NO_LEAKS,1,[Define to 1 if you want to perform memory-leak testing.]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_ENABLE_WARNINGS version: 9 updated: 2021/01/05 19:40:50 dnl ------------------ dnl Configure-option to enable gcc warnings dnl dnl $1 = extra options to add, if supported dnl $2 = option for checking attributes. By default, this is done when dnl warnings are enabled. For other values: dnl yes: always do this, e.g., to use in generated library-headers dnl no: never do this AC_DEFUN([CF_ENABLE_WARNINGS],[ if test "$GCC" = yes || test "$GXX" = yes then CF_FIX_WARNINGS(CFLAGS) CF_FIX_WARNINGS(CPPFLAGS) CF_FIX_WARNINGS(LDFLAGS) AC_MSG_CHECKING(if you want to turn on gcc warnings) CF_ARG_ENABLE(warnings, [ --enable-warnings test: turn on gcc compiler warnings], [enable_warnings=yes], [enable_warnings=no]) AC_MSG_RESULT($enable_warnings) if test "$enable_warnings" = "yes" then ifelse($2,,[CF_GCC_ATTRIBUTES]) CF_GCC_WARNINGS($1) fi ifelse($2,yes,[CF_GCC_ATTRIBUTES]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_FIX_WARNINGS version: 4 updated: 2021/12/16 18:22:31 dnl --------------- dnl Warning flags do not belong in CFLAGS, CPPFLAGS, etc. Any of gcc's dnl "-Werror" flags can interfere with configure-checks. Those go into dnl EXTRA_CFLAGS. dnl dnl $1 = variable name to repair define([CF_FIX_WARNINGS],[ if test "$GCC" = yes || test "$GXX" = yes then case [$]$1 in (*-Werror=*) cf_temp_flags= for cf_temp_scan in [$]$1 do case "x$cf_temp_scan" in (x-Werror=format*) CF_APPEND_TEXT(cf_temp_flags,$cf_temp_scan) ;; (x-Werror=*) CF_APPEND_TEXT(EXTRA_CFLAGS,$cf_temp_scan) ;; (*) CF_APPEND_TEXT(cf_temp_flags,$cf_temp_scan) ;; esac done if test "x[$]$1" != "x$cf_temp_flags" then CF_VERBOSE(repairing $1: [$]$1) $1="$cf_temp_flags" CF_VERBOSE(... fixed [$]$1) CF_VERBOSE(... extra $EXTRA_CFLAGS) fi ;; esac fi AC_SUBST(EXTRA_CFLAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_GCC_ATTRIBUTES version: 24 updated: 2021/03/20 12:00:25 dnl ----------------- dnl Test for availability of useful gcc __attribute__ directives to quiet dnl compiler warnings. Though useful, not all are supported -- and contrary dnl to documentation, unrecognized directives cause older compilers to barf. AC_DEFUN([CF_GCC_ATTRIBUTES], [AC_REQUIRE([AC_PROG_FGREP])dnl AC_REQUIRE([CF_C11_NORETURN])dnl if test "$GCC" = yes || test "$GXX" = yes then cat > conftest.i < "conftest.$ac_ext" <&AC_FD_CC case "$cf_attribute" in (printf) cf_printf_attribute=yes cat >conftest.h <conftest.h <conftest.h <>confdefs.h case "$cf_attribute" in (noreturn) AC_DEFINE_UNQUOTED(GCC_NORETURN,$cf_directive,[Define to noreturn-attribute for gcc]) ;; (printf) cf_value='/* nothing */' if test "$cf_printf_attribute" != no ; then cf_value='__attribute__((format(printf,fmt,var)))' AC_DEFINE(GCC_PRINTF,1,[Define to 1 if the compiler supports gcc-like printf attribute.]) fi AC_DEFINE_UNQUOTED(GCC_PRINTFLIKE(fmt,var),$cf_value,[Define to printf-attribute for gcc]) ;; (scanf) cf_value='/* nothing */' if test "$cf_scanf_attribute" != no ; then cf_value='__attribute__((format(scanf,fmt,var)))' AC_DEFINE(GCC_SCANF,1,[Define to 1 if the compiler supports gcc-like scanf attribute.]) fi AC_DEFINE_UNQUOTED(GCC_SCANFLIKE(fmt,var),$cf_value,[Define to sscanf-attribute for gcc]) ;; (unused) AC_DEFINE_UNQUOTED(GCC_UNUSED,$cf_directive,[Define to unused-attribute for gcc]) ;; esac fi done else ${FGREP-fgrep} define conftest.i >>confdefs.h fi rm -rf ./conftest* fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_GCC_VERSION version: 8 updated: 2019/09/07 13:38:36 dnl -------------- dnl Find version of gcc, and (because icc/clang pretend to be gcc without being dnl compatible), attempt to determine if icc/clang is actually used. AC_DEFUN([CF_GCC_VERSION],[ AC_REQUIRE([AC_PROG_CC]) GCC_VERSION=none if test "$GCC" = yes ; then AC_MSG_CHECKING(version of $CC) GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(GCC[[^)]]*) //' -e 's/^.*(Debian[[^)]]*) //' -e 's/^[[^0-9.]]*//' -e 's/[[^0-9.]].*//'`" test -z "$GCC_VERSION" && GCC_VERSION=unknown AC_MSG_RESULT($GCC_VERSION) fi CF_INTEL_COMPILER(GCC,INTEL_COMPILER,CFLAGS) CF_CLANG_COMPILER(GCC,CLANG_COMPILER,CFLAGS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_GCC_WARNINGS version: 41 updated: 2021/01/01 16:53:59 dnl --------------- dnl Check if the compiler supports useful warning options. There's a few that dnl we don't use, simply because they're too noisy: dnl dnl -Wconversion (useful in older versions of gcc, but not in gcc 2.7.x) dnl -Winline (usually not worthwhile) dnl -Wredundant-decls (system headers make this too noisy) dnl -Wtraditional (combines too many unrelated messages, only a few useful) dnl -Wwrite-strings (too noisy, but should review occasionally). This dnl is enabled for ncurses using "--enable-const". dnl -pedantic dnl dnl Parameter: dnl $1 is an optional list of gcc warning flags that a particular dnl application might want to use, e.g., "no-unused" for dnl -Wno-unused dnl Special: dnl If $with_ext_const is "yes", add a check for -Wwrite-strings dnl AC_DEFUN([CF_GCC_WARNINGS], [ AC_REQUIRE([CF_GCC_VERSION]) if test "x$have_x" = xyes; then CF_CONST_X_STRING fi cat > "conftest.$ac_ext" <], [int x = optind; char *y = optarg; (void)x; (void)y], [cf_cv_getopt_header=$cf_header break]) done ]) if test "$cf_cv_getopt_header" != none ; then AC_DEFINE(HAVE_GETOPT_HEADER,1,[Define to 1 if getopt variables are declared in header]) fi if test "$cf_cv_getopt_header" = getopt.h ; then AC_DEFINE(NEED_GETOPT_H,1,[Define to 1 if we must include getopt.h]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_GNU_SOURCE version: 10 updated: 2018/12/10 20:09:41 dnl ------------- dnl Check if we must define _GNU_SOURCE to get a reasonable value for dnl _XOPEN_SOURCE, upon which many POSIX definitions depend. This is a defect dnl (or misfeature) of glibc2, which breaks portability of many applications, dnl since it is interwoven with GNU extensions. dnl dnl Well, yes we could work around it... dnl dnl Parameters: dnl $1 is the nominal value for _XOPEN_SOURCE AC_DEFUN([CF_GNU_SOURCE], [ cf_gnu_xopen_source=ifelse($1,,500,$1) AC_CACHE_CHECK(if this is the GNU C library,cf_cv_gnu_library,[ AC_TRY_COMPILE([#include ],[ #if __GLIBC__ > 0 && __GLIBC_MINOR__ >= 0 return 0; #elif __NEWLIB__ > 0 && __NEWLIB_MINOR__ >= 0 return 0; #else # error not GNU C library #endif], [cf_cv_gnu_library=yes], [cf_cv_gnu_library=no]) ]) if test x$cf_cv_gnu_library = xyes; then # With glibc 2.19 (13 years after this check was begun), _DEFAULT_SOURCE # was changed to help a little. newlib incorporated the change about 4 # years later. AC_CACHE_CHECK(if _DEFAULT_SOURCE can be used as a basis,cf_cv_gnu_library_219,[ cf_save="$CPPFLAGS" CF_APPEND_TEXT(CPPFLAGS,-D_DEFAULT_SOURCE) AC_TRY_COMPILE([#include ],[ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 19) || (__GLIBC__ > 2) return 0; #elif (__NEWLIB__ == 2 && __NEWLIB_MINOR__ >= 4) || (__GLIBC__ > 3) return 0; #else # error GNU C library __GLIBC__.__GLIBC_MINOR__ is too old #endif], [cf_cv_gnu_library_219=yes], [cf_cv_gnu_library_219=no]) CPPFLAGS="$cf_save" ]) if test "x$cf_cv_gnu_library_219" = xyes; then cf_save="$CPPFLAGS" AC_CACHE_CHECK(if _XOPEN_SOURCE=$cf_gnu_xopen_source works with _DEFAULT_SOURCE,cf_cv_gnu_dftsrc_219,[ CF_ADD_CFLAGS(-D_DEFAULT_SOURCE -D_XOPEN_SOURCE=$cf_gnu_xopen_source) AC_TRY_COMPILE([ #include #include ],[ #if (_XOPEN_SOURCE >= $cf_gnu_xopen_source) && (MB_LEN_MAX > 1) return 0; #else # error GNU C library is too old #endif], [cf_cv_gnu_dftsrc_219=yes], [cf_cv_gnu_dftsrc_219=no]) ]) test "x$cf_cv_gnu_dftsrc_219" = "xyes" || CPPFLAGS="$cf_save" else cf_cv_gnu_dftsrc_219=maybe fi if test "x$cf_cv_gnu_dftsrc_219" != xyes; then AC_CACHE_CHECK(if we must define _GNU_SOURCE,cf_cv_gnu_source,[ AC_TRY_COMPILE([#include ],[ #ifndef _XOPEN_SOURCE #error expected _XOPEN_SOURCE to be defined #endif], [cf_cv_gnu_source=no], [cf_save="$CPPFLAGS" CF_ADD_CFLAGS(-D_GNU_SOURCE) AC_TRY_COMPILE([#include ],[ #ifdef _XOPEN_SOURCE #error expected _XOPEN_SOURCE to be undefined #endif], [cf_cv_gnu_source=no], [cf_cv_gnu_source=yes]) CPPFLAGS="$cf_save" ]) ]) if test "$cf_cv_gnu_source" = yes then AC_CACHE_CHECK(if we should also define _DEFAULT_SOURCE,cf_cv_default_source,[ CF_APPEND_TEXT(CPPFLAGS,-D_GNU_SOURCE) AC_TRY_COMPILE([#include ],[ #ifdef _DEFAULT_SOURCE #error expected _DEFAULT_SOURCE to be undefined #endif], [cf_cv_default_source=no], [cf_cv_default_source=yes]) ]) if test "$cf_cv_default_source" = yes then CF_APPEND_TEXT(CPPFLAGS,-D_DEFAULT_SOURCE) fi fi fi fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_INTEL_COMPILER version: 8 updated: 2021/01/01 16:53:59 dnl ----------------- dnl Check if the given compiler is really the Intel compiler for Linux. It dnl tries to imitate gcc, but does not return an error when it finds a mismatch dnl between prototypes, e.g., as exercised by CF_MISSING_CHECK. dnl dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to dnl ensure that it is not mistaken for gcc/g++. It is normally invoked from dnl the wrappers for gcc and g++ warnings. dnl dnl $1 = GCC (default) or GXX dnl $2 = INTEL_COMPILER (default) or INTEL_CPLUSPLUS dnl $3 = CFLAGS (default) or CXXFLAGS AC_DEFUN([CF_INTEL_COMPILER],[ AC_REQUIRE([AC_CANONICAL_HOST]) ifelse([$2],,INTEL_COMPILER,[$2])=no if test "$ifelse([$1],,[$1],GCC)" = yes ; then case "$host_os" in (linux*|gnu*) AC_MSG_CHECKING(if this is really Intel ifelse([$1],GXX,C++,C) compiler) cf_save_CFLAGS="$ifelse([$3],,CFLAGS,[$3])" ifelse([$3],,CFLAGS,[$3])="$ifelse([$3],,CFLAGS,[$3]) -no-gcc" AC_TRY_COMPILE([],[ #ifdef __INTEL_COMPILER #else make an error #endif ],[ifelse([$2],,INTEL_COMPILER,[$2])=yes cf_save_CFLAGS="$cf_save_CFLAGS -we147" ],[]) ifelse([$3],,CFLAGS,[$3])="$cf_save_CFLAGS" AC_MSG_RESULT($ifelse([$2],,INTEL_COMPILER,[$2])) ;; esac fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_MAKE_DOCS version: 5 updated: 2021/01/10 16:05:11 dnl ------------ dnl $1 = name(s) to generate rules for dnl $2 = suffix of corresponding manpages used as input. dnl dnl This works best if called at the end of configure.in, following CF_WITH_MAN2HTML define([CF_MAKE_DOCS],[ test -z "$cf_make_docs" && cf_make_docs=0 cf_output=makefile test -f "$cf_output" || cf_output=Makefile if test "$cf_make_docs" = 0 then cat >>$cf_output <[\$]@ ${GROFF_NOTE}.ps.pdf : ${GROFF_NOTE} ps2pdf [\$]*.ps ${GROFF_NOTE} ${GROFF_NOTE}.$2.ps : ${GROFF_NOTE} [\$](SHELL) -c "tbl [\$]*.$2 | groff -man" >[\$]@ ${GROFF_NOTE} ${GROFF_NOTE}.$2.txt : ${GROFF_NOTE} GROFF_NO_SGR=stupid [\$](SHELL) -c "tbl [\$]*.$2 | nroff -rHY=0 -Tascii -man | col -bx" >[\$]@ ${MAN2HTML_NOTE}.$2.html : ${MAN2HTML_NOTE} ./${MAN2HTML_TEMP} [\$]* $2 man >[\$]@ CF_EOF cf_make_docs=1 fi for cf_name in $1 do cat >>$cf_output <conftest if test -f CONFTEST ; then cf_cv_mixedcase=no else cf_cv_mixedcase=yes fi rm -f conftest CONFTEST fi ]) test "$cf_cv_mixedcase" = yes && AC_DEFINE(MIXEDCASE_FILENAMES,1,[Define to 1 if filesystem supports mixed-case filenames.]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_MKSTEMP version: 11 updated: 2021/01/01 13:31:04 dnl ---------- dnl Check for a working mkstemp. This creates two files, checks that they are dnl successfully created and distinct (AmigaOS apparently fails on the last). AC_DEFUN([CF_MKSTEMP],[ AC_CHECK_HEADERS( \ unistd.h \ ) AC_CACHE_CHECK(for working mkstemp, cf_cv_func_mkstemp,[ rm -rf ./conftest* AC_TRY_RUN([ #include #ifdef HAVE_UNISTD_H #include #endif #include #include #include #include int main(void) { char *tmpl = "conftestXXXXXX"; char name[2][80]; int n; int result = 0; int fd; struct stat sb; umask(077); for (n = 0; n < 2; ++n) { strcpy(name[n], tmpl); if ((fd = mkstemp(name[n])) >= 0) { if (!strcmp(name[n], tmpl) || stat(name[n], &sb) != 0 || (sb.st_mode & S_IFMT) != S_IFREG || (sb.st_mode & 077) != 0) { result = 1; } close(fd); } } if (result == 0 && !strcmp(name[0], name[1])) result = 1; ${cf_cv_main_return:-return}(result); } ],[cf_cv_func_mkstemp=yes ],[cf_cv_func_mkstemp=no ],[cf_cv_func_mkstemp=maybe]) ]) if test "x$cf_cv_func_mkstemp" = xmaybe ; then AC_CHECK_FUNC(mkstemp) fi if test "x$cf_cv_func_mkstemp" = xyes || test "x$ac_cv_func_mkstemp" = xyes ; then AC_DEFINE(HAVE_MKSTEMP,1,[Define to 1 if mkstemp() is available and working.]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_MSG_LOG version: 5 updated: 2010/10/23 15:52:32 dnl ---------- dnl Write a debug message to config.log, along with the line number in the dnl configure script. AC_DEFUN([CF_MSG_LOG],[ echo "${as_me:-configure}:__oline__: testing $* ..." 1>&AC_FD_CC ])dnl dnl --------------------------------------------------------------------------- dnl CF_NO_LEAKS_OPTION version: 9 updated: 2021/06/13 19:45:41 dnl ------------------ dnl see CF_WITH_NO_LEAKS dnl dnl $1 = option/name dnl $2 = help-text dnl $3 = symbol to define if the option is set dnl $4 = additional actions to take if the option is set AC_DEFUN([CF_NO_LEAKS_OPTION],[ AC_MSG_CHECKING(if you want to use $1 for testing) AC_ARG_WITH($1, [$2], [case "x$withval" in (x|xno) ;; (*) : "${with_cflags:=-g}" : "${enable_leaks:=no}" with_$1=yes AC_DEFINE_UNQUOTED($3,1,"Define to 1 if you want to use $1 for testing.")ifelse([$4],,[ $4 ]) ;; esac], [with_$1=]) AC_MSG_RESULT(${with_$1:-no}) case ".$with_cflags" in (.*-g*) case .$CFLAGS in (.*-g*) ;; (*) CF_ADD_CFLAGS([-g]) ;; esac ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_PATH_SYNTAX version: 18 updated: 2020/12/31 18:40:20 dnl -------------- dnl Check the argument to see that it looks like a pathname. Rewrite it if it dnl begins with one of the prefix/exec_prefix variables, and then again if the dnl result begins with 'NONE'. This is necessary to work around autoconf's dnl delayed evaluation of those symbols. AC_DEFUN([CF_PATH_SYNTAX],[ if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".[$]$1" in (.\[$]\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[[a-zA-Z]]:[[\\/]]*) # OS/2 EMX ;; (.\[$]\{*prefix\}*|.\[$]\{*dir\}*) eval $1="[$]$1" case ".[$]$1" in (.NONE/*) $1=`echo "[$]$1" | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) $1=`echo "[$]$1" | sed -e s%NONE%$cf_path_syntax%` ;; (*) ifelse([$2],,[AC_MSG_ERROR([expected a pathname, not \"[$]$1\"])],$2) ;; esac ])dnl dnl --------------------------------------------------------------------------- dnl CF_POSIX_C_SOURCE version: 11 updated: 2018/12/31 20:46:17 dnl ----------------- dnl Define _POSIX_C_SOURCE to the given level, and _POSIX_SOURCE if needed. dnl dnl POSIX.1-1990 _POSIX_SOURCE dnl POSIX.1-1990 and _POSIX_SOURCE and dnl POSIX.2-1992 C-Language _POSIX_C_SOURCE=2 dnl Bindings Option dnl POSIX.1b-1993 _POSIX_C_SOURCE=199309L dnl POSIX.1c-1996 _POSIX_C_SOURCE=199506L dnl X/Open 2000 _POSIX_C_SOURCE=200112L dnl dnl Parameters: dnl $1 is the nominal value for _POSIX_C_SOURCE AC_DEFUN([CF_POSIX_C_SOURCE], [AC_REQUIRE([CF_POSIX_VISIBLE])dnl if test "$cf_cv_posix_visible" = no; then cf_POSIX_C_SOURCE=ifelse([$1],,199506L,[$1]) cf_save_CFLAGS="$CFLAGS" cf_save_CPPFLAGS="$CPPFLAGS" CF_REMOVE_DEFINE(cf_trim_CFLAGS,$cf_save_CFLAGS,_POSIX_C_SOURCE) CF_REMOVE_DEFINE(cf_trim_CPPFLAGS,$cf_save_CPPFLAGS,_POSIX_C_SOURCE) AC_CACHE_CHECK(if we should define _POSIX_C_SOURCE,cf_cv_posix_c_source,[ CF_MSG_LOG(if the symbol is already defined go no further) AC_TRY_COMPILE([#include ],[ #ifndef _POSIX_C_SOURCE make an error #endif], [cf_cv_posix_c_source=no], [cf_want_posix_source=no case .$cf_POSIX_C_SOURCE in (.[[12]]??*) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" ;; (.2) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" cf_want_posix_source=yes ;; (.*) cf_want_posix_source=yes ;; esac if test "$cf_want_posix_source" = yes ; then AC_TRY_COMPILE([#include ],[ #ifdef _POSIX_SOURCE make an error #endif],[], cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE") fi CF_MSG_LOG(ifdef from value $cf_POSIX_C_SOURCE) CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" CF_APPEND_TEXT(CPPFLAGS,$cf_cv_posix_c_source) CF_MSG_LOG(if the second compile does not leave our definition intact error) AC_TRY_COMPILE([#include ],[ #ifndef _POSIX_C_SOURCE make an error #endif],, [cf_cv_posix_c_source=no]) CFLAGS="$cf_save_CFLAGS" CPPFLAGS="$cf_save_CPPFLAGS" ]) ]) if test "$cf_cv_posix_c_source" != no ; then CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" CF_ADD_CFLAGS($cf_cv_posix_c_source) fi fi # cf_cv_posix_visible ])dnl dnl --------------------------------------------------------------------------- dnl CF_POSIX_VISIBLE version: 1 updated: 2018/12/31 20:46:17 dnl ---------------- dnl POSIX documents test-macros which an application may set before any system dnl headers are included to make features available. dnl dnl Some BSD platforms (originally FreeBSD, but copied by a few others) dnl diverged from POSIX in 2002 by setting symbols which make all of the most dnl recent features visible in the system header files unless the application dnl overrides the corresponding test-macros. Doing that introduces portability dnl problems. dnl dnl This macro makes a special check for the symbols used for this, to avoid a dnl conflicting definition. AC_DEFUN([CF_POSIX_VISIBLE], [ AC_CACHE_CHECK(if the POSIX test-macros are already defined,cf_cv_posix_visible,[ AC_TRY_COMPILE([#include ],[ #if defined(__POSIX_VISIBLE) && ((__POSIX_VISIBLE - 0L) > 0) \ && defined(__XSI_VISIBLE) && ((__XSI_VISIBLE - 0L) > 0) \ && defined(__BSD_VISIBLE) && ((__BSD_VISIBLE - 0L) > 0) \ && defined(__ISO_C_VISIBLE) && ((__ISO_C_VISIBLE - 0L) > 0) #error conflicting symbols found #endif ],[cf_cv_posix_visible=no],[cf_cv_posix_visible=yes]) ]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_AWK version: 1 updated: 2006/09/16 11:40:59 dnl ----------- dnl Check for awk, ensure that the check found something. AC_DEFUN([CF_PROG_AWK], [ AC_PROG_AWK test -z "$AWK" && AC_MSG_ERROR(No awk program found) ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_CC version: 5 updated: 2019/12/31 08:53:54 dnl ---------- dnl standard check for CC, plus followup sanity checks dnl $1 = optional parameter to pass to AC_PROG_CC to specify compiler name AC_DEFUN([CF_PROG_CC],[ CF_ACVERSION_CHECK(2.53, [AC_MSG_WARN(this will incorrectly handle gnatgcc choice) AC_REQUIRE([AC_PROG_CC])], []) ifelse($1,,[AC_PROG_CC],[AC_PROG_CC($1)]) CF_GCC_VERSION CF_ACVERSION_CHECK(2.52, [AC_PROG_CC_STDC], [CF_ANSI_CC_REQD]) CF_CC_ENV_FLAGS ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_GROFF version: 3 updated: 2018/01/07 13:16:19 dnl ------------- dnl Check if groff is available, for cases (such as html output) where nroff dnl is not enough. AC_DEFUN([CF_PROG_GROFF],[ AC_PATH_PROG(GROFF_PATH,groff,no) AC_PATH_PROGS(NROFF_PATH,nroff mandoc,no) AC_PATH_PROG(TBL_PATH,tbl,cat) if test "x$GROFF_PATH" = xno then NROFF_NOTE= GROFF_NOTE="#" else NROFF_NOTE="#" GROFF_NOTE= fi AC_SUBST(GROFF_NOTE) AC_SUBST(NROFF_NOTE) ])dnl dnl --------------------------------------------------------------------------- dnl CF_PROG_LINT version: 5 updated: 2022/08/20 15:44:13 dnl ------------ AC_DEFUN([CF_PROG_LINT], [ AC_CHECK_PROGS(LINT, lint cppcheck splint) case "x$LINT" in (xcppcheck|x*/cppcheck) test -z "$LINT_OPTS" && LINT_OPTS="--enable=all" ;; esac AC_SUBST(LINT_OPTS) AC_SUBST(LINT_LIBS) ])dnl dnl --------------------------------------------------------------------------- dnl CF_REMOVE_CFLAGS version: 3 updated: 2021/09/05 17:25:40 dnl ---------------- dnl Remove a given option from CFLAGS/CPPFLAGS dnl $1 = option to remove dnl $2 = variable to update dnl $3 = nonempty to allow verbose message define([CF_REMOVE_CFLAGS], [ cf_tmp_cflag=`echo "x$1" | sed -e 's/^.//' -e 's/=.*//'` while true do cf_old_cflag=`echo "x[$]$2" | sed -e 's/^.//' -e 's/[[ ]][[ ]]*-/ -/g' -e "s%$cf_tmp_cflag\\(=[[^ ]][[^ ]]*\\)\?%%" -e 's/^[[ ]]*//' -e 's%[[ ]][[ ]]*-D% -D%g' -e 's%[[ ]][[ ]]*-I% -I%g'` test "[$]$2" != "$cf_old_cflag" || break ifelse([$3],,,[CF_VERBOSE(removing old option $1 from $2)]) $2="$cf_old_cflag" done ])dnl dnl --------------------------------------------------------------------------- dnl CF_REMOVE_DEFINE version: 3 updated: 2010/01/09 11:05:50 dnl ---------------- dnl Remove all -U and -D options that refer to the given symbol from a list dnl of C compiler options. This works around the problem that not all dnl compilers process -U and -D options from left-to-right, so a -U option dnl cannot be used to cancel the effect of a preceding -D option. dnl dnl $1 = target (which could be the same as the source variable) dnl $2 = source (including '$') dnl $3 = symbol to remove define([CF_REMOVE_DEFINE], [ $1=`echo "$2" | \ sed -e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[[ ]]/ /g' \ -e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[$]//g'` ])dnl dnl --------------------------------------------------------------------------- dnl CF_TRY_XOPEN_SOURCE version: 4 updated: 2022/09/10 15:16:16 dnl ------------------- dnl If _XOPEN_SOURCE is not defined in the compile environment, check if we dnl can define it successfully. AC_DEFUN([CF_TRY_XOPEN_SOURCE],[ AC_CACHE_CHECK(if we should define _XOPEN_SOURCE,cf_cv_xopen_source,[ AC_TRY_COMPILE(CF__XOPEN_SOURCE_HEAD,CF__XOPEN_SOURCE_BODY, [cf_cv_xopen_source=no], [cf_save="$CPPFLAGS" CF_APPEND_TEXT(CPPFLAGS,-D_XOPEN_SOURCE=$cf_XOPEN_SOURCE) AC_TRY_COMPILE(CF__XOPEN_SOURCE_HEAD,CF__XOPEN_SOURCE_BODY, [cf_cv_xopen_source=no], [cf_cv_xopen_source=$cf_XOPEN_SOURCE]) CPPFLAGS="$cf_save" ]) ]) if test "$cf_cv_xopen_source" != no ; then CF_REMOVE_DEFINE(CFLAGS,$CFLAGS,_XOPEN_SOURCE) CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,_XOPEN_SOURCE) cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source" CF_APPEND_CFLAGS($cf_temp_xopen_source) fi ]) dnl --------------------------------------------------------------------------- dnl CF_UPPER version: 5 updated: 2001/01/29 23:40:59 dnl -------- dnl Make an uppercase version of a variable dnl $1=uppercase($2) AC_DEFUN([CF_UPPER], [ $1=`echo "$2" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` ])dnl dnl --------------------------------------------------------------------------- dnl CF_VERBOSE version: 3 updated: 2007/07/29 09:55:12 dnl ---------- dnl Use AC_VERBOSE w/o the warnings AC_DEFUN([CF_VERBOSE], [test -n "$verbose" && echo " $1" 1>&AC_FD_MSG CF_MSG_LOG([$1]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITHOUT_X version: 3 updated: 2021/01/13 16:51:52 dnl ------------ dnl Use this to cancel the check for X headers/libraries which would be pulled dnl in via CF_GCC_WARNINGS. define([CF_WITHOUT_X], AC_DEFUN([AC_PATH_XTRA],[]) AC_DEFUN([CF_SAVE_XTRA_FLAGS],[]) AC_DEFUN([CF_RESTORE_XTRA_FLAGS],[]) AC_DEFUN([CF_CONST_X_STRING],[echo "skipping X-const check";])dnl AC_SUBST(X_CFLAGS) AC_SUBST(X_LIBS) [])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_DBMALLOC version: 7 updated: 2010/06/21 17:26:47 dnl ---------------- dnl Configure-option for dbmalloc. The optional parameter is used to override dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests. AC_DEFUN([CF_WITH_DBMALLOC],[ CF_NO_LEAKS_OPTION(dbmalloc, [ --with-dbmalloc test: use Conor Cahill's dbmalloc library], [USE_DBMALLOC]) if test "$with_dbmalloc" = yes ; then AC_CHECK_HEADER(dbmalloc.h, [AC_CHECK_LIB(dbmalloc,[debug_malloc]ifelse([$1],,[],[,$1]))]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_DMALLOC version: 7 updated: 2010/06/21 17:26:47 dnl --------------- dnl Configure-option for dmalloc. The optional parameter is used to override dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests. AC_DEFUN([CF_WITH_DMALLOC],[ CF_NO_LEAKS_OPTION(dmalloc, [ --with-dmalloc test: use Gray Watson's dmalloc library], [USE_DMALLOC]) if test "$with_dmalloc" = yes ; then AC_CHECK_HEADER(dmalloc.h, [AC_CHECK_LIB(dmalloc,[dmalloc_debug]ifelse([$1],,[],[,$1]))]) fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_WITH_MAN2HTML version: 12 updated: 2021/01/03 18:30:50 dnl ---------------- dnl Check for man2html and groff. Prefer man2html over groff, but use groff dnl as a fallback. See dnl dnl http://invisible-island.net/scripts/man2html.html dnl dnl Generate a shell script which hides the differences between the two. dnl dnl We name that "man2html.tmp". dnl dnl The shell script can be removed later, e.g., using "make distclean". AC_DEFUN([CF_WITH_MAN2HTML],[ AC_REQUIRE([CF_PROG_GROFF])dnl AC_REQUIRE([AC_PROG_FGREP])dnl case "x${with_man2html}" in (xno) cf_man2html=no ;; (x|xyes) AC_PATH_PROG(cf_man2html,man2html,no) case "x$cf_man2html" in (x/*) AC_MSG_CHECKING(for the modified Earl Hood script) if ( $cf_man2html -help 2>&1 | grep 'Make an index of headers at the end' >/dev/null ) then cf_man2html_ok=yes else cf_man2html=no cf_man2html_ok=no fi AC_MSG_RESULT($cf_man2html_ok) ;; (*) cf_man2html=no ;; esac esac AC_MSG_CHECKING(for program to convert manpage to html) AC_ARG_WITH(man2html, [ --with-man2html=XXX use XXX rather than groff], [cf_man2html=$withval], [cf_man2html=$cf_man2html]) cf_with_groff=no case $cf_man2html in (yes) AC_MSG_RESULT(man2html) AC_PATH_PROG(cf_man2html,man2html,no) ;; (no|groff|*/groff*) cf_with_groff=yes cf_man2html=$GROFF_PATH AC_MSG_RESULT($cf_man2html) ;; (*) AC_MSG_RESULT($cf_man2html) ;; esac MAN2HTML_TEMP="man2html.tmp" cat >$MAN2HTML_TEMP <>$MAN2HTML_TEMP <conftest.in <conftest.out cf_man2html_1st="`${FGREP-fgrep} -n MARKER conftest.out |sed -e 's/^[[^0-9]]*://' -e 's/:.*//'`" cf_man2html_top=`expr "$cf_man2html_1st" - 2` cf_man2html_bot="`wc -l conftest.out |sed -e 's/[[^0-9]]//g'`" cf_man2html_bot=`expr "$cf_man2html_bot" - 2 - "$cf_man2html_top"` cf_man2html_top_bot="-topm=$cf_man2html_top -botm=$cf_man2html_bot" AC_MSG_RESULT($cf_man2html_top_bot) AC_MSG_CHECKING(for pagesize to use) for cf_block in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 do cat >>conftest.in <conftest.out cf_man2html_page="`${FGREP-fgrep} -n HEAD1 conftest.out |sed -n '$p' |sed -e 's/^[[^0-9]]*://' -e 's/:.*//'`" test -z "$cf_man2html_page" && cf_man2html_page=99999 test "$cf_man2html_page" -gt 100 && cf_man2html_page=99999 rm -rf conftest* AC_MSG_RESULT($cf_man2html_page) cat >>$MAN2HTML_TEMP < and other headers which use u_int / u_short types cf_XOPEN_SOURCE= CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE) ;; (netbsd*) cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw ;; (openbsd[[6-9]]*) # OpenBSD 6.x has broken locale support, both compile-time and runtime. # see https://www.mail-archive.com/bugs@openbsd.org/msg13200.html # Abusing the conformance level is a workaround. AC_MSG_WARN(this system does not provide usable locale support) cf_xopen_source="-D_BSD_SOURCE" cf_XOPEN_SOURCE=700 ;; (openbsd[[4-5]]*) # setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw cf_xopen_source="-D_BSD_SOURCE" cf_XOPEN_SOURCE=600 ;; (openbsd*) # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw ;; (osf[[45]]*) cf_xopen_source="-D_OSF_SOURCE" ;; (nto-qnx*) cf_xopen_source="-D_QNX_SOURCE" ;; (sco*) # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer ;; (solaris2.*) cf_xopen_source="-D__EXTENSIONS__" cf_cv_xopen_source=broken ;; (sysv4.2uw2.*) # Novell/SCO UnixWare 2.x (tested on 2.1.2) cf_XOPEN_SOURCE= cf_POSIX_C_SOURCE= ;; (*) CF_TRY_XOPEN_SOURCE cf_save_xopen_cppflags="$CPPFLAGS" CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE) # Some of these niche implementations use copy/paste, double-check... CF_VERBOSE(checking if _POSIX_C_SOURCE inteferes) AC_TRY_COMPILE(CF__XOPEN_SOURCE_HEAD,CF__XOPEN_SOURCE_BODY,,[ AC_MSG_WARN(_POSIX_C_SOURCE definition is not usable) CPPFLAGS="$cf_save_xopen_cppflags"]) ;; esac if test -n "$cf_xopen_source" ; then CF_APPEND_CFLAGS($cf_xopen_source,true) fi dnl In anything but the default case, we may have system-specific setting dnl which is still not guaranteed to provide all of the entrypoints that dnl _XOPEN_SOURCE would yield. if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then AC_MSG_CHECKING(if _XOPEN_SOURCE really is set) AC_TRY_COMPILE([#include ],[ #ifndef _XOPEN_SOURCE make an error #endif], [cf_XOPEN_SOURCE_set=yes], [cf_XOPEN_SOURCE_set=no]) AC_MSG_RESULT($cf_XOPEN_SOURCE_set) if test "$cf_XOPEN_SOURCE_set" = yes then AC_TRY_COMPILE([#include ],[ #if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE make an error #endif], [cf_XOPEN_SOURCE_set_ok=yes], [cf_XOPEN_SOURCE_set_ok=no]) if test "$cf_XOPEN_SOURCE_set_ok" = no then AC_MSG_WARN(_XOPEN_SOURCE is lower than requested) fi else CF_TRY_XOPEN_SOURCE fi fi fi # cf_cv_posix_visible ]) dnl --------------------------------------------------------------------------- dnl CF__XOPEN_SOURCE_BODY version: 1 updated: 2022/09/10 15:17:35 dnl --------------------- dnl body of test when test-compiling for _XOPEN_SOURCE check define([CF__XOPEN_SOURCE_BODY], [ #ifndef _XOPEN_SOURCE make an error #endif ]) dnl --------------------------------------------------------------------------- dnl CF__XOPEN_SOURCE_HEAD version: 1 updated: 2022/09/10 15:17:03 dnl --------------------- dnl headers to include when test-compiling for _XOPEN_SOURCE check define([CF__XOPEN_SOURCE_HEAD], [ #include #include #include ]) byacc-20221106/configure0000755000000000000000000070113714316422414013451 0ustar rootroot#! /bin/sh # From configure.in Revision: 1.26 . # Guess values for system-dependent variables and create Makefiles. # Generated by Autoconf 2.52.20221009. # # Copyright 2003-2021,2022 Thomas E. Dickey # Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Sed expression to map a string onto a valid variable name. as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Name of the executable. as_me=`echo "$0" |sed 's,.*[\\/],,'` if expr a : '\(a\)' >/dev/null 2>&1; then as_expr="expr" else as_expr="false" fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln' else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file as_executable_p="test -f" # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset="unset" else as_unset="false" fi # NLS nuisances. $as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } $as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } $as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } $as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : "${ac_max_here_lines=38}" ac_unique_file="main.c" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${datarootdir}/info' mandir='${datarootdir}/man' # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case "$ac_option" in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo "$ac_feature" | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo "$ac_feature" | sed 's/-/_/g'` case "$ac_option" in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst \ | --runs | --run | --ru) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* \ | --runs=* | --run=* | --ru=*) runstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo "$ac_package" | sed 's/-/_/g'` case "$ac_option" in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo "$ac_package" | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export "$ac_envvar" ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option}" "${host_alias=$ac_option}" "${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo "$ac_prev" | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo "$ac_var"` case "$ac_val" in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo "$ac_var"` case "$ac_val" in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. build=$build_alias host=$host_alias target=$target_alias # FIXME: should be removed in autoconf 3.0. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_prog=$0 ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'` test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat < if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. EOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue cd "$ac_subdir" # A "../" for each directory in /$ac_subdir. ac_dots=`echo "$ac_subdir" | sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'` case "$srcdir" in .) # No --srcdir option. We are building in place. ac_sub_srcdir="$srcdir" ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_sub_srcdir="$srcdir/$ac_subdir" ;; *) # Relative path. ac_sub_srcdir="$ac_dots$srcdir/$ac_subdir" ;; esac # Check for guested configure; otherwise get Cygnus style configure. if test -f "$ac_sub_srcdir/configure.gnu"; then echo $SHELL "$ac_sub_srcdir/configure.gnu" --help=recursive elif test -f "$ac_sub_srcdir/configure"; then echo $SHELL "$ac_sub_srcdir/configure" --help=recursive elif test -f "$ac_sub_srcdir/configure.ac" || test -f "$ac_sub_srcdir/configure.in"; then echo "$ac_configure" --help else echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2 fi cd "$ac_popdir" done fi test -n "$ac_init_help" && exit 0 if "$ac_init_version"; then cat <<\EOF Copyright 2003-2021,2022 Thomas E. Dickey Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. EOF exit 0 fi exec 5>config.log cat >&5 </dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` PATH = $PATH _ASUNAME } >&5 cat >&5 <\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" ac_sep=" " ;; *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg" ac_sep=" " ;; esac # Get rid of the leading space. done # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. trap 'exit_status=$? # Save into config.log some information that might help in debugging. echo >&5 echo "## ----------------- ##" >&5 echo "## Cache variables. ##" >&5 echo "## ----------------- ##" >&5 echo >&5 # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } >&5 sed "/^$/d" confdefs.h >conftest.log if test -s conftest.log; then echo >&5 echo "## ------------ ##" >&5 echo "## confdefs.h. ##" >&5 echo "## ------------ ##" >&5 echo >&5 cat conftest.log >&5 fi (echo; echo) >&5 test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" >&5 echo "$as_me: exit $exit_status" >&5 rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' "$ac_signal" done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:909: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} cat "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:920: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:928: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case "$ac_old_set,$ac_new_set" in set,) { echo "$as_me:944: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:948: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:954: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:956: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:958: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. It doesn't matter if # we pass some twice (in addition to the command line arguments). if test "$ac_new_set" = set; then case "$ac_new_val" in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ac_configure_args="$ac_configure_args '$ac_arg'" ;; *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val" ;; esac fi done if "$ac_cache_corrupted"; then { echo "$as_me:977: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:979: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5' ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return="return" case `echo "testing\c" 2>/dev/null; echo 1,2,3`,`echo -n testing 2>/dev/null; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C= # newlines do not sed ;-) only broken shells would use this case anyway ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac echo "#! $SHELL" >conftest.sh echo "exit 0" >>conftest.sh chmod +x conftest.sh if { (echo "$as_me:1008: PATH=\".;.\"; conftest.sh") >&5 (PATH=".;."; conftest.sh) 2>&5 ac_status=$? echo "$as_me:1011: \$? = $ac_status" >&5 (exit "$ac_status"); }; then ac_path_separator=';' else ac_path_separator=: fi PATH_SEPARATOR="$ac_path_separator" rm -f conftest.sh ac_config_headers="$ac_config_headers config.h:config_h.in" ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:1039: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:1049: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:1053: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:1062: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub "$ac_cv_build_alias"` || { { echo "$as_me:1066: error: $ac_config_sub $ac_cv_build_alias failed." >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:1071: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo "$ac_cv_build" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo "$ac_cv_build" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo "$ac_cv_build" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:1078: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub "$ac_cv_host_alias"` || { { echo "$as_me:1087: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:1092: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo "$ac_cv_host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$ac_cv_host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$ac_cv_host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` if test -f "$srcdir/config.guess" || test -f "$ac_aux_dir/config.guess" ; then echo "$as_me:1100: checking target system type" >&5 echo $ECHO_N "checking target system type... $ECHO_C" >&6 if test "${ac_cv_target+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_target_alias=$target_alias test "x$ac_cv_target_alias" = "x" && ac_cv_target_alias=$ac_cv_host_alias ac_cv_target=`$ac_config_sub "$ac_cv_target_alias"` || { { echo "$as_me:1109: error: $ac_config_sub $ac_cv_target_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:1114: result: $ac_cv_target" >&5 echo "${ECHO_T}$ac_cv_target" >&6 target=$ac_cv_target target_cpu=`echo "$ac_cv_target" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` target_vendor=`echo "$ac_cv_target" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` target_os=`echo "$ac_cv_target" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- system_name="$host_os" else system_name="`(uname -s -r) 2>/dev/null`" if test -z "$system_name" ; then system_name="`(hostname) 2>/dev/null`" fi fi test -n "$system_name" && cat >>confdefs.h <&6 else cf_cv_system_name="$system_name" fi test -z "$system_name" && system_name="$cf_cv_system_name" test -n "$cf_cv_system_name" && echo "$as_me:1146: result: Configuring for $cf_cv_system_name" >&5 echo "${ECHO_T}Configuring for $cf_cv_system_name" >&6 if test ".$system_name" != ".$cf_cv_system_name" ; then echo "$as_me:1150: result: Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&5 echo "${ECHO_T}Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&6 { { echo "$as_me:1152: error: \"Please remove config.cache and try again.\"" >&5 echo "$as_me: error: \"Please remove config.cache and try again.\"" >&2;} { (exit 1); exit 1; }; } fi test "$program_prefix" != NONE && program_transform_name="s,^,$program_prefix,;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$,$program_suffix,;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5' ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return="return" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:1179: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:1194: found $ac_dir/$ac_word" >&5 break done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:1202: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:1205: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:1214: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:1229: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:1237: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:1240: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:1253: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:1268: found $ac_dir/$ac_word" >&5 break done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:1276: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:1279: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:1288: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_CC="cc" echo "$as_me:1303: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:1311: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:1314: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:1327: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:1347: found $ac_dir/$ac_word" >&5 break done if test "$ac_prog_rejected" = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift set dummy "$ac_dir/$ac_word" ${1+"$@"} shift ac_cv_prog_CC="$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:1369: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:1372: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:1383: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:1398: found $ac_dir/$ac_word" >&5 break done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:1406: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:1409: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:1422: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:1437: found $ac_dir/$ac_word" >&5 break done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:1445: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:1448: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:1460: error: no acceptable cc found in \$PATH" >&5 echo "$as_me: error: no acceptable cc found in \$PATH" >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:1465:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo "$2"` { (eval echo "$as_me:1468: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:1471: \$? = $ac_status" >&5 (exit "$ac_status"); } { (eval echo "$as_me:1473: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:1476: \$? = $ac_status" >&5 (exit "$ac_status"); } { (eval echo "$as_me:1478: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:1481: \$? = $ac_status" >&5 (exit "$ac_status"); } cat >"conftest.$ac_ext" <<_ACEOF #line 1485 "configure" #include "confdefs.h" int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:1501: checking for C compiler default output" >&5 echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *"conftest[^"]*"//'` if { (eval echo "$as_me:1504: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:1507: \$? = $ac_status" >&5 (exit "$ac_status"); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. for ac_file in `ls a.exe conftest.exe 2>/dev/null; ls a.out conftest 2>/dev/null; ls a.* conftest.* 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; a.out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 { { echo "$as_me:1530: error: C compiler cannot create executables" >&5 echo "$as_me: error: C compiler cannot create executables" >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:1536: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:1541: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:1547: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1550: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:1557: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:1565: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe "conftest$ac_cv_exeext" ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:1572: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:1574: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:1577: checking for executable suffix" >&5 echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6 if { (eval echo "$as_me:1579: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:1582: \$? = $ac_status" >&5 (exit "$ac_status"); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:1598: error: cannot compute EXEEXT: cannot compile and link" >&5 echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;} { (exit 1); exit 1; }; } fi rm -f "conftest$ac_cv_exeext" echo "$as_me:1604: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f "conftest.$ac_ext" EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:1610: checking for object suffix" >&5 echo $ECHO_N "checking for object suffix... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >"conftest.$ac_ext" <<_ACEOF #line 1616 "configure" #include "confdefs.h" int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:1628: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1631: \$? = $ac_status" >&5 (exit "$ac_status"); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.map | *.inf ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 { { echo "$as_me:1643: error: cannot compute OBJEXT: cannot compile" >&5 echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;} { (exit 1); exit 1; }; } fi rm -f "conftest.$ac_cv_objext" "conftest.$ac_ext" fi echo "$as_me:1650: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:1654: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >"conftest.$ac_ext" <<_ACEOF #line 1660 "configure" #include "confdefs.h" int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:1675: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1678: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:1681: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1684: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 ac_compiler_gnu=no fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:1696: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:1702: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >"conftest.$ac_ext" <<_ACEOF #line 1708 "configure" #include "confdefs.h" int main (void) { ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:1720: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1723: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:1726: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1729: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 ac_cv_prog_cc_g=no fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi echo "$as_me:1739: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >"conftest.$ac_ext" <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:1766: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1769: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:1772: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1775: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then for ac_declaration in \ ''\ '#include ' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >"conftest.$ac_ext" <<_ACEOF #line 1787 "configure" #include "confdefs.h" #include $ac_declaration int main (void) { exit (42); ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:1800: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1803: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:1806: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1809: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then : else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 continue fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" cat >"conftest.$ac_ext" <<_ACEOF #line 1819 "configure" #include "confdefs.h" $ac_declaration int main (void) { exit (42); ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:1831: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1834: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:1837: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1840: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then break else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" done rm -rf conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo "$ac_declaration" >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5' ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return="return" GCC_VERSION=none if test "$GCC" = yes ; then echo "$as_me:1870: checking version of $CC" >&5 echo $ECHO_N "checking version of $CC... $ECHO_C" >&6 GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(GCC[^)]*) //' -e 's/^.*(Debian[^)]*) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`" test -z "$GCC_VERSION" && GCC_VERSION=unknown echo "$as_me:1874: result: $GCC_VERSION" >&5 echo "${ECHO_T}$GCC_VERSION" >&6 fi INTEL_COMPILER=no if test "$GCC" = yes ; then case "$host_os" in (linux*|gnu*) echo "$as_me:1883: checking if this is really Intel C compiler" >&5 echo $ECHO_N "checking if this is really Intel C compiler... $ECHO_C" >&6 cf_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -no-gcc" cat >"conftest.$ac_ext" <<_ACEOF #line 1888 "configure" #include "confdefs.h" int main (void) { #ifdef __INTEL_COMPILER #else make an error #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:1905: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1908: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:1911: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1914: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then INTEL_COMPILER=yes cf_save_CFLAGS="$cf_save_CFLAGS -we147" else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" CFLAGS="$cf_save_CFLAGS" echo "$as_me:1925: result: $INTEL_COMPILER" >&5 echo "${ECHO_T}$INTEL_COMPILER" >&6 ;; esac fi CLANG_COMPILER=no if test "$GCC" = yes ; then echo "$as_me:1934: checking if this is really Clang C compiler" >&5 echo $ECHO_N "checking if this is really Clang C compiler... $ECHO_C" >&6 cf_save_CFLAGS="$CFLAGS" cat >"conftest.$ac_ext" <<_ACEOF #line 1938 "configure" #include "confdefs.h" int main (void) { #ifdef __clang__ #else make an error #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:1955: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:1958: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:1961: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:1964: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then CLANG_COMPILER=yes else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" CFLAGS="$cf_save_CFLAGS" echo "$as_me:1974: result: $CLANG_COMPILER" >&5 echo "${ECHO_T}$CLANG_COMPILER" >&6 fi CLANG_VERSION=none if test "x$CLANG_COMPILER" = "xyes" ; then case "$CC" in (c[1-9][0-9]|*/c[1-9][0-9]) { echo "$as_me:1983: WARNING: replacing broken compiler alias $CC" >&5 echo "$as_me: WARNING: replacing broken compiler alias $CC" >&2;} CFLAGS="$CFLAGS -std=`echo "$CC" | sed -e 's%.*/%%'`" CC=clang ;; esac echo "$as_me:1990: checking version of $CC" >&5 echo $ECHO_N "checking version of $CC... $ECHO_C" >&6 CLANG_VERSION="`$CC --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(CLANG[^)]*) //' -e 's/^.*(Debian[^)]*) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`" test -z "$CLANG_VERSION" && CLANG_VERSION=unknown echo "$as_me:1994: result: $CLANG_VERSION" >&5 echo "${ECHO_T}$CLANG_VERSION" >&6 for cf_clang_opt in \ -Qunused-arguments \ -Wno-error=implicit-function-declaration do echo "$as_me:2001: checking if option $cf_clang_opt works" >&5 echo $ECHO_N "checking if option $cf_clang_opt works... $ECHO_C" >&6 cf_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $cf_clang_opt" cat >"conftest.$ac_ext" <<_ACEOF #line 2006 "configure" #include "confdefs.h" #include int main (void) { printf("hello!\\n"); ; return 0; } _ACEOF rm -f "conftest.$ac_objext" "conftest$ac_exeext" if { (eval echo "$as_me:2020: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:2023: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest$ac_exeext"' { (eval echo "$as_me:2026: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2029: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cf_clang_optok=yes else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_clang_optok=no fi rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" echo "$as_me:2040: result: $cf_clang_optok" >&5 echo "${ECHO_T}$cf_clang_optok" >&6 CFLAGS="$cf_save_CFLAGS" if test "$cf_clang_optok" = yes; then test -n "$verbose" && echo " adding option $cf_clang_opt" 1>&6 echo "${as_me:-configure}:2046: testing adding option $cf_clang_opt ..." 1>&5 test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_clang_opt" fi done fi echo "$as_me:2055: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >"conftest.$ac_ext" <<_ACEOF #line 2063 "configure" #include "confdefs.h" #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main (void) { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f "conftest.$ac_objext" if { (eval echo "$as_me:2112: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2115: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:2118: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2121: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 fi rm -f "conftest.$ac_objext" done rm -f "conftest.$ac_ext" "conftest.$ac_objext" CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:2138: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:2141: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # This should have been defined by AC_PROG_CC : "${CC:=cc}" echo "$as_me:2149: checking \$CFLAGS variable" >&5 echo $ECHO_N "checking \$CFLAGS variable... $ECHO_C" >&6 case "x$CFLAGS" in (*-[IUD]*) echo "$as_me:2153: result: broken" >&5 echo "${ECHO_T}broken" >&6 { echo "$as_me:2155: WARNING: your environment uses the CFLAGS variable to hold CPPFLAGS options" >&5 echo "$as_me: WARNING: your environment uses the CFLAGS variable to hold CPPFLAGS options" >&2;} cf_flags="$CFLAGS" CFLAGS= for cf_arg in $cf_flags do cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_arg do case "$cf_fix_cppflags" in (no) case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case "$cf_add_cflags" in (-D*) cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi done ;; (*) echo "$as_me:2263: result: ok" >&5 echo "${ECHO_T}ok" >&6 ;; esac echo "$as_me:2268: checking \$CC variable" >&5 echo $ECHO_N "checking \$CC variable... $ECHO_C" >&6 case "$CC" in (*[\ \ ]-*) echo "$as_me:2272: result: broken" >&5 echo "${ECHO_T}broken" >&6 { echo "$as_me:2274: WARNING: your environment uses the CC variable to hold CFLAGS/CPPFLAGS options" >&5 echo "$as_me: WARNING: your environment uses the CC variable to hold CFLAGS/CPPFLAGS options" >&2;} # humor him... cf_prog=`echo "$CC" | sed -e 's/ / /g' -e 's/[ ]* / /g' -e 's/[ ]*[ ]-[^ ].*//'` cf_flags=`echo "$CC" | ${AWK:-awk} -v prog="$cf_prog" '{ printf("%s", substr($0,1+length(prog))); }'` CC="$cf_prog" for cf_arg in $cf_flags do case "x$cf_arg" in (x-[IUDfgOW]*) cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_arg do case "$cf_fix_cppflags" in (no) case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case "$cf_add_cflags" in (-D*) cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi ;; (*) CC="$CC $cf_arg" ;; esac done test -n "$verbose" && echo " resulting CC: '$CC'" 1>&6 echo "${as_me:-configure}:2391: testing resulting CC: '$CC' ..." 1>&5 test -n "$verbose" && echo " resulting CFLAGS: '$CFLAGS'" 1>&6 echo "${as_me:-configure}:2395: testing resulting CFLAGS: '$CFLAGS' ..." 1>&5 test -n "$verbose" && echo " resulting CPPFLAGS: '$CPPFLAGS'" 1>&6 echo "${as_me:-configure}:2399: testing resulting CPPFLAGS: '$CPPFLAGS' ..." 1>&5 ;; (*) echo "$as_me:2403: result: ok" >&5 echo "${ECHO_T}ok" >&6 ;; esac echo "$as_me:2408: checking whether ${MAKE-make} sets \${MAKE}" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\EOF all: @echo 'ac_maketemp="${MAKE}"' EOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:2428: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:2432: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:2449: checking for a BSD compatible install" >&5 echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_IFS=$IFS; IFS=$ac_path_separator for ac_dir in $PATH; do IFS=$ac_save_IFS # Account for people who put trailing slashes in PATH elements. case $ac_dir/ in / | ./ | .// | /cC/* \ | /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* \ | /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if $as_executable_p "$ac_dir/$ac_prog"; then if test $ac_prog = install && grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:2498: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo "$as_me:2509: checking if filesystem supports mixed-case filenames" >&5 echo $ECHO_N "checking if filesystem supports mixed-case filenames... $ECHO_C" >&6 if test "${cf_cv_mixedcase+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes ; then case "$target_alias" in (*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*|darwin*) cf_cv_mixedcase=no ;; (*) cf_cv_mixedcase=yes ;; esac else rm -f conftest CONFTEST echo test >conftest if test -f CONFTEST ; then cf_cv_mixedcase=no else cf_cv_mixedcase=yes fi rm -f conftest CONFTEST fi fi echo "$as_me:2536: result: $cf_cv_mixedcase" >&5 echo "${ECHO_T}$cf_cv_mixedcase" >&6 test "$cf_cv_mixedcase" = yes && cat >>confdefs.h <<\EOF #define MIXEDCASE_FILENAMES 1 EOF for ac_prog in exctags ctags do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:2547: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CTAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CTAGS"; then ac_cv_prog_CTAGS="$CTAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_CTAGS="$ac_prog" echo "$as_me:2562: found $ac_dir/$ac_word" >&5 break done fi fi CTAGS=$ac_cv_prog_CTAGS if test -n "$CTAGS"; then echo "$as_me:2570: result: $CTAGS" >&5 echo "${ECHO_T}$CTAGS" >&6 else echo "$as_me:2573: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CTAGS" && break done for ac_prog in exetags etags do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:2584: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ETAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ETAGS"; then ac_cv_prog_ETAGS="$ETAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_ETAGS="$ac_prog" echo "$as_me:2599: found $ac_dir/$ac_word" >&5 break done fi fi ETAGS=$ac_cv_prog_ETAGS if test -n "$ETAGS"; then echo "$as_me:2607: result: $ETAGS" >&5 echo "${ECHO_T}$ETAGS" >&6 else echo "$as_me:2610: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ETAGS" && break done # Extract the first word of "${CTAGS:-ctags}", so it can be a program name with args. set dummy ${CTAGS:-ctags}; ac_word=$2 echo "$as_me:2619: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_MAKE_LOWER_TAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$MAKE_LOWER_TAGS"; then ac_cv_prog_MAKE_LOWER_TAGS="$MAKE_LOWER_TAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_MAKE_LOWER_TAGS="yes" echo "$as_me:2634: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_MAKE_LOWER_TAGS" && ac_cv_prog_MAKE_LOWER_TAGS="no" fi fi MAKE_LOWER_TAGS=$ac_cv_prog_MAKE_LOWER_TAGS if test -n "$MAKE_LOWER_TAGS"; then echo "$as_me:2643: result: $MAKE_LOWER_TAGS" >&5 echo "${ECHO_T}$MAKE_LOWER_TAGS" >&6 else echo "$as_me:2646: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$cf_cv_mixedcase" = yes ; then # Extract the first word of "${ETAGS:-etags}", so it can be a program name with args. set dummy ${ETAGS:-etags}; ac_word=$2 echo "$as_me:2653: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_MAKE_UPPER_TAGS+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$MAKE_UPPER_TAGS"; then ac_cv_prog_MAKE_UPPER_TAGS="$MAKE_UPPER_TAGS" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_MAKE_UPPER_TAGS="yes" echo "$as_me:2668: found $ac_dir/$ac_word" >&5 break done test -z "$ac_cv_prog_MAKE_UPPER_TAGS" && ac_cv_prog_MAKE_UPPER_TAGS="no" fi fi MAKE_UPPER_TAGS=$ac_cv_prog_MAKE_UPPER_TAGS if test -n "$MAKE_UPPER_TAGS"; then echo "$as_me:2677: result: $MAKE_UPPER_TAGS" >&5 echo "${ECHO_T}$MAKE_UPPER_TAGS" >&6 else echo "$as_me:2680: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAKE_UPPER_TAGS=no fi if test "$MAKE_UPPER_TAGS" = yes ; then MAKE_UPPER_TAGS= else MAKE_UPPER_TAGS="#" fi if test "$MAKE_LOWER_TAGS" = yes ; then MAKE_LOWER_TAGS= else MAKE_LOWER_TAGS="#" fi for ac_prog in mawk gawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:2704: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_AWK="$ac_prog" echo "$as_me:2719: found $ac_dir/$ac_word" >&5 break done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:2727: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:2730: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done test -z "$AWK" && { { echo "$as_me:2737: error: No awk program found" >&5 echo "$as_me: error: No awk program found" >&2;} { (exit 1); exit 1; }; } for ac_prog in lint cppcheck splint do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:2745: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_LINT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$LINT"; then ac_cv_prog_LINT="$LINT" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_LINT="$ac_prog" echo "$as_me:2760: found $ac_dir/$ac_word" >&5 break done fi fi LINT=$ac_cv_prog_LINT if test -n "$LINT"; then echo "$as_me:2768: result: $LINT" >&5 echo "${ECHO_T}$LINT" >&6 else echo "$as_me:2771: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$LINT" && break done case "x$LINT" in (xcppcheck|x*/cppcheck) test -z "$LINT_OPTS" && LINT_OPTS="--enable=all" ;; esac echo "$as_me:2784: checking if the POSIX test-macros are already defined" >&5 echo $ECHO_N "checking if the POSIX test-macros are already defined... $ECHO_C" >&6 if test "${cf_cv_posix_visible+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >"conftest.$ac_ext" <<_ACEOF #line 2791 "configure" #include "confdefs.h" #include int main (void) { #if defined(__POSIX_VISIBLE) && ((__POSIX_VISIBLE - 0L) > 0) \ && defined(__XSI_VISIBLE) && ((__XSI_VISIBLE - 0L) > 0) \ && defined(__BSD_VISIBLE) && ((__BSD_VISIBLE - 0L) > 0) \ && defined(__ISO_C_VISIBLE) && ((__ISO_C_VISIBLE - 0L) > 0) #error conflicting symbols found #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:2810: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2813: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:2816: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2819: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cf_cv_posix_visible=no else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_cv_posix_visible=yes fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi echo "$as_me:2830: result: $cf_cv_posix_visible" >&5 echo "${ECHO_T}$cf_cv_posix_visible" >&6 if test "$cf_cv_posix_visible" = no; then cf_XOPEN_SOURCE=500 cf_POSIX_C_SOURCE=199506L cf_xopen_source= case "$host_os" in (aix[4-7]*) cf_xopen_source="-D_ALL_SOURCE" ;; (msys) cf_XOPEN_SOURCE=600 ;; (darwin[0-8].*) cf_xopen_source="-D_APPLE_C_SOURCE" ;; (darwin*) cf_xopen_source="-D_DARWIN_C_SOURCE" cf_XOPEN_SOURCE= ;; (freebsd*|dragonfly*|midnightbsd*) # 5.x headers associate # _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L # _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L cf_POSIX_C_SOURCE=200112L cf_XOPEN_SOURCE=600 cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" ;; (hpux11*) cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500" ;; (hpux*) cf_xopen_source="-D_HPUX_SOURCE" ;; (irix[56].*) cf_xopen_source="-D_SGI_SOURCE" cf_XOPEN_SOURCE= ;; (linux*gnu|linux*gnuabi64|linux*gnuabin32|linux*gnueabi|linux*gnueabihf|linux*gnux32|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin) cf_gnu_xopen_source=$cf_XOPEN_SOURCE echo "$as_me:2875: checking if this is the GNU C library" >&5 echo $ECHO_N "checking if this is the GNU C library... $ECHO_C" >&6 if test "${cf_cv_gnu_library+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >"conftest.$ac_ext" <<_ACEOF #line 2882 "configure" #include "confdefs.h" #include int main (void) { #if __GLIBC__ > 0 && __GLIBC_MINOR__ >= 0 return 0; #elif __NEWLIB__ > 0 && __NEWLIB_MINOR__ >= 0 return 0; #else # error not GNU C library #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:2901: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2904: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:2907: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2910: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cf_cv_gnu_library=yes else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_cv_gnu_library=no fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi echo "$as_me:2921: result: $cf_cv_gnu_library" >&5 echo "${ECHO_T}$cf_cv_gnu_library" >&6 if test x$cf_cv_gnu_library = xyes; then # With glibc 2.19 (13 years after this check was begun), _DEFAULT_SOURCE # was changed to help a little. newlib incorporated the change about 4 # years later. echo "$as_me:2929: checking if _DEFAULT_SOURCE can be used as a basis" >&5 echo $ECHO_N "checking if _DEFAULT_SOURCE can be used as a basis... $ECHO_C" >&6 if test "${cf_cv_gnu_library_219+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_save="$CPPFLAGS" test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}-D_DEFAULT_SOURCE" cat >"conftest.$ac_ext" <<_ACEOF #line 2941 "configure" #include "confdefs.h" #include int main (void) { #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 19) || (__GLIBC__ > 2) return 0; #elif (__NEWLIB__ == 2 && __NEWLIB_MINOR__ >= 4) || (__GLIBC__ > 3) return 0; #else # error GNU C library __GLIBC__.__GLIBC_MINOR__ is too old #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:2960: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:2963: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:2966: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:2969: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cf_cv_gnu_library_219=yes else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_cv_gnu_library_219=no fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" CPPFLAGS="$cf_save" fi echo "$as_me:2981: result: $cf_cv_gnu_library_219" >&5 echo "${ECHO_T}$cf_cv_gnu_library_219" >&6 if test "x$cf_cv_gnu_library_219" = xyes; then cf_save="$CPPFLAGS" echo "$as_me:2986: checking if _XOPEN_SOURCE=$cf_gnu_xopen_source works with _DEFAULT_SOURCE" >&5 echo $ECHO_N "checking if _XOPEN_SOURCE=$cf_gnu_xopen_source works with _DEFAULT_SOURCE... $ECHO_C" >&6 if test "${cf_cv_gnu_dftsrc_219+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=$cf_gnu_xopen_source do case "$cf_fix_cppflags" in (no) case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case "$cf_add_cflags" in (-D*) cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi cat >"conftest.$ac_ext" <<_ACEOF #line 3091 "configure" #include "confdefs.h" #include #include int main (void) { #if (_XOPEN_SOURCE >= $cf_gnu_xopen_source) && (MB_LEN_MAX > 1) return 0; #else # error GNU C library is too old #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:3111: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3114: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:3117: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3120: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cf_cv_gnu_dftsrc_219=yes else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_cv_gnu_dftsrc_219=no fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi echo "$as_me:3131: result: $cf_cv_gnu_dftsrc_219" >&5 echo "${ECHO_T}$cf_cv_gnu_dftsrc_219" >&6 test "x$cf_cv_gnu_dftsrc_219" = "xyes" || CPPFLAGS="$cf_save" else cf_cv_gnu_dftsrc_219=maybe fi if test "x$cf_cv_gnu_dftsrc_219" != xyes; then echo "$as_me:3140: checking if we must define _GNU_SOURCE" >&5 echo $ECHO_N "checking if we must define _GNU_SOURCE... $ECHO_C" >&6 if test "${cf_cv_gnu_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >"conftest.$ac_ext" <<_ACEOF #line 3147 "configure" #include "confdefs.h" #include int main (void) { #ifndef _XOPEN_SOURCE #error expected _XOPEN_SOURCE to be defined #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:3162: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3165: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:3168: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3171: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cf_cv_gnu_source=no else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_save="$CPPFLAGS" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in -D_GNU_SOURCE do case "$cf_fix_cppflags" in (no) case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case "$cf_add_cflags" in (-D*) cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi cat >"conftest.$ac_ext" <<_ACEOF #line 3278 "configure" #include "confdefs.h" #include int main (void) { #ifdef _XOPEN_SOURCE #error expected _XOPEN_SOURCE to be undefined #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:3293: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3296: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:3299: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3302: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cf_cv_gnu_source=no else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_cv_gnu_source=yes fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" CPPFLAGS="$cf_save" fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi echo "$as_me:3317: result: $cf_cv_gnu_source" >&5 echo "${ECHO_T}$cf_cv_gnu_source" >&6 if test "$cf_cv_gnu_source" = yes then echo "$as_me:3322: checking if we should also define _DEFAULT_SOURCE" >&5 echo $ECHO_N "checking if we should also define _DEFAULT_SOURCE... $ECHO_C" >&6 if test "${cf_cv_default_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}-D_GNU_SOURCE" cat >"conftest.$ac_ext" <<_ACEOF #line 3332 "configure" #include "confdefs.h" #include int main (void) { #ifdef _DEFAULT_SOURCE #error expected _DEFAULT_SOURCE to be undefined #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:3347: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3350: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:3353: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3356: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cf_cv_default_source=no else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_cv_default_source=yes fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi echo "$as_me:3367: result: $cf_cv_default_source" >&5 echo "${ECHO_T}$cf_cv_default_source" >&6 if test "$cf_cv_default_source" = yes then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}-D_DEFAULT_SOURCE" fi fi fi fi ;; (minix*) cf_xopen_source="-D_NETBSD_SOURCE" # POSIX.1-2001 features are ifdef'd with this... ;; (mirbsd*) # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks and other headers which use u_int / u_short types cf_XOPEN_SOURCE= if test "$cf_cv_posix_visible" = no; then cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE cf_save_CFLAGS="$CFLAGS" cf_save_CPPFLAGS="$CPPFLAGS" cf_trim_CFLAGS=`echo "$cf_save_CFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` cf_trim_CPPFLAGS=`echo "$cf_save_CPPFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` echo "$as_me:3404: checking if we should define _POSIX_C_SOURCE" >&5 echo $ECHO_N "checking if we should define _POSIX_C_SOURCE... $ECHO_C" >&6 if test "${cf_cv_posix_c_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else echo "${as_me:-configure}:3410: testing if the symbol is already defined go no further ..." 1>&5 cat >"conftest.$ac_ext" <<_ACEOF #line 3413 "configure" #include "confdefs.h" #include int main (void) { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:3428: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3431: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:3434: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3437: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cf_cv_posix_c_source=no else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_want_posix_source=no case .$cf_POSIX_C_SOURCE in (.[12]??*) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" ;; (.2) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" cf_want_posix_source=yes ;; (.*) cf_want_posix_source=yes ;; esac if test "$cf_want_posix_source" = yes ; then cat >"conftest.$ac_ext" <<_ACEOF #line 3458 "configure" #include "confdefs.h" #include int main (void) { #ifdef _POSIX_SOURCE make an error #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:3473: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3476: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:3479: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3482: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then : else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE" fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi echo "${as_me:-configure}:3493: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5 CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_cv_posix_c_source" echo "${as_me:-configure}:3501: testing if the second compile does not leave our definition intact error ..." 1>&5 cat >"conftest.$ac_ext" <<_ACEOF #line 3504 "configure" #include "confdefs.h" #include int main (void) { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:3519: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3522: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:3525: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3528: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then : else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_cv_posix_c_source=no fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" CFLAGS="$cf_save_CFLAGS" CPPFLAGS="$cf_save_CPPFLAGS" fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi echo "$as_me:3544: result: $cf_cv_posix_c_source" >&5 echo "${ECHO_T}$cf_cv_posix_c_source" >&6 if test "$cf_cv_posix_c_source" != no ; then CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_cv_posix_c_source do case "$cf_fix_cppflags" in (no) case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case "$cf_add_cflags" in (-D*) cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi fi fi # cf_cv_posix_visible ;; (netbsd*) cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw ;; (openbsd[6-9]*) # OpenBSD 6.x has broken locale support, both compile-time and runtime. # see https://www.mail-archive.com/bugs@openbsd.org/msg13200.html # Abusing the conformance level is a workaround. { echo "$as_me:3661: WARNING: this system does not provide usable locale support" >&5 echo "$as_me: WARNING: this system does not provide usable locale support" >&2;} cf_xopen_source="-D_BSD_SOURCE" cf_XOPEN_SOURCE=700 ;; (openbsd[4-5]*) # setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw cf_xopen_source="-D_BSD_SOURCE" cf_XOPEN_SOURCE=600 ;; (openbsd*) # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw ;; (osf[45]*) cf_xopen_source="-D_OSF_SOURCE" ;; (nto-qnx*) cf_xopen_source="-D_QNX_SOURCE" ;; (sco*) # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer ;; (solaris2.*) cf_xopen_source="-D__EXTENSIONS__" cf_cv_xopen_source=broken ;; (sysv4.2uw2.*) # Novell/SCO UnixWare 2.x (tested on 2.1.2) cf_XOPEN_SOURCE= cf_POSIX_C_SOURCE= ;; (*) echo "$as_me:3693: checking if we should define _XOPEN_SOURCE" >&5 echo $ECHO_N "checking if we should define _XOPEN_SOURCE... $ECHO_C" >&6 if test "${cf_cv_xopen_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >"conftest.$ac_ext" <<_ACEOF #line 3700 "configure" #include "confdefs.h" #include #include #include int main (void) { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:3720: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3723: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:3726: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3729: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_save="$CPPFLAGS" test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}-D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" cat >"conftest.$ac_ext" <<_ACEOF #line 3741 "configure" #include "confdefs.h" #include #include #include int main (void) { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:3761: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3764: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:3767: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3770: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_cv_xopen_source=$cf_XOPEN_SOURCE fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" CPPFLAGS="$cf_save" fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi echo "$as_me:3785: result: $cf_cv_xopen_source" >&5 echo "${ECHO_T}$cf_cv_xopen_source" >&6 if test "$cf_cv_xopen_source" != no ; then CFLAGS=`echo "$CFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source" for cf_add_cflags in $cf_temp_xopen_source do case "x$cf_add_cflags" in (x-[DU]*) cf_tmp_cflag=`echo "x$cf_add_cflags" | sed -e 's/^.//' -e 's/=.*//'` while true do cf_old_cflag=`echo "x$CFLAGS" | sed -e 's/^.//' -e 's/[ ][ ]*-/ -/g' -e "s%$cf_tmp_cflag\\(=[^ ][^ ]*\\)\?%%" -e 's/^[ ]*//' -e 's%[ ][ ]*-D% -D%g' -e 's%[ ][ ]*-I% -I%g'` test "$CFLAGS" != "$cf_old_cflag" || break CFLAGS="$cf_old_cflag" done cf_tmp_cflag=`echo "x$cf_add_cflags" | sed -e 's/^.//' -e 's/=.*//'` while true do cf_old_cflag=`echo "x$CPPFLAGS" | sed -e 's/^.//' -e 's/[ ][ ]*-/ -/g' -e "s%$cf_tmp_cflag\\(=[^ ][^ ]*\\)\?%%" -e 's/^[ ]*//' -e 's%[ ][ ]*-D% -D%g' -e 's%[ ][ ]*-I% -I%g'` test "$CPPFLAGS" != "$cf_old_cflag" || break CPPFLAGS="$cf_old_cflag" done ;; esac cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_add_cflags do case "$cf_fix_cppflags" in (no) case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case "$cf_add_cflags" in (-D*) cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi done fi cf_save_xopen_cppflags="$CPPFLAGS" if test "$cf_cv_posix_visible" = no; then cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE cf_save_CFLAGS="$CFLAGS" cf_save_CPPFLAGS="$CPPFLAGS" cf_trim_CFLAGS=`echo "$cf_save_CFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` cf_trim_CPPFLAGS=`echo "$cf_save_CPPFLAGS" | \ sed -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ ]*\)\?$//g'` echo "$as_me:3945: checking if we should define _POSIX_C_SOURCE" >&5 echo $ECHO_N "checking if we should define _POSIX_C_SOURCE... $ECHO_C" >&6 if test "${cf_cv_posix_c_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else echo "${as_me:-configure}:3951: testing if the symbol is already defined go no further ..." 1>&5 cat >"conftest.$ac_ext" <<_ACEOF #line 3954 "configure" #include "confdefs.h" #include int main (void) { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:3969: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:3972: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:3975: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:3978: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cf_cv_posix_c_source=no else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_want_posix_source=no case .$cf_POSIX_C_SOURCE in (.[12]??*) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" ;; (.2) cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE" cf_want_posix_source=yes ;; (.*) cf_want_posix_source=yes ;; esac if test "$cf_want_posix_source" = yes ; then cat >"conftest.$ac_ext" <<_ACEOF #line 3999 "configure" #include "confdefs.h" #include int main (void) { #ifdef _POSIX_SOURCE make an error #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:4014: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:4017: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:4020: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4023: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then : else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE" fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi echo "${as_me:-configure}:4034: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5 CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_cv_posix_c_source" echo "${as_me:-configure}:4042: testing if the second compile does not leave our definition intact error ..." 1>&5 cat >"conftest.$ac_ext" <<_ACEOF #line 4045 "configure" #include "confdefs.h" #include int main (void) { #ifndef _POSIX_C_SOURCE make an error #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:4060: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:4063: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:4066: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4069: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then : else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_cv_posix_c_source=no fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" CFLAGS="$cf_save_CFLAGS" CPPFLAGS="$cf_save_CPPFLAGS" fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi echo "$as_me:4085: result: $cf_cv_posix_c_source" >&5 echo "${ECHO_T}$cf_cv_posix_c_source" >&6 if test "$cf_cv_posix_c_source" != no ; then CFLAGS="$cf_trim_CFLAGS" CPPFLAGS="$cf_trim_CPPFLAGS" cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_cv_posix_c_source do case "$cf_fix_cppflags" in (no) case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case "$cf_add_cflags" in (-D*) cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi fi fi # cf_cv_posix_visible # Some of these niche implementations use copy/paste, double-check... test -n "$verbose" && echo " checking if _POSIX_C_SOURCE inteferes" 1>&6 echo "${as_me:-configure}:4197: testing checking if _POSIX_C_SOURCE inteferes ..." 1>&5 cat >"conftest.$ac_ext" <<_ACEOF #line 4200 "configure" #include "confdefs.h" #include #include #include int main (void) { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:4220: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:4223: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:4226: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4229: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then : else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 { echo "$as_me:4236: WARNING: _POSIX_C_SOURCE definition is not usable" >&5 echo "$as_me: WARNING: _POSIX_C_SOURCE definition is not usable" >&2;} CPPFLAGS="$cf_save_xopen_cppflags" fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" ;; esac if test -n "$cf_xopen_source" ; then for cf_add_cflags in $cf_xopen_source do case "x$cf_add_cflags" in (x-[DU]*) cf_tmp_cflag=`echo "x$cf_add_cflags" | sed -e 's/^.//' -e 's/=.*//'` while true do cf_old_cflag=`echo "x$CFLAGS" | sed -e 's/^.//' -e 's/[ ][ ]*-/ -/g' -e "s%$cf_tmp_cflag\\(=[^ ][^ ]*\\)\?%%" -e 's/^[ ]*//' -e 's%[ ][ ]*-D% -D%g' -e 's%[ ][ ]*-I% -I%g'` test "$CFLAGS" != "$cf_old_cflag" || break test -n "$verbose" && echo " removing old option $cf_add_cflags from CFLAGS" 1>&6 echo "${as_me:-configure}:4258: testing removing old option $cf_add_cflags from CFLAGS ..." 1>&5 CFLAGS="$cf_old_cflag" done cf_tmp_cflag=`echo "x$cf_add_cflags" | sed -e 's/^.//' -e 's/=.*//'` while true do cf_old_cflag=`echo "x$CPPFLAGS" | sed -e 's/^.//' -e 's/[ ][ ]*-/ -/g' -e "s%$cf_tmp_cflag\\(=[^ ][^ ]*\\)\?%%" -e 's/^[ ]*//' -e 's%[ ][ ]*-D% -D%g' -e 's%[ ][ ]*-I% -I%g'` test "$CPPFLAGS" != "$cf_old_cflag" || break test -n "$verbose" && echo " removing old option $cf_add_cflags from CPPFLAGS" 1>&6 echo "${as_me:-configure}:4270: testing removing old option $cf_add_cflags from CPPFLAGS ..." 1>&5 CPPFLAGS="$cf_old_cflag" done ;; esac cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_add_cflags do case "$cf_fix_cppflags" in (no) case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case "$cf_add_cflags" in (-D*) cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$verbose" && echo " add to \$CFLAGS $cf_new_cflags" 1>&6 echo "${as_me:-configure}:4358: testing add to \$CFLAGS $cf_new_cflags ..." 1>&5 test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$verbose" && echo " add to \$CPPFLAGS $cf_new_cppflags" 1>&6 echo "${as_me:-configure}:4368: testing add to \$CPPFLAGS $cf_new_cppflags ..." 1>&5 test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$verbose" && echo " add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags" 1>&6 echo "${as_me:-configure}:4378: testing add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags ..." 1>&5 test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi done fi if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then echo "$as_me:4390: checking if _XOPEN_SOURCE really is set" >&5 echo $ECHO_N "checking if _XOPEN_SOURCE really is set... $ECHO_C" >&6 cat >"conftest.$ac_ext" <<_ACEOF #line 4393 "configure" #include "confdefs.h" #include int main (void) { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:4408: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:4411: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:4414: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4417: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cf_XOPEN_SOURCE_set=yes else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_XOPEN_SOURCE_set=no fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" echo "$as_me:4426: result: $cf_XOPEN_SOURCE_set" >&5 echo "${ECHO_T}$cf_XOPEN_SOURCE_set" >&6 if test "$cf_XOPEN_SOURCE_set" = yes then cat >"conftest.$ac_ext" <<_ACEOF #line 4431 "configure" #include "confdefs.h" #include int main (void) { #if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:4446: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:4449: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:4452: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4455: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cf_XOPEN_SOURCE_set_ok=yes else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_XOPEN_SOURCE_set_ok=no fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" if test "$cf_XOPEN_SOURCE_set_ok" = no then { echo "$as_me:4466: WARNING: _XOPEN_SOURCE is lower than requested" >&5 echo "$as_me: WARNING: _XOPEN_SOURCE is lower than requested" >&2;} fi else echo "$as_me:4471: checking if we should define _XOPEN_SOURCE" >&5 echo $ECHO_N "checking if we should define _XOPEN_SOURCE... $ECHO_C" >&6 if test "${cf_cv_xopen_source+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >"conftest.$ac_ext" <<_ACEOF #line 4478 "configure" #include "confdefs.h" #include #include #include int main (void) { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:4498: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:4501: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:4504: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4507: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_save="$CPPFLAGS" test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}-D_XOPEN_SOURCE=$cf_XOPEN_SOURCE" cat >"conftest.$ac_ext" <<_ACEOF #line 4519 "configure" #include "confdefs.h" #include #include #include int main (void) { #ifndef _XOPEN_SOURCE make an error #endif ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:4539: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:4542: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:4545: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:4548: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cf_cv_xopen_source=no else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_cv_xopen_source=$cf_XOPEN_SOURCE fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" CPPFLAGS="$cf_save" fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi echo "$as_me:4563: result: $cf_cv_xopen_source" >&5 echo "${ECHO_T}$cf_cv_xopen_source" >&6 if test "$cf_cv_xopen_source" != no ; then CFLAGS=`echo "$CFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"_XOPEN_SOURCE"'\(=[^ ]*\)\?$//g'` cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source" for cf_add_cflags in $cf_temp_xopen_source do case "x$cf_add_cflags" in (x-[DU]*) cf_tmp_cflag=`echo "x$cf_add_cflags" | sed -e 's/^.//' -e 's/=.*//'` while true do cf_old_cflag=`echo "x$CFLAGS" | sed -e 's/^.//' -e 's/[ ][ ]*-/ -/g' -e "s%$cf_tmp_cflag\\(=[^ ][^ ]*\\)\?%%" -e 's/^[ ]*//' -e 's%[ ][ ]*-D% -D%g' -e 's%[ ][ ]*-I% -I%g'` test "$CFLAGS" != "$cf_old_cflag" || break CFLAGS="$cf_old_cflag" done cf_tmp_cflag=`echo "x$cf_add_cflags" | sed -e 's/^.//' -e 's/=.*//'` while true do cf_old_cflag=`echo "x$CPPFLAGS" | sed -e 's/^.//' -e 's/[ ][ ]*-/ -/g' -e "s%$cf_tmp_cflag\\(=[^ ][^ ]*\\)\?%%" -e 's/^[ ]*//' -e 's%[ ][ ]*-D% -D%g' -e 's%[ ][ ]*-I% -I%g'` test "$CPPFLAGS" != "$cf_old_cflag" || break CPPFLAGS="$cf_old_cflag" done ;; esac cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in $cf_add_cflags do case "$cf_fix_cppflags" in (no) case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case "$cf_add_cflags" in (-D*) cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi done fi fi fi fi # cf_cv_posix_visible for ac_prog in ggrep grep do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:4714: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$GREP"; then ac_cv_prog_GREP="$GREP" # Let the user override the test. else ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. $as_executable_p "$ac_dir/$ac_word" || continue ac_cv_prog_GREP="$ac_prog" echo "$as_me:4729: found $ac_dir/$ac_word" >&5 break done fi fi GREP=$ac_cv_prog_GREP if test -n "$GREP"; then echo "$as_me:4737: result: $GREP" >&5 echo "${ECHO_T}$GREP" >&6 else echo "$as_me:4740: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$GREP" && break done test -n "$GREP" || GREP=": " echo "$as_me:4748: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else for ac_prog in gegrep egrep do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:4760: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $EGREP in [\\/]* | ?:[\\/]*) ac_cv_path_EGREP="$EGREP" # Let the user override the test with a path. ;; *) ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. if $as_executable_p "$ac_dir/$ac_word"; then ac_cv_path_EGREP="$ac_dir/$ac_word" echo "$as_me:4777: found $ac_dir/$ac_word" >&5 break fi done ;; esac fi EGREP=$ac_cv_path_EGREP if test -n "$EGREP"; then echo "$as_me:4788: result: $EGREP" >&5 echo "${ECHO_T}$EGREP" >&6 else echo "$as_me:4791: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$EGREP" && break done test -n "$EGREP" || EGREP=": " test "x$ac_cv_path_EGREP" = "x:" && { { echo "$as_me:4799: error: cannot find workable egrep" >&5 echo "$as_me: error: cannot find workable egrep" >&2;} { (exit 1); exit 1; }; } fi fi echo "$as_me:4804: result: $ac_cv_path_EGREP" >&5 echo "${ECHO_T}$ac_cv_path_EGREP" >&6 EGREP="$ac_cv_path_EGREP" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5' ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return="return" echo "$as_me:4814: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >"conftest.$ac_ext" <<_ACEOF #line 4835 "configure" #include "confdefs.h" #include Syntax error _ACEOF if { (eval echo "$as_me:4840: \"$ac_cpp "conftest.$ac_ext"\"") >&5 (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:4846: \$? = $ac_status" >&5 (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 # Broken: fails on valid input. continue fi rm -f conftest.err "conftest.$ac_ext" # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >"conftest.$ac_ext" <<_ACEOF #line 4869 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:4873: \"$ac_cpp "conftest.$ac_ext"\"") >&5 (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:4879: \$? = $ac_status" >&5 (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err "conftest.$ac_ext" done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err "conftest.$ac_ext" if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:4916: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >"conftest.$ac_ext" <<_ACEOF #line 4926 "configure" #include "confdefs.h" #include Syntax error _ACEOF if { (eval echo "$as_me:4931: \"$ac_cpp "conftest.$ac_ext"\"") >&5 (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:4937: \$? = $ac_status" >&5 (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 # Broken: fails on valid input. continue fi rm -f conftest.err "conftest.$ac_ext" # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >"conftest.$ac_ext" <<_ACEOF #line 4960 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:4964: \"$ac_cpp "conftest.$ac_ext"\"") >&5 (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:4970: \$? = $ac_status" >&5 (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err "conftest.$ac_ext" done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err "conftest.$ac_ext" if $ac_preproc_ok; then : else { { echo "$as_me:4998: error: C preprocessor \"$CPP\" fails sanity check" >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5' ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_main_return="return" for ac_header in fcntl.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:5013: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >"conftest.$ac_ext" <<_ACEOF #line 5019 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:5023: \"$ac_cpp "conftest.$ac_ext"\"") >&5 (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:5029: \$? = $ac_status" >&5 (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 eval "$as_ac_Header=no" fi rm -f conftest.err "conftest.$ac_ext" fi echo "$as_me:5048: result: `eval echo '${'"$as_ac_Header"'}'`" >&5 echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6 if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >"conftest.$ac_ext" <<_ACEOF #line 5069 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:5073: \"$ac_cpp "conftest.$ac_ext"\"") >&5 (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:5079: \$? = $ac_status" >&5 (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 eval "$as_ac_Header=no" fi rm -f conftest.err "conftest.$ac_ext" fi echo "$as_me:5098: result: `eval echo '${'"$as_ac_Header"'}'`" >&5 echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6 if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for working mkstemp... $ECHO_C" >&6 if test "${cf_cv_func_mkstemp+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -rf ./conftest* if test "$cross_compiling" = yes; then cf_cv_func_mkstemp=maybe else cat >"conftest.$ac_ext" <<_ACEOF #line 5119 "configure" #include "confdefs.h" #include #ifdef HAVE_UNISTD_H #include #endif #include #include #include #include int main(void) { char *tmpl = "conftestXXXXXX"; char name[2][80]; int n; int result = 0; int fd; struct stat sb; umask(077); for (n = 0; n < 2; ++n) { strcpy(name[n], tmpl); if ((fd = mkstemp(name[n])) >= 0) { if (!strcmp(name[n], tmpl) || stat(name[n], &sb) != 0 || (sb.st_mode & S_IFMT) != S_IFREG || (sb.st_mode & 077) != 0) { result = 1; } close(fd); } } if (result == 0 && !strcmp(name[0], name[1])) result = 1; ${cf_cv_main_return:-return}(result); } _ACEOF rm -f "conftest$ac_exeext" if { (eval echo "$as_me:5160: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5163: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"' { (eval echo "$as_me:5165: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5168: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cf_cv_func_mkstemp=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_cv_func_mkstemp=no fi rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext" fi fi echo "$as_me:5183: result: $cf_cv_func_mkstemp" >&5 echo "${ECHO_T}$cf_cv_func_mkstemp" >&6 if test "x$cf_cv_func_mkstemp" = xmaybe ; then echo "$as_me:5186: checking for mkstemp" >&5 echo $ECHO_N "checking for mkstemp... $ECHO_C" >&6 if test "${ac_cv_func_mkstemp+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >"conftest.$ac_ext" <<_ACEOF #line 5192 "configure" #include "confdefs.h" #define mkstemp autoconf_temporary #include /* least-intrusive standard header which defines gcc2 __stub macros */ #undef mkstemp #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char mkstemp (void); int main (void) { /* The GNU C library defines stubs for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_mkstemp) || defined (__stub___mkstemp) #error found stub for mkstemp #endif return mkstemp (); ; return 0; } _ACEOF rm -f "conftest.$ac_objext" "conftest$ac_exeext" if { (eval echo "$as_me:5223: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5226: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest$ac_exeext"' { (eval echo "$as_me:5229: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5232: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then ac_cv_func_mkstemp=yes else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 ac_cv_func_mkstemp=no fi rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi echo "$as_me:5242: result: $ac_cv_func_mkstemp" >&5 echo "${ECHO_T}$ac_cv_func_mkstemp" >&6 fi if test "x$cf_cv_func_mkstemp" = xyes || test "x$ac_cv_func_mkstemp" = xyes ; then cat >>confdefs.h <<\EOF #define HAVE_MKSTEMP 1 EOF fi for ac_header in unistd.h getopt.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:5257: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >"conftest.$ac_ext" <<_ACEOF #line 5263 "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:5267: \"$ac_cpp "conftest.$ac_ext"\"") >&5 (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:5273: \$? = $ac_status" >&5 (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 eval "$as_ac_Header=no" fi rm -f conftest.err "conftest.$ac_ext" fi echo "$as_me:5292: result: `eval echo '${'"$as_ac_Header"'}'`" >&5 echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6 if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for header declaring getopt variables... $ECHO_C" >&6 if test "${cf_cv_getopt_header+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cf_cv_getopt_header=none for cf_header in stdio.h stdlib.h unistd.h getopt.h do cat >"conftest.$ac_ext" <<_ACEOF #line 5312 "configure" #include "confdefs.h" #include <$cf_header> int main (void) { int x = optind; char *y = optarg; (void)x; (void)y ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:5325: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:5328: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:5331: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5334: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cf_cv_getopt_header=$cf_header break else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" done fi echo "$as_me:5346: result: $cf_cv_getopt_header" >&5 echo "${ECHO_T}$cf_cv_getopt_header" >&6 if test "$cf_cv_getopt_header" != none ; then cat >>confdefs.h <<\EOF #define HAVE_GETOPT_HEADER 1 EOF fi if test "$cf_cv_getopt_header" = getopt.h ; then cat >>confdefs.h <<\EOF #define NEED_GETOPT_H 1 EOF fi for ac_func in getopt vsnprintf do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:5366: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >"conftest.$ac_ext" <<_ACEOF #line 5372 "configure" #include "confdefs.h" #define $ac_func autoconf_temporary #include /* least-intrusive standard header which defines gcc2 __stub macros */ #undef $ac_func #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (void); int main (void) { /* The GNU C library defines stubs for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) #error found stub for $ac_func #endif return $ac_func (); ; return 0; } _ACEOF rm -f "conftest.$ac_objext" "conftest$ac_exeext" if { (eval echo "$as_me:5403: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:5406: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest$ac_exeext"' { (eval echo "$as_me:5409: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5412: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 eval "$as_ac_var=no" fi rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" fi echo "$as_me:5422: result: `eval echo '${'"$as_ac_var"'}'`" >&5 echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6 if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for maximum table size... $ECHO_C" >&6 # Check whether --with-max-table-size or --without-max-table-size was given. if test "${with_max_table_size+set}" = set; then withval="$with_max_table_size" fi; if test -n "$with_max_table_size" then echo "$as_me:5442: result: $with_max_table_size" >&5 echo "${ECHO_T}$with_max_table_size" >&6 check=`expr "$with_max_table_size" + 0` if test "x$check" != "x$with_max_table_size" then { { echo "$as_me:5447: error: invalid value for --with-max-table-size: $with_max_table_size" >&5 echo "$as_me: error: invalid value for --with-max-table-size: $with_max_table_size" >&2;} { (exit 1); exit 1; }; } fi cat >>confdefs.h <&5 echo "${ECHO_T}default" >&6 fi echo "$as_me:5461: checking if backtracking extension is wanted" >&5 echo $ECHO_N "checking if backtracking extension is wanted... $ECHO_C" >&6 # Check whether --enable-btyacc or --disable-btyacc was given. if test "${enable_btyacc+set}" = set; then enableval="$enable_btyacc" fi; echo "$as_me:5469: result: $enable_btyacc" >&5 echo "${ECHO_T}$enable_btyacc" >&6 if test "$enable_btyacc" = "no"; then SKELETON=yaccpar else cat >>confdefs.h <<\EOF #define YYBTYACC 1 EOF SKELETON=btyaccpar fi echo "$as_me:5482: checking for fgrep" >&5 echo $ECHO_N "checking for fgrep... $ECHO_C" >&6 if test "${ac_cv_path_FGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else for ac_prog in gfgrep fgrep do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:5494: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_FGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $FGREP in [\\/]* | ?:[\\/]*) ac_cv_path_FGREP="$FGREP" # Let the user override the test with a path. ;; *) ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. if $as_executable_p "$ac_dir/$ac_word"; then ac_cv_path_FGREP="$ac_dir/$ac_word" echo "$as_me:5511: found $ac_dir/$ac_word" >&5 break fi done ;; esac fi FGREP=$ac_cv_path_FGREP if test -n "$FGREP"; then echo "$as_me:5522: result: $FGREP" >&5 echo "${ECHO_T}$FGREP" >&6 else echo "$as_me:5525: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$FGREP" && break done test -n "$FGREP" || FGREP=": " test "x$ac_cv_path_FGREP" = "x:" && { { echo "$as_me:5533: error: cannot find workable fgrep" >&5 echo "$as_me: error: cannot find workable fgrep" >&2;} { (exit 1); exit 1; }; } fi fi echo "$as_me:5538: result: $ac_cv_path_FGREP" >&5 echo "${ECHO_T}$ac_cv_path_FGREP" >&6 FGREP="$ac_cv_path_FGREP" echo "$as_me:5542: checking if you want to use C11 _Noreturn feature" >&5 echo $ECHO_N "checking if you want to use C11 _Noreturn feature... $ECHO_C" >&6 # Check whether --enable-stdnoreturn or --disable-stdnoreturn was given. if test "${enable_stdnoreturn+set}" = set; then enableval="$enable_stdnoreturn" test "$enableval" != yes && enableval=no if test "$enableval" != "no" ; then enable_stdnoreturn=yes else enable_stdnoreturn=no fi else enableval=no enable_stdnoreturn=no fi; echo "$as_me:5559: result: $enable_stdnoreturn" >&5 echo "${ECHO_T}$enable_stdnoreturn" >&6 if test $enable_stdnoreturn = yes; then echo "$as_me:5563: checking for C11 _Noreturn feature" >&5 echo $ECHO_N "checking for C11 _Noreturn feature... $ECHO_C" >&6 if test "${cf_cv_c11_noreturn+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >"conftest.$ac_ext" <<_ACEOF #line 5569 "configure" #include "confdefs.h" #include #include #include static _Noreturn void giveup(void) { exit(0); } int main (void) { if (feof(stdin)) giveup() ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:5586: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:5589: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:5592: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:5595: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then cf_cv_c11_noreturn=yes else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 cf_cv_c11_noreturn=no fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi echo "$as_me:5606: result: $cf_cv_c11_noreturn" >&5 echo "${ECHO_T}$cf_cv_c11_noreturn" >&6 else cf_cv_c11_noreturn=no, fi if test "$cf_cv_c11_noreturn" = yes; then cat >>confdefs.h <<\EOF #define HAVE_STDNORETURN_H 1 EOF cat >>confdefs.h <&6 echo "${as_me:-configure}:5662: testing repairing CFLAGS: $CFLAGS ..." 1>&5 CFLAGS="$cf_temp_flags" test -n "$verbose" && echo " ... fixed $CFLAGS" 1>&6 echo "${as_me:-configure}:5667: testing ... fixed $CFLAGS ..." 1>&5 test -n "$verbose" && echo " ... extra $EXTRA_CFLAGS" 1>&6 echo "${as_me:-configure}:5671: testing ... extra $EXTRA_CFLAGS ..." 1>&5 fi ;; esac fi if test "$GCC" = yes || test "$GXX" = yes then case $CPPFLAGS in (*-Werror=*) cf_temp_flags= for cf_temp_scan in $CPPFLAGS do case "x$cf_temp_scan" in (x-Werror=format*) test -n "$cf_temp_flags" && cf_temp_flags="$cf_temp_flags " cf_temp_flags="${cf_temp_flags}$cf_temp_scan" ;; (x-Werror=*) test -n "$EXTRA_CFLAGS" && EXTRA_CFLAGS="$EXTRA_CFLAGS " EXTRA_CFLAGS="${EXTRA_CFLAGS}$cf_temp_scan" ;; (*) test -n "$cf_temp_flags" && cf_temp_flags="$cf_temp_flags " cf_temp_flags="${cf_temp_flags}$cf_temp_scan" ;; esac done if test "x$CPPFLAGS" != "x$cf_temp_flags" then test -n "$verbose" && echo " repairing CPPFLAGS: $CPPFLAGS" 1>&6 echo "${as_me:-configure}:5710: testing repairing CPPFLAGS: $CPPFLAGS ..." 1>&5 CPPFLAGS="$cf_temp_flags" test -n "$verbose" && echo " ... fixed $CPPFLAGS" 1>&6 echo "${as_me:-configure}:5715: testing ... fixed $CPPFLAGS ..." 1>&5 test -n "$verbose" && echo " ... extra $EXTRA_CFLAGS" 1>&6 echo "${as_me:-configure}:5719: testing ... extra $EXTRA_CFLAGS ..." 1>&5 fi ;; esac fi if test "$GCC" = yes || test "$GXX" = yes then case $LDFLAGS in (*-Werror=*) cf_temp_flags= for cf_temp_scan in $LDFLAGS do case "x$cf_temp_scan" in (x-Werror=format*) test -n "$cf_temp_flags" && cf_temp_flags="$cf_temp_flags " cf_temp_flags="${cf_temp_flags}$cf_temp_scan" ;; (x-Werror=*) test -n "$EXTRA_CFLAGS" && EXTRA_CFLAGS="$EXTRA_CFLAGS " EXTRA_CFLAGS="${EXTRA_CFLAGS}$cf_temp_scan" ;; (*) test -n "$cf_temp_flags" && cf_temp_flags="$cf_temp_flags " cf_temp_flags="${cf_temp_flags}$cf_temp_scan" ;; esac done if test "x$LDFLAGS" != "x$cf_temp_flags" then test -n "$verbose" && echo " repairing LDFLAGS: $LDFLAGS" 1>&6 echo "${as_me:-configure}:5758: testing repairing LDFLAGS: $LDFLAGS ..." 1>&5 LDFLAGS="$cf_temp_flags" test -n "$verbose" && echo " ... fixed $LDFLAGS" 1>&6 echo "${as_me:-configure}:5763: testing ... fixed $LDFLAGS ..." 1>&5 test -n "$verbose" && echo " ... extra $EXTRA_CFLAGS" 1>&6 echo "${as_me:-configure}:5767: testing ... extra $EXTRA_CFLAGS ..." 1>&5 fi ;; esac fi echo "$as_me:5774: checking if you want to turn on gcc warnings" >&5 echo $ECHO_N "checking if you want to turn on gcc warnings... $ECHO_C" >&6 # Check whether --enable-warnings or --disable-warnings was given. if test "${enable_warnings+set}" = set; then enableval="$enable_warnings" test "$enableval" != yes && enableval=no if test "$enableval" != "no" ; then enable_warnings=yes else enable_warnings=no fi else enableval=no enable_warnings=no fi; echo "$as_me:5791: result: $enable_warnings" >&5 echo "${ECHO_T}$enable_warnings" >&6 if test "$enable_warnings" = "yes" then if test "x$have_x" = xyes; then echo "skipping X-const check"; fi cat > "conftest.$ac_ext" <&5 echo "$as_me: checking for $CC warning options..." >&6;} cf_save_CFLAGS="$CFLAGS" EXTRA_CFLAGS="$EXTRA_CFLAGS -Wall" for cf_opt in \ wd1419 \ wd1683 \ wd1684 \ wd193 \ wd593 \ wd279 \ wd810 \ wd869 \ wd981 do CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt" if { (eval echo "$as_me:5830: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:5833: \$? = $ac_status" >&5 (exit "$ac_status"); }; then test -n "$verbose" && echo "$as_me:5835: result: ... -$cf_opt" >&5 echo "${ECHO_T}... -$cf_opt" >&6 EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt" fi done CFLAGS="$cf_save_CFLAGS" elif test "$GCC" = yes && test "$GCC_VERSION" != "unknown" then { echo "$as_me:5843: checking for $CC warning options..." >&5 echo "$as_me: checking for $CC warning options..." >&6;} cf_save_CFLAGS="$CFLAGS" cf_warn_CONST="" test "$with_ext_const" = yes && cf_warn_CONST="Wwrite-strings" cf_gcc_warnings="Wignored-qualifiers Wlogical-op Wvarargs" test "x$CLANG_COMPILER" = xyes && cf_gcc_warnings= for cf_opt in W Wall \ Wbad-function-cast \ Wcast-align \ Wcast-qual \ Wdeclaration-after-statement \ Wextra \ Winline \ Wmissing-declarations \ Wmissing-prototypes \ Wnested-externs \ Wpointer-arith \ Wshadow \ Wstrict-prototypes \ Wundef Wno-inline $cf_gcc_warnings $cf_warn_CONST Wwrite-strings do CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt" if { (eval echo "$as_me:5866: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:5869: \$? = $ac_status" >&5 (exit "$ac_status"); }; then test -n "$verbose" && echo "$as_me:5871: result: ... -$cf_opt" >&5 echo "${ECHO_T}... -$cf_opt" >&6 case "$cf_opt" in (Winline) case "$GCC_VERSION" in ([34].*) test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6 echo "${as_me:-configure}:5879: testing feature is broken in gcc $GCC_VERSION ..." 1>&5 continue;; esac ;; (Wpointer-arith) case "$GCC_VERSION" in ([12].*) test -n "$verbose" && echo " feature is broken in gcc $GCC_VERSION" 1>&6 echo "${as_me:-configure}:5889: testing feature is broken in gcc $GCC_VERSION ..." 1>&5 continue;; esac ;; esac EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt" fi done CFLAGS="$cf_save_CFLAGS" fi rm -rf ./conftest* fi if test "$GCC" = yes || test "$GXX" = yes then cat > conftest.i <&5 echo "$as_me: checking for $CC __attribute__ directives..." >&6;} cat > "conftest.$ac_ext" <&5 case "$cf_attribute" in (printf) cf_printf_attribute=yes cat >conftest.h <conftest.h <conftest.h <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:5977: \$? = $ac_status" >&5 (exit "$ac_status"); }; then test -n "$verbose" && echo "$as_me:5979: result: ... $cf_attribute" >&5 echo "${ECHO_T}... $cf_attribute" >&6 cat conftest.h >>confdefs.h case "$cf_attribute" in (noreturn) cat >>confdefs.h <>confdefs.h <<\EOF #define GCC_PRINTF 1 EOF fi cat >>confdefs.h <>confdefs.h <<\EOF #define GCC_SCANF 1 EOF fi cat >>confdefs.h <>confdefs.h <>confdefs.h fi rm -rf ./conftest* fi fi echo "$as_me:6040: checking if you want to see long compiling messages" >&5 echo $ECHO_N "checking if you want to see long compiling messages... $ECHO_C" >&6 # Check whether --enable-echo or --disable-echo was given. if test "${enable_echo+set}" = set; then enableval="$enable_echo" test "$enableval" != no && enableval=yes if test "$enableval" != "yes" ; then ECHO_LT='--silent' ECHO_LD='@echo linking $@;' RULE_CC='@echo compiling $<' SHOW_CC='@echo compiling $@' ECHO_CC='@' else ECHO_LT='' ECHO_LD='' RULE_CC='' SHOW_CC='' ECHO_CC='' fi else enableval=yes ECHO_LT='' ECHO_LD='' RULE_CC='' SHOW_CC='' ECHO_CC='' fi; echo "$as_me:6074: result: $enableval" >&5 echo "${ECHO_T}$enableval" >&6 echo "$as_me:6077: checking if you want to use dmalloc for testing" >&5 echo $ECHO_N "checking if you want to use dmalloc for testing... $ECHO_C" >&6 # Check whether --with-dmalloc or --without-dmalloc was given. if test "${with_dmalloc+set}" = set; then withval="$with_dmalloc" case "x$withval" in (x|xno) ;; (*) : "${with_cflags:=-g}" : "${enable_leaks:=no}" with_dmalloc=yes cat >>confdefs.h <&5 echo "${ECHO_T}${with_dmalloc:-no}" >&6 case ".$with_cflags" in (.*-g*) case .$CFLAGS in (.*-g*) ;; (*) cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in -g do case "$cf_fix_cppflags" in (no) case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case "$cf_add_cflags" in (-D*) cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi ;; esac ;; esac if test "$with_dmalloc" = yes ; then echo "$as_me:6213: checking for dmalloc.h" >&5 echo $ECHO_N "checking for dmalloc.h... $ECHO_C" >&6 if test "${ac_cv_header_dmalloc_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >"conftest.$ac_ext" <<_ACEOF #line 6219 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:6223: \"$ac_cpp "conftest.$ac_ext"\"") >&5 (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:6229: \$? = $ac_status" >&5 (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_dmalloc_h=yes else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 ac_cv_header_dmalloc_h=no fi rm -f conftest.err "conftest.$ac_ext" fi echo "$as_me:6248: result: $ac_cv_header_dmalloc_h" >&5 echo "${ECHO_T}$ac_cv_header_dmalloc_h" >&6 if test "$ac_cv_header_dmalloc_h" = yes; then echo "$as_me:6252: checking for dmalloc_debug in -ldmalloc" >&5 echo $ECHO_N "checking for dmalloc_debug in -ldmalloc... $ECHO_C" >&6 if test "${ac_cv_lib_dmalloc_dmalloc_debug+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldmalloc $LIBS" cat >"conftest.$ac_ext" <<_ACEOF #line 6260 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dmalloc_debug (); int main (void) { dmalloc_debug (); ; return 0; } _ACEOF rm -f "conftest.$ac_objext" "conftest$ac_exeext" if { (eval echo "$as_me:6279: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:6282: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest$ac_exeext"' { (eval echo "$as_me:6285: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6288: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then ac_cv_lib_dmalloc_dmalloc_debug=yes else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 ac_cv_lib_dmalloc_dmalloc_debug=no fi rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:6299: result: $ac_cv_lib_dmalloc_dmalloc_debug" >&5 echo "${ECHO_T}$ac_cv_lib_dmalloc_dmalloc_debug" >&6 if test "$ac_cv_lib_dmalloc_dmalloc_debug" = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking if you want to use dbmalloc for testing... $ECHO_C" >&6 # Check whether --with-dbmalloc or --without-dbmalloc was given. if test "${with_dbmalloc+set}" = set; then withval="$with_dbmalloc" case "x$withval" in (x|xno) ;; (*) : "${with_cflags:=-g}" : "${enable_leaks:=no}" with_dbmalloc=yes cat >>confdefs.h <&5 echo "${ECHO_T}${with_dbmalloc:-no}" >&6 case ".$with_cflags" in (.*-g*) case .$CFLAGS in (.*-g*) ;; (*) cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in -g do case "$cf_fix_cppflags" in (no) case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case "$cf_add_cflags" in (-D*) cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi ;; esac ;; esac if test "$with_dbmalloc" = yes ; then echo "$as_me:6450: checking for dbmalloc.h" >&5 echo $ECHO_N "checking for dbmalloc.h... $ECHO_C" >&6 if test "${ac_cv_header_dbmalloc_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >"conftest.$ac_ext" <<_ACEOF #line 6456 "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:6460: \"$ac_cpp "conftest.$ac_ext"\"") >&5 (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:6466: \$? = $ac_status" >&5 (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_dbmalloc_h=yes else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 ac_cv_header_dbmalloc_h=no fi rm -f conftest.err "conftest.$ac_ext" fi echo "$as_me:6485: result: $ac_cv_header_dbmalloc_h" >&5 echo "${ECHO_T}$ac_cv_header_dbmalloc_h" >&6 if test "$ac_cv_header_dbmalloc_h" = yes; then echo "$as_me:6489: checking for debug_malloc in -ldbmalloc" >&5 echo $ECHO_N "checking for debug_malloc in -ldbmalloc... $ECHO_C" >&6 if test "${ac_cv_lib_dbmalloc_debug_malloc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldbmalloc $LIBS" cat >"conftest.$ac_ext" <<_ACEOF #line 6497 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char debug_malloc (); int main (void) { debug_malloc (); ; return 0; } _ACEOF rm -f "conftest.$ac_objext" "conftest$ac_exeext" if { (eval echo "$as_me:6516: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:6519: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest$ac_exeext"' { (eval echo "$as_me:6522: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:6525: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then ac_cv_lib_dbmalloc_debug_malloc=yes else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 ac_cv_lib_dbmalloc_debug_malloc=no fi rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext" LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:6536: result: $ac_cv_lib_dbmalloc_debug_malloc" >&5 echo "${ECHO_T}$ac_cv_lib_dbmalloc_debug_malloc" >&6 if test "$ac_cv_lib_dbmalloc_debug_malloc" = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking if you want to use valgrind for testing... $ECHO_C" >&6 # Check whether --with-valgrind or --without-valgrind was given. if test "${with_valgrind+set}" = set; then withval="$with_valgrind" case "x$withval" in (x|xno) ;; (*) : "${with_cflags:=-g}" : "${enable_leaks:=no}" with_valgrind=yes cat >>confdefs.h <&5 echo "${ECHO_T}${with_valgrind:-no}" >&6 case ".$with_cflags" in (.*-g*) case .$CFLAGS in (.*-g*) ;; (*) cf_fix_cppflags=no cf_new_cflags= cf_new_cppflags= cf_new_extra_cppflags= for cf_add_cflags in -g do case "$cf_fix_cppflags" in (no) case "$cf_add_cflags" in (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) case "$cf_add_cflags" in (-D*) cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=yes if test "$cf_fix_cppflags" = yes ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue elif test "${cf_tst_cflags}" = "\"'" ; then test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" continue fi ;; esac case "$CPPFLAGS" in (*$cf_add_cflags) ;; (*) case "$cf_add_cflags" in (-D*) cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'` CPPFLAGS=`echo "$CPPFLAGS" | \ sed -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?[ ]/ /g' \ -e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ ]*\)\?$//g'` ;; esac test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags " cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags" ;; esac ;; (*) test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags " cf_new_cflags="${cf_new_cflags}$cf_add_cflags" ;; esac ;; (yes) test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags " cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags" cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'` test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \ && test -z "${cf_tst_cflags}" \ && cf_fix_cppflags=no ;; esac done if test -n "$cf_new_cflags" ; then test -n "$CFLAGS" && CFLAGS="$CFLAGS " CFLAGS="${CFLAGS}$cf_new_cflags" fi if test -n "$cf_new_cppflags" ; then test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS " CPPFLAGS="${CPPFLAGS}$cf_new_cppflags" fi if test -n "$cf_new_extra_cppflags" ; then test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS " EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags" fi ;; esac ;; esac echo "$as_me:6686: checking if you want to perform memory-leak testing" >&5 echo $ECHO_N "checking if you want to perform memory-leak testing... $ECHO_C" >&6 # Check whether --enable-leaks or --disable-leaks was given. if test "${enable_leaks+set}" = set; then enableval="$enable_leaks" enable_leaks=$enableval else enable_leaks=yes fi; if test "x$enable_leaks" = xno; then with_no_leaks=yes; else with_no_leaks=no; fi echo "$as_me:6697: result: $with_no_leaks" >&5 echo "${ECHO_T}$with_no_leaks" >&6 if test "$enable_leaks" = no ; then cat >>confdefs.h <<\EOF #define NO_LEAKS 1 EOF cat >>confdefs.h <<\EOF #define YY_NO_LEAKS 1 EOF fi # Extract the first word of "groff", so it can be a program name with args. set dummy groff; ac_word=$2 echo "$as_me:6714: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_GROFF_PATH+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $GROFF_PATH in [\\/]* | ?:[\\/]*) ac_cv_path_GROFF_PATH="$GROFF_PATH" # Let the user override the test with a path. ;; *) ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. if $as_executable_p "$ac_dir/$ac_word"; then ac_cv_path_GROFF_PATH="$ac_dir/$ac_word" echo "$as_me:6731: found $ac_dir/$ac_word" >&5 break fi done test -z "$ac_cv_path_GROFF_PATH" && ac_cv_path_GROFF_PATH="no" ;; esac fi GROFF_PATH=$ac_cv_path_GROFF_PATH if test -n "$GROFF_PATH"; then echo "$as_me:6743: result: $GROFF_PATH" >&5 echo "${ECHO_T}$GROFF_PATH" >&6 else echo "$as_me:6746: result: no" >&5 echo "${ECHO_T}no" >&6 fi for ac_prog in nroff mandoc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:6754: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_NROFF_PATH+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $NROFF_PATH in [\\/]* | ?:[\\/]*) ac_cv_path_NROFF_PATH="$NROFF_PATH" # Let the user override the test with a path. ;; *) ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. if $as_executable_p "$ac_dir/$ac_word"; then ac_cv_path_NROFF_PATH="$ac_dir/$ac_word" echo "$as_me:6771: found $ac_dir/$ac_word" >&5 break fi done ;; esac fi NROFF_PATH=$ac_cv_path_NROFF_PATH if test -n "$NROFF_PATH"; then echo "$as_me:6782: result: $NROFF_PATH" >&5 echo "${ECHO_T}$NROFF_PATH" >&6 else echo "$as_me:6785: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$NROFF_PATH" && break done test -n "$NROFF_PATH" || NROFF_PATH="no" # Extract the first word of "tbl", so it can be a program name with args. set dummy tbl; ac_word=$2 echo "$as_me:6795: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_TBL_PATH+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $TBL_PATH in [\\/]* | ?:[\\/]*) ac_cv_path_TBL_PATH="$TBL_PATH" # Let the user override the test with a path. ;; *) ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. if $as_executable_p "$ac_dir/$ac_word"; then ac_cv_path_TBL_PATH="$ac_dir/$ac_word" echo "$as_me:6812: found $ac_dir/$ac_word" >&5 break fi done test -z "$ac_cv_path_TBL_PATH" && ac_cv_path_TBL_PATH="cat" ;; esac fi TBL_PATH=$ac_cv_path_TBL_PATH if test -n "$TBL_PATH"; then echo "$as_me:6824: result: $TBL_PATH" >&5 echo "${ECHO_T}$TBL_PATH" >&6 else echo "$as_me:6827: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "x$GROFF_PATH" = xno then NROFF_NOTE= GROFF_NOTE="#" else NROFF_NOTE="#" GROFF_NOTE= fi case "x${with_man2html}" in (xno) cf_man2html=no ;; (x|xyes) # Extract the first word of "man2html", so it can be a program name with args. set dummy man2html; ac_word=$2 echo "$as_me:6847: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_cf_man2html+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $cf_man2html in [\\/]* | ?:[\\/]*) ac_cv_path_cf_man2html="$cf_man2html" # Let the user override the test with a path. ;; *) ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. if $as_executable_p "$ac_dir/$ac_word"; then ac_cv_path_cf_man2html="$ac_dir/$ac_word" echo "$as_me:6864: found $ac_dir/$ac_word" >&5 break fi done test -z "$ac_cv_path_cf_man2html" && ac_cv_path_cf_man2html="no" ;; esac fi cf_man2html=$ac_cv_path_cf_man2html if test -n "$cf_man2html"; then echo "$as_me:6876: result: $cf_man2html" >&5 echo "${ECHO_T}$cf_man2html" >&6 else echo "$as_me:6879: result: no" >&5 echo "${ECHO_T}no" >&6 fi case "x$cf_man2html" in (x/*) echo "$as_me:6885: checking for the modified Earl Hood script" >&5 echo $ECHO_N "checking for the modified Earl Hood script... $ECHO_C" >&6 if ( $cf_man2html -help 2>&1 | grep 'Make an index of headers at the end' >/dev/null ) then cf_man2html_ok=yes else cf_man2html=no cf_man2html_ok=no fi echo "$as_me:6894: result: $cf_man2html_ok" >&5 echo "${ECHO_T}$cf_man2html_ok" >&6 ;; (*) cf_man2html=no ;; esac esac echo "$as_me:6903: checking for program to convert manpage to html" >&5 echo $ECHO_N "checking for program to convert manpage to html... $ECHO_C" >&6 # Check whether --with-man2html or --without-man2html was given. if test "${with_man2html+set}" = set; then withval="$with_man2html" cf_man2html=$withval else cf_man2html=$cf_man2html fi; cf_with_groff=no case $cf_man2html in (yes) echo "$as_me:6918: result: man2html" >&5 echo "${ECHO_T}man2html" >&6 # Extract the first word of "man2html", so it can be a program name with args. set dummy man2html; ac_word=$2 echo "$as_me:6922: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_cf_man2html+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $cf_man2html in [\\/]* | ?:[\\/]*) ac_cv_path_cf_man2html="$cf_man2html" # Let the user override the test with a path. ;; *) ac_save_IFS=$IFS; IFS=$ac_path_separator ac_dummy="$PATH" for ac_dir in $ac_dummy; do IFS=$ac_save_IFS test -z "$ac_dir" && ac_dir=. if $as_executable_p "$ac_dir/$ac_word"; then ac_cv_path_cf_man2html="$ac_dir/$ac_word" echo "$as_me:6939: found $ac_dir/$ac_word" >&5 break fi done test -z "$ac_cv_path_cf_man2html" && ac_cv_path_cf_man2html="no" ;; esac fi cf_man2html=$ac_cv_path_cf_man2html if test -n "$cf_man2html"; then echo "$as_me:6951: result: $cf_man2html" >&5 echo "${ECHO_T}$cf_man2html" >&6 else echo "$as_me:6954: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; (no|groff|*/groff*) cf_with_groff=yes cf_man2html=$GROFF_PATH echo "$as_me:6962: result: $cf_man2html" >&5 echo "${ECHO_T}$cf_man2html" >&6 ;; (*) echo "$as_me:6966: result: $cf_man2html" >&5 echo "${ECHO_T}$cf_man2html" >&6 ;; esac MAN2HTML_TEMP="man2html.tmp" cat >$MAN2HTML_TEMP <>$MAN2HTML_TEMP <&5 echo $ECHO_N "checking if nroff is really groff... $ECHO_C" >&6 cf_check_groff="`$NROFF_PATH --version 2>/dev/null | grep groff`" test -n "$cf_check_groff" && cf_check_groff=yes test -n "$cf_check_groff" || cf_check_groff=no echo "$as_me:7012: result: $cf_check_groff" >&5 echo "${ECHO_T}$cf_check_groff" >&6 test "x$cf_check_groff" = xyes && NROFF_OPTS="-rHY=0" fi MAN2HTML_NOTE="" if test "x$prefix" != xNONE; then cf_path_syntax="$prefix" else cf_path_syntax="$ac_default_prefix" fi case ".$cf_man2html" in (.\$\(*\)*|.\'*\'*) ;; (..|./*|.\\*) ;; (.[a-zA-Z]:[\\/]*) # OS/2 EMX ;; (.\$\{*prefix\}*|.\$\{*dir\}*) eval cf_man2html="$cf_man2html" case ".$cf_man2html" in (.NONE/*) cf_man2html=`echo "$cf_man2html" | sed -e s%NONE%$cf_path_syntax%` ;; esac ;; (.no|.NONE/*) cf_man2html=`echo "$cf_man2html" | sed -e s%NONE%$cf_path_syntax%` ;; (*) { { echo "$as_me:7043: error: expected a pathname, not \"$cf_man2html\"" >&5 echo "$as_me: error: expected a pathname, not \"$cf_man2html\"" >&2;} { (exit 1); exit 1; }; } ;; esac MAN2HTML_PATH="$cf_man2html" echo "$as_me:7050: checking for $cf_man2html top/bottom margins" >&5 echo $ECHO_N "checking for $cf_man2html top/bottom margins... $ECHO_C" >&6 # for this example, expect 3 lines of content, the remainder is head/foot cat >conftest.in <conftest.out cf_man2html_1st="`${FGREP-fgrep} -n MARKER conftest.out |sed -e 's/^[^0-9]*://' -e 's/:.*//'`" cf_man2html_top=`expr "$cf_man2html_1st" - 2` cf_man2html_bot="`wc -l conftest.out |sed -e 's/[^0-9]//g'`" cf_man2html_bot=`expr "$cf_man2html_bot" - 2 - "$cf_man2html_top"` cf_man2html_top_bot="-topm=$cf_man2html_top -botm=$cf_man2html_bot" echo "$as_me:7068: result: $cf_man2html_top_bot" >&5 echo "${ECHO_T}$cf_man2html_top_bot" >&6 echo "$as_me:7071: checking for pagesize to use" >&5 echo $ECHO_N "checking for pagesize to use... $ECHO_C" >&6 for cf_block in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 do cat >>conftest.in <conftest.out cf_man2html_page="`${FGREP-fgrep} -n HEAD1 conftest.out |sed -n '$p' |sed -e 's/^[^0-9]*://' -e 's/:.*//'`" test -z "$cf_man2html_page" && cf_man2html_page=99999 test "$cf_man2html_page" -gt 100 && cf_man2html_page=99999 rm -rf conftest* echo "$as_me:7096: result: $cf_man2html_page" >&5 echo "${ECHO_T}$cf_man2html_page" >&6 cat >>$MAN2HTML_TEMP <&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >"conftest.$ac_ext" <<_ACEOF #line 7121 "configure" #include "confdefs.h" #include #include #include #include _ACEOF if { (eval echo "$as_me:7129: \"$ac_cpp "conftest.$ac_ext"\"") >&5 (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1 ac_status=$? $EGREP -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:7135: \$? = $ac_status" >&5 (exit "$ac_status"); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 ac_cv_header_stdc=no fi rm -f conftest.err "conftest.$ac_ext" if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >"conftest.$ac_ext" <<_ACEOF #line 7157 "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -rf conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >"conftest.$ac_ext" <<_ACEOF #line 7175 "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -rf conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >"conftest.$ac_ext" <<_ACEOF #line 7196 "configure" #include "confdefs.h" #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main (void) { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) $ac_main_return(2); $ac_main_return (0); } _ACEOF rm -f "conftest$ac_exeext" if { (eval echo "$as_me:7222: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:7225: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"' { (eval echo "$as_me:7227: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7230: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 ac_cv_header_stdc=no fi rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext" fi fi fi echo "$as_me:7243: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:7259: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >"conftest.$ac_ext" <<_ACEOF #line 7265 "configure" #include "confdefs.h" $ac_includes_default #include <$ac_header> _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:7271: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:7274: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:7277: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7280: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 eval "$as_ac_Header=no" fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi echo "$as_me:7290: result: `eval echo '${'"$as_ac_Header"'}'`" >&5 echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6 if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then cat >>confdefs.h <&5 echo $ECHO_N "checking for mode_t... $ECHO_C" >&6 if test "${ac_cv_type_mode_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >"conftest.$ac_ext" <<_ACEOF #line 7306 "configure" #include "confdefs.h" $ac_includes_default int main (void) { if ((mode_t *) 0) return 0; if (sizeof (mode_t)) return 0; ; return 0; } _ACEOF rm -f "conftest.$ac_objext" if { (eval echo "$as_me:7321: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:7324: \$? = $ac_status" >&5 (exit "$ac_status"); } && { ac_try='test -s "conftest.$ac_objext"' { (eval echo "$as_me:7327: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:7330: \$? = $ac_status" >&5 (exit "$ac_status"); }; }; then ac_cv_type_mode_t=yes else echo "$as_me: failed program was:" >&5 cat "conftest.$ac_ext" >&5 ac_cv_type_mode_t=no fi rm -f "conftest.$ac_objext" "conftest.$ac_ext" fi echo "$as_me:7340: result: $ac_cv_type_mode_t" >&5 echo "${ECHO_T}$ac_cv_type_mode_t" >&6 if test "$ac_cv_type_mode_t" = yes; then : else cat >>confdefs.h <confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overriden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if cmp -s $cache_file confcache; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H : "${CONFIG_STATUS=./config.status}" ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:7433: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >"$CONFIG_STATUS" <<_ACEOF #! $SHELL # Generated automatically by configure. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. me=\`echo "\$0" | sed -e 's,.*\\/,,'\` debug=false SHELL=\${CONFIG_SHELL-$SHELL} ac_cs_invocation="\$0 \$@" CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS _ACEOF cat >>"$CONFIG_STATUS" <<\_ACEOF # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Name of the executable. as_me=`echo "$0" |sed 's,.*[\\/],,'` if expr a : '\(a\)' >/dev/null 2>&1; then as_expr="expr" else as_expr="false" fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln' else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file as_executable_p="test -f" # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset="unset" else as_unset="false" fi # NLS nuisances. $as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; } $as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; } $as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; } $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; } $as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; } $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; } $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; } $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; } # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; } exec 6>&1 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>"$CONFIG_STATUS" fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>"$CONFIG_STATUS" fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>"$CONFIG_STATUS" fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>"$CONFIG_STATUS" fi cat >>"$CONFIG_STATUS" <<\EOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to ." EOF cat >>"$CONFIG_STATUS" <>"$CONFIG_STATUS" <<\EOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` shift set dummy "$ac_option" "$ac_optarg" ${1+"$@"} shift ;; -*);; *) # This is not an option, so the user has probably given explicit # arguments. ac_need_defaults=false;; esac case $1 in # Handling of the options. EOF cat >>"$CONFIG_STATUS" <>"$CONFIG_STATUS" <<\EOF --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:7611: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) shift CONFIG_FILES="$CONFIG_FILES $1" ac_need_defaults=false;; --header | --heade | --head | --hea ) shift CONFIG_HEADERS="$CONFIG_HEADERS $1" ac_need_defaults=false;; # This is an error. -*) { { echo "$as_me:7630: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done exec 5>>config.log cat >&5 << _ACEOF ## ----------------------- ## ## Running config.status. ## ## ----------------------- ## This file was extended by $as_me 2.52.20221009, executed with CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS > "$ac_cs_invocation" on `(hostname || uname -n) 2>/dev/null | sed 1q` _ACEOF EOF cat >>"$CONFIG_STATUS" <<\EOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "makefile" ) CONFIG_FILES="$CONFIG_FILES makefile" ;; "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h:config_h.in" ;; *) { { echo "$as_me:7667: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if "$ac_need_defaults"; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. : "${TMPDIR=/tmp}" { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=$TMPDIR/cs$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 { (exit 1); exit 1; } } EOF cat >>"$CONFIG_STATUS" <"\$tmp"/subs.sed <<\\CEOF s,@X_CFLAGS@,$X_CFLAGS,;t t s,@X_LIBS@,$X_LIBS,;t t s,@SHELL@,$SHELL,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datarootdir@,$datarootdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@runstatedir@,$runstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@DEFS@,$DEFS,;t t s,@LIBS@,$LIBS,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@target@,$target,;t t s,@target_cpu@,$target_cpu,;t t s,@target_vendor@,$target_vendor,;t t s,@target_os@,$target_os,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@EXTRA_CPPFLAGS@,$EXTRA_CPPFLAGS,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CTAGS@,$CTAGS,;t t s,@ETAGS@,$ETAGS,;t t s,@MAKE_LOWER_TAGS@,$MAKE_LOWER_TAGS,;t t s,@MAKE_UPPER_TAGS@,$MAKE_UPPER_TAGS,;t t s,@AWK@,$AWK,;t t s,@LINT@,$LINT,;t t s,@LINT_OPTS@,$LINT_OPTS,;t t s,@LINT_LIBS@,$LINT_LIBS,;t t s,@CPP@,$CPP,;t t s,@GREP@,$GREP,;t t s,@EGREP@,$EGREP,;t t s,@SKELETON@,$SKELETON,;t t s,@EXTRA_CFLAGS@,$EXTRA_CFLAGS,;t t s,@FGREP@,$FGREP,;t t s,@HAVE_STDNORETURN_H@,$HAVE_STDNORETURN_H,;t t s,@STDC_NORETURN@,$STDC_NORETURN,;t t s,@ECHO_LT@,$ECHO_LT,;t t s,@ECHO_LD@,$ECHO_LD,;t t s,@RULE_CC@,$RULE_CC,;t t s,@SHOW_CC@,$SHOW_CC,;t t s,@ECHO_CC@,$ECHO_CC,;t t s,@GROFF_PATH@,$GROFF_PATH,;t t s,@NROFF_PATH@,$NROFF_PATH,;t t s,@TBL_PATH@,$TBL_PATH,;t t s,@GROFF_NOTE@,$GROFF_NOTE,;t t s,@NROFF_NOTE@,$NROFF_NOTE,;t t s,@cf_man2html@,$cf_man2html,;t t s,@MAN2HTML_NOTE@,$MAN2HTML_NOTE,;t t s,@MAN2HTML_PATH@,$MAN2HTML_PATH,;t t s,@MAN2HTML_TEMP@,$MAN2HTML_TEMP,;t t CEOF EOF cat >>"$CONFIG_STATUS" <<\EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while "$ac_more_lines"; do if test "$ac_beg" -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" "$tmp"/subs.sed >"$tmp"/subs.frag else sed "${ac_end}q" "$tmp"/subs.sed >"$tmp"/subs.frag fi if test ! -s "$tmp"/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat "$tmp"/subs.frag) >"$tmp"/subs-$ac_sed_frag.sed # It is possible to make a multiline substitution using escaped newlines. # Ensure that we do not split the substitution between script fragments. ac_BEG=$ac_end ac_END=`expr "$ac_end" + "$ac_max_sed_lines"` sed "1,${ac_BEG}d; ${ac_END}p; q" "$tmp"/subs.sed >"$tmp"/subs.next if test -s "$tmp"/subs.next; then grep '^s,@[^@,][^@,]*@,.*\\$' "$tmp"/subs.next >"$tmp"/subs.edit if test ! -s "$tmp"/subs.edit; then grep "^s,@[^@,][^@,]*@,.*,;t t$" "$tmp"/subs.next >"$tmp"/subs.edit if test ! -s "$tmp"/subs.edit; then if test "$ac_beg" -gt 1; then ac_end=`expr "$ac_end" - 1` continue fi fi fi fi if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f \"$tmp\"/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f \"$tmp\"/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr "$ac_sed_frag" + 1` ac_beg=$ac_end ac_end=`expr "$ac_end" + "$ac_max_sed_lines"` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds="cat" fi fi # test -n "$CONFIG_FILES" EOF cat >>"$CONFIG_STATUS" <<\EOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in - | *:- | *:-:* ) # input from stdin cat >"$tmp"/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then { case "$ac_dir" in [\\/]* | ?:[\\/]* ) as_incr_dir=;; *) as_incr_dir=.;; esac as_dummy="$ac_dir" for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do case $as_mkdir_dir in # Skip DOS drivespec ?:) as_incr_dir=$as_mkdir_dir ;; *) as_incr_dir=$as_incr_dir/$as_mkdir_dir test -d "$as_incr_dir" || mkdir "$as_incr_dir" ;; esac done; } ac_dir_suffix="/`echo "$ac_dir"|sed 's,^\./,,'`" # A "../" for each directory in $ac_dir_suffix. ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'` else ac_dir_suffix= ac_dots= fi case "$srcdir" in .) ac_srcdir=. if test -z "$ac_dots"; then ac_top_srcdir=. else ac_top_srcdir=`echo "$ac_dots" | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) ac_srcdir="$srcdir$ac_dir_suffix"; ac_top_srcdir="$srcdir" ;; *) # Relative path. ac_srcdir="$ac_dots$srcdir$ac_dir_suffix" ac_top_srcdir="$ac_dots$srcdir" ;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_dots$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:7938: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated automatically by config.status. */ configure_input="Generated automatically from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo "$tmp"/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:7956: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:7969: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } EOF cat >>"$CONFIG_STATUS" <<\EOF ac_warn_datarootdir=no if test x"$ac_file" != x-; then for ac_item in $ac_file_inputs do ac_seen=`grep '@\(datadir\|mandir\|infodir\)@' "$ac_item"` if test -n "$ac_seen"; then ac_used=`grep '@datarootdir@' "$ac_item"` if test -z "$ac_used"; then { echo "$as_me:7985: WARNING: datarootdir was used implicitly but not set: $ac_seen" >&5 echo "$as_me: WARNING: datarootdir was used implicitly but not set: $ac_seen" >&2;} ac_warn_datarootdir=yes fi fi ac_seen=`grep '${datarootdir}' "$ac_item"` if test -n "$ac_seen"; then { echo "$as_me:7994: WARNING: datarootdir was used explicitly but not set: $ac_seen" >&5 echo "$as_me: WARNING: datarootdir was used explicitly but not set: $ac_seen" >&2;} ac_warn_datarootdir=yes fi done fi if test "x$ac_warn_datarootdir" = xyes; then ac_sed_cmds="$ac_sed_cmds | sed -e 's,@datarootdir@,\${prefix}/share,g' -e 's,\${datarootdir},\${prefix}/share,g'" fi EOF cat >>"$CONFIG_STATUS" <>"$CONFIG_STATUS" <<\EOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >"$tmp"/out rm -f "$tmp"/stdin EOF : "${FGREP:=grep -F}" : "${EGREP:=grep -E}" cat >>"$CONFIG_STATUS" <>"$CONFIG_STATUS" <<\EOF if test x"$ac_file" != x-; then cp "$tmp/out" "$ac_file" for ac_name in prefix exec_prefix datarootdir do ac_seen=`$FGREP -n '${'$ac_name'[:=].*}' "$ac_file"` if test -n "$ac_seen"; then ac_init=`$EGREP '[ ]*'$ac_name'[ ]*=' "$ac_file"` if test -z "$ac_init"; then ac_seen=`echo "$ac_seen" |sed -e 's,^,'"$ac_file"':,'` { echo "$as_me:8039: WARNING: Variable $ac_name is used but was not set: $ac_seen" >&5 echo "$as_me: WARNING: Variable $ac_name is used but was not set: $ac_seen" >&2;} fi fi done $EGREP -n '@[a-z_][a-z_0-9]+@' "$ac_file" >"$tmp"/out $EGREP -n '@[A-Z_][A-Z_0-9]+@' "$ac_file" >>"$tmp"/out if test -s "$tmp"/out; then ac_seen=`sed -e 's,^,'"$ac_file"':,' < "$tmp"/out` { echo "$as_me:8050: WARNING: Some variables may not be substituted: $ac_seen" >&5 echo "$as_me: WARNING: Some variables may not be substituted: $ac_seen" >&2;} fi else cat "$tmp"/out fi rm -f "$tmp"/out done EOF cat >>"$CONFIG_STATUS" <<\EOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_i turns "#undef NAME" with trailing blanks into "#define NAME VALUE". ac_iA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_iB='\([ ]\),\1#\2define\3' ac_iC=' ' ac_iD='\4,;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in - | *:- | *:-:* ) # input from stdin cat >"$tmp"/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:8099: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo "$tmp"/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:8110: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:8123: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >"$tmp"/in EOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\EOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\(\([^ (][^ (]*\)([^)]*)\)[ ]*\(.*\)$,${ac_dA}\2${ac_dB}\1${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end EOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs sed 's/ac_d/ac_i/g' conftest.defines >>conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\EOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, EOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>"$CONFIG_STATUS" echo ' if ${EGREP-grep -E} "^[ ]*#[ ]*define" "$tmp"/in >/dev/null; then' >>"$CONFIG_STATUS" echo ' # If there are no defines, we may have an empty if/fi' >>"$CONFIG_STATUS" echo ' :' >>"$CONFIG_STATUS" rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to "$tmp"/defines.sed. echo ' cat >"$tmp"/defines.sed <>"$CONFIG_STATUS" # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>"$CONFIG_STATUS" # Work around the forget-to-reset-the-flag bug. echo 't clr' >>"$CONFIG_STATUS" echo ': clr' >>"$CONFIG_STATUS" sed "${ac_max_here_lines}q" conftest.defines >>"$CONFIG_STATUS" echo 'CEOF sed -f "$tmp"/defines.sed "$tmp"/in >"$tmp"/out rm -f "$tmp"/in mv "$tmp"/out "$tmp"/in ' >>"$CONFIG_STATUS" sed "1,${ac_max_here_lines}d" conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>"$CONFIG_STATUS" echo >>"$CONFIG_STATUS" # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>"$CONFIG_STATUS" rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to "$tmp"/undefs.sed. echo ' cat >"$tmp"/undefs.sed <>"$CONFIG_STATUS" # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>"$CONFIG_STATUS" # Work around the forget-to-reset-the-flag bug. echo 't clr' >>"$CONFIG_STATUS" echo ': clr' >>"$CONFIG_STATUS" sed "${ac_max_here_lines}q" conftest.undefs >>"$CONFIG_STATUS" echo 'CEOF sed -f "$tmp"/undefs.sed "$tmp"/in >"$tmp"/out rm -f "$tmp"/in mv "$tmp"/out "$tmp"/in ' >>"$CONFIG_STATUS" sed "1,${ac_max_here_lines}d" conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>"$CONFIG_STATUS" <<\EOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated automatically by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated automatically by configure. */" >"$tmp"/config.h else echo "/* $ac_file. Generated automatically by configure. */" >"$tmp"/config.h fi cat "$tmp"/in >>"$tmp"/config.h rm -f "$tmp"/in if test x"$ac_file" != x-; then if cmp -s "$ac_file" "$tmp/config.h" 2>/dev/null; then { echo "$as_me:8241: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then { case "$ac_dir" in [\\/]* | ?:[\\/]* ) as_incr_dir=;; *) as_incr_dir=.;; esac as_dummy="$ac_dir" for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do case $as_mkdir_dir in # Skip DOS drivespec ?:) as_incr_dir=$as_mkdir_dir ;; *) as_incr_dir=$as_incr_dir/$as_mkdir_dir test -d "$as_incr_dir" || mkdir "$as_incr_dir" ;; esac done; } fi rm -f "$ac_file" mv "$tmp/config.h" "$ac_file" fi else cat "$tmp"/config.h rm -f "$tmp"/config.h fi done EOF cat >>"$CONFIG_STATUS" <<\EOF { (exit 0); exit 0; } EOF chmod +x "$CONFIG_STATUS" ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: exec 5>/dev/null $SHELL "$CONFIG_STATUS" || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. "$ac_cs_success" || { (exit 1); exit 1; } fi test -z "$cf_make_docs" && cf_make_docs=0 cf_output=makefile test -f "$cf_output" || cf_output=Makefile if test "$cf_make_docs" = 0 then cat >>$cf_output <\$@ ${GROFF_NOTE}.ps.pdf : ${GROFF_NOTE} ps2pdf \$*.ps ${GROFF_NOTE} ${GROFF_NOTE}.1.ps : ${GROFF_NOTE} \$(SHELL) -c "tbl \$*.1 | groff -man" >\$@ ${GROFF_NOTE} ${GROFF_NOTE}.1.txt : ${GROFF_NOTE} GROFF_NO_SGR=stupid \$(SHELL) -c "tbl \$*.1 | nroff -rHY=0 -Tascii -man | col -bx" >\$@ ${MAN2HTML_NOTE}.1.html : ${MAN2HTML_NOTE} ./${MAN2HTML_TEMP} \$* 1 man >\$@ CF_EOF cf_make_docs=1 fi for cf_name in yacc do cat >>$cf_output <