* Moved lcc and q3asm into code/tools
This commit is contained in:
parent
b1cef6352e
commit
ad118b9baf
452 changed files with 0 additions and 0 deletions
682
code/tools/lcc/lburg/gram.c
Normal file
682
code/tools/lcc/lburg/gram.c
Normal file
|
@ -0,0 +1,682 @@
|
|||
#if defined(__STDC__) || defined(__cplusplus)
|
||||
#define YYCONST const
|
||||
#define YYPARAMS(x) x
|
||||
#define YYDEFUN(name, arglist, args) name(args)
|
||||
#define YYAND ,
|
||||
#define YYPTR void *
|
||||
#else
|
||||
#define YYCONST
|
||||
#define YYPARAMS(x) ()
|
||||
#define YYDEFUN(name, arglist, args) name arglist args;
|
||||
#define YYAND ;
|
||||
#define YYPTR char *
|
||||
#endif
|
||||
#ifndef lint
|
||||
YYCONST static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley +Cygnus.28) 01/20/91";
|
||||
#endif
|
||||
#define YYBYACC 1
|
||||
#ifndef YYDONT_INCLUDE_STDIO
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
//#ifdef __cplusplus TA <tim@ngus.net> stdlib.h applies to C too
|
||||
#include <stdlib.h> /* for malloc/realloc/free */
|
||||
//#endif
|
||||
#line 2 "lburg/gram.y"
|
||||
#include <stdio.h>
|
||||
#include "lburg.h"
|
||||
/*lint -e616 -e527 -e652 -esym(552,yynerrs) -esym(563,yynewstate,yyerrlab) */
|
||||
static int yylineno = 0;
|
||||
#line 8 "lburg/gram.y"
|
||||
typedef union {
|
||||
int n;
|
||||
char *string;
|
||||
Tree tree;
|
||||
} YYSTYPE;
|
||||
#line 37 "y.tab.c"
|
||||
#define TERMINAL 257
|
||||
#define START 258
|
||||
#define PPERCENT 259
|
||||
#define ID 260
|
||||
#define TEMPLATE 261
|
||||
#define CODE 262
|
||||
#define INT 263
|
||||
#define YYERRCODE 256
|
||||
static YYCONST short yylhs[] = { -1,
|
||||
0, 0, 4, 4, 6, 6, 6, 6, 7, 7,
|
||||
5, 5, 5, 5, 1, 3, 3, 3, 2,
|
||||
};
|
||||
static YYCONST short yylen[] = { 2,
|
||||
3, 1, 0, 2, 3, 3, 1, 2, 0, 4,
|
||||
0, 7, 2, 3, 1, 1, 4, 6, 1,
|
||||
};
|
||||
static YYCONST short yydefred[] = { 3,
|
||||
0, 0, 0, 9, 0, 11, 7, 4, 8, 0,
|
||||
15, 0, 0, 0, 5, 6, 0, 13, 0, 0,
|
||||
14, 0, 10, 0, 0, 0, 0, 0, 19, 0,
|
||||
17, 0, 12, 0, 18,
|
||||
};
|
||||
static YYCONST short yydgoto[] = { 1,
|
||||
12, 30, 25, 2, 13, 8, 10,
|
||||
};
|
||||
static YYCONST short yysindex[] = { 0,
|
||||
0, -4, -2, 0, -250, 0, 0, 0, 0, -9,
|
||||
0, 1, -10, -49, 0, 0, 3, 0, -44, -248,
|
||||
0, -244, 0, -22, -242, -244, -245, -37, 0, 10,
|
||||
0, -244, 0, -20, 0,
|
||||
};
|
||||
static YYCONST short yyrindex[] = { 0,
|
||||
0, 22, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 23, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, -39, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0,
|
||||
};
|
||||
static YYCONST short yygindex[] = { 0,
|
||||
11, 0, -23, 0, 0, 0, 0,
|
||||
};
|
||||
#define YYTABLESIZE 255
|
||||
static YYCONST short yytable[] = { 18,
|
||||
15, 16, 28, 31, 16, 7, 32, 9, 34, 11,
|
||||
16, 20, 21, 22, 23, 24, 29, 26, 27, 33,
|
||||
35, 2, 1, 19, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 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, 17, 0, 0, 0, 11,
|
||||
14, 3, 4, 5, 6,
|
||||
};
|
||||
static YYCONST short yycheck[] = { 10,
|
||||
10, 41, 26, 41, 44, 10, 44, 10, 32, 260,
|
||||
10, 61, 10, 58, 263, 260, 262, 40, 261, 10,
|
||||
41, 0, 0, 13, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -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, -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,
|
||||
260, 256, 257, 258, 259,
|
||||
};
|
||||
#define YYFINAL 1
|
||||
#ifndef YYDEBUG
|
||||
#define YYDEBUG 0
|
||||
#endif
|
||||
#define YYMAXTOKEN 263
|
||||
#if YYDEBUG
|
||||
static YYCONST char *YYCONST 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,0,0,0,0,0,
|
||||
"TERMINAL","START","PPERCENT","ID","TEMPLATE","CODE","INT",
|
||||
};
|
||||
static YYCONST char *YYCONST yyrule[] = {
|
||||
"$accept : spec",
|
||||
"spec : decls PPERCENT rules",
|
||||
"spec : decls",
|
||||
"decls :",
|
||||
"decls : decls decl",
|
||||
"decl : TERMINAL blist '\\n'",
|
||||
"decl : START nonterm '\\n'",
|
||||
"decl : '\\n'",
|
||||
"decl : error '\\n'",
|
||||
"blist :",
|
||||
"blist : blist ID '=' INT",
|
||||
"rules :",
|
||||
"rules : rules nonterm ':' tree TEMPLATE cost '\\n'",
|
||||
"rules : rules '\\n'",
|
||||
"rules : rules error '\\n'",
|
||||
"nonterm : ID",
|
||||
"tree : ID",
|
||||
"tree : ID '(' tree ')'",
|
||||
"tree : ID '(' tree ',' tree ')'",
|
||||
"cost : CODE",
|
||||
};
|
||||
#endif
|
||||
#define YYLEX yylex()
|
||||
#define YYEMPTY -1
|
||||
#define yyclearin (yychar=(YYEMPTY))
|
||||
#define yyerrok (yyerrflag=0)
|
||||
#ifndef YYINITDEPTH
|
||||
#define YYINITDEPTH 200
|
||||
#endif
|
||||
#ifdef YYSTACKSIZE
|
||||
#ifndef YYMAXDEPTH
|
||||
#define YYMAXDEPTH YYSTACKSIZE
|
||||
#endif
|
||||
#else
|
||||
#ifdef YYMAXDEPTH
|
||||
#define YYSTACKSIZE YYMAXDEPTH
|
||||
#else
|
||||
#define YYSTACKSIZE 500
|
||||
#define YYMAXDEPTH 500
|
||||
#endif
|
||||
#endif
|
||||
#ifndef YYMAXSTACKSIZE
|
||||
#define YYMAXSTACKSIZE 10000
|
||||
#endif
|
||||
int yydebug;
|
||||
int yynerrs;
|
||||
int yyerrflag;
|
||||
int yychar;
|
||||
YYSTYPE yyval;
|
||||
YYSTYPE yylval;
|
||||
static short *yyss;
|
||||
static YYSTYPE *yyvs;
|
||||
static int yystacksize;
|
||||
#define yyfree(x) free(x)
|
||||
extern int yylex();
|
||||
|
||||
static YYPTR
|
||||
YYDEFUN (yymalloc, (bytes), unsigned bytes)
|
||||
{
|
||||
YYPTR ptr = (YYPTR) malloc (bytes);
|
||||
if (ptr != 0) return (ptr);
|
||||
yyerror ("yyparse: memory exhausted");
|
||||
return (0);
|
||||
}
|
||||
|
||||
static YYPTR
|
||||
YYDEFUN (yyrealloc, (old, bytes), YYPTR old YYAND unsigned bytes)
|
||||
{
|
||||
YYPTR ptr = (YYPTR) realloc (old, bytes);
|
||||
if (ptr != 0) return (ptr);
|
||||
yyerror ("yyparse: memory exhausted");
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
#ifdef __GNUC__
|
||||
inline
|
||||
#endif
|
||||
yygrow ()
|
||||
{
|
||||
#if YYDEBUG
|
||||
int old_stacksize = yystacksize;
|
||||
#endif
|
||||
short *new_yyss;
|
||||
YYSTYPE *new_yyvs;
|
||||
|
||||
if (yystacksize == YYMAXSTACKSIZE)
|
||||
return (1);
|
||||
yystacksize += (yystacksize + 1 ) / 2;
|
||||
if (yystacksize > YYMAXSTACKSIZE)
|
||||
yystacksize = YYMAXSTACKSIZE;
|
||||
#if YYDEBUG
|
||||
if (yydebug)
|
||||
printf("yydebug: growing stack size from %d to %d\n",
|
||||
old_stacksize, yystacksize);
|
||||
#endif
|
||||
new_yyss = (short *) yyrealloc ((char *)yyss, yystacksize * sizeof (short));
|
||||
if (new_yyss == 0)
|
||||
return (1);
|
||||
new_yyvs = (YYSTYPE *) yyrealloc ((char *)yyvs, yystacksize * sizeof (YYSTYPE));
|
||||
if (new_yyvs == 0)
|
||||
{
|
||||
yyfree (new_yyss);
|
||||
return (1);
|
||||
}
|
||||
yyss = new_yyss;
|
||||
yyvs = new_yyvs;
|
||||
return (0);
|
||||
}
|
||||
#line 60 "lburg/gram.y"
|
||||
#include <assert.h>
|
||||
#include <stdarg.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
|
||||
int errcnt = 0;
|
||||
FILE *infp = NULL;
|
||||
FILE *outfp = NULL;
|
||||
static char buf[BUFSIZ], *bp = buf;
|
||||
static int ppercent = 0;
|
||||
static int code = 0;
|
||||
|
||||
static int get(void) {
|
||||
if (*bp == 0) {
|
||||
bp = buf;
|
||||
*bp = 0;
|
||||
if (fgets(buf, sizeof buf, infp) == NULL)
|
||||
return EOF;
|
||||
yylineno++;
|
||||
while (buf[0] == '%' && buf[1] == '{' && buf[2] == '\n') {
|
||||
for (;;) {
|
||||
if (fgets(buf, sizeof buf, infp) == NULL) {
|
||||
yywarn("unterminated %{...%}\n");
|
||||
return EOF;
|
||||
}
|
||||
yylineno++;
|
||||
if (strcmp(buf, "%}\n") == 0)
|
||||
break;
|
||||
fputs(buf, outfp);
|
||||
}
|
||||
if (fgets(buf, sizeof buf, infp) == NULL)
|
||||
return EOF;
|
||||
yylineno++;
|
||||
}
|
||||
}
|
||||
return *bp++;
|
||||
}
|
||||
|
||||
void yyerror(char *fmt, ...) {
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
if (yylineno > 0)
|
||||
fprintf(stderr, "line %d: ", yylineno);
|
||||
vfprintf(stderr, fmt, ap);
|
||||
if (fmt[strlen(fmt)-1] != '\n')
|
||||
fprintf(stderr, "\n");
|
||||
errcnt++;
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
int yylex(void) {
|
||||
int c;
|
||||
|
||||
if (code) {
|
||||
char *p;
|
||||
bp += strspn(bp, " \t\f");
|
||||
p = strchr(bp, '\n');
|
||||
if (p == NULL)
|
||||
p = strchr(bp, '\n');
|
||||
while (p > bp && isspace(p[-1]))
|
||||
p--;
|
||||
yylval.string = alloc(p - bp + 1);
|
||||
strncpy(yylval.string, bp, p - bp);
|
||||
yylval.string[p - bp] = 0;
|
||||
bp = p;
|
||||
code--;
|
||||
return CODE;
|
||||
}
|
||||
while ((c = get()) != EOF) {
|
||||
switch (c) {
|
||||
case ' ': case '\f': case '\t':
|
||||
continue;
|
||||
case '\n':
|
||||
case '(': case ')': case ',':
|
||||
case ':': case '=':
|
||||
return c;
|
||||
}
|
||||
if (c == '%' && *bp == '%') {
|
||||
bp++;
|
||||
return ppercent++ ? 0 : PPERCENT;
|
||||
} else if (c == '%' && strncmp(bp, "term", 4) == 0
|
||||
&& isspace(bp[4])) {
|
||||
bp += 4;
|
||||
return TERMINAL;
|
||||
} else if (c == '%' && strncmp(bp, "start", 5) == 0
|
||||
&& isspace(bp[5])) {
|
||||
bp += 5;
|
||||
return START;
|
||||
} else if (c == '"') {
|
||||
char *p = strchr(bp, '"');
|
||||
if (p == NULL) {
|
||||
yyerror("missing \" in assembler template\n");
|
||||
p = strchr(bp, '\n');
|
||||
if (p == NULL)
|
||||
p = strchr(bp, '\0');
|
||||
}
|
||||
assert(p);
|
||||
yylval.string = alloc(p - bp + 1);
|
||||
strncpy(yylval.string, bp, p - bp);
|
||||
yylval.string[p - bp] = 0;
|
||||
bp = *p == '"' ? p + 1 : p;
|
||||
code++;
|
||||
return TEMPLATE;
|
||||
} else if (isdigit(c)) {
|
||||
int n = 0;
|
||||
do {
|
||||
int d = c - '0';
|
||||
if (n > (INT_MAX - d)/10)
|
||||
yyerror("integer greater than %d\n", INT_MAX);
|
||||
else
|
||||
n = 10*n + d;
|
||||
c = get();
|
||||
} while (c != EOF && isdigit(c));
|
||||
bp--;
|
||||
yylval.n = n;
|
||||
return INT;
|
||||
} else if (isalpha(c)) {
|
||||
char *p = bp - 1;
|
||||
while (isalpha(*bp) || isdigit(*bp) || *bp == '_')
|
||||
bp++;
|
||||
yylval.string = alloc(bp - p + 1);
|
||||
strncpy(yylval.string, p, bp - p);
|
||||
yylval.string[bp - p] = 0;
|
||||
return ID;
|
||||
} else if (isprint(c))
|
||||
yyerror("invalid character `%c'\n", c);
|
||||
else
|
||||
yyerror("invalid character `\\%03o'\n", (unsigned char)c);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void yywarn(char *fmt, ...) {
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
if (yylineno > 0)
|
||||
fprintf(stderr, "line %d: ", yylineno);
|
||||
fprintf(stderr, "warning: ");
|
||||
vfprintf(stderr, fmt, ap);
|
||||
}
|
||||
#line 403 "y.tab.c"
|
||||
#define YYABORT goto yyabort
|
||||
#define YYACCEPT goto yyaccept
|
||||
#define YYERROR goto yyerrlab
|
||||
|
||||
#if YYDEBUG
|
||||
#ifdef __cplusplus
|
||||
extern "C" char *getenv();
|
||||
#else
|
||||
extern char *getenv();
|
||||
#endif
|
||||
#endif
|
||||
|
||||
int
|
||||
yyparse()
|
||||
{
|
||||
register int yym, yyn, yystate;
|
||||
register YYSTYPE *yyvsp;
|
||||
register short *yyssp;
|
||||
short *yysse;
|
||||
#if YYDEBUG
|
||||
register YYCONST char *yys;
|
||||
|
||||
if (yys = getenv("YYDEBUG"))
|
||||
{
|
||||
yyn = *yys;
|
||||
if (yyn >= '0' && yyn <= '9')
|
||||
yydebug = yyn - '0';
|
||||
}
|
||||
#endif
|
||||
|
||||
yynerrs = 0;
|
||||
yyerrflag = 0;
|
||||
yychar = (-1);
|
||||
|
||||
if (yyss == 0)
|
||||
{
|
||||
yyss = (short *) yymalloc (YYSTACKSIZE * sizeof (short));
|
||||
if (yyss == 0)
|
||||
goto yyabort;
|
||||
yyvs = (YYSTYPE *) yymalloc (YYSTACKSIZE * sizeof (YYSTYPE));
|
||||
if (yyvs == 0)
|
||||
{
|
||||
yyfree (yyss);
|
||||
goto yyabort;
|
||||
}
|
||||
yystacksize = YYSTACKSIZE;
|
||||
}
|
||||
yysse = yyss + yystacksize - 1;
|
||||
yyssp = yyss;
|
||||
yyvsp = yyvs;
|
||||
*yyssp = yystate = 0;
|
||||
goto yyloop;
|
||||
|
||||
yypush_lex:
|
||||
yyval = yylval;
|
||||
yystate = yytable[yyn];
|
||||
yypush:
|
||||
if (yyssp >= yysse)
|
||||
{
|
||||
int depth = yyssp - yyss;
|
||||
if (yygrow() != 0)
|
||||
goto yyoverflow;
|
||||
yysse = yyss + yystacksize -1;
|
||||
yyssp = depth + yyss;
|
||||
yyvsp = depth + yyvs;
|
||||
}
|
||||
*++yyssp = yystate;
|
||||
*++yyvsp = yyval;
|
||||
|
||||
yyloop:
|
||||
if ((yyn = yydefred[yystate])) goto yyreduce;
|
||||
yyn = yysindex[yystate];
|
||||
if (yychar < 0)
|
||||
{
|
||||
if ((yychar = yylex()) < 0) yychar = 0;
|
||||
#if YYDEBUG
|
||||
if (yydebug)
|
||||
{
|
||||
yys = 0;
|
||||
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
|
||||
if (!yys) yys = "illegal-symbol";
|
||||
printf("yydebug: state %d, reading %d (%s)\n", yystate,
|
||||
yychar, yys);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
if (yyn != 0
|
||||
&& ((yyn += yychar), ((unsigned)yyn <= (unsigned)YYTABLESIZE))
|
||||
&& yycheck[yyn] == yychar)
|
||||
{
|
||||
#if YYDEBUG
|
||||
if (yydebug)
|
||||
printf("yydebug: state %d, shifting to state %d\n",
|
||||
yystate, yytable[yyn]);
|
||||
#endif
|
||||
if (yyerrflag > 0) --yyerrflag;
|
||||
yychar = (-1);
|
||||
goto yypush_lex;
|
||||
}
|
||||
yyn = yyrindex[yystate];
|
||||
if (yyn != 0
|
||||
&& ((yyn += yychar), ((unsigned)yyn <= (unsigned)YYTABLESIZE))
|
||||
&& yycheck[yyn] == yychar)
|
||||
{
|
||||
yyn = yytable[yyn];
|
||||
goto yyreduce;
|
||||
}
|
||||
if (yyerrflag) goto yyinrecovery;
|
||||
#ifdef lint
|
||||
goto yynewerror;
|
||||
yynewerror:
|
||||
#endif
|
||||
yyerror("syntax error");
|
||||
#ifdef lint
|
||||
goto yyerrlab;
|
||||
yyerrlab:
|
||||
#endif
|
||||
++yynerrs;
|
||||
yyinrecovery:
|
||||
if (yyerrflag < 3)
|
||||
{
|
||||
yyerrflag = 3;
|
||||
for (;;)
|
||||
{
|
||||
yyn = yysindex[*yyssp];
|
||||
if (yyn != 0
|
||||
&& ((yyn += YYERRCODE), ((unsigned)yyn <= (unsigned)YYTABLESIZE))
|
||||
&& yycheck[yyn] == YYERRCODE)
|
||||
{
|
||||
#if YYDEBUG
|
||||
if (yydebug)
|
||||
printf("yydebug: state %d, error recovery shifting\
|
||||
to state %d\n", *yyssp, yytable[yyn]);
|
||||
#endif
|
||||
goto yypush_lex;
|
||||
}
|
||||
else
|
||||
{
|
||||
#if YYDEBUG
|
||||
if (yydebug)
|
||||
printf("yydebug: error recovery discarding state %d\n",
|
||||
*yyssp);
|
||||
#endif
|
||||
if (yyssp <= yyss) goto yyabort;
|
||||
--yyssp;
|
||||
--yyvsp;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (yychar == 0) goto yyabort;
|
||||
#if YYDEBUG
|
||||
if (yydebug)
|
||||
{
|
||||
yys = 0;
|
||||
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
|
||||
if (!yys) yys = "illegal-symbol";
|
||||
printf("yydebug: state %d, error recovery discards token %d (%s)\n",
|
||||
yystate, yychar, yys);
|
||||
}
|
||||
#endif
|
||||
yychar = (-1);
|
||||
goto yyloop;
|
||||
}
|
||||
yyreduce:
|
||||
#if YYDEBUG
|
||||
if (yydebug)
|
||||
printf("yydebug: state %d, reducing by rule %d (%s)\n",
|
||||
yystate, yyn, yyrule[yyn]);
|
||||
#endif
|
||||
yym = yylen[yyn];
|
||||
yyval = yyvsp[1-yym];
|
||||
switch (yyn)
|
||||
{
|
||||
case 1:
|
||||
#line 22 "lburg/gram.y"
|
||||
{ yylineno = 0; }
|
||||
break;
|
||||
case 2:
|
||||
#line 23 "lburg/gram.y"
|
||||
{ yylineno = 0; }
|
||||
break;
|
||||
case 6:
|
||||
#line 31 "lburg/gram.y"
|
||||
{
|
||||
if (nonterm(yyvsp[-1].string)->number != 1)
|
||||
yyerror("redeclaration of the start symbol\n");
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
#line 36 "lburg/gram.y"
|
||||
{ yyerrok; }
|
||||
break;
|
||||
case 10:
|
||||
#line 40 "lburg/gram.y"
|
||||
{ term(yyvsp[-2].string, yyvsp[0].n); }
|
||||
break;
|
||||
case 12:
|
||||
#line 44 "lburg/gram.y"
|
||||
{ rule(yyvsp[-5].string, yyvsp[-3].tree, yyvsp[-2].string, yyvsp[-1].string); }
|
||||
break;
|
||||
case 14:
|
||||
#line 46 "lburg/gram.y"
|
||||
{ yyerrok; }
|
||||
break;
|
||||
case 15:
|
||||
#line 49 "lburg/gram.y"
|
||||
{ nonterm(yyval.string = yyvsp[0].string); }
|
||||
break;
|
||||
case 16:
|
||||
#line 52 "lburg/gram.y"
|
||||
{ yyval.tree = tree(yyvsp[0].string, 0, 0); }
|
||||
break;
|
||||
case 17:
|
||||
#line 53 "lburg/gram.y"
|
||||
{ yyval.tree = tree(yyvsp[-3].string, yyvsp[-1].tree, 0); }
|
||||
break;
|
||||
case 18:
|
||||
#line 54 "lburg/gram.y"
|
||||
{ yyval.tree = tree(yyvsp[-5].string, yyvsp[-3].tree, yyvsp[-1].tree); }
|
||||
break;
|
||||
case 19:
|
||||
#line 57 "lburg/gram.y"
|
||||
{ if (*yyvsp[0].string == 0) yyval.string = "0"; }
|
||||
break;
|
||||
#line 630 "y.tab.c"
|
||||
}
|
||||
yyssp -= yym;
|
||||
yyvsp -= yym;
|
||||
yym = yylhs[yyn];
|
||||
yystate = *yyssp;
|
||||
if (yystate == 0 && yym == 0)
|
||||
{
|
||||
#if YYDEBUG
|
||||
if (yydebug)
|
||||
printf("yydebug: after reduction, shifting from state 0 to\
|
||||
state %d\n", YYFINAL);
|
||||
#endif
|
||||
yystate = YYFINAL;
|
||||
*++yyssp = YYFINAL;
|
||||
*++yyvsp = yyval;
|
||||
if (yychar < 0)
|
||||
{
|
||||
if ((yychar = yylex()) < 0) yychar = 0;
|
||||
#if YYDEBUG
|
||||
if (yydebug)
|
||||
{
|
||||
yys = 0;
|
||||
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
|
||||
if (!yys) yys = "illegal-symbol";
|
||||
printf("yydebug: state %d, reading %d (%s)\n",
|
||||
YYFINAL, yychar, yys);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
if (yychar == 0) goto yyaccept;
|
||||
goto yyloop;
|
||||
}
|
||||
yyn = yygindex[yym];
|
||||
if (yyn != 0
|
||||
&& ((yyn += yystate), ((unsigned)yyn <= (unsigned)YYTABLESIZE))
|
||||
&& yycheck[yyn] == yystate)
|
||||
yystate = yytable[yyn];
|
||||
else
|
||||
yystate = yydgoto[yym];
|
||||
#if YYDEBUG
|
||||
if (yydebug)
|
||||
printf("yydebug: after reduction, shifting from state %d \
|
||||
to state %d\n", *yyssp, yystate);
|
||||
#endif
|
||||
goto yypush;
|
||||
yyoverflow:
|
||||
yyerror("yacc stack overflow");
|
||||
yyabort:
|
||||
return (1);
|
||||
yyaccept:
|
||||
return (0);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue