吉林大学软件学院编译原理与实现习题(四) 期末复习用

一.单选题

1.文法G所描述的语言是( )的集合。

A、文法G的字母表V中所有符号组成的符号串。

B、文法G的字母表的闭包V*中的所有符号串。

C、由文法的开始符推出的所有符号串。

D、由文法的开始符推出的所有终极符号串。

 

正确答案: D 

由文法定义可知,文法所定义的语言是由该文法的开始符推导出的所有的终极符串的集合。

 

2.下列文法能够产生语言的是( )。

A、Z→aZb | aAb | b

      A→aAb | b

B、A→aAb

      A→b

C、Z→AbB

      A→aA | a                   

      B→bB | b

D、Z→aAb                           

      A→aAb | b

 

正确答案: D 

注意语言特点,所有两边a和b的个数对称,至少有一个。

 

3.由文法的开始符经过0步或多步推导产生的符号串是:

A、短语

B、句柄

C、句型

D、句子

 

正确答案: C 

由句型的定义可知。

 

4.如果文法G是无二义性的,则它的任何句子α:

A、最左推导和最右推导对应的语法树必定相同

B、最左推导和最右推导对应的语法树可能不同

C、最左推导和最右推导必定相同

D、可能存在两个不同的最左推导

 

正确答案: A

如果文法G是无二义性的,对它的任何句子α来说,最左推导和最右推导对应的语法树必定相同,只不过最左推导是先生长左边的枝叶,而最右推导先生长右边的枝叶;对于D,如果有两个不同的最左推导,则必然有二义性。因此选A。

 

5.下列哪些方法可以用于文法等价变换( )。
① 消除空产生式; ② 消除左递归; ③ 消除单产生式; ④ 消除无用产生式; ⑤ 消除开始符对应的产生式; ⑥ 消除二义性句型。

A、①②③④

B、①②③

C、①②③④⑤

D、①②③④⑤⑥

 

正确答案: A 

熟悉常见文法等价变换方法。其中⑤会导致文法不等价,⑥的说法本身是错的。

 

6.假设有如下文法:

T→T*F | F

F→F­↑+P | P

P→(T) | a 

该文法的句型T*P↑ +(T*F)的简单短语是( )。
① (T*F) ② T*F ③ P ④ P­↑+(T*F)

A、①③

B、②③

C、

D、①④

 

正确答案: B

按定义求简单短语需从开始符进行推导,找出一步推导能导出的字串,较难。可以画出句型的语法树,在树中找高度是1的子树,其叶节点从左向右排列形成的串,即是所求。

 

7.已知如下文法:

E→TE’ | e

E’→+TE’ | e

T→FT’

T’→*FT’ | e

F→(E) | id

则Follow(F)=( ).

A、{*,+}

B、{*,e}

C、{+,#, )}

D、{*,+,#,)}

E、{#,)}

F、{*,+,#, ),id}

 

正确答案: D 

依据Follow集合的计算算法可求。

 

二.填空题(共1题,20.0分)

已知如下文法:

S→eT | RT

T→DR | ε

R→dR | ε

D→a | bd

则First(S)=( ① ), First(T)=( ② ), First(R)=( ③ ), First(D)=( ④ )。

 

正确答案:① {a,b,d,e,ε},②{a,b,ε},③ {d,ε},④{a,b}

 

三.简答题

1.给出下面语言的上下文无关文法描述:(答案不唯一)

1) L={anb2n+1 | n>=0}  

2) L= {aibj | j≥ i≥1}    

3)  L={anbbn | n>=1}

4) L= {anbmambn | n≥1, m≥0}

 

正确答案:

1)S ->aSbb | b

2) S-> aSb | Sb | ab

3) S->aAb    A->aAb|b

4)  S -> aSb | aBb     B-> bBa | 空串

 

 

PS:

吉大软院的编译原理课应该是大三下的时候开设的,刚好我们赶上了疫情所以只能是线上学习。对我个人而言,我更偏向于线上非直播类型的授课方式,因为在线下课堂里听老师上课难免会走神,一走神就跟不上老师的节奏,线上视频课就可以更方便地翻看不懂的知识点,方便平时梳理知识点及期末复习。刚好最近考试和毕设选题还有其他东西该忙的也都忙完了,想着把以前的资料整理一下分享给学弟学妹们(其实没有学妹了),就当作回馈当初帮助我的学长们。
分享的资料清单包括平时所用教材、测验题以及期末复习资料。
资料皆仅限于学习交流用途,禁止商用!
需要的同学可以关注我的个人微信公众号:Jose的写字台
关注后回复关键字即可,之后会有更多的资料整理完毕后发布在公众号上,希望能帮助到你们!

### 关于吉林大学编译原理课程的学习资料 #### 1. 吉林大学编译原理自学记录 根据已有信息,吉林大学的《编译原理》课程提供了丰富的学习资源。例如,在一份名为“吉林大学 编译原理 自学记录”的文档中提到,该课程的内容涵盖了理论基础以及实践应用[^1]。此材料可以帮助学生理解编译器的工作机制及其核心概念。 #### 2. 号表构建实例分析 针对具体题目中的号表示例,“吉林大学编译原理2021-2022”给出了详细的解答方法。当程序执行至`i=a*b`时,需维护一个全局号表来存储变量的相关属性(名称、种类、类型、作用域层次及偏移量)。其中,全局号表从偏移地址`off`开始分配空间;而局部号则基于另一个初始位置`off0`进行布局[^2]。 以下是按照上述规则生成的一个简单示例代码片段用于说明如何实现这一功能: ```python class SymbolTableEntry: def __init__(self, name, kind, type_, level, offset): self.name = name # 变量名 self.kind = kind # 种类 (e.g., 'variable', 'function') self.type_ = type_ # 数据类型 (e.g., int, float) self.level = level # 层次编号 self.offset = offset # 偏移地址 def create_symbol_table(): global_offset = off # 初始化全局偏移指针 local_offset = off0 # 初始化局部偏移指针 symbol_table = [] a_entry = SymbolTableEntry('a', 'variable', 'int', 0, global_offset) b_entry = SymbolTableEntry('b', 'variable', 'float', 0, global_offset + 4) # 假设整型占4字节 i_entry = SymbolTableEntry('i', 'variable', 'double', 0, global_offset + 8) # 浮点数占用更多内存 symbol_table.extend([a_entry, b_entry, i_entry]) return symbol_table ``` 以上伪代码展示了如何创建并填充号表条目,每项均包含了必要的字段描述。 #### 3. 正规表达式的构造技巧 另外一篇笔记——【自用】吉林大学编译原理第一章编译引论指出,在处理特定模式匹配问题时可运用有限状态自动机(FSA)技术。比如为了识别由偶数个零和奇数个一构成字串序列的情况,可以通过定义若干种基本单元组合形式达成目标[(情况1|情况2|情况3)*][^3]。 ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真的该去学习了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值