Ch7语义分析和中间代码产生

Ch7语义分析和中间代码产生

ID:45033906

大小:709.50 KB

页数:127页

时间:2019-11-08

Ch7语义分析和中间代码产生_第1页
Ch7语义分析和中间代码产生_第2页
Ch7语义分析和中间代码产生_第3页
Ch7语义分析和中间代码产生_第4页
Ch7语义分析和中间代码产生_第5页
资源描述:

《Ch7语义分析和中间代码产生》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、编译原理第七章语义分析和中间代码产生程序设计语言1本章在编译程序中的地位表格管理词法分析器语法分析器语义分析与中间代码产生优化器目标代码生成器源程序单词符号语法单位中间代码中间代码目标代码出错处理2CH.7语义分析和中间代码的产生本章将把上一章所介绍的语法制导翻译方法和技术应用于程序语言典型结构的语义分析和中间代码的生成中。应用到的主要方法技术有:1.属性文法和翻译模式,翻译为中间代码。2.一遍扫描的语法制导翻译方法(结合自下而上语法分析)。3.引进标记非终结符及ε产生式,实现在自下而上分析过程中计算属性值。4.改变基础文法,以避免使用继承属

2、性。2021/9/293Ch7.语义分析和中间代码产生语义分析和中间代码的产生基本过程:1.先分析欲翻译的语言语句的结构以及欲翻译得到的中间代码的结构;2.在分析的基础之上,设计语言语句的属性文法或翻译模式;3.设计的属性文法或翻译模式能结合自下而上语法分析进行一遍扫描的语法制导翻译,产生需要的中间代码。2021/9/294Ch7.语义分析和中间代码产生静态语义检查语义分析和中间代码生成阶段,编译程序要做的工作是进行静态语义检查和翻译。把经过语法分析和语义分析而获得的源程序中间表示翻译为中间代码表示。静态语义检查通常包括:参见P166.1.类

3、型检查;参见7.7类型检查2.控制流检查;3.一致性检查;4.相关名字检查;5.其他检查,如名字的作用域分析,等。静态语义检查和中间代码的地位,参见图7.15教学要求掌握:1.逆波兰式,DAG图,抽象语法树,三地址代码,三元式,四元式等中间代码表示;2.简单赋值语句的翻译,带数组元素引用的赋值句的翻译;3.布尔表达式的翻译,控制语句中布尔表达式的翻译;4.控制语句的翻译。了解理解:说明语句的翻译,过程调用和参数的处理。6教学内容7.1中间语言后缀式,DAG,三地址码(四元式,三元式,间接三元式)*7.2说明语句的翻译7.3赋值语句的翻译,数组

4、元素引用的翻译7.4布尔表达式的翻译求布尔式值的翻译,作为控制条件的翻译7.5控制语句的翻译if,while,goto,case7.6过程调用的处理,参数传递的处理*7.7类型检查(不作要求,不讲)77.1中间语言要掌握几种中间语言的基本结构:逆波兰表示即后缀式图表示法(抽象语法树、DAG图表示)三地址代码(四元式、三元式、间接三元式)7.1.1后缀式后缀式表示法又称逆波兰表示法。这种方法是,把运算量(操作数)写在算符的前面,把算符写在运算量的后面(后缀)。8后缀式的定义(P167.)一个表达式的后缀式可以如下定义:1.如果E是一个变量或常量

5、,则E的后缀式是E自身。2.如果E是E1opE2形式的表达式,这里op是任何二元操作符,则E的后缀式为E1’E2’op,这里E1’和E2’分别为E1和E2的后缀式。3.如果E是(E1)形式的表达式,则E1的后缀式就是E的后缀式。要求会正确写出表达式的后缀式。9后缀式:例写表达式的后缀式要点:1.后缀式中运算量的顺序与中缀式的相同;2.算符出现的次序即表达式的运算次序;3.不使用括号。例:a+bab+a*(b+c)abc+*(a+b)*(c+d)ab+cd+*-a+b*cabc*+a/b**c-d*eabc**/de*-(A=0∧B≠0)A

6、0=B0≠∧用表示取负算符(uminus)10写后缀式:练习写出下列各式的逆波兰表示:(1)-a-(b*c/(c-d)+(-b)*a)(2)-A+B*C↑(D/E)/F(3)x:=a-b/(c+d)解:(1)abc*cd-/ba*+-(2)ABCDE/↑*F/+(3)xabcd+/-:=用表示取负算符(uminus):=表示赋值算符(assign)11把表达式翻译为后缀式的 语义规则描述(属性文法)P167.表7.1:产生式语义规则E→E1opE2E.code:=E1.code

7、

8、E2.code

9、

10、opE→(E1)E.code:=

11、E1.codeE→idE.code:=id属性E.code:是E的后缀式代码属性op:二元算符‖:后缀式的连接运算算符127.1.2图表示法图表示法包括DAG与抽象语法树。两者都可以描述源程序的自然层次结构。DAG更加紧凑,可以标识出公共子表达式。抽象语法树,在6.2.4节已讲过。语法制导产生表达式的抽象语法树:P146.表6.4的S-属性文法P155.图6.17的L-属性文法及翻译模式P157.图6.20的递归下降构造抽象语法树的翻译器程序13图表示法:DAG无循环有向图(DirectedAcyclicGraph,简称DAG)。是抽象语法树

12、的改造。与抽象语法树一样,对于表达式中的每个子表达式,DAG图中都有一个结点。一个内部结点代表一个操作符,它的子结点代表操作数。与抽象语法树不同的是,在DAG图中代

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

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

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