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

📄 emitter.c

📁 编译原理 做一个后缀翻译 还有抽象堆栈机代码翻译
💻 C
字号:
/**** emitter.c *****/

#include "global.h"




void emit(int t,int tval)
{//functype=0,后缀表达式,functype=1,解释
	if(functype==0){
		switch(t){
			case '+':case '-':case '*':case '/':
			printf("%c\n",t);fprintf(fpw,"%c\n",t);break;
		case DIV:
			printf("DIV\n");fprintf(fpw,"DIV\n");break;
		case MOD:
			printf("MOD\n");fprintf(fpw,"MOD\n");break;
		case NUM:
			printf("Push %d\n",tval);fprintf(fpw,"Push %d\n",tval);break;
		case ID:
			printf("%s\n",symtable[tval].lexptr);fprintf(fpw,"%s\n",symtable[tval].lexptr);break;
		default:
			printf("token %d,tokenval %d\n",t,tval);fprintf(fpw,"token %d,tokenval %d\n",t,tval);
		}
	}
	else if(functype==1){
		switch(t){
			case '+':case '-':case '*':case '/':{
				/*printf("%c ",t);fprintf(fpw,"%c ",t);op=t;Pop(&N,&lval);Pop(&N,&rval);ans=compute(lval,rval,op);Push(&N,ans);
				if(N.top-N.base==1){
					Pop(&N,&ans);	
				}*/
				Push(&O,t);
				Push(&S,t);
				break;
			}
			case DIV:{
				/*printf("DIV ");fprintf(fpw,"DIV ");op=t;Pop(&N,&lval);Pop(&N,&rval);ans=compute(lval,rval,op);Push(&N,ans);
				if(N.top-N.base==1){
					Pop(&N,&ans);
				}*/
				Push(&O,t);
				Push(&S,t);
				break;
			}
			case MOD:{
				/*printf("MOD ");fprintf(fpw,"MOD ");op=t;Pop(&N,&lval);Pop(&N,&rval);ans=compute(lval,rval,op);Push(&N,ans);
				if(N.top-N.base==1){
					Pop(&N,&ans);
				}*/
				Push(&O,t);
				Push(&S,t);
				break;
			}
			case NUM:{
				 /*Push(&N,tval);
				 ans=tval;
				 printf("%d ",tval);
				 fprintf(fpw,"%d ",tval);*/
				 Push(&N,tval);
				 Push(&N,t);
				 Push(&S,tval);
				 Push(&S,t);
				 break;
			}
			case ID:
				/*printf("%s ",symtable[tval].lexptr);fprintf(fpw,"%s ",symtable[tval].lexptr);anserror=1;*/
				Push(&N,tval);
				Push(&N,t);
				Push(&S,tval);
				Push(&S,t);
				anserror=1;//不可计算
				break;
			default:
				/*printf("token %d,tokenval %d ",t,tval);fprintf(fpw,"token %d,tokenval %d\n",t,tval);anserror=1;*/
				Push(&N,tval);
				Push(&N,t);
				Push(&S,tval);
				Push(&S,t);
				anserror=1;//不可计算
				return;
		}
	}
}

⌨️ 快捷键说明

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