欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2023年语义分析实验报告.docx

    • 资源ID:72718555       资源大小:71.26KB        全文页数:10页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2023年语义分析实验报告.docx

    云南大学编译原理实验报告实验题目:语义分析学 院: 信息学院专 业:计算机科学与技术学 号:姓 名: 刘继远g F place=F();ot v = tv+ 1 ;8g e n (divid, pi,F p lac e ,tv);o P s =P ( t v );。(3)、在gen ()函数里模仿*运算,增长相应的四元式输出语句:i f ( o p = d iv i d)/ /运算(f pri n tf (f o u t(/,% s ,%s, %s) e mphtem p 2,tem p 3);。 p r i n t f (" (/,%s, %s,%s) H,t e mpl, t emp2,tem p 3 );这样就在程序中增长了' / '运算的分析规定。2、严禁同名反复声明所以登记符号之前要检查有没有同名变量声明过。由于table t x数组就是存放声明变量名和类型的结构体数组,可以在en t e r()这个存放声明变量的函数中,增长相应检查变量名反复的函数:f o r (int i =l;i<txmax;i+) 。/*检查变量是否重名*/« i f(s t r c mp (id,tab 1 e i. n a me) = 0) 。gprindT错误4:变量名反复.n");exi t ( 0 );00 J。)每次要把一个变量加入到t a b lef t x数组中都要检瓷变量名是否跟t abl e tx数组中已有的变量名反复,反复就报错,并跳出程序。这样就在程序中增长了检查反复变量名的功能。五、结果及分析1、运营的文献a. t x t内容为:r eal a, b ;nt c , d;c:= c + d *b;d:=b*a.运营结果为:*C: Docu>ent s and Sett ings'Adainist 工at or桌面St art er Files请揄入分析的文件名dtxt 请辎入保存分析错果的文件名:b.txt<*,d,b,T101><+,c,T101,T102><:=,T102,c><*,b,a,T103><:=,T103,d>语法正确Press any key to continue2、运营文献a.lx t的内容为:real a, b;int c, d , a; c:=c+d*b;d:=b*a.运营结果为:c : *C: Docu>ent s and Sett ings'Adbuinist rat or桌面St art er ,请揄入分析的文件名:a.txt 请输入葆叁分帝结界的文彳牛名=bl.txt 输臭4:变量名重复.Press any key to continue.3、运营文献a.txt的内容为:real a, b;i n t c, 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.DB;DD-£B >int L | real LL-> i d | L, idS-> V := E HH->S |eEE+T | TTT*F I FF-( E )FidV->id消除左递归之后的等价文法s t a rt> D S .DB;DD-£B i n t L | r eal LL 一 idAA ,id AA 一gS->V : =E HH->S 18E->T RR-十T RR> £T->F PP一* FPP-£F ( E )FidVid2、根据语义规定得到相应的翻译模式s t art>D S .D b;dD-£B*i nt L L.t y pe : = int | real L L.t y pe := real L一 id A.Type := L . type enter(v.e n tr y , L.typ e ) AA> , idA A 1. Type : = A.type enter(v.e n try, A .ty p e) A>8S->V : =E gen( H:=", E.place,O,V. pl a c e) HH;S | £E->T R.i: =T. place E . place:=R.sR十 T RI. i := new temp; g e n (, R. i , T. p lac e , Rl.i) R R. s := RI. s ; R 8Rs= R. i TF P. i :=F.pl a c e P T. p 1 a c e: =P.sP> 大 F p 1 .i:= newtem p ; g e n( "* n , P.i, F.plac e , T) P P.s:= pl. s ;)P->8P. s =P.iF( E) F.place := E. p lace)F>i dF.place: = p o sition (id) V>idV.plac e :=positi o n (i d )3、实现原理基于翻译模式的自上而下语义解决(翻译).对每个非终结符A,构造一个函数,以 A的每个继承属性为形参,以A 的综合属性为返回值(若有多个综合属性,可返回记录类型的值)。如同预 测分析程序的构造,该函数代码的流程是根据当前的输入符号来决定调用 哪个产生式。1 .与每个产生式相关的代码根据产生式右端的终结符,非终结符,和语义规则集 (语义动作),依从左到右的顺序完毕下列工作:(1)对终结符X,保存其综合属性x的值至专为X.x而声明的变量;然 后调用匹配终结符(mal c h_t o ken)和取下一输入符号(ne x t to ken )的函数;(2)对非终结符B,运用相应于B的函数调用产生赋值语句c:= B(bl,b2,bk),其中变量bl, b2,,bk相应B的各继承属性,变量c相应B的综合属性(3)对语义规则集,直接copy其中每一语义规则(动作)来产生代码,只是将对属性的访问替换为对相应变量的访问o4、文法的属性分析文法符号属性综合或继承含义sta r t无D无B无LL .typ e继承类型AA.t y pe继承类型S无EE . plac e综合指向变量或临时变量的指针(用整数 实现)RR.i继承同上R.s综合同上TT . plac e继承同上PP.i继承同上P.S综合同上FF.plac e综合同上VV .plac e综合同上5、过程设计i n t getsym();读一个单词void e n tcr( e num symbol type); /登记符号表void i nit ();in t position(char* id t ); 查询符号表用函数,返回在符号表中位置i nt g e n( e num s ym b ol op, int a r gl, i n t ag r 2 ,in t r esult ); / 生成四元式void newtemp ()申请临时变量v oid sta r t ();v o id D ();v oid BO;v oid L(e n um symb o 1 t yp e );v o id A(enum symbo 1 typ e );void S();void H();int E();in t R(int R i );in t T ();i n t P(int pi);int F();int V();6、子程序说明in i t(): 初始化函数,重要是用于把单字符(例如:+、一、*、/)赋值一 个 symbol。getsym():把文献中的一个字符或者一个字符串分类成各种类型,用sym表达。e nter():把声明过的变量保存到t a b Ie lx这个结构体数组中。P ositi o n ():查找名字的位置,找到则返回在名字表中的位置,否则返回0。gen ():生成中间代码,通过传来的参数生产四元式。s tart():开始对整个文献的语法语义经行分析。D ( )、B ( )、L()、A ():实现变量的声明,并把变量的类型和名字保存到 t ab 1 e t x 这个结构体数组中。S( )、H()、E( )、T()、P ( )、R ( )、F()、V():实现后面程序运算语句的检 查,并生成中间代码;其中:S()是检查赋值运算;H()是执行下一条运算语句;E()分析赋值号后面的运算;R()是实检查+运算;P()是检查*、/运算;F()是实现*、/运算的优先级高于十运算,并获得当前位置的ID;V ()获得当前位置的I Do四、设计的基本思想(涉及修改之后的属性文法、属性类型分 析、翻译模式)按照扩展规定分析:1、增长除法运算 *,/优先级别高于+, *和/满足左结合规则对包含除法运算的表达式生成相应的四元式(1)、可以在翻译模式中非终结符P增长一个产生式:P> / F p 1 . i := newt e mp; g en( V", P.i, F. p lace , T) P P. s:= pl. s; , 这样就在翻译模式中增长了 ' / '运算;(2)、在程序中的P()函数里面模仿'* '运算,增长相应的分析语句:if (s y m = =div i d)®6 g cts y m();

    注意事项

    本文(2023年语义分析实验报告.docx)为本站会员(太**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开