77范文网 - 专业文章范例文档资料分享平台

实验四 中间代码生成

来源:网络收集 时间:1970-01-01 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

实验四 中间代码生成

一、

实验要求:

熟悉中间代码生成原理 二:实验内容:

中缀表达式:(a+2)*(b/c)+(d*e) 后缀表达式:a 2 + b c / * d e * + 定义:int a,b; char c; float d,e; 三、实验代码: #include #include #include typedef struct{

char name[10]; char type;//数据类型 }sem,*ptsem; ptsem* base; int utop;

}stack ;//语义信息栈

typedef struct{

int i=1; int j=0; int n=0; stack list;

char st[10],str1[10],*p; ptsem yylist=new sem[10]; void initlist()//初始化 {

list.base=new ptsem[100]; list.utop=0; }

void pop( ptsem &pt) {

pt=list.base[list.utop--]; return; }

void push(ptsem pt) {

list.base[++list.utop]=pt; return; }

void gencode(ptsem top,ptsem subtop,char w) {//生成四元式中间代码

ptsem pt=new sem;

if(top->type==subtop->type){}

else if(top->type=='i'&subtop->type=='c')//栈顶操作数不为实型 {

printf(\ char c=i+48;//产生临时变量数值,如t1,t2等 subtop->name[0]='t'; subtop->name[1]=c;

subtop->name[2]='\\0';//产生临时变量 subtop->type='i';//转换栈顶操作数类型为实型 i++; }

else if(top->type=='c'&subtop->type=='i')//栈顶操作数是实型 {

printf(\ char c=i+48; top->name[0]='t'; top->name[1]=c; top->name[2]='\\0';

top->type='i';//转换第2个栈顶操作数类型为实型 i++; }

else if(top->type=='i'&subtop->type=='r') {

printf(\ char c=i+48; top->name[0]='t'; top->name[1]=c; top->name[2]='\\0';

top->type='r';//转换第2个栈顶操作数类型为实型 i++; }

else if(top->type=='r'&subtop->type=='i') {

printf(\ char c=i+48; subtop->name[0]='t'; subtop->name[1]=c; subtop->name[2]='\\0';

subtop->type='r';//转换第2个栈顶操作数类型为实型 i++; }

else if(top->type=='c'&subtop->type=='r') {

printf(\ char c=i+48; top->name[0]='t'; top->name[1]=c; top->name[2]='\\0';

top->type='r';//转换第2个栈顶操作数类型为实型 i++; } {

printf(\ char c=i+48; subtop->name[0]='t'; subtop->name[1]=c; subtop->name[2]='\\0';

subtop->type='r';//转换第2个栈顶操作数类型为实型 i++; }

printf(\

//w表示运算符,subtop->name表示第1个操作数,top->name表示第2个操作数,i表示第i个

else if(top->type=='r'&subtop->type=='c')

临时变量

char c=i+48; {

while(*p>='a'&&*p<='z') st[j++]=*p++; st[j]='\\0'; j=0; int flag=0;

if(!strcmp(st,\ if(flag==1){strcpy(str1,st);return;} sem pp;

if(!strcmp(str1,\ {

strcpy(pp.name,st); pp.type='r';

pt->type=top->type; pt->name[0]='t'; pt->name[1]=c; pt->name[2]='\\0'; i++; push(pt); return; }

void identify()//判断变量及其数据类型

}

if(!strcmp(str1,\ {

strcpy(pp.name,st); pp.type='i'; }

if(!strcmp(str1,\ {

strcpy(pp.name,st); pp.type='c'; }

yylist[n++]=pp; }

void conid()//常量操作 {

ptsem pt=new sem; int flag=0,k=0; do {

pt->name[k++]=*p; if(*p++=='.')flag=1;

}while(*p>='0'&&*p<='9'||*p=='.'); pt->type=flag?'r':'i'; if(*p>'9'&&*p<'0')

{printf(\ exit(0); }

pt->name[k]='\\0'; push(pt); }

void varid()//变量操作 {

ptsem pt=new sem; int flag=0,k=0; do{

pt->name[k++]=*p++;

}while(*p>='a'&&*p<='z'||*p>='A'&&*p<='Z'); pt->name[k]='\\0'; for(int i=0;i

if(!strcmp(pt->name,yylist[i].name))

{flag=1;pt->type=yylist[i].type;push(pt);}

if(flag==0)

}

void main() {

initlist(); printf(\ char str[100];

gets(str);//输入变量定义 p=str;

while(*p!='\\0') {

if(!(*p>='a'&&*p<='z'||*p>='A'&&*p<='Z'||*p==';'||*p==' '||*p==',')) {printf(\ switch(*p){ case',':p++;break; case ' ':p++;break; case';': p++;break; default: identify();

char strpds[100];

gets(strpds);//输入后缀式算术表达式 p=strpds; char ch=*p,a; ptsem top,subtop; while(*p!='\\0') {

if(ch>='0'&&ch<='9')a='0';

else if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')a='1';

else if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='^')a='2'; else if(ch==';')break; else if(ch==' ')a='4'; }//switch }//while

{ }

printf(\exit(0);

else a='3'; switch(a){

case'0':conid();ch=*p;break;//常数 case'1':varid();ch=*p;break;//变量

case'2':pop(top);pop(subtop);gencode(top,subtop,ch);ch=*++p;break;//运算符 case'3':printf(\ case'4':ch=*++p;//空格 } }

if(*p!='\\0') }

printf(\

四、实验结果:

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库实验四 中间代码生成在线全文阅读。

实验四 中间代码生成.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/271598.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: