#include <stdio.h>
#include "signals.hh"
#include "sigtype.hh"
#include "sigtyperules.hh"
Go to the source code of this file.
Functions | |
void | printSigType (int n, int v, int c) |
void | printSignal (Tree sig, FILE *out, int prec) |
Variables | |
const char * | binopname [] |
int | binopprec [] |
void printSignal | ( | Tree | sig, | |
FILE * | out, | |||
int | prec | |||
) |
Definition at line 85 of file sigprint.cpp.
References hd(), isList(), isProj(), isRec(), isRef(), isSigAttach(), isSigBinOp(), isSigDelay1(), isSigDocAccessTbl(), isSigDocConstantTbl(), isSigDocWriteTbl(), isSigFixDelay(), isSigFloatCast(), isSigGen(), isSigInput(), isSigInt(), isSigIntCast(), isSigOutput(), isSigPrefix(), isSigRDTbl(), isSigReal(), isSigTable(), isSigWRTbl(), print(), printSignal(), and tl().
Referenced by calcDeBruijn2Sym(), ScalarCompiler::generateCode(), main(), and printSignal().
00086 { 00087 int i; 00088 double r; 00089 Tree x, y, z, u, le, id; 00090 00091 if ( isSigInt(sig, &i) ) { fprintf(out, "%d", i); } 00092 else if ( isSigReal(sig, &r) ) { fprintf(out, "%f", r); } 00093 else if ( isSigInput(sig, &i) ) { fprintf(out, "IN%d", i); } 00094 else if ( isSigOutput(sig, &i, x) ) { fprintf(out, "OUT%d := ", i); printSignal(x, out, 0); } 00095 00096 else if ( isSigBinOp(sig, &i, x, y) ) { 00097 if (prec > binopprec[i]) fputs("(", out); 00098 printSignal(x,out,binopprec[i]); fputs(binopname[i], out); printSignal(y, out, binopprec[i]); 00099 if (prec > binopprec[i]) fputs(")", out); 00100 } 00101 else if ( isSigDelay1(sig, x) ) { fputs("mem(", out); printSignal(x,out,0); fputs(")", out); } 00102 else if ( isSigPrefix(sig, x, y) ) { fputs("prefix(", out); printSignal(x,out,0); fputs(",", out); printSignal(y,out,0); fputs(")", out); } 00103 else if ( isSigAttach(sig, x, y) ) { fputs("attach(", out); printSignal(x,out,0); fputs(",", out); printSignal(y,out,0); fputs(")", out); } 00104 else if ( isSigFixDelay(sig, x, y) ) { 00105 if (prec > 4) fputs("(", out); 00106 printSignal(x,out,4); fputs("@", out); printSignal(y, out, 4); 00107 if (prec > 4) fputs(")", out); 00108 } 00109 00110 else if ( isProj(sig, &i, x) ) { printSignal(x,out,prec); fprintf(out, "#%d", i); } 00111 else if ( isRef(sig, i) ) { fprintf(out, "$%d", i); } 00112 else if ( isRef(sig, x) ) { print(x, out); } 00113 else if ( isRec(sig, le)) { fputs("\\_.", out); printSignal(le, out, prec); } 00114 else if ( isRec(sig, x, le)) { fputs("\\", out); print(x,out); fputs(".", out); printSignal(le, out, prec); } 00115 00116 else if ( isSigTable(sig, id, x, y) ) { fputs("table(", out); printSignal(x,out,0); fputc(',', out); printSignal(y,out,0); fputc(')', out); } 00117 else if ( isSigWRTbl(sig, id, x, y, z) ){ printSignal(x,out,0); fputc('[',out); printSignal(y,out,0); fputs("] := (", out); printSignal(z,out,0); fputc(')', out); } 00118 else if ( isSigRDTbl(sig, x, y) ) { printSignal(x,out,0); fputc('[', out); printSignal(y,out,0); fputc(']', out); } 00119 00120 else if (isSigDocConstantTbl(sig,x,y)) { fputs("sigDocConstantTbl(", out); printSignal(x,out,0); fputc(',', out); 00121 printSignal(y,out,0); fputc(')', out); } 00122 00123 else if (isSigDocWriteTbl(sig,x,y,z,u)) { fputs("sigDocWriteTbl(", out); printSignal(x,out,0); fputc(',', out); 00124 printSignal(y,out,0); fputc(',', out); 00125 printSignal(z,out,0); fputc(',', out); 00126 printSignal(u,out,0); fputc(')', out); } 00127 00128 else if (isSigDocAccessTbl(sig,x,y)) { fputs("sigDocAccessTbl(", out); printSignal(x,out,0); fputc(',', out); 00129 printSignal(y,out,0); fputc(')', out); } 00130 00131 00132 else if ( isSigGen(sig, x) ) { printSignal(x,out,prec); } 00133 00134 else if ( isSigIntCast(sig, x) ) { fputs("int(", out); printSignal(x,out,0); fputs(")", out); } 00135 else if ( isSigFloatCast(sig, x) ) { fputs("float(", out); printSignal(x,out,0); fputs(")", out); } 00136 00137 else if (isList(sig)) { 00138 char sep = '{'; 00139 do { 00140 fputc(sep, out); 00141 printSignal(hd(sig), out, 0); 00142 sep=','; 00143 sig = tl(sig); 00144 } while (isList(sig)); 00145 fputc('}', out); 00146 } 00147 else 00148 print(sig, out); 00149 }
void printSigType | ( | int | n, | |
int | v, | |||
int | c | |||
) |
Definition at line 64 of file sigprint.cpp.
const char* binopname[] |
{ "+", "-", "*", "/", "%", "<<", ">>", ">", "<", ">=", "<=", "==", "!=", "&", "|", "^" }
Definition at line 71 of file sigprint.cpp.
int binopprec[] |
{ 2, 2, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
Definition at line 78 of file sigprint.cpp.