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