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

📄 eqn.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
📖 第 1 页 / 共 2 页
字号:
yystack:	/* put a state and value onto the stack */	if(yydebug >= 4)		printf("char %s in %s", yytokname(yychar), yystatname(yystate));	yyp++;	if(yyp >= &yys[YYMAXDEPTH]) {		yyerror("yacc stack overflow");		goto ret1;	}	yyp->yys = yystate;	yyp->yyv = yyval;yynewstate:	yyn = yypact[yystate];	if(yyn <= YYFLAG)		goto yydefault; /* simple state */	if(yychar < 0)		yychar = yylex1();	yyn += yychar;	if(yyn < 0 || yyn >= YYLAST)		goto yydefault;	yyn = yyact[yyn];	if(yychk[yyn] == yychar) { /* valid shift */		yychar = -1;		yyval = yylval;		yystate = yyn;		if(yyerrflag > 0)			yyerrflag--;		goto yystack;	}yydefault:	/* default state action */	yyn = yydef[yystate];	if(yyn == -2) {		if(yychar < 0)			yychar = yylex1();		/* look through exception table */		for(yyxi=yyexca;; yyxi+=2)			if(yyxi[0] == -1 && yyxi[1] == yystate)				break;		for(yyxi += 2;; yyxi += 2) {			yyn = yyxi[0];			if(yyn < 0 || yyn == yychar)				break;		}		yyn = yyxi[1];		if(yyn < 0)			goto ret0;	}	if(yyn == 0) {		/* error ... attempt to resume parsing */		switch(yyerrflag) {		case 0:   /* brand new error */			yyerror("syntax error");			if(yydebug >= 1) {				printf("%s", yystatname(yystate));				printf("saw %s\n", yytokname(yychar));			}yyerrlab:			yynerrs++;		case 1:		case 2: /* incompletely recovered error ... try again */			yyerrflag = 3;			/* find a state where "error" is a legal shift action */			while(yyp >= yys) {				yyn = yypact[yyp->yys] + YYERRCODE;				if(yyn >= 0 && yyn < YYLAST) {					yystate = yyact[yyn];  /* simulate a shift of "error" */					if(yychk[yystate] == YYERRCODE)						goto yystack;				}				/* the current yyp has no shift onn "error", pop stack */				if(yydebug >= 2)					printf("error recovery pops state %d, uncovers %d\n",						yyp->yys, (yyp-1)->yys );				yyp--;			}			/* there is no state on the stack with an error shift ... abort */			goto ret1;		case 3:  /* no shift yet; clobber input char */			if(yydebug >= YYEOFCODE)				printf("error recovery discards %s\n", yytokname(yychar));			if(yychar == YYEOFCODE)				goto ret1;			yychar = -1;			goto yynewstate;   /* try again in the same state */		}	}	/* reduction by production yyn */	if(yydebug >= 2)		printf("reduce %d in:\n\t%s", yyn, yystatname(yystate));	yypt = yyp;	yyp -= yyr2[yyn];	yyval = (yyp+1)->yyv;	yym = yyn;	/* consult goto table to find next state */	yyn = yyr1[yyn];	yyg = yypgo[yyn];	yyj = yyg + yyp->yys + 1;	if(yyj >= YYLAST || yychk[yystate=yyact[yyj]] != -yyn)		yystate = yyact[yyg];	switch(yym) {		case 1:#line	24	"/sys/src/cmd/eqn/eqn.y"{ putout(yypt[-0].yyv); } break;case 2:#line	25	"/sys/src/cmd/eqn/eqn.y"{ ERROR "syntax error" WARNING; } break;case 3:#line	26	"/sys/src/cmd/eqn/eqn.y"{ eqnreg = 0; } break;case 5:#line	30	"/sys/src/cmd/eqn/eqn.y"{ eqnbox(yypt[-1].yyv, yypt[-0].yyv, 0); } break;case 6:#line	31	"/sys/src/cmd/eqn/eqn.y"{ eqnbox(yypt[-1].yyv, yypt[-0].yyv, 1); } break;case 7:#line	32	"/sys/src/cmd/eqn/eqn.y"{ lineup(0); } break;case 8:#line	35	"/sys/src/cmd/eqn/eqn.y"{ yyval = yypt[-0].yyv; lineup(1); } break;case 9:#line	38	"/sys/src/cmd/eqn/eqn.y"{ yyval = yypt[-0].yyv; } break;case 10:#line	39	"/sys/src/cmd/eqn/eqn.y"{ yyval = 0; } break;case 11:#line	42	"/sys/src/cmd/eqn/eqn.y"{ yyval = yypt[-0].yyv; } break;case 12:#line	43	"/sys/src/cmd/eqn/eqn.y"{ yyval = 0; } break;case 13:#line	46	"/sys/src/cmd/eqn/eqn.y"{ yyval = yypt[-1].yyv; } break;case 14:#line	47	"/sys/src/cmd/eqn/eqn.y"{ text(QTEXT, (char *) yypt[-0].yyv); } break;case 15:#line	48	"/sys/src/cmd/eqn/eqn.y"{ text(CONTIG, (char *) yypt[-0].yyv); } break;case 16:#line	49	"/sys/src/cmd/eqn/eqn.y"{ text(SPACE, (char *) 0); } break;case 17:#line	50	"/sys/src/cmd/eqn/eqn.y"{ text(THIN, (char *) 0); } break;case 18:#line	51	"/sys/src/cmd/eqn/eqn.y"{ text(TAB, (char *) 0); } break;case 19:#line	52	"/sys/src/cmd/eqn/eqn.y"{ funny(SUM); } break;case 20:#line	53	"/sys/src/cmd/eqn/eqn.y"{ funny(PROD); } break;case 21:#line	54	"/sys/src/cmd/eqn/eqn.y"{ funny(UNION); } break;case 22:#line	55	"/sys/src/cmd/eqn/eqn.y"{ funny(INTER); } break;case 23:#line	56	"/sys/src/cmd/eqn/eqn.y"{ boverb(yypt[-2].yyv, yypt[-0].yyv); } break;case 24:#line	57	"/sys/src/cmd/eqn/eqn.y"{ mark(yypt[-0].yyv); } break;case 25:#line	58	"/sys/src/cmd/eqn/eqn.y"{ size(yypt[-1].yyv, yypt[-0].yyv); } break;case 26:#line	59	"/sys/src/cmd/eqn/eqn.y"{ font(yypt[-1].yyv, yypt[-0].yyv); } break;case 27:#line	60	"/sys/src/cmd/eqn/eqn.y"{ fatbox(yypt[-0].yyv); } break;case 28:#line	61	"/sys/src/cmd/eqn/eqn.y"{ sqrt(yypt[-0].yyv); } break;case 29:#line	62	"/sys/src/cmd/eqn/eqn.y"{ps -= deltaps;} break;case 30:#line	62	"/sys/src/cmd/eqn/eqn.y"{ subsup(yypt[-4].yyv, yypt[-1].yyv, yypt[-0].yyv); } break;case 31:#line	63	"/sys/src/cmd/eqn/eqn.y"{ps -= deltaps;} break;case 32:#line	63	"/sys/src/cmd/eqn/eqn.y"{ subsup(yypt[-3].yyv, 0, yypt[-0].yyv); } break;case 33:#line	64	"/sys/src/cmd/eqn/eqn.y"{ps -= deltaps;} break;case 34:#line	64	"/sys/src/cmd/eqn/eqn.y"{ integral(yypt[-4].yyv, yypt[-1].yyv, yypt[-0].yyv); } break;case 35:#line	65	"/sys/src/cmd/eqn/eqn.y"{ps -= deltaps;} break;case 36:#line	65	"/sys/src/cmd/eqn/eqn.y"{ integral(yypt[-3].yyv, 0, yypt[-0].yyv); } break;case 37:#line	66	"/sys/src/cmd/eqn/eqn.y"{ integral(yypt[-0].yyv, 0, 0); } break;case 38:#line	67	"/sys/src/cmd/eqn/eqn.y"{ps -= deltaps;} break;case 39:#line	67	"/sys/src/cmd/eqn/eqn.y"{ fromto(yypt[-4].yyv, yypt[-1].yyv, yypt[-0].yyv); } break;case 40:#line	68	"/sys/src/cmd/eqn/eqn.y"{ps -= deltaps;} break;case 41:#line	68	"/sys/src/cmd/eqn/eqn.y"{ fromto(yypt[-3].yyv, 0, yypt[-0].yyv); } break;case 42:#line	69	"/sys/src/cmd/eqn/eqn.y"{ paren(yypt[-2].yyv, yypt[-1].yyv, yypt[-0].yyv); } break;case 43:#line	70	"/sys/src/cmd/eqn/eqn.y"{ paren(yypt[-1].yyv, yypt[-0].yyv, 0); } break;case 44:#line	71	"/sys/src/cmd/eqn/eqn.y"{ diacrit(yypt[-1].yyv, yypt[-0].yyv); } break;case 45:#line	72	"/sys/src/cmd/eqn/eqn.y"{ move(FWD, yypt[-1].yyv, yypt[-0].yyv); } break;case 46:#line	73	"/sys/src/cmd/eqn/eqn.y"{ move(UP, yypt[-1].yyv, yypt[-0].yyv); } break;case 47:#line	74	"/sys/src/cmd/eqn/eqn.y"{ move(BACK, yypt[-1].yyv, yypt[-0].yyv); } break;case 48:#line	75	"/sys/src/cmd/eqn/eqn.y"{ move(DOWN, yypt[-1].yyv, yypt[-0].yyv); } break;case 49:#line	76	"/sys/src/cmd/eqn/eqn.y"{ pile(yypt[-0].yyv); ct = yypt[-0].yyv; } break;case 50:#line	77	"/sys/src/cmd/eqn/eqn.y"{yyval=ct;} break;case 51:#line	77	"/sys/src/cmd/eqn/eqn.y"{ matrix(yypt[-3].yyv); ct = yypt[-3].yyv; } break;case 52:#line	80	"/sys/src/cmd/eqn/eqn.y"{ setintegral(); } break;case 53:#line	83	"/sys/src/cmd/eqn/eqn.y"{ yyval = atoi((char *) yypt[-1].yyv); } break;case 54:#line	84	"/sys/src/cmd/eqn/eqn.y"{ yyval = atoi((char *) yypt[-1].yyv); } break;case 55:#line	85	"/sys/src/cmd/eqn/eqn.y"{ yyval = atoi((char *) yypt[-1].yyv); } break;case 56:#line	86	"/sys/src/cmd/eqn/eqn.y"{ yyval = atoi((char *) yypt[-1].yyv); } break;case 57:#line	88	"/sys/src/cmd/eqn/eqn.y"{ yyval = HAT; } break;case 58:#line	89	"/sys/src/cmd/eqn/eqn.y"{ yyval = VEC; } break;case 59:#line	90	"/sys/src/cmd/eqn/eqn.y"{ yyval = DYAD; } break;case 60:#line	91	"/sys/src/cmd/eqn/eqn.y"{ yyval = BAR; } break;case 61:#line	92	"/sys/src/cmd/eqn/eqn.y"{ yyval = LOWBAR; } break;case 62:#line	93	"/sys/src/cmd/eqn/eqn.y"{ yyval = HIGHBAR; } break;case 63:#line	94	"/sys/src/cmd/eqn/eqn.y"{ yyval = UNDER; } break;case 64:#line	95	"/sys/src/cmd/eqn/eqn.y"{ yyval = DOT; } break;case 65:#line	96	"/sys/src/cmd/eqn/eqn.y"{ yyval = TILDE; } break;case 66:#line	97	"/sys/src/cmd/eqn/eqn.y"{ yyval = UTILDE; } break;case 67:#line	98	"/sys/src/cmd/eqn/eqn.y"{ yyval = DOTDOT; } break;case 68:#line	101	"/sys/src/cmd/eqn/eqn.y"{ yyval = ((char *)yypt[-0].yyv)[0]; } break;case 69:#line	102	"/sys/src/cmd/eqn/eqn.y"{ yyval = '{'; } break;case 70:#line	105	"/sys/src/cmd/eqn/eqn.y"{ yyval = ((char *)yypt[-0].yyv)[0]; } break;case 71:#line	106	"/sys/src/cmd/eqn/eqn.y"{ yyval = '}'; } break;case 74:#line	113	"/sys/src/cmd/eqn/eqn.y"{ column(yypt[-3].yyv, DEFGAP); } break;case 75:#line	114	"/sys/src/cmd/eqn/eqn.y"{yyval=atoi((char*)yypt[-0].yyv);} break;case 76:#line	114	"/sys/src/cmd/eqn/eqn.y"{ column(yypt[-5].yyv, yypt[-3].yyv); } break;case 77:#line	117	"/sys/src/cmd/eqn/eqn.y"{ yyval = startcol(LCOL); } break;case 78:#line	118	"/sys/src/cmd/eqn/eqn.y"{ yyval = startcol(CCOL); } break;case 79:#line	119	"/sys/src/cmd/eqn/eqn.y"{ yyval = startcol(RCOL); } break;case 80:#line	120	"/sys/src/cmd/eqn/eqn.y"{ yyval = startcol(COL); } break;case 81:#line	123	"/sys/src/cmd/eqn/eqn.y"{ lp[ct++] = yypt[-0].yyv; } break;case 82:#line	124	"/sys/src/cmd/eqn/eqn.y"{ lp[ct++] = yypt[-0].yyv; } break;case 83:#line	127	"/sys/src/cmd/eqn/eqn.y"{ yyval = ps; setsize((char *) yypt[-0].yyv); } break;case 84:#line	130	"/sys/src/cmd/eqn/eqn.y"{ static char R[]="R"; setfont(R); } break;case 85:#line	131	"/sys/src/cmd/eqn/eqn.y"{ static char I[]="I"; setfont(I); } break;case 86:#line	132	"/sys/src/cmd/eqn/eqn.y"{ static char B[]="B"; setfont(B); } break;case 87:#line	133	"/sys/src/cmd/eqn/eqn.y"{ setfont((char *)yypt[-0].yyv); } break;	}	goto yystack;  /* stack new state and value */}

⌨️ 快捷键说明

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