DataMuseum.dk

Presents historical artifacts from the history of:

Commodore CBM-900

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Commodore CBM-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦6c4e38090⟧ TextFile

    Length: 23983 (0x5daf)
    Types: TextFile
    Notes: UNIX file
    Names: »gram.c«

Derivation

└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
    └─⟦f4b8d8c84⟧ UNIX V7 Filesystem
        └─ ⟦this⟧ »cmd/bc/gram.c« 

TextFile


#line 4 "gram.y"

#include <stdio.h>
#include "bc.h"
#define	YYTNAMES


static code	*breakloc	= NULL,	/* where to go on break statement */
		*contloc	= NULL;	/* where to go on continue statement */
static dicent	*retfrom	= NULL,	/* what function to return from */
		**dvec,			/* list of locals */
		**pardvec,		/* list of formal parameters */
		**autdvec;		/* list of automatic variables */
static int	ldvec,			/* length of dvec */
		lpardvec,		/* length of pardvec */
		lautdvec;		/* length of autdvec */

#include "yy.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 672 "gram.y"



/*
 *	Yyerror is the error routine called on a syntax error by
 *	yyparse.
 */

yyerror(m)
char *m;
{
	register struct yytname *ptr;

	fprintf(stderr,"%s", m);
	for (ptr = yytnames; ptr->tn_name != NULL; ++ptr)
		if (ptr->tn_val == yychar) {
			fprintf(stderr," at %s", ptr->tn_name);
			break;
		}
	fprintf(stderr,"\n");
	allok = FALSE;
}
#ifdef YYTNAMES
struct yytname yytnames[55] =
{
	"$end", -1, 
	"error", -2, 
	"NUMBER", 256, 
	"STRING", 257, 
	"IDENTIFIER", 258, 
	"ADDAB", 259, 
	"AUTO", 260, 
	"BREAK", 261, 
	"CONTINUE", 262, 
	"DECR", 307, 
	"DEFINE", 264, 
	"DIVAB", 265, 
	"DO", 266, 
	"DOT", 267, 
	"ELSE", 268, 
	"EQP", 269, 
	"ERROR", 270, 
	"EXPAB", 271, 
	"FOR", 272, 
	"GEP", 273, 
	"GTP", 274, 
	"IBASE", 275, 
	"IF", 276, 
	"INCR", 306, 
	"LENGTH_", 278, 
	"LEP", 279, 
	"LTP", 280, 
	"MULAB", 281, 
	"NEP", 282, 
	"OBASE", 283, 
	"QUIT", 284, 
	"REMAB", 285, 
	"RETURN_", 286, 
	"SCALE_", 287, 
	"SQRT_", 288, 
	"SUBAB", 289, 
	"WHILE", 290, 
	"'='", 61, 
	"'+'", 43, 
	"'-'", 45, 
	"'*'", 42, 
	"'/'", 47, 
	"'%'", 37, 
	"'^'", 94, 
	"UMINUS", 308, 
	"'\\n'", 10, 
	"'('", 40, 
	"')'", 41, 
	"';'", 59, 
	"'$'", 36, 
	"'{'", 123, 
	"'}'", 125, 
	"','", 44, 
	"'['", 91, 
	"']'", 93, 
	NULL,
} ;
#endif
unsigned yypdnt[109] = {
00, 01, 01, 01, 01, 02, 02, 02, 
02, 02, 02, 02, 02, 02, 02, 02, 
02, 02, 02, 02, 02, 014, 014, 020, 
020, 05, 05, 013, 013, 021, 021, 011, 
012, 010, 06, 03, 022, 023, 023, 025, 
025, 026, 026, 027, 027, 024, 024, 015, 
015, 016, 016, 016, 016, 017, 017, 017, 
017, 017, 017, 017, 017, 017, 017, 017, 
017, 017, 017, 017, 017, 017, 017, 017, 
017, 017, 017, 030, 030, 037, 037, 035, 
035, 040, 040, 031, 033, 033, 033, 034, 
034, 034, 032, 032, 032, 032, 032, 032, 
036, 036, 036, 07, 07, 04, 04, 041, 
041, 041, 041, 041, 041, 
} ;
unsigned yypn[109] = {
02, 00, 02, 02, 03, 06, 012, 020, 
016, 02, 02, 02, 03, 02, 02, 03, 
02, 03, 03, 02, 01, 01, 01, 00, 
02, 00, 04, 00, 01, 01, 03, 00, 
00, 00, 00, 012, 02, 00, 01, 00, 
03, 01, 03, 01, 03, 00, 01, 01, 
01, 03, 04, 03, 03, 01, 01, 01, 
01, 04, 02, 02, 02, 02, 02, 02, 
02, 02, 02, 03, 03, 03, 03, 03, 
03, 03, 04, 01, 04, 01, 03, 00, 
01, 01, 03, 00, 01, 01, 01, 01, 
01, 01, 01, 01, 01, 01, 01, 01, 
01, 01, 01, 00, 03, 00, 03, 01, 
01, 01, 01, 01, 01, 
} ;
unsigned yypgo[34] = {
00, 00, 02, 020, 022, 024, 026, 034, 
042, 050, 072, 0106, 0112, 0144, 0176, 0220, 
0274, 0300, 0302, 0304, 0306, 0310, 0312, 0320, 
0322, 0362, 0364, 0370, 0372, 0432, 0434, 0436, 
0442, 0444, 
} ;
unsigned yygo[296] = {
0176030, 01, 01, 035, 0210, 0234, 0253, 0260, 
0262, 0270, 0263, 0271, 0310, 0311, 0176030, 0160, 
0176030, 036, 0176030, 0152, 0176030, 0247, 0205, 0231, 
0267, 0275, 0176030, 077, 0232, 0245, 0301, 0303, 
0176030, 0220, 0236, 0250, 0254, 0261, 0176030, 0146, 
0146, 0205, 0231, 0244, 0246, 0255, 0250, 0256, 
0261, 0267, 0271, 0276, 0304, 0306, 0311, 0312, 
0176030, 065, 0244, 0253, 0255, 0262, 0256, 0263, 
0274, 0301, 0306, 0310, 0176030, 0232, 0275, 0302, 
0176030, 0147, 05, 051, 07, 054, 010, 055, 
023, 072, 024, 073, 040, 0106, 041, 0116, 
050, 0137, 074, 0154, 0115, 0167, 0272, 0277, 
0305, 0307, 0176030, 037, 024, 074, 032, 0104, 
052, 0141, 066, 0150, 0122, 0174, 0124, 0176, 
0135, 0177, 0136, 0200, 0175, 0225, 0203, 0141, 
0207, 0233, 0275, 0150, 0176030, 0145, 01, 040, 
0105, 040, 0210, 040, 0253, 040, 0262, 040, 
0263, 040, 0273, 040, 0310, 040, 0176030, 075, 
01, 041, 030, 0101, 067, 0153, 0105, 041, 
0107, 0161, 0110, 0162, 0111, 0163, 0112, 0164, 
0113, 0165, 0114, 0166, 0155, 0221, 0210, 041, 
0217, 0235, 0232, 0221, 0237, 0251, 0253, 041, 
0262, 041, 0263, 041, 0273, 041, 0301, 0221, 
0310, 041, 0176030, 076, 0265, 0273, 0176030, 0105, 
0176030, 0151, 0176030, 042, 0176030, 0171, 0176030, 0242, 
0176030, 0265, 0224, 0243, 0264, 0272, 0176030, 0172, 
0176030, 0173, 011, 062, 020, 070, 030, 0102, 
067, 0102, 0107, 0102, 0110, 0102, 0111, 0102, 
0112, 0102, 0113, 0102, 0114, 0102, 0155, 0102, 
0217, 0102, 0232, 0102, 0237, 0102, 0301, 0102, 
0176030, 043, 0176030, 0123, 0123, 0175, 0176030, 0135, 
0176030, 044, 011, 063, 020, 071, 030, 0103, 
067, 0103, 0107, 0103, 0110, 0103, 0111, 0103, 
0112, 0103, 0113, 0103, 0114, 0103, 0155, 0103, 
0217, 0103, 0232, 0103, 0237, 0103, 0301, 0103, 
0176030, 045, 0176030, 0142, 0176030, 046, 0203, 0230, 
0176030, 0143, 0176030, 0144, 0221, 0237, 0176030, 0217, 
} ;
unsigned yypa[203] = {
00, 02, 070, 074, 0100, 0102, 0112, 0120, 
0120, 0126, 0140, 0144, 0146, 0150, 0154, 0160, 
0126, 0164, 0166, 0120, 0172, 0230, 0236, 0240, 
0242, 0274, 0276, 0330, 0332, 0334, 0336, 0340, 
0120, 0342, 0366, 0372, 0416, 0422, 0444, 0450, 
0120, 0452, 0454, 0276, 0506, 0510, 0512, 0516, 
0520, 0522, 0524, 0526, 0530, 0532, 0534, 0566, 
0620, 0622, 0624, 0626, 0120, 0630, 0632, 0650, 
0654, 0660, 0662, 0670, 0676, 0702, 0766, 0242, 
0242, 0242, 0242, 0242, 0242, 0120, 0770, 0772, 
0776, 01000, 0276, 01002, 0276, 01020, 01022, 01024, 
01026, 01030, 01032, 01034, 01036, 0276, 0276, 01040, 
01042, 01050, 01052, 01056, 01060, 01064, 0144, 01070, 
01074, 01076, 01102, 01106, 01140, 01142, 01174, 01176, 
01200, 01202, 01214, 01226, 01232, 01236, 01242, 01246, 
01250, 01254, 01260, 01262, 01266, 0276, 01270, 01272, 
01274, 01300, 01334, 01336, 01370, 0240, 01372, 0276, 
01374, 01456, 01460, 01462, 01464, 01466, 01470, 0242, 
01472, 01106, 01476, 01502, 01506, 01512, 01514, 01516, 
01520, 0144, 01142, 01522, 01524, 01530, 0532, 0242, 
01546, 01550, 01552, 01556, 01560, 01562, 0144, 01566, 
0144, 01570, 01606, 01374, 0532, 01560, 01560, 01612, 
01616, 0144, 01374, 01374, 01506, 0332, 01622, 0240, 
01626, 0144, 0120, 01630, 01560, 0534, 01714, 01716, 
01720, 01142, 01722, 01726, 0144, 0120, 01560, 01732, 
01374, 0144, 01734, 
} ;
unsigned yyact[990] = {
020001, 0176030, 02, 0177777, 04, 0400, 05, 0401, 
06, 0402, 07, 0405, 010, 0406, 011, 0463, 
012, 0410, 013, 0412, 014, 0413, 015, 0420, 
016, 0423, 017, 0424, 020, 0462, 021, 0426, 
022, 0433, 023, 0434, 024, 0436, 025, 0437, 
026, 0440, 027, 0442, 030, 055, 031, 012, 
032, 050, 033, 073, 034, 0173, 03, 0176030, 
040000, 0177777, 060000, 0176030, 047, 012, 060000, 0176030, 
020065, 0176030, 031, 012, 033, 073, 050, 044, 
060000, 0176030, 052, 050, 053, 0133, 020113, 0176030, 
031, 012, 033, 073, 060000, 0176030, 056, 0402, 
057, 0423, 060, 0433, 061, 0437, 060000, 0176030, 
064, 0402, 060000, 0176030, 020037, 0176030, 020066, 0176030, 
066, 050, 060000, 0176030, 020124, 075, 020127, 0176030, 
067, 050, 060000, 0176030, 020141, 0176030, 020125, 075, 
020130, 0176030, 04, 0400, 06, 0402, 011, 0463, 
014, 0413, 016, 0423, 020, 0462, 021, 0426, 
022, 0433, 025, 0437, 026, 0440, 030, 055, 
031, 012, 032, 050, 033, 073, 060000, 0176030, 
020126, 075, 020142, 050, 020131, 0176030, 020140, 0176030, 
020042, 0176030, 04, 0400, 06, 0402, 011, 0463, 
014, 0413, 057, 0423, 020, 0462, 021, 0426, 
060, 0433, 0100, 0437, 026, 0440, 030, 055, 
032, 050, 060000, 0176030, 020026, 0176030, 04, 0400, 
06, 0402, 011, 0463, 014, 0413, 016, 0423, 
020, 0462, 021, 0426, 022, 0433, 025, 0437, 
026, 0440, 030, 055, 032, 050, 060000, 0176030, 
020025, 0176030, 020027, 0176030, 020002, 0176030, 020003, 0176030, 
020024, 0176030, 0107, 053, 0110, 055, 0111, 052, 
0112, 057, 0113, 045, 0114, 0136, 031, 012, 
033, 073, 0115, 044, 060000, 0176030, 0117, 050, 
060000, 0176030, 0120, 0463, 0121, 0462, 0122, 075, 
020123, 0403, 020123, 0411, 020123, 0417, 020123, 0431, 
020123, 0435, 020123, 0441, 020067, 0176030, 0124, 075, 
060000, 0176030, 0125, 0403, 0126, 0463, 0127, 0411, 
0130, 0417, 0131, 0462, 0132, 0431, 0133, 0435, 
0134, 0441, 020070, 0176030, 0136, 050, 060000, 0176030, 
020004, 0176030, 020020, 0176030, 04, 0400, 0140, 0402, 
011, 0463, 014, 0413, 016, 0423, 020, 0462, 
021, 0426, 022, 0433, 025, 0437, 026, 0440, 
030, 055, 032, 050, 020117, 0176030, 020011, 0176030, 
020012, 0176030, 053, 0133, 020113, 0176030, 020127, 0176030, 
020130, 0176030, 020131, 0176030, 020074, 0176030, 020075, 0176030, 
020044, 0176030, 020041, 0176030, 04, 0400, 06, 0402, 
011, 0463, 014, 0413, 016, 0423, 020, 0462, 
021, 0426, 022, 0433, 025, 0437, 026, 0440, 
030, 055, 032, 050, 020033, 0176030, 04, 0400, 
06, 0402, 011, 0463, 014, 0413, 057, 0423, 
020, 0462, 021, 0426, 060, 0433, 0100, 0437, 
026, 0440, 030, 055, 032, 050, 020145, 0176030, 
020072, 0176030, 020073, 0176030, 020023, 0176030, 020013, 0176030, 
020057, 0176030, 0107, 053, 0110, 055, 0111, 052, 
0112, 057, 0113, 045, 0114, 0136, 020060, 0176030, 
0155, 050, 060000, 0176030, 020142, 050, 020131, 0176030, 
020102, 0176030, 0120, 0463, 0121, 0462, 020067, 0176030, 
0126, 0463, 0131, 0462, 020070, 0176030, 0156, 051, 
060000, 0176030, 04, 0400, 05, 0401, 06, 0402, 
07, 0405, 010, 0406, 011, 0463, 013, 0412, 
014, 0413, 015, 0420, 016, 0423, 017, 0424, 
020, 0462, 021, 0426, 022, 0433, 023, 0434, 
024, 0436, 025, 0437, 026, 0440, 027, 0442, 
030, 055, 031, 012, 032, 050, 033, 073, 
034, 0173, 0157, 0175, 060000, 0176030, 020015, 0176030, 
020016, 0176030, 0170, 0402, 020045, 0176030, 020100, 0176030, 
020076, 0176030, 0125, 0403, 0127, 0411, 0130, 0417, 
0132, 0431, 0133, 0435, 0134, 0441, 060000, 0176030, 
020132, 0176030, 020101, 0176030, 020135, 0176030, 020137, 0176030, 
020077, 0176030, 020134, 0176030, 020136, 0176030, 020133, 0176030, 
020021, 0176030, 052, 050, 0201, 0133, 020113, 0176030, 
020115, 0176030, 0202, 051, 060000, 0176030, 020121, 0176030, 
0203, 054, 020120, 0176030, 0204, 0135, 060000, 0176030, 
0206, 073, 060000, 0176030, 020035, 0176030, 0207, 054, 
020034, 0176030, 0210, 051, 060000, 0176030, 0211, 0415, 
0212, 0421, 0213, 0422, 0214, 0427, 0215, 0430, 
0216, 0432, 0107, 053, 0110, 055, 0111, 052, 
0112, 057, 0113, 045, 0114, 0136, 060000, 0176030, 
020014, 0176030, 04, 0400, 06, 0402, 011, 0463, 
014, 0413, 057, 0423, 020, 0462, 021, 0426, 
060, 0433, 0100, 0437, 026, 0440, 030, 055, 
032, 050, 020143, 0176030, 020111, 0176030, 020022, 0176030, 
020030, 0176030, 0111, 052, 0112, 057, 0113, 045, 
0114, 0136, 020107, 0176030, 0111, 052, 0112, 057, 
0113, 045, 0114, 0136, 020110, 0176030, 0114, 0136, 
020104, 0176030, 0114, 0136, 020105, 0176030, 0114, 0136, 
020106, 0176030, 0114, 0136, 020103, 0176030, 020017, 0176030, 
0222, 0133, 020053, 0176030, 0223, 051, 060000, 0176030, 
020046, 0176030, 0224, 054, 020051, 0176030, 020061, 0176030, 
020063, 0176030, 020064, 0176030, 0226, 051, 060000, 0176030, 
04, 0400, 06, 0402, 011, 0463, 014, 0413, 
016, 0423, 020, 0462, 021, 0426, 022, 0433, 
025, 0437, 026, 0440, 030, 055, 032, 050, 
0227, 0135, 060000, 0176030, 020071, 0176030, 04, 0400, 
0140, 0402, 011, 0463, 014, 0413, 016, 0423, 
020, 0462, 021, 0426, 022, 0433, 025, 0437, 
026, 0440, 030, 055, 032, 050, 060000, 0176030, 
020114, 0176030, 020040, 0176030, 04, 0400, 05, 0401, 
06, 0402, 07, 0405, 010, 0406, 011, 0463, 
013, 0412, 014, 0413, 015, 0420, 016, 0423, 
017, 0424, 020, 0462, 021, 0426, 022, 0433, 
023, 0434, 024, 0436, 025, 0437, 026, 0440, 
027, 0442, 030, 055, 031, 012, 032, 050, 
033, 073, 034, 0173, 060000, 0176030, 020151, 0176030, 
020152, 0176030, 020153, 0176030, 020150, 0176030, 020147, 0176030, 
020154, 0176030, 0236, 051, 060000, 0176030, 0240, 0135, 
060000, 0176030, 0241, 012, 020055, 0176030, 0170, 0402, 
060000, 0176030, 020062, 0176030, 020112, 0176030, 020116, 0176030, 
020122, 0176030, 020036, 0176030, 0246, 0414, 020031, 0176030, 
0107, 053, 0110, 055, 0111, 052, 0112, 057, 
0113, 045, 0114, 0136, 020146, 0176030, 020054, 0176030, 
020056, 0176030, 0252, 0173, 060000, 0176030, 020052, 0176030, 
020040, 0176030, 0254, 073, 060000, 0176030, 020005, 0176030, 
0107, 053, 0110, 055, 0111, 052, 0112, 057, 
0113, 045, 0114, 0136, 020144, 0176030, 0257, 012, 
060000, 0176030, 0264, 0404, 020047, 0176030, 0266, 0442, 
060000, 0176030, 0274, 050, 060000, 0176030, 020032, 0176030, 
04, 0400, 05, 0401, 06, 0402, 07, 0405, 
010, 0406, 011, 0463, 013, 0412, 014, 0413, 
015, 0420, 016, 0423, 017, 0424, 020, 0462, 
021, 0426, 022, 0433, 023, 0434, 024, 0436, 
025, 0437, 026, 0440, 027, 0442, 030, 055, 
031, 012, 032, 050, 033, 073, 034, 0173, 
0300, 0175, 060000, 0176030, 020006, 0176030, 020050, 0176030, 
020043, 0176030, 0304, 051, 060000, 0176030, 0305, 051, 
060000, 0176030, 020010, 0176030, 020007, 0176030, 
} ;
#include "action.h"
#define YYNOCHAR (-1000)
#define	yyerrok	yyerrflag=0
#define	yyclearin	yylval=YYNOCHAR
int yystack[YYMAXDEPTH];
YYSTYPE yyvstack[YYMAXDEPTH], *yyv;
int yychar;
int yydebug = 0;	/* No sir, not in the BSS */
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] ) {
		fprintf(stderr, "Stack overflow\n");
		exit(1);
	}
	*yys = yystate;
	*++yyv = yyval;
	if( yydebug )
		fprintf(stdout, "Stack state %d, char %d\n", yystate, yychar);

read:
	ip = &yyact[yypa[yystate]];
	if( ip[1] != YYNOCHAR ) {
		if( yychar == YYNOCHAR ) {
			yychar = yylex();
			if( yydebug )
				fprintf(stdout, "lex read char %d, val %d\n", yychar, yylval);
		}
		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;
		if( yydebug )
			fprintf(stdout, "shift %d\n", yystate);
		if( yyerrflag )
			--yyerrflag;
		goto stack;

	case YYACCEPTACT:
		if( yydebug )
			fprintf(stdout, "accept\n");
		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;
				}
				if( yydebug )
					fprintf(stderr, "error recovery leaves state %d, uncovers %d\n", *yys, yys[-1]);
				yys--;
				yyv--;
			}
			if( yydebug )
				fprintf(stderr, "no shift on error; abort\n");
			return(1);

		case 3:
			if( yydebug )
				fprintf(stderr, "Error recovery clobbers char %o\n", yychar);
			if( yychar==YYEOFVAL )
				return(1);
			yychar = YYNOCHAR;
			goto read;
		}

	case YYREDACT:
		pno = act&YYAMASK;
		if( yydebug )
			fprintf(stdout, "reduce %d\n", pno);
		yypvt = yyv;
		yyv -= yypn[pno];
		yys -= yypn[pno];
		yyval = yyv[1];
		switch(pno) {

case 2: {

#line 62 "gram.y"

		emitop(STOP);
		if (allok)
			interp();
		loc = cstream;
		allok = TRUE;
		breakloc = contloc = retfrom = NULL;
	}break;

case 3: {

#line 70 "gram.y"

		emitop(PGLSC);
		emitnum(&zero);
		emitop(LOAD);
		emitop(RETURN);
		emitid(retfrom);
		if (allok) {
			install(&retfrom->globalv.fvalue, pardvec, lpardvec,
				autdvec, lautdvec);
			mpfree(pardvec);
			mpfree(autdvec);
		}
		loc = cstream;
		allok = TRUE;
		breakloc = contloc = retfrom = NULL;
	}break;

case 4: {

#line 86 "gram.y"

		YYERROK;
		loc = cstream;
		allok = TRUE;
		breakloc = contloc = retfrom = NULL;
	}break;

case 5: {

#line 117 "gram.y"
					/* $6  */
			patch(yypvt[-3].location, yypvt[0].location);
		}break;

case 6: {

#line 133 "gram.y"
						/* $10 */
			patch(yypvt[-6].location, yypvt[-2].location);
			patch(yypvt[-3].location, loc);
			patch(yypvt[0].location, contloc);
			breakloc = yypvt[-4].location;			/* restore break */
			contloc = yypvt[-8].location;			/* restore continue */
		}break;

case 7: {

#line 159 "gram.y"
						/* $16 */
			patch(yypvt[-10].location, yypvt[-2].location);
			patch(yypvt[-7].location, loc);
			patch(yypvt[-3].location, yypvt[-11].location);
			patch(yypvt[0].location, contloc);
			breakloc = yypvt[-8].location;
			contloc = yypvt[-6].location;
		}break;

case 8: {

#line 182 "gram.y"
	/* $11 */
			patch(yypvt[-12].location, yypvt[-7].location);
			patch(yypvt[-10].location, loc);
			patch(yypvt[-8].location, yypvt[-3].location);
			patch(yypvt[-2].location, yypvt[-7].location);
			breakloc = yypvt[-11].location;
			contloc = yypvt[-9].location;
		}break;

case 9: {

#line 190 "gram.y"

		if (breakloc == NULL)
			gerror("Break not in loop");
		emitop(BRALW);
		emitaddr(breakloc);
	}break;

case 10: {

#line 196 "gram.y"

		if (contloc == NULL)
			gerror("Continue not in loop");
		emitop(BRALW);
		emitaddr(contloc);
	}break;

case 11: {

#line 202 "gram.y"

		if (retfrom == NULL)
			gerror("Return not in function");
		emitop(PGLSC);
		emitnum(&zero);
		emitop(LOAD);
		emitop(RETURN);
		emitid(retfrom);
	}break;

case 12: {

#line 211 "gram.y"

		if (retfrom == NULL)
			gerror("Return not in function");
		emitop(RETURN);
		emitid(retfrom);
	}break;

case 13: {

#line 217 "gram.y"

		emitop(POP);
	}break;

case 14: {

#line 220 "gram.y"

		emitop(PRNUM);
		emitop(PRNL);
	}break;

case 15: {

#line 224 "gram.y"

		emitop(PRNUM);
	}break;

case 16: {

#line 227 "gram.y"

		emitop(PRSTR);
		emitstr(yypvt[-1].svalue);
		emitop(PRNL);
	}break;

case 17: {

#line 232 "gram.y"

		emitop(PRSTR);
		emitstr(yypvt[-2].svalue);
	}break;

case 19: {

#line 237 "gram.y"

		return(0);
	}break;

case 25: {

#line 257 "gram.y"

		yyval.location = loc;
	}break;

case 26: {

#line 260 "gram.y"

		yyval.location = yypvt[-1].location;
		patch(yypvt[-2].location, loc);
	}break;

case 29: {

#line 274 "gram.y"

		emitop(POP);
	}break;

case 30: {

#line 277 "gram.y"

		emitop(POP);
	}break;

case 31: {

#line 284 "gram.y"

		emitop(BRALW);
		yyval.location = emitzap;
	}break;

case 32: {

#line 292 "gram.y"

		yyval.location = loc;
	}break;

case 33: {

#line 299 "gram.y"

		yyval.location = breakloc;
		breakloc = loc;
	}break;

case 34: {

#line 307 "gram.y"

		yyval.location = contloc;
		contloc = loc;
	}break;

case 36: {

#line 326 "gram.y"

		chkfunc(yypvt[0].dvalue);
		retfrom = yypvt[0].dvalue;
		ldvec = 0;
	}break;

case 37: {

#line 335 "gram.y"

		pardvec = NULL;
		lpardvec = 0;
	}break;

case 38: {

#line 339 "gram.y"

		pardvec = dvec;
		lpardvec = ldvec;
		locaddr(pardvec, lpardvec, 0);
		ldvec = 0;
	}break;

case 39: {

#line 349 "gram.y"

		autdvec = NULL;
		lautdvec = 0;
	}break;

case 40: {

#line 353 "gram.y"

		autdvec = dvec;
		lautdvec = ldvec;
		locaddr(autdvec, lautdvec, lpardvec);
	}break;

case 41: {

#line 362 "gram.y"

		dvec = (dicent **)mpalc(ldvec * sizeof (*dvec));
		dvec += ldvec;
		*--dvec = yypvt[0].dvalue;
	}break;

case 42: {

#line 367 "gram.y"

		*--dvec = yypvt[-2].dvalue;
	}break;

case 43: {

#line 374 "gram.y"

		if (yypvt[0].dvalue->localt != UNDEFINED)
			gerror("Attempt to redeclare %s", yypvt[0].dvalue->word);
		yypvt[0].dvalue->localt = SCALAR;
		++ldvec;
		/* $$ = $1 */
	}break;

case 44: {

#line 381 "gram.y"

		if (yypvt[-2].dvalue->localt != UNDEFINED)
			gerror("Attempt to redeclare %s", yypvt[-2].dvalue->word);
		yypvt[-2].dvalue->localt = ARRAY;
		++ldvec;
		/* $$ = $1 */
	}break;

case 49: {

#line 408 "gram.y"

		emitop(STORE);
	}break;

case 50: {

#line 411 "gram.y"

		emitop(yypvt[-1].opcode);
		emitop(STORE);
	}break;

case 51: {

#line 415 "gram.y"

		emitop(yypvt[-2].opcode);
	}break;

case 52: {

#line 418 "gram.y"

		emitop(yypvt[-1].opcode);
		emitop(yypvt[-2].opcode);
	}break;

case 53: {

#line 426 "gram.y"

		emitop(PGLSC);
		emitnum(yypvt[0].lvalue);
		emitop(LOAD);
	}break;

case 54: {

#line 431 "gram.y"

		emitop(PGLSC);
		emitnum(&dot);
		emitop(LOAD);
	}break;

case 55: {

#line 436 "gram.y"

		emitop(LOAD);
	}break;

case 57: {

#line 440 "gram.y"

		chkfunc(yypvt[-3].dvalue);
		emitop(CALL);
		emitid(yypvt[-3].dvalue);
		emitcnt(yypvt[-1].ivalue);
	}break;

case 58: {

#line 446 "gram.y"

		emitop(PRVAL);
		emitop(INC);
		emitop(STORE);
	}break;

case 59: {

#line 451 "gram.y"

		emitop(INC);
		emitop(yypvt[0].opcode);
	}break;

case 60: {

#line 455 "gram.y"

		emitop(PRVAL);
		emitop(DEC);
		emitop(STORE);
	}break;

case 61: {

#line 460 "gram.y"

		emitop(DEC);
		emitop(yypvt[0].opcode);
	}break;

case 62: {

#line 464 "gram.y"

		emitop(PRVAL);
		emitop(INC);
		emitop(STORE);
		emitop(DEC);
	}break;

case 63: {

#line 470 "gram.y"

		emitop(INC);
		emitop(yypvt[-1].opcode);
		emitop(DEC);
	}break;

case 64: {

#line 475 "gram.y"

		emitop(PRVAL);
		emitop(DEC);
		emitop(STORE);
		emitop(INC);
	}break;

case 65: {

#line 481 "gram.y"

		emitop(DEC);
		emitop(yypvt[-1].opcode);
		emitop(INC);
	}break;

case 66: {

#line 486 "gram.y"

		emitop(NEG);
	}break;

case 67: {

#line 489 "gram.y"

		emitop(EXP);
	}break;

case 68: {

#line 492 "gram.y"

		emitop(MUL);
	}break;

case 69: {

#line 495 "gram.y"

		emitop(DIV);
	}break;

case 70: {

#line 498 "gram.y"

		emitop(REM);
	}break;

case 71: {

#line 501 "gram.y"

		emitop(ADD);
	}break;

case 72: {

#line 504 "gram.y"

		emitop(SUB);
	}break;

case 74: {

#line 508 "gram.y"

		emitop(yypvt[-3].opcode);
	}break;

case 75: {

#line 515 "gram.y"

		sload(yypvt[0].dvalue);
	}break;

case 76: {

#line 518 "gram.y"

		aeload(yypvt[-3].dvalue);
	}break;

case 78: {

#line 526 "gram.y"

		arload(yypvt[-2].dvalue);
	}break;

case 79: {

#line 533 "gram.y"

		yyval.ivalue = 0;
	}break;

case 81: {

#line 542 "gram.y"

		yyval.ivalue = 1;
	}break;

case 82: {

#line 545 "gram.y"

		yyval.ivalue = yypvt[-2].ivalue + 1;
	}break;

case 83: {

#line 552 "gram.y"

		emitop(PRVAL);
	}break;

case 84: {

#line 559 "gram.y"

		yyval.opcode = SIBASE;
	}break;

case 85: {

#line 562 "gram.y"

		yyval.opcode = SOBASE;
	}break;

case 86: {

#line 565 "gram.y"

		yyval.opcode = SSCALE;
	}break;

case 87: {

#line 572 "gram.y"

		emitop(LIBASE);
		yyval.opcode = SIBASE;
	}break;

case 88: {

#line 576 "gram.y"

		emitop(LOBASE);
		yyval.opcode = SOBASE;
	}break;

case 89: {

#line 580 "gram.y"

		emitop(LSCALE);
		yyval.opcode = SSCALE;
	}break;

case 90: {

#line 588 "gram.y"

		yyval.opcode = ADD;
	}break;

case 91: {

#line 591 "gram.y"

		yyval.opcode = SUB;
	}break;

case 92: {

#line 594 "gram.y"

		yyval.opcode = MUL;
	}break;

case 93: {

#line 597 "gram.y"

		yyval.opcode = DIV;
	}break;

case 94: {

#line 600 "gram.y"

		yyval.opcode = REM;
	}break;

case 95: {

#line 603 "gram.y"

		yyval.opcode = EXP;
	}break;

case 96: {

#line 610 "gram.y"

		yyval.opcode = SQRT;
	}break;

case 97: {

#line 613 "gram.y"

		yyval.opcode = LENGTH;
	}break;

case 98: {

#line 616 "gram.y"

		yyval.opcode = SCALE;
	}break;

case 99: {

#line 627 "gram.y"

		emitop(BRALW);
		yyval.location = emitzap;
	}break;

case 100: {

#line 631 "gram.y"

		emitop(yypvt[-1].opcode);
		yyval.location = emitzap;
	}break;

case 101: {

#line 639 "gram.y"

		emitop(BRNEV);
		yyval.location = emitzap;
	}break;

case 102: {

#line 643 "gram.y"

		emitop(negate(yypvt[-1].opcode));
		yyval.location = emitzap;
	}break;

case 103: {

#line 651 "gram.y"

		yyval.opcode = BRLT;
	}break;

case 104: {

#line 654 "gram.y"

		yyval.opcode = BRLE;
	}break;

case 105: {

#line 657 "gram.y"

		yyval.opcode = BREQ;
	}break;

case 106: {

#line 660 "gram.y"

		yyval.opcode = BRGE;
	}break;

case 107: {

#line 663 "gram.y"

		yyval.opcode = BRGT;
	}break;

case 108: {

#line 666 "gram.y"

		yyval.opcode = BRNE;
	}break;

		}
		ip = &yygo[ yypgo[yypdnt[pno]] ];
		while( *ip!=*yys && *ip!=YYNOCHAR )
			ip += 2;
		yystate = ip[1];
		goto stack;
	}
}