语法制导翻译与中间代码生成

语法制导翻译与中间代码生成

ID:27846451

大小:273.50 KB

页数:87页

时间:2018-12-04

语法制导翻译与中间代码生成_第1页
语法制导翻译与中间代码生成_第2页
语法制导翻译与中间代码生成_第3页
语法制导翻译与中间代码生成_第4页
语法制导翻译与中间代码生成_第5页
资源描述:

《语法制导翻译与中间代码生成》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第8章语法制导翻译与中间代码生成8.1属性文法语法分析后的源程序==>语义处理静态语义是对程序约束的描述,这些约束无法通过抽象语法规则来妥善地描述,实质上就是语法规则的良形式条件,它可以分为类型规则和作用域/可见性规则两大类动态语义程序单位描述的计算编译程序的语义处理工作1静态语义审查,即验证语法结构合法的程序是否有意义2生成中间代码静态语义审查(1)类型检查。根据类型相容性要求,验证程序中执行的每个操作是否遵守语言的类型系统的过程,编译程序必须报告不符合类型系统的信息。(2)控制流检查。控制流语句必须使控制转移到合法的地

2、方。例如,在C语言中break语句使控制跳离包括该语句的最小while、for或switch语句。如果不存在包括它的这样的语句,则就报错。(3)一致性检查。在很多场合要求对象只能被定义一次。例如Pascal语言规定同一标识符在一个分程序中只能被说明一次,同一case语句的标号不能相同,枚举类型的元素不能重复出现等等。(4)上下文相关性检查。比如,变量名字必须先声明后引用;(5)名字的作用域分析解释执行动态语义(计算)生成代码(中间代码或目标代码)例:有文法G[E]:E→T1+T2

3、T1orT2T→num

4、true

5、fals

6、e对输入串2+6语法树如图:ET+T26E{T1.t=T2.t}T+26T{T2.t=int}{T1.t=int}类型检查的属性文法:E→T1+T2{T1.t=intANDT2.t=int}E→T1orT2{T1.t=boolANDT2.t=bool}T→num{T.t:=int}T→true{T.t:=bool}T→false{T.t:=bool}属性文法,语法制导翻译属性文法A(attributegrammar)是一个三元组:A=(G,V,F),其中G:是一个上下文无关文法,V:有穷的属性集,每个属性与文法的一终结符或

7、非终结符相连,F:关于属性的属性断言或谓词集.每个断言与一个产生式相联.而此断言只引用该产生式左端或右端的终结符或非终结符相联的属性例如:定义表达式的文法如下:EE+E E(E) En给出定义表达式值的属性文法。我们为文法符号E引进属性符号val,用E.val表示E的值,属性计算规则以赋值语句的形式给出,附在每个产生式后,并用大括号括起来。为了明确E的不同出现位置,用上角标区别。终结符n的值是词法分析程序提供的,这里用n.lex表示。下面给出属性文法:EE1+E2{E.val:=E1.val+E2.val}E(E

8、1){E.val:=E1.val}En{E.val:=n.lex}属性文法的主要思想有两点:首先对于每个文法符号引进相关的属性符号;其次对于每个产生式写出属性值计算的规则。属性文法:允许为每个终结符和非终结符配备一些属性的文法.它既能描述程序设计语言的语法,又为其语义描述提供了手段.属性文法由D.E.Knuth于1968年引进.后来才被用于编译程序的设计。属性有不同的类型,可以象变量一样地被赋值。赋值规则附加于语法规则之上。赋值与语法同时进行,赋值过程就是语义处理过程。在推导语法树的时候,诸属性的值被计算并通过赋值规则层

9、层传递。有的从语法规则左边向右边传,有的从右边向左边传。语法推导树最后完成时,就得到开始符号的属性值。也就是整个程序的语义.属性分为两种:继承属性和综合属性. inheritedandsynthesized(derived)attribute继承属性的计算规则由顶向下,综合属性的计算规则由底向上.例如定义表达式值的属性文法,E.val是一个综合属性的例子:EE1+E2{E.val:=E1.val+E2.val}E(E1){E.val:=E1.val}En{E.val:=n.lex}考虑句子2+(3+1)的求值顺序,将

10、2+(3+1)的语法树结点改为有附加属性的结点(这样的树称为带注释的语法树):E.val=6E.val=2+E.val=4n.lex=2(E.val=4)E.val=3+E.val=1n.lex=3n.lex=1例8.1一个简单台式计算器的定义综合属性val语义规则LEEE1+TETTT1*FTFF(E)FdigitPrint(E.val)E.val:=E1.val+T.valE.val:=T.valT.val:=T1.valF.valT.val:=F.valF.val:=E.valF.val:=digit.lexval

11、产生式3*5+4的带注释的分析树只使用综合属性.LE.val=19E.val=15T.val=4T.val=15F.val=4T.val=3F.val=3F.val=5digit.lexval=4digit.lexval=5digit.lexval=3+*3*5+4的带注释的分析树继承属性一个结点的继承

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。