/* * recursive walk on tree and print it in * infix (human-readable) view */ static void infix(INFIX * in, bool first) { if (in->curpol->type == VAL) { char *op = in->op + in->curpol->distance; RESIZEBUF(in, in->curpol->length * 2 + 2 + 5); *(in->cur) = '\''; in->cur++; while (*op) { if (*op == '\'') { *(in->cur) = '\\'; in->cur++; } *(in->cur) = *op; op++; in->cur++; } *(in->cur) = '\''; in->cur++; if (in->curpol->weight) { *(in->cur) = ':'; in->cur++; if (in->curpol->weight & (1 << 3)) { *(in->cur) = 'A'; in->cur++; } if (in->curpol->weight & (1 << 2)) { *(in->cur) = 'B'; in->cur++; } if (in->curpol->weight & (1 << 1)) { *(in->cur) = 'C'; in->cur++; } if (in->curpol->weight & 1) { *(in->cur) = 'D'; in->cur++; } } *(in->cur) = '\0'; in->curpol++; } else if (in->curpol->val == (int4) '!') { bool isopr = false; RESIZEBUF(in, 1); *(in->cur) = '!'; in->cur++; *(in->cur) = '\0'; in->curpol++; if (in->curpol->type == OPR) { isopr = true; RESIZEBUF(in, 2); sprintf(in->cur, "( "); in->cur = strchr(in->cur, '\0'); } infix(in, isopr); if (isopr) { RESIZEBUF(in, 2); sprintf(in->cur, " )"); in->cur = strchr(in->cur, '\0'); } } else { int4 op = in->curpol->val; INFIX nrm; in->curpol++; if (op == (int4) '|' && !first) { RESIZEBUF(in, 2); sprintf(in->cur, "( "); in->cur = strchr(in->cur, '\0'); } nrm.curpol = in->curpol; nrm.op = in->op; nrm.buflen = 16; nrm.cur = nrm.buf = (char *) palloc(sizeof(char) * nrm.buflen); /* get right operand */ infix(&nrm, false); /* get & print left operand */ in->curpol = nrm.curpol; infix(in, false); /* print operator & right operand */ RESIZEBUF(in, 3 + (nrm.cur - nrm.buf)); sprintf(in->cur, " %c %s", op, nrm.buf); in->cur = strchr(in->cur, '\0'); pfree(nrm.buf); if (op == (int4) '|' && !first) { RESIZEBUF(in, 2); sprintf(in->cur, " )"); in->cur = strchr(in->cur, '\0'); } } }
static void infix(INFIX *in, bool first) { if (in->curpol->type == VAL) { RESIZEBUF(in, 11); sprintf(in->cur, "%d", in->curpol->val); in->cur = strchr(in->cur, '\0'); in->curpol--; } else if (in->curpol->val == (int4) '!') { bool isopr = false; RESIZEBUF(in, 1); *(in->cur) = '!'; in->cur++; *(in->cur) = '\0'; in->curpol--; if (in->curpol->type == OPR) { isopr = true; RESIZEBUF(in, 2); sprintf(in->cur, "( "); in->cur = strchr(in->cur, '\0'); } infix(in, isopr); if (isopr) { RESIZEBUF(in, 2); sprintf(in->cur, " )"); in->cur = strchr(in->cur, '\0'); } } else { int4 op = in->curpol->val; INFIX nrm; in->curpol--; if (op == (int4) '|' && !first) { RESIZEBUF(in, 2); sprintf(in->cur, "( "); in->cur = strchr(in->cur, '\0'); } nrm.curpol = in->curpol; nrm.buflen = 16; nrm.cur = nrm.buf = (char *) palloc(sizeof(char) * nrm.buflen); /* get right operand */ infix(&nrm, false); /* get & print left operand */ in->curpol = nrm.curpol; infix(in, false); /* print operator & right operand */ RESIZEBUF(in, 3 + (nrm.cur - nrm.buf)); sprintf(in->cur, " %c %s", op, nrm.buf); in->cur = strchr(in->cur, '\0'); pfree(nrm.buf); if (op == (int4) '|' && !first) { RESIZEBUF(in, 2); sprintf(in->cur, " )"); in->cur = strchr(in->cur, '\0'); } } }
/* * recursive walk on tree and print it in * infix (human-readable) view */ static void infix(INFIX *in, bool first) { if (in->curpol->type == VAL) { char *op = in->op + in->curpol->distance; RESIZEBUF(in, in->curpol->length * 2 + 5); while (*op) { *(in->cur) = *op; op++; in->cur++; } if (in->curpol->flag & LVAR_SUBLEXEME) { *(in->cur) = '%'; in->cur++; } if (in->curpol->flag & LVAR_INCASE) { *(in->cur) = '@'; in->cur++; } if (in->curpol->flag & LVAR_ANYEND) { *(in->cur) = '*'; in->cur++; } *(in->cur) = '\0'; in->curpol++; } else if (in->curpol->val == (int32) '!') { bool isopr = false; RESIZEBUF(in, 1); *(in->cur) = '!'; in->cur++; *(in->cur) = '\0'; in->curpol++; if (in->curpol->type == OPR) { isopr = true; RESIZEBUF(in, 2); sprintf(in->cur, "( "); in->cur = strchr(in->cur, '\0'); } infix(in, isopr); if (isopr) { RESIZEBUF(in, 2); sprintf(in->cur, " )"); in->cur = strchr(in->cur, '\0'); } } else { int32 op = in->curpol->val; INFIX nrm; in->curpol++; if (op == (int32) '|' && !first) { RESIZEBUF(in, 2); sprintf(in->cur, "( "); in->cur = strchr(in->cur, '\0'); } nrm.curpol = in->curpol; nrm.op = in->op; nrm.buflen = 16; nrm.cur = nrm.buf = (char *) palloc(sizeof(char) * nrm.buflen); /* get right operand */ infix(&nrm, false); /* get & print left operand */ in->curpol = nrm.curpol; infix(in, false); /* print operator & right operand */ RESIZEBUF(in, 3 + (nrm.cur - nrm.buf)); sprintf(in->cur, " %c %s", op, nrm.buf); in->cur = strchr(in->cur, '\0'); pfree(nrm.buf); if (op == (int32) '|' && !first) { RESIZEBUF(in, 2); sprintf(in->cur, " )"); in->cur = strchr(in->cur, '\0'); } } }