emitter.c

来自「一个简单的编译器,接收表达式,并输出后缀表达式或者编译过程,可以计算的输出计算结」· C语言 代码 · 共 54 行

C
54
字号
/***   emitter.c   ***************************************/

#include "global.h"

void emit(int t, int tval)
{
	if(flags=='c'){//输出编译的过程
		switch(t){
		case '+':case '-':case '*':case '/':
			fprintf(fp2,"%c\n",t);break;
		case DIV:
			fprintf(fp2,"DIV\n"); break;
		case MOD:
			fprintf(fp2,"MOD\n");break;
		case NUM:
			fprintf(fp2,"push  %d\n", tval); break;
		case ID:
			fprintf(fp2,"rvalue %s\n", symtable[tval].lexptr);break;
		default:
			fprintf(fp2,"token %d, tokenval %d\n", t, tval);
		}
		
	}
//输出后缀表达式
	else if(allnum==1){//有ID存在,输出不可计算的表达式
	    switch(t) {
	       case '+': case '-': case '*': case '/':
	            fprintf(fp2,"%c  ",t); break;
	       case DIV:
			    fprintf(fp2,"DIV  "); break;
		   case MOD:
				fprintf(fp2,"MOD  ");break;
		   case NUM:
                fprintf(fp2,"%d  ", tval); break;
	       case ID:
		     	fprintf(fp2,"%s  ", symtable[tval].lexptr);break;
	       default:
                fprintf(fp2,"token %d, tokenval %d\n", t, tval);
		}
	}
	else {//可计算的表达式,输出计算后的结果
		switch(t){
		case '+': case '-': case '*': case '/': case MOD: case DIV:
			operate(&Fig,t);break;//运算
		case NUM:
			Push(&Fig,tval);break;//运算数压栈
		default:
			break;
		}
	}

		
}

⌨️ 快捷键说明

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