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

📄 emitter.cpp

📁 编译原理实验将简单中缀算术表达式变换成后缀形式
💻 CPP
字号:
//emitter.c
#include "stdafx.h"
#include "global.h"

bool isID=0;

void emit(int t,int tval)
{
	int a,b;
	switch(t)
	{
	case'+':
	case'-':
	case'*':
	case'/':
		if(mode)
		{
		fprintf(fp2,"%c ",t);
		if(!isID)
		{Pop(S,b);Pop(S,a);Push(S,Operate(a,t,b));}
		}
		else
			fprintf(fp2,"%c\n",t);
		break;
	case DIV:
		if(mode)
		{
		fprintf(fp2,"DIV ");
		if(!isID)
		{Pop(S,b);Pop(S,a);Push(S,Operate(a,'/',b));}
		}
		else
           fprintf(fp2,"DIV\n");
		break;
	case MOD:
		if(mode)
		{
		fprintf(fp2,"MOD ");
		if(!isID)
		{Pop(S,b);Pop(S,a);Push(S,Operate(a,'@',b));}
		}
		else
          	fprintf(fp2,"MOD\n");
		break;
    case NUM:
		if(mode)
		{
		fprintf(fp2,"%d ",tval);
		if(!isID)
		Push(S,tval);
		}
		else
          	fprintf(fp2,"push %d\n",tval);
		break;
	case ID:
		isID=1;
		if(mode)
		fprintf(fp2,"%s ",symtable[tval].lexptr);
		else
		fprintf(fp2,"rvalue %s\n",symtable[tval].lexptr);
		break;
	default:
		fprintf(fp2,"token %d,tokenval %d\n",t,tval);
	}
}

⌨️ 快捷键说明

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