📄 emitter.c
字号:
#include "global.h"
emit(t,tval)
int t,tval;
{
if(flag==1) //输出表达式操作
{
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(flag==0) //求值操作
{
if(wflag==1) //表达式含标识符的只进行后缀表达式输出操作
{
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,"\ntoken %d, tokenval %d\n",t,tval);
}
}
else //对不含标识符的表达式利用栈的相关操作进行求值
{
int a,b;
switch(t)
{
case '+':
a=pop();b=pop();
push(a+b);
break;
case'-':
a=pop();b=pop();
push(a-b);
break;
case'*':
a=pop();b=pop();
push(a*b);
break;
case'/':
a=pop();b=pop();
push(a/b);
break;
case DIV:
a=pop();b=pop();
push(a/b);
break;
case MOD:
a=pop();b=pop();
push(a%b);
break;
case NUM:
push(tval);break;
default:
printf("token %d, tokenval %d\n",t,tval);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -