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

📄 genicode.c

📁 一款拥有一定历史的C语言编译器
💻 C
📖 第 1 页 / 共 2 页
字号:
	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);;	break;    case en_aslsh:	iprintf ("*aslsh");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);;	break;    case en_asrsh:	iprintf ("*asrsh");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);;	break;    case en_asmul:	iprintf ("*asmul");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);;	break;    case en_asmul2:	iprintf ("*asmul2");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);;	break;    case en_asdiv:	iprintf ("*asdiv");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);;	break;    case en_asdiv2:	iprintf ("*asdiv2");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);;	break;    case en_asmod:	iprintf ("*asmod");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);;	break;    case en_assign:	iprintf ("*assign");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);;	break;    case en_ainc:	iprintf ("*ainc value=%ld", (long) ep->v.p[1]->v.i);	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	break;    case en_adec:	iprintf ("*adec value=%ld", (long) ep->v.p[1]->v.i);	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	break;    case en_land:	iprintf ("*land");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);;	break;    case en_lor:	iprintf ("*lor");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);;	break;    case en_eq:	iprintf ("*eq");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);;	break;    case en_ne:	iprintf ("*ne");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);;	break;    case en_lt:	iprintf ("*lt");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);;	break;    case en_le:	iprintf ("*le");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);;	break;    case en_gt:	iprintf ("*gt");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);;	break;    case en_ge:	iprintf ("*ge");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);;	break;    case en_test:	iprintf ("*test");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	break;    case en_not:	iprintf ("*not");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	break;    case en_cond:	iprintf ("*cond");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	ep = ep->v.p[1];	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);;	break;    case en_comma:	iprintf ("*comma");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	if (ep->v.p[1] != NIL_EXPR) {	    g_icode (ep->v.p[1], indent + INDENTATION);	} else {	    iprintf ("*null");	}	break;    case en_fcall:	iprintf ("*fcall");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	if (ep->v.p[1] != NIL_EXPR) {	    g_icode (ep->v.p[1], indent + INDENTATION);;	}	break;    case en_call:	iprintf ("*call");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	if (ep->v.p[1] != NIL_EXPR) {	    g_icode (ep->v.p[1], indent + INDENTATION);;	}	break;    case en_usercall:
	iprintf ("*usercall");
	type (ep->etp);
	iprintf ("%s", newline);
	g_icode (ep->v.p[0], indent + INDENTATION);
	if (ep->v.p[1] != NIL_EXPR) {
	    g_icode (ep->v.p[1], indent + INDENTATION);;
	}
	break;
    case en_cast:	iprintf ("*cast");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	break;    case en_deref:	iprintf ("*deref");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	break;    case en_list:	iprintf ("*list");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	if (ep->v.p[1] != NIL_EXPR) {	    g_icode (ep->v.p[1], indent + INDENTATION);;	}	break;    case en_literal:	iprintf ("*literal");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);	break;    case en_litval:	iprintf ("*litval");	type (ep->etp);	iprintf ("%s", newline);	g_icode (ep->v.p[0], indent + INDENTATION);	g_icode (ep->v.p[1], indent + INDENTATION);	break;    case en_str:	iprintf ("*str \"%s\"", ep->v.str);	type (ep->etp);	iprintf ("%s", newline);	break;    case en_size:	iprintf ("*size %ld", (long) ep->v.i);	type (ep->etp);	iprintf ("%s", newline);	break;    default:	FATAL ((__FILE__, "g_icode", "uncoded node %d", ep->nodetype));    }}void genicse P1 (CSE *, olist){    CSE    *csp;    EXPR   *ep;    for (csp = olist; csp != NIL_CSE; csp = csp->next) {	ep = csp->exp;#ifdef DEBUG	if (is_debugging (DEBUG_GLOBAL)) {	    iprintf ("%d:%s", (int) desire (csp), newline);	    g_icode (ep, INDENTATION);	}#endif	if (csp->reg != NO_REG) {	/* see if preload needed */	    iprintf ("register %d:%s", (int) csp->reg, newline);	    if (!is_lvalue (ep) || (ep->v.p[0]->v.i > 0L)) {		g_icode (ep, INDENTATION);	    }	}    }}void genicode P2 (const STMT *, stmt, int, indent){    int     j;    for (; stmt != NIL_STMT; stmt = stmt->next) {	for (j = indent; j >= 0; j--)	    iprintf (" ");#ifdef DEBUGOPT	iprintf ("line %d: ", stmt->line);#endif /*DEBUGOPT */	switch (stmt->stype) {	case st_label:	    iprintf ("L%u:%s", (unsigned int) stmt->v2.l, newline);	    genicode (stmt->v1.s, indent);	    break;	case st_goto:	    iprintf ("$goto\tL%u%s", (unsigned int) stmt->v2.l, newline);	    break;	case st_expr:	    iprintf ("$expression%s", newline);	    g_icode (stmt->exp, indent + INDENTATION);	    break;	case st_return:	    iprintf ("$return%s", newline);	    g_icode (stmt->exp, indent + INDENTATION);	    break;	case st_if:	    iprintf ("$if%s", newline);	    g_icode (stmt->exp, indent + INDENTATION);	    genicode (stmt->s1, indent + INDENTATION);	    if (stmt->v1.s != NIL_STMT) {		genicode (stmt->v1.s, indent + INDENTATION);	    }	    break;	case st_while:	    iprintf ("$while%s", newline);	    g_icode (stmt->exp, indent + INDENTATION);	    genicode (stmt->s1, indent + INDENTATION);	    break;	case st_do:	    iprintf ("$do%s", newline);	    genicode (stmt->s1, indent + INDENTATION);	    g_icode (stmt->exp, indent + INDENTATION);	    break;	case st_for:	    iprintf ("$for%s", newline);	    g_icode (stmt->exp, indent + INDENTATION);	    g_icode (stmt->v1.e, indent + INDENTATION);	    g_icode (stmt->v2.e, indent + INDENTATION);	    genicode (stmt->s1, indent + INDENTATION);	    break;	case st_continue:	    iprintf ("$continue%s", newline);	    break;	case st_break:	    iprintf ("$break%s", newline);	    break;	case st_switch:	    iprintf ("$switch%s", newline);	    g_icode (stmt->exp, indent + INDENTATION);	    genicode (stmt->v1.s, indent + INDENTATION);	    break;	case st_compound:	    iprintf ("$compound%s", newline);	    genicode (stmt->s1, indent + INDENTATION);	    break;	case st_case:	    iprintf ("$case %ld:5%s", (long) stmt->v2.i, newline);	    genicode (stmt->v1.s, indent + INDENTATION);	    break;	case st_default:	    iprintf ("$default:5%s", newline);	    genicode (stmt->v1.s, indent + INDENTATION);	    break;#ifdef ASM	case st_asm:	    iprintf ("$asm:%s", newline);	    g_icode (stmt->exp, indent + INDENTATION);	    break;#endif /* ASM */	default:	    FATAL (		   (__FILE__, "genicode", "uncoded statement %d",		    stmt->stype));	}    }}#endif /* ICODE */

⌨️ 快捷键说明

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