编译原理试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中间语言与语法制导翻译重点与难点
重点:语法制导翻译的基本思想,属性文法,翻译模式,说明语句的翻译方案。
三地址码,各种语句的目标代码结构、属性文法与翻译模式。
难点:属性的意义,对综合属性,继承属性,固有属性的理解,属性计算,怎么通过属性来表达翻译。布尔
表达式的翻译,对各种语句的目标代码结构、属性文法与翻译模式的理解。
基本要求
掌握语法制导翻译的基本思想,属性文法,综合属性,继承属性,固有属性,属性计算,s_属性文法,
L_属性文法,说明语句的翻译方案,翻译模式、属性文法的实现
掌握中间语言与语义分析的基本概念;熟练掌握语法(结构)树、三地址代码、赋值与控制语句的翻译、
说明语句的翻译;掌握组合数据说明的翻译、过程调用翻译。
例题解析
例1 给定文法E --> T { R.i := T.p }
R { E.p := R.s }
R --> addop
T { R1.i := mknode( addop.val, R.i, T.p ) }
R { R.s := R1.s }
R --> : { R.s := R1.s }
T --> ( E ) { T.p := E.p }
T --> id { T.p := mkleaf( id, id.entry) }
T --> num { T.p := mkleaf( n um, n um.val ) }
(1) 指岀文法中的各非终结符具有哪些综合属性和哪些继承属性
⑵ 画岀按本翻译模式处理表达式 a + 20 + ( b - 10 ) 时所生成的语法树
【解】
(1)E的综合属性p,R的继承属性i,综合属性s ; T的综合属性p
⑵处理表达式a + 20 + ( b - 10 ) 时所生成的语法树如下
例2定义一个计算器的属性文法,完成一个输入表达式值的计算和显示
【解】计算器的文法
L T E
E T E1 + T | T
T T T1 * F | F
F T ( E ) | digit
引进属性 val , 计算器的属性文法:
L T E
print( E.val )
( L 的虚属
性)
E T E1 + T E.val := El.val + T.val E T T
E.val := T.val T T T1 * F
T.val := Tl.val * F.val T T F
T.val := F.val F T ( E )
F.val := E.val F T digit
F.val := digit .l exval
lexval 是单词digit
的属性 例3给岀对输入串 6-3 3*5+4 的分析树与属性计算 【解】3*5+4的分析树与属性计算
digit .l exval=3
例4定义一个说明语句的属性文法 【解】说明语句的文法
D T T L T T int T T real L T L1,id
L T id
要解决的问题:记录标识符的类型和类型信息传递
方法:引进属性type,和in,用T.type 记录类型信息,并传给
L.in,
说明语句的属性文法如下:
D T T L L.in := T.type T T int T.type := ' integer ' T T real
T.type :=
' real '
L T L1,id L1.in := L.in
addtype( id.e ntry, L.i n )
L T id
addtype( id.entry, L.in )
en try
单词id 的属性
Prin t(19) E.val=19
E.val=15 T.val=4 T.val=15
F.val=4
T.val=3 F.val=5 digit .l exval=4
F.val=3
digit.l exval=5
addtype 在符号表中为变量填加类型信息
例6设下列文法生成变量的类型说明
D T id L
L T , id L | : T
T T in teger | real
试构造一个翻译模式,把每个标识符的类型存入符号表。
【解】解题思路
这是一个对说明语句进行语义分析的题目,不需要产生代码,但要求把每个标识符的类型填入符号表中。
解答
对D, L, T设置综合属性type。过程addtype(id,type) 用来把标识符id及其类型type填入到符号表
中。
翻译模式如下:
D T id L {addtype(id.e ntry,L.type) }
L T ,id L1 {addtype(id.entry,L1.type);L.type:=L1.type;}
L T : T {L.type:=T.type}
T T integer {T.type:=interger}
T T real {T.type:=real} 例7文法G的产生式如下:
S T (L) | a L T L , S | S
(1) 试写出一个语法制导定义,它输出配对括号个数;
(2) 写一个翻译方案,打印每个a的嵌套深度。如((a),a), 打印2,1。
【解】解题思路
本题包括两部分,第1部分要求写语法制导定义,第2部分要求写翻译方案。语法制导定义(或属性文
法)可以看作是关于语言翻译的高级规范说明,其中隐去实现细节,使用户从明确说明翻译顺序的工作中解脱岀来。翻译方案(也称翻译模式)给岀了使用语义规则进行计算的次序,把某些实现细节表示岀来。读者从下面解答中可体会两者的区别。
解答为S L引入属性h,代表配对括号个数。语法制导定义如下:
产生式语义规则
S T (L) S.h:=L.h+1
S T a S.h:=0