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

📄 emitter.c

📁 一个简单的编译器,接收表达式,并输出后缀表达式或者编译过程,可以计算的输出计算结果
💻 C
字号:
/***   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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -