版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
云南大学编译原理实验报告实验题目:语义分析学院:信息学院专业:计算机科学与技术学号:姓名:刘继远gFplace=F();otv=tv+1;8gen(divid,pi,Fplace,tv);oPs=P(tv);。(3)、在gen()函数里模仿*运算,增长相应的四元式输出语句:if(op==divid)///运算(fprintf(fout(/,%s,%s,%s)emphtemp2,temp3);。printf("(/,%s,%s,%s)H,templ,temp2,temp3);这样就在程序中增长了'/'运算的分析规定。2、严禁同名反复声明所以登记符号之前要检查有没有同名变量声明过。由于table[tx]数组就是存放声明变量名和类型的结构体数组,可以在enter()这个存放声明变量的函数中,增长相应检查变量名反复的函数:for(inti=l;i<txmax;i++){。/*检查变量是否重名*/«if(strcmp(id,tab1e[i].name)==0){。gprindT错误4:变量名反复.\n");exit(0);00J。)每次要把一个变量加入到tableftx]数组中都要检瓷变量名是否跟table[tx]数组中已有的变量名反复,反复就报错,并跳出程序。。这样就在程序中增长了检查反复变量名的功能。五、结果及分析1、运营的文献a.txt内容为:reala,b;ntc,d;c:=c+d*b;d:=b*a.运营结果为:*C:\Docu>entsandSettings'Adainist工ator\桌面\StarterFiles\请揄入分析的文件名dtxt请辎入保存分析错果的文件名:b.txt<*,d,b,T101><+,c,T101,T102><:=,T102,,c><*,b,a,T103><:=,T103,,d>语法正确Pressanykeytocontinue2、运营文献a.lxt的内容为:reala,b;intc,d,a;c:=c+d*b;d:=b*a.运营结果为:c:*C:\Docu>entsandSettings'Adbuinistrator\桌面\Starter,请揄入分析的文件名:a.txt请输入葆叁分帝结界的文彳牛名=bl.txt输臭4:变量名重复.Pressanykeytocontinue.3、运营文献a.txt的内容为:reala,b;intc,d;f:=c+d*b;d:=b*a.运营的结果为:从以上三个结果(一个对的,两个错误)来看,完全实现了扩展规定的两个功能,也完全符合定义的语法语义规则。目录一、实验目的错误!未定义书签。二、实验内容。错误!未定义书签。三、源程序分析错误!未定义书签。1、程序采用的BNF错误!未定义书签。2、根据语义规定得到相应的翻译模式。错误!未定义书签。3、实现原理错误!未定义书签。4、文法的属性分析。错误!未定义书签。5、过程设计错误!未定义书签。6、子程序说明。错误!未定义书签。四、设计的基本思想(涉及修改之后的属性文法、属性类型
分析、翻译模式)。错误!未定义书签。1、增长除法运算错误!未定义书签。2、严禁同名反复声明错误!未定义书签。五、结果及分析错误!未定义书签。一、实验目的进一步理解递归下降分析原理和实现方法,理解语义分析的基本机制,掌握语义子程序的构造方法。二、实验内容将带变量声明的表达式翻译为四元式序列,其中涉及以下规定:非终结符号D实现定义两种类型int,real变量的声明;非终结符号S实现变量之间的*,+,:=(赋值运算)两个关键字int和real变量之间的*,+,:=(赋值)运算只能使用声明过的变量,所以要检查使用的变量是否声明过。对每个*,+,:=(赋值)运算生成一条四元式如(*,A,B,T1),其中T1是临时变量*优先级别高于十,*满足左结合规则三、源程序分析这是一个简朴的包含词法、语法、语义分析的程序:语义分析.h和语义分析.cpp。实现的基本原理是自顶向下分析,单遍扫描,以语法分析为核心,调用词法分析,并实现语义分析。1、程序采用的BNFP—DS.D—B;DD-£B—>intL|realLL->id|L,idS->V:=EHH->;S|eE—E+T|TT—T*FIFF-(E)F—idV->id消除左递归之后的等价文法start—>DS.D—B;DD-£B—intL|realLL一idA
A—,idAA一gS->V:=EHH->;S18E->TRR-十TRR—>£T->FPP一*FPP-£F—(E)F—idV—id2、根据语义规定得到相应的翻译模式start—>DS.D—b;dD-£B—*intL{L.type:=int}|realL{L.type:=real}L一id{A.Type:=L.typeenter(v.entry,L.type)}AA—>,idA{A1.Type:=A.typeenter(v.entry,A.type)}A—>8S->V:=E{gen(H:=",E.place,O,V.place)}HH—;S|£E->T{R.i:=T.place}{E.place:=R.s}R—十T{RI.i:=newtemp;E->T{R.i:=T.place}{E.place:=R.s}R{R.s:=RI.s;}R—►8{Rs=R.i}T—F{P.i:=F.place}P{T.p1ace:=P.s}P—>大F{p1.i:=newtemp;gen("*n,P.i,F.place,T)}P{P.s:=pl.s;)P->8{P.s=P.i}F—(E){F.place:=E.place)F—>id{F.place:=position(id)}V—>id{V.place:=position(id)}3、实现原理基于翻译模式的自上而下语义解决(翻译).对每个非终结符A,构造一个函数,以A的每个继承属性为形参,以A的综合属性为返回值(若有多个综合属性,可返回记录类型的值)。如同预测分析程序的构造,该函数代码的流程是根据当前的输入符号来决定调用哪个产生式。.与每个产生式相关的代码根据产生式右端的终结符,非终结符,和语义规则集(语义动作),依从左到右的顺序完毕下列工作:(1)对终结符X,保存其综合属性x的值至专为X.x而声明的变量;然后调用匹配终结符(malch_token)和取下一输入符号(next—token)的函数;(2)对非终结符B,运用相应于B的函数调用产生赋值语句c:=B(bl,b2,…,bk),其中变量bl,b2,…,bk相应B的各继承属性,变量c相应B的综合属性(3)对语义规则集,直接copy其中每一语义规则(动作)来产生代码,只是将对属性的访问替换为对相应变量的访问o4、文法的属性分析文法符号属性综合或继承含义start无D无B无LL.type继承类型AA.type继承类型S无EE.place综合指向变量或临时变量的指针(用整数实现)RR.i继承同上R.s综合同上TT.place继承同上PP.i继承同上P.S综合同上FF.place综合同上VV.place综合同上5、过程设计intgetsym();〃读一个单词voidentcr(enumsymboltype);//登记符号表voidinit();intposition(char*idt);〃查询符号表用函数,返回在符号表中位置intgen(enumsymbolop,intargl,intagr2,intresult);//生成四元式voidnewtemp()〃申请临时变量voidstart();voidD();voidBO;voidL(enumsymbo1type);voidA(enumsymbo1type);voidS();voidH();intE();intR(intRi);intT();intP(intpi);intF();intV();6、子程序说明init():初始化函数,重要是用于把单字符(例如:+、一、*、/)赋值一个symbol。getsym():把文献中的一个字符或者一个字符串分类成各种类型,用sym表达。enter():把声明过的变量保存到tabIe[lx]这个结构体数组中。Position():查找名字的位置,找到则返回在名字表中的位置,否则返回0。gen():生成中间代码,通过传来的参数生产四元式。start():开始对整个文献的语法语义经行分析。D()、B()、L()、A():实现变量的声明,并把变量的类型和名字保存到tab1e[tx]这个结构体数组中。S()、H()、E()、T()、P()、R()、F()、V():实现后面程序运算语句的检查,并生成中间代码;其中:S()是检查赋值运算;H()是执行下一条运算语句;E()分析赋值号后面的运算;R()是实检查+运算;P()是检查*、/运算;F()是实现*、/运算的优先级高于十运算,并获得当前位置的ID;V()获得当前位置的IDo四、设计的基本思想(涉及修改之后的属性文法、属性类型分析、翻译模式)按照扩展规定分析:1、增长除法运算•*,/优先级别高于+,*和/满足
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 3.3气压带和风带对气候的影响 第一课时 教案-2022-2023学年高中地理人教版(2019)选择性必修1
- 2026年郑州市二七区政务服务中心(窗口人员)招聘考试参考试题及答案详解
- 输变电资产租赁合同
- 记过处分思想报告2026(3篇)
- 空地出租合同书
- 新版私人代理合同样书
- 2026年西藏自治区那曲市工会人员招聘考试备考试题及答案详解
- 2026年南京市六合区政务服务中心(窗口人员)招聘笔试备考题库及答案详解
- 2026年广西壮族自治区梧州市政务服务中心(窗口人员)招聘笔试模拟试题及答案详解
- 2026年青岛市李沧区政务服务中心(窗口人员)招聘考试参考题库及答案详解
- 2026年中医诊疗技术操作职业技能竞赛试题
- 2026年学校食堂期初食品安全全员培训课件(开学专用)
- 2025-2026学年成都市青羊区八年级下英语期末零诊试题(含答案)
- 公共游览场所服务员专项知识考试复习题库(附答案)
- GB/T 47587-2026航空航天用1 550 MPa镍基合金MJ螺纹螺栓技术规范
- 购买视频素材协议合同
- 安全生产法律法规试题(含答案)
- DB63T+2531-2026《高海拔地区空气源热泵采暖系统技术规程》
- 初中数学专项练习17-勾股定理-重难点题型
- 2026中考文综终极背诵手册-道德与法治+历史+地理(人教版)
- 《JBT 13671-2019双辊刀盘式剪切破碎机》专题研究报告
评论
0/150
提交评论