《实验三分析调试语义分析程序》由会员分享,可在线阅读,更多相关《实验三分析调试语义分析程序(3页珍藏版)》请在金锄头文库上搜索。
1、实验三 分析调试语义分析程序3.1实验类型验证型实验。 6学时(2学时分析理解语义及代码生成程序、2学时分析理解抽象机模拟程序、2学时调试、测试前面两个程序)3.2实验目的通过分析调试TEST语言的语义分析和中间代码生成程序,加深对语法制导翻译思想的理解,掌握将语法分析所识别的语法范畴变换为中间代码的语义翻译方法。3.3背景知识属性文法属性文法A=(G,V,F),其中:G:一个上下文无关文法, 属性文法的基础。V:有穷的属性集,每个属性与一个文法符号相关联,这些属性代表与文法符号相关的语义信息,如:类型、地址、值、代码、符号表内容等等。属性与变量一样,可以进行计算和传递,属性加工的过程即语义处
2、理的过程,属性加工与语法分析同时进行。属性有两类:综合属性:归约型属性,用于“自下而上”传递信息。继承属性:推导型属性,用于“自上而下”传递信息。F:关于属性的属性断言或一组属性的计算规则(称为语义规则)。断言或语义规则与一个产生式相联,引用该产生式左端或右端的终结符或非终结符相关联的属性。属性翻译文法属性翻译文法以上下文无关文法为基础,为每个文法符号引进一组属性(语义值),对文法的每个产生式都配备一组与之相关联的属性计算规则(语义规则)而得到的文法。 或者说:符号具有属性并带有属性求值规则的翻译文法称为属性翻译文法 其具体定义如下:1)文法的每个终结符、非终结符和动作符号都可以有一个有穷的属
3、性集。 2)每个非终结符和动作符号属性可分为综合属性和继承属性。3)继承属性的求值规则: 开始符号的继承属性具有初始值。 对产生式左部的非终结符,其继承属性则继承前面产生式中该符号已有的继承属性值。 右部的符号,其继承属性由产生式中其它符号属性值进行计算。4)综合属性的求值规则: 终结符号的综合属性具有指定的初始值。在具体实现中,初始值由由词法分析程序提供。 产生式右部的非终结符号的综合属性值,则取后面以该非终结符号为产生式左部时求得的综合属性值。 产生式的左部的非终结符号的综合属性值,由产生式中左部或右部的某些符号的属性值进行计算。 给定一动作符号,其综合属性值用该动作符号的其它属性值进行计
4、算。 3.3.3 L属性文法一个属性文法称为L属性文法,如果对于每个产生式AX1X2Xn,满足:1. 右部符号Xi(1in)的继承属性之值,仅依赖于X1,X2,Xi-1的任意属性或A的继承属性;2. 左部符号A的综合属性之值仅依赖于A的继承属性或(和)右部符号Xi(1in)的任意属性 ;3. 对一动作符号而言,其综合属性之值是以该动作符号的继承属性或产生式右部的任意属性为变元的函数。3.3.4 S属性文法一个属性文法称为S属性文法,当且仅当满足如下条件:1. 所有非终结符只具有综合属性;2. 在一个产生式中,每一个符号的各个综合属性的定义互不依赖;3. 在一个产生式中,若某个文法符号X具有继承
5、属性,则此继承属性之值仅依赖于该产生式右部且位于X左边的符号之属性。3.3.5语法制导翻译的基本思想为每个产生式配上一个语义子程序(该子程序描述一个产生式所对应的翻译工作。这些工作包括:生成中间代码,查填符号表,检查和报错,修改编译程序某些工作变量的值等)。在语法分析过程中,每当一个产生式用于匹配或归约时,就调用该产生式所对应的语义子程序,以完成翻译任务。3.4实验内容1、分析调试教材上附录D的语义及代码生成程序,增加功能:检查变量是否赋初值,对没赋初值的变量引用时报告语义错误;2、熟悉教材上TEST语言抽象机的指令系统;3、分析调试教材上附录E的TEST抽象机模拟器程序;4、对下列TEST语
6、言代码进行编译,得到中间代码并在抽象机上运行,要求能得到正确的输出结果。 int sum;int product;int i;int a;for ( i =1; i10; i + i =1) read a;sum = sum +a;product = product*a;write sum;write product;注:键盘输入时,依次输入1, 2, 3, 4, 5, 6, 7, 8, 9, 103.5实验思考1、语义及代码生成程序中的符号表管理方案存在什么问题?提出改进方案。2、你是如何检查变量是否赋初值的?给出你的处理方案。3、给出产生式中所添加的动作含义。4、抽象机模拟程序是如何处理语句标号的?3.6 实验报告要求1、反映调试分析过程,突出对代码的修改;2、展现实验结果;3、回答所有实验思考问题。