语义分析实验报告(实验三)
编译原理 语义分析器 包括试验要求 原理代码 代码可以成功运行
编译原理语义分析实验报告
软工082班
兰洁 200831104044
一、 实验内容 二、 实验目的 三、 实验要求 四、 程序流程图
五、 程序代码与主要过程说明 六、 测试用例 七、 输出结果 八、 实验心得
编译原理 语义分析器 包括试验要求 原理代码 代码可以成功运行
一、 实验内容
定义模拟的简单语言的语义成分,将语义分析程序编制成一个子程序,在实验2分析出个语法单位后,分析其含义,并将可执行语句或表达式翻译成四元式输出,并将错误信息输出。
二、 实验目的
通过上机实验,加深对语义制导翻译原理的理解,掌握将语法分析所识别的语法成分变换成为中间代码的语义翻译方法。 三、 实验要求
采用递归下降语法制导翻译方法,对算术表达式、赋值语句进行语义分析并生成四元式序列。
例如:对于语句串 Function a=2+3*4; x=(a+b)/c; endfunc #
输出的三地址指令如下
t1=3*4 t2=2+t1 a=t2 t3=a+b t4=t3/c x=t4 四、 程序流程图
由于语义分析的的方法就是在语法分析过程中,根据每个产生式所对应的语义子程序进行翻译,为每个产生式配上一个翻译子程序,并在语法分析的同时执行这些子程序。所有对应的流程图与语法分析流程图大同小异,关于各类函数的流程图我已经在词法分析报告与语法分析报告中详细画出,所以这里只说明程序主要流程。
编译原理 语义分析器 包括试验要求 原理代码 代码可以成功运行
五、 程序代码与主要过程说明 /*语义分析源代码*/ # include<stdio.h> # include<string.h> # include<conio.h> # include<malloc.h> # include<STDLIB.H>
struct quad // 四元式表 { char result[12]; };
char ag1[12]; char op[12]; char ag2[12];
编译原理 语义分析器 包括试验要求 原理代码 代码可以成功运行
struct quad quad[30]; int count=0;
char *expression(void); char prog[200],token[9]; char ch;
int syn,p,m,n,sum=0; int kk=0,k=0;
char *rwtab[6]={"function","if","then","while","do","endfunc"}; void scaner() { m=0;
for(n=0;n<8;n++)
token[n]='\0';
ch=prog[p++]; while(ch==' ')
ch=prog[p++];
if((ch>='a'&& ch<='z')||(ch>='A' && ch<='Z')) {
while((ch>='a'&& ch<='z')||(ch>='A'&&ch<='Z')||(ch>='0'&&ch<='9')) { token[m++]=ch;
ch=prog[p++];
}//end of while token[m++]='\0'; p--; syn=10;
for(n=0;n<6;n++){
if(strcmp(token,rwtab[n])==0)
{ syn=n+1;
break;}
}//end of for }
else if (ch>='0'&&ch<='9') { sum=0;
while(ch>='0'&&ch<='9') } p--; syn=11;
{sum=sum*10+ch-'0'; ch=prog[p++];
编译原理 语义分析器 包括试验要求 原理代码 代码可以成功运行
{ case'<':m=0;token[m++]=ch;
ch=prog[++p]; if(ch=='=') { } else { syn=20;
ch=prog[--p];}
syn=22;
token[m+1]=ch;
break;
case'>':m=0;token[m++]=ch;
ch=prog[++p]; if(ch=='=') { syn=24; } else { syn=23; } break;
ch=prog[--p]; token[m++]=ch;
case'=':m=0,token[m++]=ch;
ch=prog[++p]; if(ch=='=') { syn=25; } else { syn=18; } break;
ch=prog[--p]; token[m++]=ch;
case'!':m=0;token[m++]=ch;ch=prog[++p];
if(ch=='=') { syn=22;
编译原理 语义分析器 包括试验要求 原理代码 代码可以成功运行
}
break;
case'+':syn=13;token[0]=ch;break; case'-':syn=14;token[0]=ch;break; case'*':syn=15;token[0]=ch;break; case'/':syn=16;token[0]=ch;break; case';':syn=26;token[0]=ch;break; case'(':syn=27;token[0]=ch;break; case')':syn=28;token[0]=ch;break; case'#':syn=0;token[0]=ch;break; default:syn=-1; }
}//end of scaner
void emit(char *result,char *ag1,char *op,char *ag2) //将三地址代码送到四元式表
{ strcpy(quad[count].result,result);
strcpy(quad[count].ag1,ag1);
strcpy(quad[count].op,op);
}
strcpy(quad[count].ag2,ag2); count++; return;
char *newtemp() //返回临时变量t1,t2...
{ char *p;
char m[8];
p=(char *)malloc(8); k++;
itoa(k,m,10); //功能将整数装换为字符串。并将值保存在m中。
10是基数 表示将k的值转化为10进制数。
}
char *factor() { char *fplace;
fplace=(char *)malloc(12); strcpy(p+1,m); p[0]='t'; return(p);
编译原理 语义分析器 包括试验要求 原理代码 代码可以成功运行
}
else if(syn==11) { itoa(sum,fplace,10); }
scaner(); scaner();
else if(syn==27)
}
char *term(void)
{ char *tp,*ep2,*eplace,*tt;
tp=(char *)malloc(12); { scaner(); } else
{ printf("\n'('ERROR"); }
return(fplace);
kk=1;
fplace=expression(); if(syn==28)
scaner();
else
{ printf("\n')'ERROR"); }
kk=1;
ep2=(char *)malloc(12); eplace=(char *)malloc(12); tt=(char *)malloc(12);
strcpy(eplace,factor()); while(syn==15||syn==16) {
if(syn==15) { tt[0]='*';
tt[1]='\0';}
else if(syn==16)
编译原理 语义分析器 包括试验要求 原理代码 代码可以成功运行
}
}
strcpy(ep2,factor());
strcpy(tp,newtemp()); //tp为临时变量
emit(tp,eplace,tt,ep2); //将三地址代码送到四元式表 strcpy(eplace,tp);
return(eplace);
char *expression()
{ char*tp,*ep2,*eplace,*tt; }
tp=(char*)malloc(12); ep2=(char*)malloc(12); eplace=(char*)malloc(12); tt=(char*)malloc(12); strcpy(eplace,term()); while(syn==13||syn==14) { if(syn==13) }
return(eplace);
{ tt[0]='+'; }
else if(syn==14) { tt[0]='-'; } scaner();
strcpy(ep2,term()); strcpy(tp,newtemp()); emit(tp,eplace,tt,ep2);// strcpy(eplace,tp);
tt[1]='\0'; tt[1]='\0';
statement()
{ char tt[8],eplace[8];
int schain=0; switch(syn)
编译原理 语义分析器 包括试验要求 原理代码 代码可以成功运行 …… 此处隐藏:3758字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [行业资料]创设有效语境 改善英语教学
- [行业资料]微商推广引流的44种方法
- [行业资料]医疗机构输血科血库基本标准
- [行业资料]锂离子电池项目可行性研究报告(2015年
- [行业资料]申请执行人长沙市开福区人口和计划生育
- [行业资料]倾听草木的呼吸(初中阅读)
- [行业资料]长沙新环境厂房租赁合同书
- [行业资料]2022年经济师《金融专业知识与实务(中
- [行业资料]浦东新区2009学年度第二学期期末考试七
- [行业资料]企业劳动用工协议书
- [行业资料]最新苏科版七年级数学上册第二章有理数
- [行业资料]12星座与英语词汇学习
- [行业资料]2008年高考化学科经验
- [行业资料]镇政府2015年工作总结及2016年政府工作
- [行业资料]梧州市产业园区规划及招商引资报告
- [行业资料]大体积砼承台施工作业指导书
- [行业资料]学生干部在创建和谐校园中的作1
- [行业资料]小学语文教师实习个人总结
- [行业资料]2014完美最新奖金制度
- [行业资料]2016年一建建筑实务-重要知识点地质
- 【最新】人教版小学语文三年级上册:第
- 中国中小企业年鉴(地区数据)
- 动物与人类生活的关系 ppt
- 选修3 专题3 胚胎工程知识点
- 遥感技术基础复习题
- 公司员工职业生涯规划实施方案
- 辽宁省建筑施工企业安全生产许可证管理
- 15秋福师《中外幼儿教育史》在线作业二
- 2015-2020年中国网络视频行业深度调研
- 数学八年级下华东师大版21.1算术平均数
- 苏教版一年级语文下册《小松树和大松树
- 油画论文:摄影对当下油画艺术的影响
- 西方自由主义影响下的新闻自由——从17
- 基于支持向量机的商业银行信用风险评估
- 机械设计基础复习题答案(修改)(1)
- 语文:高考作文素材:材料引用及论点论
- 月份工程进度款结算单62+56
- 2018-2023年中国互联网基金行业现状研
- 人教版 PEP 五年级下册Unit1Lesson1 th
- 2014学年第二学期四年级数学期末教学质




