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

📄 print.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
字号:
#include "defs"char *ops[ ] = 	{ "", "+", "-", "*", "/", "**",	".not. ", " .and. ", ".andand.", ".oror.", " .or. ",	" .eq. ", " .lt. ", " .gt. ", " .le. ", " .ge. ", " .ne. ",	"(", ")", " = ", ", " };int opprecs[ ]	= { 0, 7, 7, 8, 8, 9, 5, 4, 4, 3, 3,		6, 6, 6, 6, 6, 6, 10, 10, 1, 0 };char *qualops[ ]	= { "", "->", ".", " of ", " sub " };char *classes[ ]	= { "", "arg ", "valarg ", "static ", "auto ",			"common ", "mos ", "external ", "statement function " };char *precs[ ]	= { "", "long " };char *types[ ]	= { "", "integer ", "real ", "double precision ", "logical ",			"complex ", "char ", "type " };char *ftntypes[]	= { "integer ", "real ", "logical ", "complex ",			"double precision ", 0, 0 };char *langs[]	= { "pfort", "ratfor", "efl"};propts(){fprintf(diagfile, "Options: ");fprintf(diagfile, "%s ", langs[langopt]);fprintf(diagfile, "%s ", (dbgopt ? "debug" : "ndebug") );fprintf(diagfile, "%s ", (dotsopt? "dotson" : "dotsoff") );fprintf(diagfile, "\n");}prexpr(e)ptr e;{if(e)  prexp1(e, 0,0,0);}prexp1(e, prec, subt, leftside)register ptr e;int prec, subt, leftside;{ptr p, q;int prec1, needpar;needpar = 0;switch(e->tag)	{case TERROR:	break;case TCONST:	TEST fprintf(diagfile, "%s", e->leftp);	if(e->rightp)		putzcon(e);	else		putconst(e->vtype, e->leftp);	break;case TFTNBLOCK:	putname(e);	break;case TNAME:	if(e->sthead == 0) fatal("name without entry");	TEST fprintf(diagfile, "%s", e->sthead->namep);	putname(e);	if(e->vsubs)		prexp1(e->vsubs, 0,0,0);	break;case TTEMP:	TEST fprintf(diagfile, "(fakename %o)", e);	putname(e);	break;case TLIST:	if(e->leftp == 0) break;	TEST fprintf(diagfile, "( ");	putic(ICOP, OPLPAR);	for(p=e->leftp ; p!=0 ; p = p->nextp)		{		prexp1(p->datap, 0,0,0);		if(p->nextp)			{			TEST fprintf(diagfile, " , ");			putic(ICOP, OPCOMMA);			}		}	TEST fprintf(diagfile, " )");	putic(ICOP, OPRPAR);	break;case TSTFUNCT:	fprintf(diagfile, "statement function ");	prexp1(e->leftp, 0,0,0);	TEST fprintf(diagfile, " = ");	putic(ICOP, OPEQUALS);	prexp1(e->rightp, 0,0,0);	break;case TAROP:	if(e->subtype==OPSTAR && e->leftp->tag!=TCONST && e->rightp->tag==TCONST)		{		q = e->leftp;		e->leftp = e->rightp;		e->rightp = q;		}case TLOGOP:	prec1 = opprecs[e->subtype];	goto print;case TNOTOP:	prec1 = 5;	if(prec > 1)	/* force parens */		needpar = 1;	goto print;case TNEGOP:	if(prec > 1)	/* force parens */		needpar = 1;	prec1 = 8;	goto print;case TASGNOP:	prec1 = 1;	goto print;case TRELOP:	prec1 = 6;	goto print;case TCALL:	prec1 = 10;	goto print;case TREPOP:	prec1 = 2;	goto print;print:	if(prec1 < prec )		needpar = 1;	else if(prec1 == prec)		if(e->needpar)			needpar = 1;		else if(subt == e->subtype)			needpar |= ! (e->tag==TLOGOP || leftside || subt==0					|| subt==OPPLUS || subt==OPSTAR);		else	needpar |=  ! (leftside || subt==OPPLUS || subt==OPSTAR);	if(needpar)		{		putic(ICOP,OPLPAR);		TEST fprintf(diagfile, "(");		}	if(e->rightp != 0)		{		prexp1(e->leftp, prec1, e->subtype, 1);		switch(e->tag) {		case TASGNOP:			TEST fprintf(diagfile, "=");			putic(ICOP, OPEQUALS);			if(e->subtype != 0)				prexp1(e->leftp, prec1, 0, 1);			case TAROP:		case TNEGOP:		case TLOGOP:		case TNOTOP:		case TRELOP:			if(e->subtype)				{				TEST fprintf(diagfile, " %s ", ops[e->subtype]);				putic(ICOP, e->subtype);				}			break;			case TCALL:			TEST fprintf(diagfile, " %s ", qualops[e->subtype]);			break;			case TREPOP:			TEST fprintf(diagfile, "$");			break;			}		prexp1(e->rightp, prec1,e->subtype, 0);		}	else	{ /* e->rightp == 0 */		TEST fprintf(diagfile, " %s  ", ops[e->subtype]);		putic(ICOP, e->subtype);		prexp1(e->leftp, prec1,e->subtype, 0);		}	if(needpar)		{		putic(ICOP, OPRPAR);		TEST fprintf(diagfile, ")");		}	break;default:	badtag("prexp1", e->tag);	break;	}}

⌨️ 快捷键说明

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