- 1、本文档共55页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 语法制导翻译和中间代码生成;主要内容;目标程序;语义分析基础;语义分析基础-语义分析的内容(续);语义分析基础;6.1属性文法(Attribute Grammar);6.1 属性文法(续);6.1 属性文法(续);6.1 属性文法(续);6.1 属性文法(续);6.1 属性文法(续);6.2 语法制导翻译概论;例 简单算术表达式求值的属性文法
E→E1+T { E.val :=E1.val +T.val }
E→T { E.val :=T.val }
T→T1*digit { T.val :=T1.val * digit.lexval }
T→digit { T.val :=digit.lexval }?;6.3 中间代码的形式;6.3.1 逆波兰表示法(后缀式);;逆波兰表示法的扩充
逆波兰表示法很容易扩充到表达式以外的范围
例如:;6.3.2 三元式;6.3.3 树形表示;6.3.4 四元式;6.3.4 四元式(续);6.3.4 四元式(续);6.3.5 间接三元式;举例:;举例:;6.4 语法制导翻译;6.4.1简单赋值语句到四元式的翻译;6.4.1简单赋值语句到四元式的翻译;使用上述变量和过程,对文法6.1所定义的赋值语??的翻译算法可由下述语义动作予以描述;输入串;3、类型转换;3、类型转换(续);T:=NEWTEMP;
IF E1.MODE=int AND E2.MODE=int THEN
BEGIN GEN(opi , E1.PLACE, E2.PLACE,T); E.MODE:=int END
ELSE IF E1.MODE=r AND E2.MODE=r THEN
BEGIN GEN(opr , E1.PLACE, E2.PLACE,T); E.MODE:=r END
ELSE IF E1.MODE=int /*AND E2.MODE=r */ THEN
BEGIN
U:=NEWTEMP; GEN(itr, E1.PLACE,-,U);
GEN(opr , U,E2.PLACE,T); E.MODE:=r
END
ELSE /* E1.MODE=r AND E2.MODE=int */
BEGIN
U:=NEWTEMP; GEN(itr, E2.PLACE,-,U);
GEN(opr , E2.PLACE, U, T); E.MODE:=r
END
E.PLACE:=T;布尔表达式的两个作用:
用于逻辑运算,计算逻辑值
作为控制语句(如if-then,while)的条件表达式
布尔表达式由布尔算符(not,and,or)作用于布尔变量(或常数)或关系表达式而形成的。
关系表达式的形式:E1 rop E2,rop是关系算符(如=, ,=,≠, , =);为简单起见,只考虑如下形式的布尔表达式的翻译,文法(6.2)
E→E or E | E and E | not E | (E ) | id rop id |id
布尔算符的优先顺序(从高到低)为:not,and,or,且and和or都服从左结合,not服从右结合
关系算符的优先级都相同,而且高于任何布尔算符,低于任何算术算符;1.布尔表达式的计算方法:;2、直接计算的语法制导翻译;3.作为条件控制的布尔式翻译;把布尔表达式E翻译成下述形式的条件转移和无条件转移的四元式序列:
( jnz , A , - , p )
若A为真,则转向四元式p
( jrop , A , B , p )
若A rop B为真,则转向四元式p
( j , - , - , p )
无条件转向四元式p;(1) ( jnz , A , - , 5 ) A的真出口为5
(2) ( j , - , - , 3 ) A的假出口为3
(3) ( j , B , D , 5 ) BD的真出口为5
(4) ( j , - , - , p+1 ) BD的假出口为(p+1)
(5) (关于S1的四元式序列)
(p) ( j , - , - , q ) 跳过S2的代码段
(p+1) (关于S2的四元式序列)
(q);具体说明如下:;对于E为 E1 or E2的形式,生成代码结构如下:;E1.的代码;例:E 为 ab or cd and ef ,翻译为四元式序列:
(1)??? ( j, a, b, E.true)
(2)??? ( j, - , - , (3))
(3)??? ( j, c , d , (5))
(4)??? ( j, - , - , E.false)
(5)??? ( j, e , f , E.true)
(6)???
文档评论(0)