void insPrint(Inst inst) { switch (inst.type) { case INST_ASSIGN: printf(" (assign "); regPrint(inst.u.assign.target); printf(" "); srcPrint(inst.u.assign.source); printf(")\n"); break; case INST_PERFORM: printf(" (perform "); opPrint(inst.u.oper.op); printf(")\n"); break; case INST_TEST: printf(" (test "); opPrint(inst.u.oper.op); printf(")\n"); break; case INST_LABEL: lblPrint(inst.u.label.lbl); printf("\n"); break; case INST_BRANCH: printf(" (branch "); trgPrint(inst.u.jump.target); printf(")\n"); break; case INST_GOTO: printf(" (goto "); trgPrint(inst.u.jump.target); printf(")\n"); break; case INST_SAVE: printf(" (save "); regPrint(inst.u.stackOp.reg); printf(")\n"); break; case INST_RESTORE: printf(" (restore "); regPrint(inst.u.stackOp.reg); printf(")\n"); break; default: printf("Unknown instruction type\n"); break; } }
int main() { printf("This program performs some basic operations with polynomials.\n" "Type help (or h) for more information\n"); Polynomial space['z' - 'a' + 1]; char command[20]; for (;;) { printf("> "); scanf("%s", command); switch (command[0]) { case 'a': opAdd(space); break; case 'p': opPrint(space); break; case 'r': opRemove(space); break; case 'e': opIsEqual(space); break; case 's': opSumm(space); break; case 'v': opValue(space); break; case 'h': opHelp(); break; case 'q': return 0; } } }
void srcPrint(Source src) { switch (src.type) { case SRC_REG: printf("(reg "); regPrint(src.u.reg); printf(")"); break; case SRC_CONST: conPrint(src.u.con); break; case SRC_OP: opPrint(src.u.op); break; case SRC_LABEL: printf("(label "); lblPrint(src.u.lbl); printf(")"); break; default: printf("Unknown source type\n"); break; } }