⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 y.tab.c

📁 早期freebsd实现
💻 C
📖 第 1 页 / 共 2 页
字号:
/* Copyright (c) 1979 Regents of the University of California */#ifndef lintstatic	char sccsid[] = "@(#)pas.y 8.1 6/6/93";#endif#include "whoami.h"#include "0.h"#include "tree_ty.h"		/* must be included for yy.h */#include "yy.h"#include "tree.h"#ifdef PI#define	lineof(l)	l#define	line2of(l)	l#endifextern yyerrflag;union semstack yyval;union semstack *yypv;yyactr(__np__){	register union semstack *yyYpv;	register struct tnode *p, *q;	yyYpv = yypv;switch(__np__){case 1: funcend(yyYpv[1].nl_entry, yyYpv[3].tr_entry, lineof(yyYpv[4].i_entry)); break;case 2: segend(); break;case 3: yyval.nl_entry = funcbody(funchdr(tree5(T_PROG, lineof(yyYpv[1].i_entry), yyYpv[2].tr_entry, fixlist(yyYpv[4].tr_entry), TR_NIL))); break;case 4: yyval.nl_entry = funcbody(funchdr(tree5(T_PROG, lineof(yyYpv[1].i_entry),  yyYpv[2].tr_entry, TR_NIL, TR_NIL))); break;case 5: {			yyPerror("Malformed program statement", PPROG);			/*			 * Should make a program statement			 * with "input" and "output" here.			 */			yyval.nl_entry = funcbody(funchdr(tree5(T_PROG, lineof(yyYpv[1].i_entry), TR_NIL, TR_NIL, TR_NIL)));		  } break;case 6: {			yyval.tr_entry = tree3(T_BSTL, lineof(yyYpv[1].i_entry), fixlist(yyYpv[2].tr_entry));			if (yyYpv[3].i_entry < 0)				brerror(yyYpv[1].i_entry, "begin");		  } break;case 7: trfree(); break;case 8: {			constend(), typeend(), varend(), trfree();			yyPerror("Malformed declaration", PDECL);		  } break;case 9: trfree(); break;case 11: constend(); break;case 12: typeend(); break;case 13: varend(); break;case 15: label(fixlist(yyYpv[2].tr_entry), lineof(yyYpv[1].i_entry)); break;case 16: yyval.tr_entry = newlist(yyYpv[1].i_entry == NIL ? TR_NIL :					(struct tnode *) *hash(yyYpv[1].cptr, 1)); break;case 17: yyval.tr_entry = addlist(yyYpv[1].tr_entry, yyYpv[3].i_entry == NIL ?				TR_NIL : (struct tnode *) *hash(yyYpv[3].cptr, 1)); break;case 18: constbeg(yyYpv[1].i_entry, lineof(yyYpv[1].i_entry)),		  constant(lineof(yyYpv[3].i_entry), yyYpv[2].cptr, yyYpv[4].tr_entry); break;case 19: constant(lineof(yyYpv[3].i_entry), yyYpv[2].cptr, yyYpv[4].tr_entry); break;case 20: {			constbeg(yyYpv[1].i_entry);Cerror:			yyPerror("Malformed const declaration", PDECL);		  } break;case 21: goto Cerror; break;case 22: typebeg(yyYpv[1].i_entry, line2of(yyYpv[2].i_entry)), type(lineof(yyYpv[3].i_entry), yyYpv[2].cptr, yyYpv[4].tr_entry); break;case 23: type(lineof(yyYpv[3].i_entry), yyYpv[2].cptr, yyYpv[4].tr_entry); break;case 24: {			typebeg(yyYpv[1].i_entry, line2of(yyYpv[1].i_entry));Terror:			yyPerror("Malformed type declaration", PDECL);		  } break;case 25: goto Terror; break;case 26: varbeg(yyYpv[1].i_entry, line2of(yyYpv[3].i_entry)), var(lineof(yyYpv[3].i_entry), fixlist(yyYpv[2].tr_entry), yyYpv[4].tr_entry); break;case 27: var(lineof(yyYpv[3].i_entry), fixlist(yyYpv[2].tr_entry), yyYpv[4].tr_entry); break;case 28: {			varbeg(yyYpv[1].i_entry, line2of(yyYpv[1].i_entry));Verror:			yyPerror("Malformed var declaration", PDECL);		  } break;case 29: goto Verror; break;case 30: funcfwd(yyYpv[1].nl_entry); break;case 31: (void) funcext(yyYpv[1].nl_entry); break;case 32: funcend(yyYpv[1].nl_entry, yyYpv[3].tr_entry, lineof(yyYpv[4].i_entry)); break;case 34: (void) funcbody(yyYpv[1].nl_entry); break;case 35: yyval.nl_entry = funchdr(tree5(yyYpv[1].i_entry, lineof(yyYpv[5].i_entry),				yyYpv[2].tr_entry, yyYpv[3].tr_entry, yyYpv[4].tr_entry)); break;case 36: yyval.i_entry = T_PDEC; break;case 37: yyval.i_entry = T_FDEC; break;case 38: yyval.tr_entry = fixlist(yyYpv[2].tr_entry); break;case 39: yyval.tr_entry = TR_NIL; break;case 40: yyval.tr_entry = tree3(T_PVAL, (int) fixlist(yyYpv[1].tr_entry), yyYpv[3].tr_entry); break;case 41: yyval.tr_entry = tree3(T_PVAR, (int) fixlist(yyYpv[2].tr_entry), yyYpv[4].tr_entry); break;case 42: yyval.tr_entry = tree5(T_PFUNC, (int) fixlist(yyYpv[2].tr_entry),				yyYpv[4].tr_entry, yyYpv[3].tr_entry, 				(struct tnode *) lineof(yyYpv[1].i_entry)); break;case 43: yyval.tr_entry = tree5(T_PPROC, (int) fixlist(yyYpv[2].tr_entry),				yyYpv[4].tr_entry, yyYpv[3].tr_entry, 				(struct tnode *) lineof(yyYpv[1].i_entry)); break;case 44: yyval = yyYpv[2]; break;case 45: yyval.tr_entry = TR_NIL; break;case 46: yyval.tr_entry = newlist(yyYpv[1].tr_entry); break;case 47: yyval.tr_entry = addlist(yyYpv[1].tr_entry, yyYpv[3].tr_entry); break;case 48: yyval.tr_entry = tree2(T_CSTRNG, yyYpv[1].i_entry); break;case 50: yyval.tr_entry = tree2(T_PLUSC, yyYpv[2].i_entry); break;case 51: yyval.tr_entry = tree2(T_MINUSC, yyYpv[2].i_entry); break;case 52: yyval.tr_entry = tree2(T_ID, yyYpv[1].i_entry); break;case 53: yyval.tr_entry = tree2(T_CINT, yyYpv[1].i_entry); break;case 54: yyval.tr_entry = tree2(T_CBINT, yyYpv[1].i_entry); break;case 55: yyval.tr_entry = tree2(T_CFINT, yyYpv[1].i_entry); break;case 56: yyval.tr_entry = newlist(yyYpv[1].tr_entry); break;case 57: yyval.tr_entry = addlist(yyYpv[1].tr_entry, yyYpv[3].tr_entry); break;case 59: yyval.tr_entry = tree3(T_TYPTR, lineof(yyYpv[1].i_entry), tree2(T_ID,								yyYpv[2].i_entry)); break;case 61: yyval.tr_entry = tree3(T_TYPACK, lineof(yyYpv[1].i_entry), yyYpv[2].tr_entry); break;case 63: yyval.tr_entry = tree3(T_TYSCAL, lineof(yyYpv[1].i_entry), fixlist(yyYpv[2].tr_entry)); break;case 64: yyval.tr_entry = tree4(T_TYRANG, lineof(yyYpv[2].i_entry), yyYpv[1].tr_entry,				yyYpv[3].tr_entry); break;case 65: yyval.tr_entry = tree4(T_TYARY, lineof(yyYpv[1].i_entry),					fixlist(yyYpv[3].tr_entry), yyYpv[6].tr_entry); break;case 66: yyval.tr_entry = tree3(T_TYFILE, lineof(yyYpv[1].i_entry), yyYpv[3].tr_entry); break;case 67: yyval.tr_entry = tree3(T_TYSET, lineof(yyYpv[1].i_entry), yyYpv[3].tr_entry); break;case 68: {			yyval.tr_entry = setuptyrec( lineof( yyYpv[1].i_entry ) , yyYpv[2].tr_entry);			if (yyYpv[3].i_entry < 0)				brerror(yyYpv[1].i_entry, "record");		  } break;case 69: yyval.tr_entry = newlist(yyYpv[1].tr_entry); break;case 70: yyval.tr_entry = addlist(yyYpv[1].tr_entry, yyYpv[3].tr_entry); break;case 71: yyval.tr_entry = tree4(T_FLDLST, lineof(NIL), 				fixlist(yyYpv[1].tr_entry), yyYpv[2].tr_entry); break;case 72: yyval.tr_entry = newlist(yyYpv[1].tr_entry); break;case 73: yyval.tr_entry = addlist(yyYpv[1].tr_entry, yyYpv[3].tr_entry); break;case 74: yyPerror("Malformed record declaration", PDECL); break;case 75: yyval.tr_entry = TR_NIL; break;case 76: yyval.tr_entry = tree4(T_RFIELD, lineof(yyYpv[2].i_entry),				fixlist(yyYpv[1].tr_entry), yyYpv[3].tr_entry); break;case 77: yyval.tr_entry = TR_NIL; break;case 78: yyval.tr_entry = tree5(T_TYVARPT, lineof(yyYpv[1].i_entry), TR_NIL, 				yyYpv[2].tr_entry, fixlist(yyYpv[4].tr_entry)); break;case 79: yyval.tr_entry = tree5(T_TYVARPT, lineof(yyYpv[1].i_entry),				yyYpv[2].tr_entry, yyYpv[4].tr_entry,					fixlist(yyYpv[6].tr_entry)); break;case 80: yyval.tr_entry = newlist(yyYpv[1].tr_entry); break;case 81: yyval.tr_entry = addlist(yyYpv[1].tr_entry, yyYpv[3].tr_entry); break;case 82: yyPerror("Malformed record declaration", PDECL); break;case 83: yyval.tr_entry = TR_NIL; break;case 84: yyval.tr_entry = tree4(T_TYVARNT,lineof(yyYpv[2].i_entry), fixlist(yyYpv[1].tr_entry),				yyYpv[4].tr_entry); break;case 85: yyval.tr_entry = newlist(yyYpv[1].tr_entry); break;case 86: {			if ((p = yyYpv[1].tr_entry) != TR_NIL && (q = p->list_node.list)->tag == T_IFX) {				q->tag = T_IFEL;				q->if_node.else_stmnt = yyYpv[2].tr_entry;			} else				yyval.tr_entry= addlist(yyYpv[1].tr_entry, yyYpv[2].tr_entry);		  } break;case 87: if ((q = yyYpv[1].tr_entry) != TR_NIL && (p = q->list_node.list) != TR_NIL && p->tag == T_IF) {			if (yychar < 0)				yychar = yylex();			if (yyshifts >= 2 && yychar == YELSE) {				recovered();				copy((char *) (&Y), (char *) (&OY), sizeof Y);				yerror("Deleted ';' before keyword else");				yychar = yylex();				p->tag = T_IFX;			}		  } break;case 88: yyval.tr_entry = newlist(yyYpv[1].tr_entry); break;case 89: yyval.tr_entry = addlist(yyYpv[1].tr_entry, yyYpv[3].tr_entry); break;case 90: {			yyval.tr_entry = TR_NIL;Kerror:			yyPerror("Malformed statement in case", PSTAT);		  } break;case 91: goto Kerror; break;case 92: yyval.tr_entry = tree4(T_CSTAT, lineof(yyYpv[2].i_entry),				fixlist(yyYpv[1].tr_entry), yyYpv[3].tr_entry); break;case 93: yyval.tr_entry = tree4(T_CSTAT, lineof(yyYpv[1].i_entry), TR_NIL,					yyYpv[2].tr_entry); break;case 94: yyval.tr_entry = TR_NIL; break;case 95: yyval.tr_entry = TR_NIL; break;case 96: yyval.tr_entry = tree4(T_LABEL, lineof(yyYpv[2].i_entry),				yyYpv[1].tr_entry == TR_NIL ? TR_NIL :					    (struct tnode *) *hash(yyYpv[1].cptr, 1), yyYpv[3].tr_entry); break;case 97: yyval.tr_entry = tree4(T_PCALL, lineof(yyline), yyYpv[1].tr_entry,						TR_NIL); break;case 98: yyval.tr_entry = tree4(T_PCALL, lineof(yyYpv[2].i_entry), yyYpv[1].tr_entry,					fixlist(yyYpv[3].tr_entry)); break;case 99: goto NSerror; break;case 101: {			yyval.tr_entry = tree3(T_BLOCK, lineof(yyYpv[1].i_entry),						fixlist(yyYpv[2].tr_entry));			if (yyYpv[3].i_entry < 0)				brerror(yyYpv[1].i_entry, "begin");		  } break;case 102: {			yyval.tr_entry = tree4(T_CASE, lineof(yyYpv[1].i_entry),					yyYpv[2].tr_entry, fixlist(yyYpv[4].tr_entry));			if (yyYpv[5].i_entry < 0)				brerror(yyYpv[1].i_entry, "case");		  } break;case 103: yyval.tr_entry = tree4(T_WITH, lineof(yyYpv[1].i_entry),				fixlist(yyYpv[2].tr_entry), yyYpv[4].tr_entry); break;case 104: yyval.tr_entry = tree4(T_WHILE, lineof(yyYpv[1].i_entry), yyYpv[2].tr_entry,					yyYpv[4].tr_entry); break;case 105: yyval.tr_entry = tree4(T_REPEAT, lineof(yyYpv[3].i_entry),				fixlist(yyYpv[2].tr_entry), yyYpv[4].tr_entry); break;case 106: yyval.tr_entry = tree5(T_FORU, lineof(yyYpv[1].i_entry), yyYpv[2].tr_entry,				yyYpv[4].tr_entry, yyYpv[6].tr_entry); break;case 107: yyval.tr_entry = tree5(T_FORD, lineof(yyYpv[1].i_entry), yyYpv[2].tr_entry,				yyYpv[4].tr_entry, yyYpv[6].tr_entry); break;case 108: yyval.tr_entry = tree3(T_GOTO, lineof(yyYpv[1].i_entry),				(struct tnode *) *hash(yyYpv[2].cptr, 1)); break;case 109: yyval.tr_entry = tree5(T_IF, lineof(yyYpv[1].i_entry), yyYpv[2].tr_entry,				yyYpv[4].tr_entry, TR_NIL); break;case 110: yyval.tr_entry = tree5(T_IFEL, lineof(yyYpv[1].i_entry), yyYpv[2].tr_entry,					yyYpv[4].tr_entry, yyYpv[6].tr_entry); break;case 111: {NSerror:			yyval.tr_entry = TR_NIL;			yyPerror("Malformed statement", PSTAT);		  } break;case 112: yyval.tr_entry = tree4(T_ASGN, lineof(yyYpv[2].i_entry), yyYpv[1].tr_entry,				    yyYpv[4].tr_entry); break;case 113: {NEerror:			yyval.tr_entry = TR_NIL;			yyPerror("Missing/malformed expression", PEXPR);		  } break;case 114: yyval.tr_entry = tree4(yyYpv[2].i_entry,			yyYpv[1].tr_entry->expr_node.const_tag == SAWCON ?			yyYpv[3].tr_entry->expr_node.const_tag :			yyYpv[1].tr_entry->expr_node.const_tag,			yyYpv[1].tr_entry, yyYpv[3].tr_entry); break;case 115: yyval.tr_entry = tree3(T_PLUS, yyYpv[2].tr_entry->expr_node.const_tag,				yyYpv[2].tr_entry); break;case 116: yyval.tr_entry = tree3(T_MINUS, yyYpv[2].tr_entry->expr_node.const_tag,				yyYpv[2].tr_entry); break;case 117: yyval.tr_entry = tree4(yyYpv[2].i_entry,			yyYpv[1].tr_entry->expr_node.const_tag == SAWCON ?			yyYpv[3].tr_entry->expr_node.const_tag :			yyYpv[1].tr_entry->expr_node.const_tag, yyYpv[1].tr_entry,			yyYpv[3].tr_entry); break;case 118: yyval.tr_entry = tree4(yyYpv[2].i_entry,			yyYpv[1].tr_entry->expr_node.const_tag == SAWCON ?			yyYpv[3].tr_entry->expr_node.const_tag :			yyYpv[1].tr_entry->expr_node.const_tag, yyYpv[1].tr_entry,			yyYpv[3].tr_entry); break;case 119: yyval.tr_entry = tree2(T_NIL, NOCON); break;case 120: yyval.tr_entry = tree3(T_STRNG, SAWCON, yyYpv[1].tr_entry); break;case 121: yyval.tr_entry = tree3(T_INT, NOCON, yyYpv[1].tr_entry); break;case 122: yyval.tr_entry = tree3(T_BINT, NOCON, yyYpv[1].tr_entry); break;case 123: yyval.tr_entry = tree3(T_FINT, NOCON, yyYpv[1].tr_entry); break;case 125: goto NEerror; break;case 126: yyval.tr_entry = tree4(T_FCALL, NOCON, yyYpv[1].tr_entry,			fixlist(yyYpv[3].tr_entry)); break;case 127: yyval.tr_entry = yyYpv[2].tr_entry; break;case 128: yyval.tr_entry = tree3(T_NOT, NOCON, yyYpv[2].tr_entry); break;case 129: yyval.tr_entry = tree3(T_CSET, SAWCON, fixlist(yyYpv[2].tr_entry)); break;case 130: yyval.tr_entry = tree3(T_CSET, SAWCON, TR_NIL); break;case 131: yyval.tr_entry = newlist(yyYpv[1].tr_entry); break;case 132: yyval.tr_entry = addlist(yyYpv[1].tr_entry, yyYpv[3].tr_entry); break;case 134: yyval.tr_entry = tree3(T_RANG, yyYpv[1].i_entry, yyYpv[3].tr_entry); break;case 135: {			yyval.tr_entry = setupvar(yyYpv[1].cptr, TR_NIL);		  } break;case 136: yyYpv[1].tr_entry->var_node.qual = 					fixlist(yyYpv[1].tr_entry->var_node.qual); break;case 137: yyval.tr_entry = setupvar(yyYpv[1].cptr, tree2(T_ARY, 				(int) fixlist(yyYpv[3].tr_entry))); break;case 138: yyYpv[1].tr_entry->var_node.qual =				addlist(yyYpv[1].tr_entry->var_node.qual,				tree2(T_ARY, (int) fixlist(yyYpv[3].tr_entry))); break;case 139: yyval.tr_entry = setupvar(yyYpv[1].cptr, setupfield(yyYpv[3].tr_entry,							TR_NIL)); break;case 140: yyYpv[1].tr_entry->var_node.qual =		    addlist(yyYpv[1].tr_entry->var_node.qual,		    setupfield(yyYpv[3].tr_entry, TR_NIL)); break;case 141: yyval.tr_entry = setupvar(yyYpv[1].cptr, tree1(T_PTR)); break;case 142: yyYpv[1].tr_entry->var_node.qual = 			addlist(yyYpv[1].tr_entry->var_node.qual, tree1(T_PTR)); break;case 144: yyval.tr_entry = tree4(T_WEXP, yyYpv[1].i_entry, yyYpv[3].tr_entry, TR_NIL); break;case 145: yyval.tr_entry = tree4(T_WEXP, yyYpv[1].i_entry, yyYpv[3].tr_entry,						yyYpv[5].tr_entry); break;case 146: yyval.tr_entry = tree4(T_WEXP, yyYpv[1].i_entry, TR_NIL, yyYpv[2].tr_entry); break;case 147: yyval.tr_entry = tree4(T_WEXP, yyYpv[1].i_entry, yyYpv[3].tr_entry,					yyYpv[4].tr_entry); break;case 148: yyval.i_entry = OCT; break;case 149: yyval.i_entry = HEX; break;case 150: yyval.tr_entry = newlist(yyYpv[1].tr_entry); break;case 151: yyval.tr_entry = addlist(yyYpv[1].tr_entry, yyYpv[3].tr_entry); break;case 152: yyval.tr_entry = newlist(yyYpv[1].tr_entry); break;case 153: yyval.tr_entry = addlist(yyYpv[1].tr_entry, yyYpv[3].tr_entry); break;case 154: yyval.i_entry = T_EQ; break;case 155: yyval.i_entry = T_LT; break;case 156: yyval.i_entry = T_GT; break;case 157: yyval.i_entry = T_NE; break;case 158: yyval.i_entry = T_LE; break;case 159: yyval.i_entry = T_GE; break;case 160: yyval.i_entry = T_IN; break;case 161: yyval.i_entry = T_ADD; break;case 162: yyval.i_entry = T_SUB; break;case 163: yyval.i_entry = T_OR; break;case 164: yyval.i_entry = T_OR; break;case 165: yyval.i_entry = T_MULT; break;case 166: yyval.i_entry = T_DIVD; break;case 167: yyval.i_entry = T_DIV; break;case 168: yyval.i_entry = T_MOD; break;case 169: yyval.i_entry = T_AND; break;case 170: yyval.i_entry = T_AND; break;case 173: yyval.tr_entry = newlist(yyYpv[1].tr_entry); break;case 174: yyval.tr_entry = addlist(yyYpv[1].tr_entry, yyYpv[3].tr_entry); break;case 175: yyval.tr_entry = newlist(yyYpv[1].tr_entry); break;case 176: yyval.tr_entry = addlist(yyYpv[1].tr_entry, yyYpv[3].tr_entry); break;case 178: {			yyval.tr_entry = tree3(T_TYID, lineof(yyline), yyYpv[1].tr_entry);		  } break;}}int yyact[] = {0,-286,8196,12297,0,16384,4096,12297,0,12290

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -