《编译原理》期末试题(四)
一、简述编译程序的工作过程。(10)
编译程序的工作过程,是指从输入源程序开始到输出目标程序为止的整个过程,是非常复杂的,就其过程而言,一般可以划分为五个工作阶段:①词法分析,对构成源程序的字符串进行扫描和分解,识别出一个个的单词;②语法分析,根据语言的语法规则,把单词符号串分解成各类语法单位;③语义分析与中间代码产生,即对各类语法单位,分析其汉一并进行初步翻译;④代码优化,以期产生更高效的代码;⑤目标代码生成,把中间代码变换成特定机器上的低级语言指令形式。
二、构造下列正规式相应的DFA(用状态转换图表示)(15) (1) 1(0 | 1)*1
0,1 (2) 0*10*10*10*1 (3) letter(letter | digit)*
(1)
(2)
(3)
1 0 0 2 0 1 1 2 1 3 0 1 3 1 4 0 1 5 letter letter 1 2 digit 三、给出下面语言的相应文法:(15)
L1={an bn | n≥1} L2={anbm+nam | n≥1,m≥0}
G1:
A→aAb |ab
G1: S→AB
第26页共6页
A→aAb | ab B→bBa | ε
四、对下面的文法G:
S→a | b | (T) T→T,S | S
(1) 消去文法的左递归,得到等价的文法G2;
(2) 判断文法G2是否LL(1)文法,如果是,给出其预测分析表。(15) G2:
S→a | b | (T)
T→ ST’
T’→,S T’ | ε G2是LL(1)文法。 S T T’ a S→a b S→b ( ) , # S→(T) T→ ST’ T→ ST’ T→ ST’ T’→ ε T’→,S T’ 五、设有文法G[A]: A→BCc | gDB
B→bCDE |ε C→DaB | ca D→dD |ε E→gAf | c
(1) 计算该文法的每一个非终结符的FIRST集和FOLLOW集; (2) 试判断该文法是否为LL(1)文法。(15) A B C D E FIRST A,b,c,d,g b A,c,d D C,g FOLLOW A,c,d C,d,g A,b,c,g 是LL(1)文法。
六、对表达式文法G:
E → E+T | T T → T*F | F F → (E) | I
(1)造各非终结符的FIRSTVT和LASTVT集合; (2)构造文法的算符优先关系表。(15)
第27页共6页
E T F
算符优先关系表 + * I ( ) # + > > > < > < FIRSTVT *,+,(,i *,(,i (,i LASTVT *,+,),i *,),i ),i * < > > < > < I < < < < ( < < < < ) > > > = > # > > > > = 七、有定义二进制整数的文法如下:
L →LB | B B →0 | 1
构造一个翻译模式,计算该二进制数的值(十进制的值)。(15) 引入L、B的综合属性val,翻译模式为: S →L {print(L.val)}
L →L1B {L.val= L1.val*2+B.val} L →B {L.val= B.val} B →0 {B.val=0} B →1 {B.val=1}
第28页共6页
《编译原理》期末试题(五)
一、单项选择题(共10小题,每小题2分,共20分)
1.语言是
A.句子的集合 B.产生式的集合 C.符号串的集合 D.句型的集合 2.编译程序前三个阶段完成的工作是 A.词法分析、语法分析和代码优化 B.代码生成、代码优化和词法分析
C.词法分析、语法分析、语义分析和中间代码生成 D.词法分析、语法分析和代码优化
3.一个句型中称为句柄的是该句型的最左
A.非终结符号 B.短语 C.句子 D.直接短语 4.下推自动机识别的语言是
A.0型语言 B.1型语言 C.2型语言 D.3型语言
5.扫描器所完成的任务是从字符串形式的源程序中识别出一个个具有独立含义的最小语法单位即
A. 字符 B.单词 C.句子 D.句型 6.对应Chomsky四种文法的四种语言之间的关系是 A.L0?L1?L2?L3 B.L3?L2?L1?L0 C.L3=L2?L1?L0 D.L0?L1?L2=L3 7.词法分析的任务是
A.识别单词 B.分析句子的含义 C.识别句子 D.生成目标代码 8.常用的中间代码形式不含
A.三元式 B.四元式 C.逆波兰式 D.语法树 9. 代码优化的目的是
A.节省时间 B.节省空间
C.节省时间和空间 D.把编译程序进行等价交换 10.代码生成阶段的主要任务是 A.把高级语言翻译成汇编语言 B.把高级语言翻译成机器语言
C.把中间代码变换成依赖具体机器的目标代码 D.把汇编语言翻译成机器语言
二、填空题(本大题共5小题,每小题2分,共10分)
1.编译程序首先要识别出源程序中每个(单词),然后再分析每个(句子)并翻译其意义。 2.编译器常用的语法分析方法有(自底向上)和(自顶向下)两种。
3.通常把编译过程分为分析前端与综合后端两大阶段。词法、语法和语义分析是对源程序的(分析),中间代码生成、代码优化与目标代码的生成则是对源程序的(综合)。
第29页共6页
4.程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即(静态存储分配)方案和(动态存储分配)方案。
5.对编译程序而言,输入数据是(源程序),输出结果是(目标程序)。
三、名词解释题(共5小题,每小题4分,共20分)
1.词法分析
词法分析的主要任务是从左向右扫描每行源程序的符号,按照词法规则 从构成源程序的字符串中识别出一个个具有独立意义的最小语法单位, 并转换成统一的内部表示(token),送给语法分析程序。 2.LL(1)文法
若文法的任何两个产生式A ? ? | ?都满足下面两个条件: (1)FIRST(? ) ? FIRST(? ) = ?;
(2)若? ?* ? ,那么FIRST(? ) ? FOLLOW( A ) = ?。
我们把满足这两个条件的文法叫做LL(1)文法,其中的第一个L代表从左 向右扫描输入,第二个L表示产生最左推导,1代表在决定分析器的每步 动作时向前看一个输入符号。除了没有公共左因子外,LL(1)文法还有一 些明显的性质,它不是二义的,也不含左递归。 3.语法树
句子的树结构表示法称为语法树(语法分析树或语法推导树)。 给定文法G=(VN,VT,P,S),对于G的任何句型都能构造与之关联的 语法树。这棵树具有下列特征: (1)根节点的标记是开始符号S。
(2)每个节点的标记都是V中的一个符号。 (3)若一棵子树的根节点为A,且其所有直接子孙的标记从左向右的排列 次序为A1A2…AR,那么A?A1A2…AR一定是P中的一条产生式。 (4)若一标记为A的节点至少有一个除它以外的子孙,则A?VN。 (5)若树的所有叶节点上的标记从左到右排列为字符串w,则w是文法G 的句型;若w中仅含终结符号,则w为文法G所产生的句子。 4.LR(0)分析器
所谓LR(0)分析,是指从左至右扫描和自底向上的语法分析,且在分析的 每一步,只须根据分析栈当前已移进和归约出的全部文法符号,并至多再 向前查看0个输入符号,就能确定相对于某一产生式左部符号的句柄是否 已在分析栈的顶部形成,从而也就可以确定当前所应采取的分析动作 (是 移进还是按某一产生式进行归约等)。
5.语言和文法
文法就是语言结构的定义和描述,是有穷非空的产生式集合。 文法G定义为四元组的形式:
G=(VN,VT,P,S) 其中:VN 是非空有穷集合,称为非终结符号集合;VT 是非空有穷集合, 称为终结符号集合;P是产生式的集合(非空);S是开始符号(或识别符号)。 这里,VN∩VT=?,S?VN。V=VN∪VT,称为文法G的字母表,它是出现 文法产生式中的一切符号的集合。 第30页共6页