|
|
DataMuseum.dkPresents historical artifacts from the history of: Commodore CBM-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Commodore CBM-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 16060 (0x3ebc)
Types: TextFile
Notes: UNIX file
Names: »y.tab.c«
└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
└─⟦f4b8d8c84⟧ UNIX Filesystem
└─⟦this⟧ »cmd/rsh/y.tab.c«
└─⟦this⟧ »cmd/sh/y.tab.c«
#line 1 "sh.y"
/*
* The Bourne shell.
* This shell is dedicated to Ciaran Gerald Aidan O'Donnell.
* May he live a thousand minutes. (long enough to fix up YACC).
* It is also dedicated to Steve Bourne.
* May he live a thousand seconds.
*/
#include "sh.h"
#define YYERROR {yyerrflag=1; goto YYerract; }
extern NODE *node();
#include "y.tab.h"
#define YYCLEARIN yychar = -1000
#define YYERROK yyerrflag = 0
extern int yychar;
extern short yyerrflag;
#ifndef YYMAXDEPTH
#define YYMAXDEPTH 150
#endif
YYSTYPE yyval, yylval;
#line 319 "sh.y"
/*
* Create a node.
*/
NODE *
node(type, auxp, next)
NODE *auxp, *next;
{
register NODE *np;
np = (NODE *) balloc(sizeof (NODE));
np->n_type = type;
np->n_auxp = auxp;
np->n_next = next;
return (np);
}
#define NBPC 8
#define NKEY 8
static char keys[NKEY] = { 0 };
static int keyi = NKEY * NBPC;
keyflush()
{
register char *kp;
for (kp = keys+NKEY; kp > keys; *--kp = 0);
keyi = NKEY * NBPC;
}
keypop()
{
register char *kp;
register int km;
if ((km = keyi++) >= NKEY * NBPC) {
panic();
NOTREACHED;
}
kp = keys + (km / NBPC);
km = 1 << (km %= NBPC);
keyflag = (*kp & km) ? 1 : 0;
*kp &= ~km;
}
keypush()
{
register char *kp;
register int km;
if ((km = --keyi) < 0) {
panic();
NOTREACHED;
}
if (keyflag) {
kp = keys + (km / NBPC);
km = 1 << (km %= NBPC);
*kp |= km;
}
}
/*
* The following fragments might implement named pipes.
* The token declaration goes in the header.
* The nopen production should go with the others of its ilk.
* The production fragment goes into argument:
%token _NOPEN _NCLOSE
nopen: _NOPEN optnls ;
| nopen pipe_command ')' {
$$ = node(NRPIPE, $2, NULL);
}
| oparen pipe_command _NCLOSE {
$$ = node(NWPIPE, $2, NULL);
}
*
*/
#ifdef YYTNAMES
struct yytname yytnames[30] =
{
"$end", -1,
"error", -2,
"_NULL", 256,
"_DSEMI", 257,
"_ANDF", 258,
"_ORF", 259,
"_NAME", 260,
"_IORS", 261,
"_ASGN", 262,
"_CASE", 263,
"_DO", 264,
"_DONE", 265,
"_ELIF", 266,
"_ELSE", 267,
"_ESAC", 268,
"_FI", 269,
"_FOR", 270,
"_IF", 271,
"_IN", 272,
"_THEN", 273,
"_UNTIL", 274,
"_WHILE", 275,
"_OBRAC", 276,
"_CBRAC", 277,
"'\\n'", 10,
"';'", 59,
"'|'", 124,
"'('", 40,
"')'", 41,
"'&'", 38,
NULL,
} ;
#endif
unsigned yypdnt[74] = {
00, 01, 01, 02, 02, 02, 04, 06,
07, 010, 011, 011, 012, 012, 013, 014,
015, 016, 017, 020, 021, 03, 03, 03,
03, 03, 022, 022, 022, 023, 023, 024,
025, 026, 026, 027, 027, 027, 027, 030,
031, 032, 033, 033, 033, 033, 033, 033,
034, 034, 043, 043, 037, 037, 037, 044,
045, 045, 036, 036, 042, 042, 042, 041,
041, 040, 040, 035, 035, 035, 05, 05,
046, 046,
} ;
unsigned yypn[74] = {
02, 02, 00, 01, 02, 02, 02, 02,
02, 02, 02, 02, 02, 03, 02, 02,
02, 02, 02, 02, 02, 01, 02, 02,
03, 03, 01, 03, 03, 03, 01, 02,
00, 02, 01, 01, 01, 01, 01, 01,
01, 01, 06, 06, 04, 06, 03, 03,
02, 00, 02, 00, 03, 01, 00, 03,
03, 01, 02, 00, 05, 02, 00, 01,
00, 03, 02, 01, 01, 02, 01, 00,
01, 02,
} ;
unsigned yypgo[39] = {
00, 00, 02, 04, 014, 016, 056, 062,
064, 066, 070, 072, 074, 076, 0100, 0102,
0104, 0106, 0110, 0116, 0122, 0124, 0126, 0132,
0134, 0136, 0154, 0156, 0160, 0162, 0166, 0172,
0176, 0210, 0226, 0232, 0236, 0240, 0244,
} ;
unsigned yygo[174] = {
0176030, 01, 0176030, 05, 01, 06, 015, 051,
016, 052, 0176030, 072, 0176030, 037, 020, 056,
023, 061, 032, 065, 033, 066, 034, 067,
035, 070, 036, 071, 072, 0105, 0107, 0125,
0111, 0130, 0127, 0147, 0142, 0157, 0143, 0160,
0152, 0165, 0154, 0167, 0176030, 054, 0161, 0171,
0176030, 0110, 0176030, 0144, 0176030, 0145, 0176030, 040,
0176030, 0112, 0176030, 021, 0176030, 022, 0176030, 024,
0176030, 041, 0176030, 042, 0176030, 0155, 0176030, 0153,
021, 057, 022, 060, 0176030, 07, 024, 062,
0176030, 010, 0176030, 011, 0176030, 012, 044, 0100,
0176030, 043, 0176030, 044, 0176030, 045, 012, 046,
030, 063, 031, 064, 044, 046, 0103, 0121,
0121, 0121, 0176030, 0134, 0176030, 047, 0176030, 050,
0176030, 0104, 0104, 0123, 0176030, 0117, 0123, 0141,
0176030, 0113, 0153, 0166, 0176030, 0135, 037, 073,
040, 074, 0106, 0124, 0144, 0161, 0176030, 075,
042, 077, 0110, 0126, 0112, 0131, 0145, 0162,
0155, 0170, 0171, 0172, 0176030, 076, 0172, 0173,
0176030, 0146, 0121, 0140, 0176030, 0122, 0176030, 0136,
0150, 0164, 0176030, 0137, 072, 0106, 0102, 0120,
0104, 0120, 0116, 0133, 0176030, 055,
} ;
unsigned yypa[124] = {
00, 02, 034, 040, 044, 046, 050, 054,
062, 070, 074, 0122, 0124, 0126, 0154, 0202,
0202, 0206, 0206, 0202, 0210, 0212, 0214, 0216,
0220, 0220, 0202, 0202, 0202, 0202, 0202, 0210,
0210, 0224, 0230, 0234, 0236, 0264, 0266, 0270,
0272, 0274, 0276, 0300, 0302, 0304, 0310, 0312,
0314, 0316, 0320, 0322, 0326, 0332, 0334, 0336,
0340, 0342, 0202, 0344, 0350, 0354, 0356, 0362,
0366, 0370, 0372, 0400, 0372, 0404, 0406, 0202,
0436, 0446, 0454, 0460, 0464, 0466, 0470, 0474,
0500, 0504, 0510, 0350, 0512, 0514, 0516, 0202,
0524, 0526, 0530, 0532, 0536, 0542, 0546, 0552,
0556, 0560, 0202, 0202, 0210, 0564, 0570, 0574,
0576, 0602, 0202, 0474, 0202, 0604, 0612, 0614,
0616, 0344, 0620, 0622, 0624, 0626, 0630, 0632,
0634, 0436, 0636, 0644,
} ;
unsigned yyact[422] = {
020002, 0176030, 02, 0177777, 04, 012, 020040, 0404,
020040, 0405, 020040, 0406, 020040, 0407, 020040, 0416,
020040, 0417, 020040, 0422, 020040, 0423, 020040, 0424,
020040, 050, 03, 0176030, 040000, 0177777, 060000, 0176030,
013, 012, 060000, 0176030, 020003, 0176030, 020001, 0176030,
014, 012, 060000, 0176030, 015, 073, 016, 046,
020025, 0176030, 017, 0402, 020, 0403, 020032, 0176030,
023, 0174, 020036, 0176030, 025, 0404, 026, 0405,
027, 0406, 030, 0407, 031, 0416, 032, 0417,
033, 0422, 034, 0423, 035, 0424, 036, 050,
060000, 0176030, 020005, 0176030, 020004, 0176030, 020040, 0404,
020040, 0405, 020040, 0406, 020040, 0407, 020040, 0416,
020040, 0417, 020040, 0422, 020040, 0423, 020040, 0424,
020040, 050, 020027, 0176030, 020040, 0404, 020040, 0405,
020040, 0406, 020040, 0407, 020040, 0416, 020040, 0417,
020040, 0422, 020040, 0423, 020040, 0424, 020040, 050,
020026, 0176030, 053, 012, 020107, 0176030, 020040, 0176030,
020040, 0176030, 020050, 0176030, 020047, 0176030, 020051, 0176030,
025, 0404, 060000, 0176030, 020100, 051, 020040, 0176030,
020100, 0425, 020040, 0176030, 020037, 0176030, 025, 0404,
026, 0405, 027, 0406, 030, 0407, 031, 0416,
032, 0417, 033, 0422, 034, 0423, 035, 0424,
036, 050, 020042, 0176030, 020043, 0176030, 020044, 0176030,
020045, 0176030, 020046, 0176030, 020031, 0176030, 020030, 0176030,
020110, 0176030, 020017, 0176030, 0101, 012, 020106, 0176030,
020016, 0176030, 020033, 0176030, 020034, 0176030, 020020, 0176030,
020035, 0176030, 0102, 0420, 060000, 0176030, 0103, 0420,
020061, 0176030, 020006, 0176030, 020013, 0176030, 020012, 0176030,
020022, 0176030, 020021, 0176030, 0107, 0421, 060000, 0176030,
0111, 0410, 020073, 0176030, 020077, 0176030, 0114, 051,
060000, 0176030, 0115, 0425, 060000, 0176030, 020041, 0176030,
020111, 0176030, 053, 012, 0116, 073, 060000, 0176030,
025, 0404, 020063, 0176030, 020102, 0176030, 0101, 012,
020106, 0401, 020106, 0410, 020106, 0411, 020106, 0412,
020106, 0413, 020106, 0414, 020106, 0415, 020106, 0421,
020106, 0425, 020106, 051, 020040, 0176030, 020100, 0412,
020100, 0413, 020100, 0415, 020040, 0176030, 053, 012,
0127, 073, 020107, 0176030, 020100, 0411, 020040, 0176030,
0132, 0411, 060000, 0176030, 020056, 0176030, 020057, 0176030,
053, 012, 020104, 0176030, 025, 0404, 020066, 0176030,
0101, 012, 020103, 0176030, 025, 0404, 020063, 0176030,
020060, 0176030, 020101, 0176030, 020007, 0176030, 0142, 0412,
0143, 0413, 020076, 0176030, 020014, 0176030, 020072, 0176030,
020054, 0176030, 0101, 012, 020105, 0176030, 0150, 0174,
020071, 0176030, 0151, 0414, 060000, 0176030, 0152, 0401,
020065, 0176030, 0154, 051, 060000, 0176030, 020062, 0176030,
0156, 0411, 060000, 0176030, 020100, 0415, 020040, 0176030,
0163, 0415, 060000, 0176030, 020015, 0176030, 025, 0404,
060000, 0176030, 020053, 0176030, 020100, 0401, 020100, 0414,
020040, 0176030, 020052, 0176030, 020010, 0176030, 020011, 0176030,
020075, 0176030, 020055, 0176030, 020070, 0176030, 020024, 0176030,
020064, 0176030, 020023, 0176030, 020067, 0176030, 0142, 0412,
0143, 0413, 020076, 0176030, 020074, 0176030,
} ;
#include "action.h"
#define YYNOCHAR (-1000)
#define yyerrok yyerrflag=0
#define yyclearin yylval=YYNOCHAR
int yystack[YYMAXDEPTH];
YYSTYPE yyvstack[YYMAXDEPTH], *yyv;
int yychar;
#ifdef YYDEBUG
int yydebug = 1; /* No sir, not in the BSS */
#include <stdio.h>
#endif
short yyerrflag;
int *yys;
yyparse()
{
register YYSTYPE *yypvt;
int act;
register unsigned *ip, yystate;
int pno;
yystate = 0;
yychar = YYNOCHAR;
yyv = &yyvstack[-1];
yys = &yystack[-1];
stack:
if( ++yys >= &yystack[YYMAXDEPTH] ) {
write(2, "Stack overflow\n", 15);
exit(1);
}
*yys = yystate;
*++yyv = yyval;
#ifdef YYDEBUG
if( yydebug )
fprintf(stdout, "Stack state %d, char %d\n", yystate, yychar);
#endif
read:
ip = &yyact[yypa[yystate]];
if( ip[1] != YYNOCHAR ) {
if( yychar == YYNOCHAR ) {
yychar = yylex();
#ifdef YYDEBUG
if( yydebug )
fprintf(stdout, "lex read char %d, val %d\n", yychar, yylval);
#endif
}
while (ip[1]!=YYNOCHAR) {
if (ip[1]==yychar)
break;
ip += 2;
}
}
act = ip[0];
switch( act>>YYACTSH ) {
case YYSHIFTACT:
if( ip[1]==YYNOCHAR )
goto YYerract;
if( yychar != -1 )
yychar = YYNOCHAR; /* dont throw away EOF */
yystate = act&YYAMASK;
yyval = yylval;
#ifdef YYDEBUG
if( yydebug )
fprintf(stdout, "shift %d\n", yystate);
#endif
if( yyerrflag )
--yyerrflag;
goto stack;
case YYACCEPTACT:
#ifdef YYDEBUG
if( yydebug )
fprintf(stdout, "accept\n");
#endif
return(0);
case YYERRACT:
YYerract:
switch (yyerrflag) {
case 0:
yyerror("Syntax error");
case 1:
case 2:
yyerrflag = 3;
while( yys >= & yystack[0] ) {
ip = &yyact[yypa[*yys]];
while( ip[1]!=YYNOCHAR )
ip += 2;
if( (*ip&~YYAMASK) == (YYSHIFTACT<<YYACTSH) ) {
yystate = *ip&YYAMASK;
goto stack;
}
#ifdef YYDEBUG
if( yydebug )
fprintf(stderr, "error recovery leaves state %d, uncovers %d\n", *yys, yys[-1]);
#endif
yys--;
yyv--;
}
#ifdef YYDEBUG
if( yydebug )
fprintf(stderr, "no shift on error; abort\n");
#endif
return(1);
case 3:
#ifdef YYDEBUG
if( yydebug )
fprintf(stderr, "Error recovery clobbers char %o\n", yychar);
#endif
if( yychar==YYEOFVAL )
return(1);
yychar = YYNOCHAR;
goto read;
}
case YYREDACT:
pno = act&YYAMASK;
#ifdef YYDEBUG
if( yydebug )
fprintf(stdout, "reduce %d\n", pno);
#endif
yypvt = yyv;
yyv -= yypn[pno];
yys -= yypn[pno];
yyval = yyv[1];
switch(pno) {
case 3: {
#line 46 "sh.y"
sesp->s_node = NULL;
reset(RCMD);
NOTREACHED;
}break;
case 4: {
#line 52 "sh.y"
sesp->s_node = yypvt[-1].yu_node;
reset(errflag ? RERR : RCMD);
NOTREACHED;
}break;
case 5: {
#line 57 "sh.y"
keyflush();
keyflag = 1;
reset(RERR);
NOTREACHED;
}break;
case 10: {
#line 73 "sh.y"
yyval.yu_nval = NWHILE; }break;
case 11: {
#line 74 "sh.y"
yyval.yu_nval = NUNTIL; }break;
case 21: {
#line 94 "sh.y"
yyval.yu_node = yypvt[0].yu_node;
}break;
case 22: {
#line 97 "sh.y"
yyval.yu_node = node(NBACK, yypvt[-1].yu_node, NULL);
}break;
case 23: {
#line 100 "sh.y"
yyval.yu_node = yypvt[-1].yu_node;
}break;
case 24: {
#line 103 "sh.y"
yyval.yu_node = node(NBACK, yypvt[-2].yu_node, yypvt[0].yu_node);
}break;
case 25: {
#line 106 "sh.y"
yyval.yu_node = node(NLIST, yypvt[-2].yu_node, yypvt[0].yu_node);
}break;
case 26: {
#line 112 "sh.y"
yyval.yu_node = yypvt[0].yu_node;
}break;
case 27: {
#line 115 "sh.y"
yyval.yu_node = node(NORF, yypvt[-2].yu_node, yypvt[0].yu_node);
}break;
case 28: {
#line 118 "sh.y"
yyval.yu_node = node(NANDF, yypvt[-2].yu_node, yypvt[0].yu_node);
}break;
case 29: {
#line 124 "sh.y"
yyval.yu_node = node(NPIPE, yypvt[-2].yu_node, yypvt[0].yu_node);
}break;
case 30: {
#line 127 "sh.y"
yyval.yu_node = yypvt[0].yu_node;
}break;
case 31: {
#line 133 "sh.y"
yyval.yu_node = node(NCOMS, yypvt[0].yu_node, NULL);
keypop();
}break;
case 32: {
#line 140 "sh.y"
keypush();
keyflag = 1;
}break;
case 33: {
#line 147 "sh.y"
if ((yypvt[-1].yu_node->n_type == NCTRL && yypvt[0].yu_node->n_type == NARGS)
|| (yypvt[-1].yu_node->n_type == NARGS && yypvt[0].yu_node->n_type == NCTRL)) {
YYERROR;
}
(yyval.yu_node = yypvt[-1].yu_node)->n_next = yypvt[0].yu_node;
}break;
case 34: {
#line 154 "sh.y"
yyval.yu_node = yypvt[0].yu_node;
}break;
case 35: {
#line 160 "sh.y"
yyval.yu_node = node(NIORS, yypvt[0].yu_strp, NULL);
}break;
case 36: {
#line 163 "sh.y"
yyval.yu_node = node(NARGS, yypvt[0].yu_strp, NULL);
keyflag = 0;
}break;
case 37: {
#line 167 "sh.y"
yyval.yu_node = node(NASSG, yypvt[0].yu_strp, NULL);
}break;
case 38: {
#line 170 "sh.y"
if ( ! keyflag) {
YYERROR;
}
yyval.yu_node = node(NCTRL, yypvt[0].yu_node, NULL);
keyflag = 0;
}break;
case 39: {
#line 179 "sh.y"
yyval.yu_strp = duplstr(strt, 0);
}break;
case 40: {
#line 184 "sh.y"
yyval.yu_strp = duplstr(strt, 0);
}break;
case 41: {
#line 189 "sh.y"
yyval.yu_strp = duplstr(strt, 0);
}break;
case 42: {
#line 195 "sh.y"
yyval.yu_node = node(NFOR, yypvt[-4].yu_strp, node(NFOR2, yypvt[-3].yu_node, node(NLIST, yypvt[-1].yu_node, NULL)));
yyval.yu_node->n_next->n_next->n_next = yyval.yu_node->n_next;
}break;
case 43: {
#line 199 "sh.y"
yyval.yu_node = node(NCASE, yypvt[-4].yu_strp, yypvt[-1].yu_node);
}break;
case 44: {
#line 202 "sh.y"
yyval.yu_node = node(yypvt[-3].yu_nval, yypvt[-2].yu_node, node(NLIST, yypvt[-1].yu_node, NULL));
yyval.yu_node->n_next->n_next = yyval.yu_node;
}break;
case 45: {
#line 206 "sh.y"
yyval.yu_node = node(NIF, node(NNULL, yypvt[-4].yu_node, yypvt[-2].yu_node), yypvt[-1].yu_node);
}break;
case 46: {
#line 209 "sh.y"
yyval.yu_node = node(NPARN, yypvt[-1].yu_node, NULL);
}break;
case 47: {
#line 212 "sh.y"
yyval.yu_node = node(NBRAC, yypvt[-1].yu_node, NULL);
}break;
case 48: {
#line 218 "sh.y"
yyval.yu_node = yypvt[0].yu_node;
}break;
case 49: {
#line 221 "sh.y"
yyval.yu_node = node(NARGS, "\"$@\"", NULL);
}break;
case 50: {
#line 227 "sh.y"
yyval.yu_node = node(NARGS, yypvt[-1].yu_strp, yypvt[0].yu_node);
}break;
case 51: {
#line 230 "sh.y"
yyval.yu_node = NULL;
}break;
case 52: {
#line 236 "sh.y"
register NODE *np;
for (np=yypvt[-2].yu_node; np->n_next; np=np->n_next);
np->n_next = yypvt[0].yu_node;
yyval.yu_node = yypvt[-2].yu_node;
}break;
case 53: {
#line 243 "sh.y"
yyval.yu_node = yypvt[0].yu_node;
}break;
case 54: {
#line 246 "sh.y"
yyval.yu_node = NULL;
}break;
case 55: {
#line 252 "sh.y"
yyval.yu_node = node(NCASE2, yypvt[0].yu_node, yypvt[-2].yu_node);
}break;
case 56: {
#line 258 "sh.y"
yyval.yu_node = node(NCASE3, yypvt[-2].yu_strp, yypvt[0].yu_node);
}break;
case 57: {
#line 261 "sh.y"
yyval.yu_node = node(NCASE3, yypvt[0].yu_strp, NULL);
}break;
case 58: {
#line 267 "sh.y"
yyval.yu_node = yypvt[0].yu_node;
}break;
case 59: {
#line 270 "sh.y"
yyval.yu_node = NULL;
}break;
case 60: {
#line 276 "sh.y"
yyval.yu_node = node(NIF, node(NULL, yypvt[-3].yu_node, yypvt[-1].yu_node), yypvt[0].yu_node);
}break;
case 61: {
#line 279 "sh.y"
yyval.yu_node = node(NELSE, yypvt[0].yu_node, NULL);
}break;
case 62: {
#line 282 "sh.y"
yyval.yu_node = NULL;
}break;
case 63: {
#line 288 "sh.y"
yyval.yu_node = yypvt[0].yu_node;
}break;
case 64: {
#line 292 "sh.y"
yyval.yu_node = NULL;
}break;
case 65: {
#line 298 "sh.y"
yyval.yu_node = node(NLIST, yypvt[-2].yu_node, yypvt[0].yu_node);
}break;
case 66: {
#line 301 "sh.y"
yyval.yu_node = yypvt[-1].yu_node;
}break;
}
ip = &yygo[ yypgo[yypdnt[pno]] ];
while( *ip!=*yys && *ip!=YYNOCHAR )
ip += 2;
yystate = ip[1];
goto stack;
}
}