欢迎来到天天文库
浏览记录
ID:36607635
大小:451.10 KB
页数:60页
时间:2019-05-09
《sun编译原理第5章语法制导翻译技术和中间代码生成(第19-21讲)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、5.1概述■语义分析的任务首先编译程序审查每个语法结构的静态语义,如果静态语义正确,再生成中间代码。词法分析:分析的预备阶段,输出是单词符号序列;语法分析:分析的主要阶段,输出是语法树。但这样还不能完全确定源程序的正确性,也没有获得翻译时所需的所有信息。注意:有的编译程序不生成中间代码而直接生成实际的目标代码。8/3/20211信息学院孙丽云5.2属性文法词法规则的描述工具:语法规则的描述工具:语义规则的常用描述工具:属性文法正规文法或正规式上下文无关文法属性是编程语言结构的任意特性,如:变量的数据类型表达式的值存储器中变量的位置程序
2、的目标代码数的有效位数■基本概念X.a是与X关联的a的值(X是一个文法符号,a是X的一个属性)。如:X.type(X的类型)、X.place(X的存储位置)、X.val(X的值)8/3/20212信息学院孙丽云■属性文法即:以语法分析为基础,对应文法的每个产生式,确定相应的语义规则。属性文法是在上下文无关文法的基础上,允许每个文法符号X(终结符或非终结符)根据处理的需要,定义与X相关联的属性。一个属性文法形式上定义为一个三元组AG,AG=(G,V,E)。其中G表示一个上下文无关文法;V表示属性的有穷集;E表示属性的断言或谓词的有穷集。
3、其中每个断言与文法某产生式相关联。例:Em+n,则与该产生式相关联的断言为:E.val=m.val+n.val……8/3/20213信息学院孙丽云文法规则语义规则规则1相关的属性等式....规则n相关的属性等式■属性文法一般地,将属性文法写成表格形式,每个文法规则用属性等式的集合或相应规则的语义规则列出。注意:文法规则中同一产生式中某符号出现多次必须使用下标进行区分。例:number1number2digit8/3/20214信息学院孙丽云1)已知无符号数文法如下,请改写成值属性文法。numbernumberdigit
4、digi
5、tdigit0
6、1
7、2
8、3
9、4
10、5
11、6
12、7
13、8
14、9●例如:文法规则语义规则number1number2digitnumber1.val=number2.val*10+digit.valnumberdigitnumber.val=digit.valdigit0digit.val=0digit1digit.val=1digit2digit.val=2digit3digit.val=3digit4digit.val=4digit5digit.val=5digit6digit.val=6digit7digit.val=7
15、digit8digit.val=8digit9digit.val=9解:8/3/20215信息学院孙丽云grammarrulesemanticrulesexp1exp2+termexp1.val=exp2.val+term.valexp1exp2-termexp1.val=exp2.val-erm.valexptermexp.val=term.valterm1term2*factorterm1.val=term2.val*factor.valtermfactorterm.val=factor.valfactor(exp
16、)factor.val=exp.valfactornumberfactor.val=number.val2)简单的整数算术表达式文法如下,请改写成值属性文法。expexp+term
17、exp-term
18、termtermterm*factor
19、factorfactor(exp)
20、number解:8/3/20216信息学院孙丽云1.简单的整数算术表达式文法如下,请改写成值属性文法。EE+T
21、TTT*F
22、FF(E)
23、I2.已知无符号数文法如下,请改写成值属性文法。NND
24、DD0
25、1
26、2
27、3
28、4
29、5
30、6
31、7
32、8
33、9■练习8/3
34、/20217信息学院孙丽云使用属性文法来计算属性值,即把属性等式转化成计算规则可用依赖图(或称相关图)来决定属性值的计算顺序。■属性的计算关键:如何决定属性值的计算顺序例:属性等式number1.val=number2.val*10+digit.val则,文法规则number1number2digit的依赖图:number2.valnumber1.valdigit.val8/3/20218信息学院孙丽云例:已知无符号数属性文法,请画出属性等式及345的依赖图。grammarrulesemanticrulesnumber1numbe
35、r2digitnumber1.val=number2.val*10+digit.valnumberdigitnumber.val=digit.val解:(1)属性等式number1.val=number2.val*10
此文档下载收益归作者所有