- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《语义分析及中间代码生成程序设计原理与实现技术实验报告及源代码北京交通大学
语义分析及中间代码生成程序设计原理与实现技术
XXX 1028XXX2 计科1XXX班
程序功能描述
完成以下描述赋值语句和算术表达式文法的语法制导生成中间代码四元式的过程。
G[A]:A→V:=E
E→E+T∣E-T∣
T→T*F∣T/F∣F
F→(E)∣i
V→i
说明:终结符号i 为用户定义的简单变量,即标识符的定义。
2. 设计要求
(1)给出每一产生式对应的语义动作;(2)设计中间代码四元式的结构(暂不与符号表有关)。(3)输入串应是词法分析的输出二元式序列,即某算术表达式“实验项目一”的输出结果。输出为输入串的四元式序列中间文件。(4)设计两个测试用例(尽可能完备),并给出程序执行结果四元式序列。
主要数据结构描述:
本程序采用的是算符优先文法,文法以及算符优先矩阵是根据第四次实验来修改的,所以主要的数据结构也跟第四次差不多,主要为文法的表示,FirstVT集和LastVT集以及算符优先矩阵:
算符优先矩阵采用二维字符数组表示的:
char mtr[9][9]; //算符优先矩阵
程序结构描述:
本程序一共有8功能函数:
void get(); //获取文法
void print(); //打印文法
void fun(); //求FirstVT 和 LastVT
void matrix(); //求算符优先矩阵
void test(); //测试文法
int cmp(char a,char b); 比较两个运算符的优先级 1 0 -1
void out(char now,int avg1,int avg2); //打印四元式
int ope(char op,int a,int b); //定义四元式计算方法
实验代码
详见附件
程序测试
6.1 功能测试
程序运行显示如下功能菜单:
选择打印文法:
选择构造FirstVt集和LastVT集:
选择构造算符优先矩阵:
6.2 文法测试
测试1:1+2*3
测试2:2+3+4*5+(6/2)
学习总结
本次实验完成了语义及中间代码生成的设计原理与实现,所采用的方法为算符优先分析方法, 首先根据文法求出此文法的FirstVT集和LastVT集,然后根据他们求出此文法的算符优先矩阵。由于此文法和第四次文法基本相同,只是多了一条赋值语句,所以采用的规则和第四次基本相同。在分析阶段,每当遇到有规约的项目,判断一下,打印出此部运算的四元式,这样一步一步分析,知道输入的算术表达式计算分析完毕。
由于本次实验部分代码和第四次实验的代码比较相似,只需增加一点四元式的分析计算打印过程,就能够顺利完成本次实验。
通过这次实验,我对语义分析以及中间代码部分有了一定的提高,对以后的学习有了一定程度上的帮助。
// lb6.cpp : 定义控制台应用程序的入口点。
//
#include stdafx.h
#include iostream
#include string
#include VECTOR
#include stack
using namespace std;
struct info{
char left;
vectorstring right;
vectorchar first;
vectorchar last;
};
vectorinfo lang;
char mtr[9][9]; //算符优先矩阵
stackchar sta;
void get(); //获取文法
void print(); //打印文法
void fun(); //求FirstVT 和 LastVT
void matrix(); //求算符优先矩阵
void test(); //测试文法
int cmp(char a,char b); //比较两个运算符的优先级 1 0 -1
void out(char now,int avg1,int avg2); //打印四元式
int ope(char op,int a,int b); //定义四元式计算方法
int main(){
int choose;
while(1){
cout **************************************** endl;
cout 获取文法请按 1 endl;
cout 打印文法请按 2 endl;
cout 构造FirstVT集和LastV
您可能关注的文档
- (张紧轮支架工序卡.doc
- 《试析利益相关者对重整企业的社会责任.doc
- (张艳艳2、iu.doc
- 《试析建设工程合同中以低于成本的报价竞标中标的法律规制.doc
- (张菊艳教师三年发展规划.doc
- (张银霞.doc
- (弯曲件说明书.docx
- 《试析水库管理工作存在的问题及解决办法.doc
- (弯板称重系统现场施工工艺.doc
- (弱电工程施工工艺要求.doc
- 六年级数学下册教学课件《解比例》.pptx
- 8.21.5 鸟类的生殖与发育(课件)八年级生物下册课件(苏教版).pptx
- 钠离子电池项目智能制造方案(范文参考).docx
- 2023-2024学年吉林省吉林市舒兰市七年级(上)期末语文试卷.docx
- 2024年吉林省吉林市丰满区亚桥实验学校中考数学三模试卷.docx
- 2023-2024学年吉林省辽源市东辽县七年级(上)期末英语试卷.docx
- 2023-2024学年吉林四平九年级数学第一学期期末水平检测试卷.docx
- 2023-2024学年吉林市蛟河市三校联考九年级(上)期末英语试卷.docx
- 2023-2024学年吉林松原九年级英语上册考场实战试卷.docx
- 电解液新材料项目智能制造方案.docx
文档评论(0)