📄 print.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 + -