编译原理实验四语义分析及中间代码生成.pdfVIP

编译原理实验四语义分析及中间代码生成.pdf

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理实验四语义分析及中间代码⽣成 ⼀、实验⽬的 (1)通过上机实验,加深对语法制导翻译原理的理解,掌握将语法分析所识别的语法范畴变换为某种中间代码的语义翻译⽅法。 (2)掌握⽬前普遍采⽤的语义分析⽅法─语法制导翻译技术。 (3)给出 PL/0 ⽂法规范,要求在语法分析程序中添加语义处理,对于语法正确的表达式,输出其中间代码;对于语法正确的算术表达 式,输出其计算值。 ⼆、实验内容 (1)语义分析对象重点考虑经过语法分析后已是正确的语法范畴,本实验重点是语义⼦程序。已给 PL/0 语⾔⽂法,在实验⼆或实验三的 表达式语法分析程序⾥,添加语义处理部分,输出表达式的中间代码,⽤四元式序列表⽰。 (2) PL/0 算术表达式的语义计算: PL/0 算术表达式,例如:2+35 作为输⼊。 输出: 17 PL/0 表达式的中间代码表⽰: PL/0 表达式,例如: a (b+c)。 输出: (+,b,c,t1) (,a,t1,t2) 三、设计思想 1.原理 属性⽂法:是在上下⽂⽆关⽂法的基础上为每个⽂法符号(终结符或⾮终结符)配备若⼲个相关的“值”(称为属性)。 属性:代表与⽂法符号相关的信息,和变量⼀样,可以进⾏计算和传递。 综合属性:⽤于“⾃下⽽上”传递信息。 在语法树中,⼀个结点的综合属性的值,由其⼦结点的属性值确定。 S—属性⽂法:仅仅使⽤综合属性的属性⽂法。 语义规则: 属性计算的过程即是语义处理的过程。对于⽂法的每⼀个产⽣式配备⼀组属性的计算规则,则称为语义规则。 (1)终结符只有综合属性,它由词法分析器提供。 (2)⾮终结符既可以有综合属性也可以有继承属性,⽂法开始符号的所有继承属性作为属性计算前的初始值。 (3)产⽣式右边符号的继承属性和产⽣式左边符号的综合属性都必须提供⼀个计算规则。 (4)产⽣式左边符号的继承属性和产⽣式右边符号的综合属性由其它产⽣式的属性规则计算。 ⼀遍扫描的处理⽅法: 与树遍历的属性计算⽅法不同,⼀遍扫描的处理⽅法是在语法分析的同时计算属性值,⽽不是语法分析构造语法树 之后进⾏属性的计算,⽽且⽆需构造实际的语法树。 因为⼀遍扫描的处理⽅法与语法分析器的相互作⽤,它与下⾯两个因素密切相关: (1)所采⽤的语法分析⽅法。 (2)属性的计算次序。 2.基于递归下降翻译器的设计 递归下降分析法的原理是利⽤函数之间的递归调⽤来模拟语法树⾃上⽽下的构建过程。从根节点出发,⾃顶向下为输⼊串中寻找⼀个最左匹 配序列,建⽴⼀棵语法树。对于每个⾮终结符的继承属性当作形式参数,函数的返回值当作⾮终结符的继承属性;对于终结符要初始化所有 的继承属性。再进⾏分析过程中,⾮终结符根据当前的输⼊符号决定使⽤哪个产⽣式候选。 递归下降分析器的设计实现思想: 1、对每个⾮终结符A构造⼀个函数过程,对A的每个继承属性设置⼀个形式参数,函数的返回值为A的综合属性(作为记录,或指向记录的 ⼀个指针,记录中有若⼲域,每个属性对应⼀个域)。 2、⾮终结符A 对应的函数过程中,根据当前的输⼊符号决定哪个产⽣式候选。 3、每个产⽣式对应的代码中,按照从左到右的次序,对于单词符号(终结符),⾮终结符和语义分析分别做以下的⼯作。 (1)对于带有综合属性x的终结符X,把x的值存⼊为X.x设置的变量中。然后产⽣⼀个匹配X的调⽤,并继续读⼊⼀个输⼊符号。 (2)对于每个⾮终结符号B,产⽣⼀个右边带有函数调⽤的赋值语句c=B(b1,b2,…,bk) (3)对于语义动作,把动作的代码抄进分析器中,⽤代表属性的变量来代替对应属性的每⼀次引⽤。 算法原理 1.设计出每个⾮终结符的⽂法识别过程。 2.将输⼊数据进⾏处理,提取出单词的编码。 3.每⼀个⾮终结符对应于⼀个函数(⼦过程),⾮终结符所对应的右侧产⽣式为函数体;为每个⾮终结符写识别递归函数。 4.每遇到⼀个终结符,则需要判断所输⼊字符是否与之匹配,若匹配则读取下⼀个,若不匹配,则进⾏出错处理。 5.函数相互调⽤。 加⼊递归下降翻译器⼦程序伪码: 表达式递归下降⼦程序为: function 表达式:string ; string s1, s2, s3, result ; BEGIN IF SYM=’+’ OR SYM=’-’ THEN ADVANCE; ELSE IF SYM =FIRST(项) ELSE ERROR; BEGIN s1:=项; END; WHILE SYM=’+’ OR SYM=’-’ THEN BEGIN ADVANCE; S2:=项; result := newtemp (); emi

文档评论(0)

134****3224 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档