期末考试复习题
判断
-
高级程序设计语言的代码在机器上运行可通过编译方式或解释方式实现,编译方式优于解释方式。错误
-
计算机只能识别机器代码,所以只能用机器语言实现编译程序。错误
-
不是所有句型都有规范推导。正确
-
递归文法的语言是无穷集。正确
-
“遍”是对源程序或源程序的中间结果从头到尾扫描一次,并做有关加工处理,生成新的中间结果或目标程序。一个编译程序所分遍数越多越好。错误
-
过程的活动生存期是指从该过程体第一步操作到最后一步操作之间的操作序。两个过程的活动生存期可以重叠。错误
-
算符优先函数,如果有f(a)>g(b),则必有a的优先级高于b,且b的优先级低于a。错误
-
符号表分为两大栏,名字栏和信息栏,其中名字栏是主栏。正确
-
中间代码优化的目的是生成更有效的目标代码,为了追求高效的目标代码,优化应不计代价。错误
-
正规表达式与正规文法是不同的形式化描述工具,它们之间不存在等价性。错误
单选
-
语法分析器的主要功能是(B)
A 从源程序中识别出一个个的单词
B 从单词流中识别出各类语法单位,并判断输入串是否符合语法规则
C 将输入串翻译成一定形式的中间代码
D 解释什么是语法 -
乔姆斯基把文法分为四种类型,即0型、1型、2型、3型,其中3型文法是:(B)
A 上下文无关文法
B 正规文法
C 属性文法
D 算符优先文法 -
以下关于DFA描述错误的是(B)
A 初态唯一
B 终态唯一
C 状态转换函数是单值映射
D 不含标记有空串的转换弧 -
C语言,允许递归过程,还允许用户动态地申请和释放存储空间,应采用以下哪种存储分配策略(D)
A 静态分配策略
B 栈式分配策略
C 堆式分配策略
D 都有 -
令文法G[S]为:
S->aAbBd
A->Ab| a
B->c | d
aabbcd是文法G的一个句子,指出这个句子的句柄是(A)
A a
B ab
C c
D d -
如果文法无二义性,则与最右推导互为逆过程的是(D)
A 最右归约
B 规范推导
C 最左推导
D 规范归约 -
活动记录中静态链的作用是(D)
A 建立本过程和主调过程间的联系
B 表明过程的嵌套层次
C 用来指向静态数据区
D用以实现对非局部名字的访问 -
LR分析器的核心部分是一张分析表,这张表包括(C)
A 预测分析表、状态转换表
B 优先关系矩阵、 动作表
C 动作表 、状态转换表
D 内情向量表、符号表 -
表达式a*b-(c+d)的逆波兰式是(B)
A abcd+ -*
B ab*cd+ -
C abcd*+ -
D abcd+*-
单选题 (3 满分) -
现有文法G[S]: S—>a |b | (T)
T —>S T’
T’->*ST’|ɛ
则FOLLOW(S)为:(C)
A {#}
B{# , )}
C {# , , )}
D {, )}
应用
- 文法 G[D]: D→TL T→i|r L→L,x|x 消除该文法的左递归; 判断改动后文法是否为LL(1)文法; 若是,则为其构造LL(1)分析表。
解:
D → T L D\to TL D→TL T → i ∣ r T\to i|r T→i∣r L → L , x ∣ x L\to L,x|x L→L,x∣x
-
文法中含有直接左递归
消除左递归后: D → T L D\to TL D→TL T → i ∣ r T\to i|r T→i∣r L → x L ′ L\to xL' L→xL′ L ′ → , x L ′ ∣ ε L'\to ,xL'|\varepsilon L′→,xL′∣ε -
构造FIRST集和FOLLOW集
X X X | F I R S T ( X ) FIRST(X) FIRST(X) | F O L L O W ( X ) FOLLOW(X) FOLLOW(X) |
---|---|---|
D D D | { i , r } \{i,r\} {i,r} | { # } \{\#\} {#} |
T T T | { i , r } \{i,r\} {i,r} | { x } \{x\} {x} |
L L L | { x } \{x\} {x} | { # } \{\#\} {#} |
L ′ L' L′ | { , , ε } \{,,\varepsilon\} {,,ε} | { # } \{\#\} {#} |
该文法是LL(1)文法。
3. 构造LL(1)分析表
i i i | r r r | , , , | x x x | # \# # | |
---|---|---|---|---|---|
D D D | D → T L D\to TL D→TL | D → T L D\to TL D→TL | |||
T T T | T → i T\to i T→i | T → r T\to r T→r | |||
L L L | L → x L ′ L\to xL' L→xL′ | ||||
L ′ L' L′ | L ′ → , x L ′ L'\to ,xL' L′→,xL′ | L ′ → ε L'\to\varepsilon L′→ε |
简述
- 请谈一谈编译技术有哪些应用
解:- 最直接的使用就是开发编译器,是机器能更好地识别高级语言;
- 基于编译技术的可信赖计算方法,基于编译技术的协议解析方法;
- 移动领域利用交叉编译技术去跨平台,将具备更强的竞争优势