- 11
- 0
- 约7.22千字
- 约 35页
- 2018-10-19 发布于山东
- 举报
第6章
语义分析和中间代码生成
主要内容
语义分析
中间代码生成
• 方案2:自底向上分析——LR分析法
解决步骤:
(1)写出简单算术表达式的文法(为了简单起见
只考虑+、*符号运算)
E’→E
E→E+T|T,
T→T*F|F,
F→(E)|i
(2 )画出对应的LR(0) DFA——采用SLR(1)分
析法
例:3+4*5 DFA图
(3 )构造规则的语义动作
根据后缀表示与前缀表示运算对象出现顺序的的一致性,
遇到运算对象通过栈保存。
规则归约时加入相应的含义。因此:
规则F→i,添加的语义动作为:i入栈
规则E→E+T,添加的语义动作为:+入栈
规则E→T*F,添加的语义动作为:*入栈
对应规则的语义函数为:
规则 语义函数
E’→.E ( )
E→E+T (Post[p]=‘+’;p=p+1)
E→T ( )
T→T*F (Post[p]=‘*’;p=p+1)
T→F ( )
F→(E) ( )
F→I (Post[p]=I;p=p+1)
分析翻译过程——生成后缀表示
例:3*4+5
用SLR(1)分析法进行语义分析翻译生成后缀表示
式的过程
LR(0) DFA图遍历
扩充的后缀表示
赋值语句:
a=e的波兰表示为a e=
a=b*(c+b)的波兰表示为a b c b+*=
数组:
a[e]的波兰表示为e a SUBS
其中SUBS表示计算数组下标的运算
条件语句if (u ) S1 else S2
则对应的后缀表示为 u L1 BZ S1 L2 BR S2
——BZ为双目运算符,表示当u不成立(为零)
时转向标号L1部分继续执行
——L1表示语句S2开始执行的位置。
——BR为一个单目运算符,表示无条件转向L2
部分继续执行
——L2表示语句S1开始执行的位置。
例:if (m n )k=1 ;else m=0;
后缀表示为
m n 10 BZ k1= 20 BR
10: m0=
20:
循环语句
FOR循环、WHILE 循环、REPEAT UNTIL循环
可以根据其计算机的执行顺序分别转换为后缀表
示即可。
2. 四元组和三元组
2.1 四元组的表示方法
(OP , P1 , P2 , T)
其中OP为运算符,OP1、OP2 为运算对象,T为
计算结果的临时暂存变量。
注意:在按语法制导翻译实际产生的四元组中,
OP用一个整数码表示,它除了标识运算符的种类
之外,还附带地表示其它一些语义特性。
P1、P2 、T表示一个指向符号表某一登记的入口
位置或者一个临时变量的整数码。
意味着在产生中间代码的过程中,也相应地进行
查找符号表的工作——与符号表打交道。
例:对于表达式 a*(b+c)对应的四元组为:
( + , b , c , T1)
(*, a , T1, T2)
一个问题:如何将一个中缀表达式表示成四元组
(1)手动方法
(2 )语法分析加语义动作的方法
• 2.2三元组的表示方法
(OP , P1 , P2 )
其中OP为运算符,P1、P2 为运算对象。用元组
编号来代表结果保存的位置。
表达式a*(b+c)对应的三元组为:
(1) ( + , b , c )
(2 ) (*, a , (1))
问题:如何将一个中缀表达式表示成三元组。
(1)手动方法
(2 )语法分析加语义动作的方法
• 2.3 四元组的扩充表示
赋值语句a=e,先将e表示为四元组,再将= 运算转换为四
元组。
如a=b+c,则四元组表示为:
(+, b ,
您可能关注的文档
最近下载
- 2026年开工第一课主题.ppt
- 普通纪念币防伪课件.pptx VIP
- ASTM A388A388M-2018钢锻件超声检验标准操作方法中文版.pdf VIP
- 艺考真题|2020年中传文史哲初试真题原卷放送(附答案).doc VIP
- 毛石混凝土挡土墙施工方案.docx
- 八年级英语上册全册课课练.doc VIP
- POEMS综合征课件完整版.ppt VIP
- NB-T11409-2023水电工程费用构成及概(估)算费用标准.docx VIP
- 2026年春季学期学校德育工作计划.docx VIP
- 深度解析(2026)《TBT 3474.2-2018机车车辆螺纹连接软管 第2部分:橡胶软管》.pptx VIP
原创力文档

文档评论(0)