emitter.cpp

来自「编译原理实验将简单中缀算术表达式变换成后缀形式」· C++ 代码 · 共 66 行

CPP
66
字号
//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 + =
减小字号Ctrl + -
显示快捷键?