搜档网
当前位置:搜档网 › 编译原理模拟试题六

编译原理模拟试题六

编译原理模拟试题六
编译原理模拟试题六

《编译原理》模拟试题六

一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)

1.设r和s分别是正规式,则有L(r|s)=L(r)L(s)。(×)

2.确定的自动机以及不确定的自动机都能正确地识别正规集。(√)

3.词法分析作为单独的一遍来处理较好。 (× )

4.构造LR分析器的任务就是产生LR分析表。 (√)

5.规范归约和规范推导是互逆的两个过程。 (× )

6.同心集的合并有可能产生新的“移进”/“归约”冲突。 (× )

7.LR分析技术无法适用二义文法。 (× )

8.树形表示和四元式不便于优化,而三元式和间接三元式则便于优化。 (×)

9.程序中的表达式语句在语义翻译时不需要回填技术。 (√)

10.对中间代码的优化依赖于具体的计算机。 (× )

二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分)

1.编译程序绝大多数时间花在_____ 上。

A.( ) 出错处理 B.( ) 词法分析

C.( ) 目标代码生成D.( ) 表格管理

2.编译程序是对_____。

A.( ) 汇编程序的翻译 B.( ) 高级语言程序的解释执行

C.( ) 机器语言的执行D.( ) 高级语言的翻译

3.采用自上而下分析,必须_____。

A.( ) 消除左递归 B.( ) 消除右递归

C.( ) 消除回溯 D.( ) 提取公共左因子

4.在规范归约中,用_____来刻画可归约串。

A.( )直接短语B.( )句柄

C.( )最左素短语D.( )素短语

5.若a为终结符,则A->α ·aβ为_____项目。

A.( )归约B.( ) 移进C.( ) 接受D.( ) 待约

6.间接三元式表示法的优点为_____。

A.( ) 采用间接码表,便于优化处理B.( ) 节省存储空间,不便于表的修改

C.( ) 便于优化处理,节省存储空间 D.( ) 节省存储空间,不便于优化处理

7.基本块内的优化为_____。

A. ( ) 代码外提,删除归纳变量B.( ) 删除多余运算,删除无用赋

C.( ) 强度削弱,代码外提 D.( ) 循环展开,循环合并

8. 在目标代码生成阶段,符号表用_____。

A.( ) 目标代码生成B.( ) 语义检查

C.( ) 语法检查D.( ) 地址分配

9.若项目集Ik含有A->α·,则在状态k时,仅当面临的输入符号a∈FOLLOW(A)时,才采取“A->α ·”动作的一定是_____。

A. ( ) LALR文法 B.( ) LR(0)文法

C.( ) LR(1)文法D.( ) SLR(1)文法

10.堆式动态分配申请和释放存储空间遵守_____原则。

A. ( ) 先请先放 B.( ) 先请后放

C.( ) 后请先放 D. ( ) 任意

三、填空题(每空1分,共10分)

1.词法分析基于__正则___文法进行,即识别的单词是该类文法的句子。

2.语法分析基于__上下文无关___文法进行,即识别的是该类文法的句子。语法分析的有效工具是__语法树___。

3.分析句型时,应用算符优先分析技术时,每步被直接归约的是__最左素短语___,而应用LR分析技术时,每步被直接归约的是___句柄__。

4.语义分析阶段所生成的与源程序等价的中间表示形式可以有__逆波兰___、___四无式表示__与___三元式表示__等。

5.按Chomsky分类法,文法按照___规则定义的形式__进行分类。

6.一个文法能用有穷多个规则描述无穷的符号串集合(语言)是因为文法中存在有___递归__定义的规则。

四、简答题(20分)

1. 文法 G[S] 为:

S->Ac|aB

A->ab

B->bc

写出 L(G[S]) 的全部元素。

解:S=>Ac=>abc

或S=>aB=>abc

所以L(G[S])={abc}

2. 构造正规式 1(0|1)*101 相应的DFA。

解:先构造NFA:

确定化:

重新命名,令AB为B、AC为C、ABY为D得:

所以,可得DFA为:

3. 文法

S->a|^|(T)

T->T,S|S

对 (a,(a,a) 和 (((a,a),^,(a)),a) 的最左推导。

解:对(a,(a,a)的最左推导为:

S=>(T) =>(T,S) =>(S,S) =>(a,S)

=>(a,(T)) =>(a,(T,S)) =>(a,(S,S))

=>(a,(a,S)) =>(a,(a,a))

对(((a,a),^,(a)),a) 的最左推导为:

S=>(T) =>(T,S) =>(S,S) =>((T),S)

=>((T,S),S) =>((T,S,S),S) =>((S,S,S),S)

=>(((T),S,S),S) =>(((T,S),S,S),S) =>(((S,S),S,S),S)

=>(((a,S),S,S),S) =>(((a,a),S,S),S) =>(((a,a),^,S),S)

=>(((a,a),^,(T)),S) =>(((a,a),^,(S)),S) =>(((a,a),^,(a)),S) =>(((a,a),^,(a)),a)

4. 文法:

S->MH|a

H->LSo| ε

K->dML| ε

L->eHf

M->K|bLM

判断 G 是否为 LL(1) 文法,如果是,构造 LL(1) 分析表。

解:各符号的FIRST集和FOLLOW集为:

预测分析表为:

由于预测分析表中无多重入口,所以可判定文法是LL(1)的。

五.计算题(10分)

已知文法 G[S] 为:

S->a|^|(T)

T-> T,S|S

(1) 计算 G[S] 的 FIRSTVT 和 LASTVT 。

(2) 构造 G[S] 的算符优先关系表并说明 G[S] 是否未算符优先文法。

(3) 计算 G[S] 的优先函数。

(4) 给出输入串 (a,a)# 的算符优先分析过程。

解:(1)各符号的FIRSTVT和LASTVT:

(2)算符优先关系表:

(3)对应的算符优先函数为:

(4)句子(a,a)#分析过程如下:

一、选择题(每个选择题 2 分,共 20 分)

1 .文法 G 产生的⑴ 的全体是该文法描述的语言。

A .句型 B. 终结符集 C. 非终结符集 D. 句子

2 .若文法 G 定义的语言是无限集,则文法必然是⑵ :

A .递归的

B 前后文无关的

C 二义性的

D 无二义性的

3 . Chomsky 定义的四种形式语言文法中, 0 型文法又称为⑶ 文法; 1 型文法又称为⑷ 文法; 2 型语言可由⑸ 识别。

A .短语结构文法

B 前后文无关文法

C 前后文有关文法

D 正规文法

E 图灵机

F 有限自动机

G 下推自动机

4 .一个文法所描述的语言是⑹ ;描述一个语言的文法是⑺ 。

A .唯一的

B 不唯一的

C 可能唯一,好可能不唯一

5 .数组的内情向量中肯定不含有数组的⑻ 的信息

A.维数 B.类型 C.维上下界 D.各维的界差

6 .在下述的编译方法中,自底向上的方法有⑼ ,自顶向下的分析方法有⑽ 。

①简单优先分析②算符优先分析③递归下降分析④预测分析技术⑤LR (K)分析

⑥ SLR(k)分析⑦ LL(k)分析⑧LALR(K)分析

A.③④⑦

B. ③④⑧

C.①②⑧

D.③④⑤⑥⑦

E.①②⑤⑥⑦

F. ①②⑤⑥⑧

二、简答题(每小题 5 分,共 20 分)

1 . LL ( 1 )分析法对文法有哪些要求

2 .常见的存储分配策略有几种它们都适合于什么性质的语言

3 .常见循环优化都有哪些项目

4 .什么是活动记录它主要由哪些内容构成

三、( 8 分)化简文法 G[S] :

S → ASe | BCaD | aD | AC

A → Cb | DBS

C → bC | d

B → Ac

D → aD

四、( 12 分)设L í {a,b,c}* 是满足下述条件的符号串构成的语言:

(1)若出现 a ,则其后至少紧跟两个 c ;

(2)若出现 b ,其后至少紧跟一个 c 。

试构造识别 L 的最小化的 DFA ,并给出描述 L 的正规表达式。

五、( 12 分)已给文法 G[S] :S → SaP | Sf | P P → qbP | q 将 G[S] 改造成 LL ( 1 )文法,并给出 LL ( 1 )分析表。

六、( 12 分)给定文法 G[S] :S → Aa|dAb|Bb|dBa A → c B → c 构造文法 G[S] 的 LR ( 1 )分析表。

七、( 8 分)将下面的条件语句表示成逆波兰式和四元式序列:

if a>b then x:=a+b*c else x:=b-a;

八、( 8 分)给定基本块:

A:=3*5

B:=E+F

C:=A+12

D:=E+F

A:=D+12

C:=C+1

E:=E+F

假定出基本块后,只有 A 、 C 、 E 是活跃的,给出用 DAG 图完成优化后的代码序列。

参考答案:

一、⑴ D ⑵ A ⑶ A ⑷ C ⑸ G. ⑹ A ⑺ B ⑻ A ⑼ F ⑽ A

二、 1 .对于 G 中的每个产生式 A →γ 1 | γ 2 | … | γ m ,其各候选式均应满足:

(1)不同的候选式不能推出以同一终结符号打头的符号串,即

FIRST( γ i ) ∩ FIRST( γ j )= φ( 1 ≤ i ,j ≤ m ;i ≠ j )

(2)若有γ j ε,则其余候选式γ i 所能推出的符号串不能以 FOLLOW(A) 中的终结符号开始,即有

FIRST( γ i ) ∩ FOLLOW(A)= φ(i ≤ 1,2, … ,m ;i ≠ j )

2 .有三种分配存储空间的方式:( 1 )静态分配若在编译阶段就能确定源程序中各个数据实体的存储空间大小,则可以采用较简单的静态存储管理。适合静态管理的语言应具备条件:数组上下界是常数、过程调用不允许递归、不允许动态建立数据实体。( 2)栈式分配适用于允许递归调用的程序设计语言;(

3 )堆式分配对于允许程序在运行时为变量动态申请和释放存储空间的语言,采用堆式分配是最有效的解决方案。

3 .不变运算外提;运算强度削弱;消除归纳变量;下标变量地址计算优化。

4 .一个过程的一次执行所需信息的管理,是通过称为活动记录的连续存储块来实现的。活动记录的主要内容有:( 1)临时变量域存放目标程序临时变量的值;( 2 )局部数据域存放过程本次执行时的局部数据、简单变量及数组内情向量等;( 3 )机器状态域保存在调用过程前有关机器状态的信息,包括各寄存器的当前值及返回地址等;( 4 )存取链为访问其它活动记录中所存放的非局部数据所提供的链地址;(

5 )控制链指向主调过程的活动记录;(

6 )实参存放主调过程为被调用过程所提供的实参信息;( 6 )返回值为主调过程存放被调过程的返回值

三、化简后:S → ASe|AC A → Cb C → bC | d

四、 DFA 如图所示。相应的正规式为 (c|acc|bc)* 。

五、

改造后的文法:S → PS' S' → aPS'| fS' | e P → qP' P' → bP | e 各候选式的 FIRST 集,各非终结符的 FOLLOW 集为

产生式FIRST 集FOLLOW 集

S → PS' {q} {#}

S' → aPS' → fS'

→ e

{a}

{f}

{ e }

{#}

P → qP' {q} {a,f,#}

P' → bP → e

{b}

{ e }

{a,f,#}

LL(1) 分析表为

六、分析表如下图所示

七、( 1 )逆波兰式:

,其中, BLE 表示汪或等于时的转向指令;[ … ] 表示标号。( 2 )四元式:

(1) ( j>, a, b, (3))

(2) ( j, , , (7) )

(3) ( *, b, c, T1)

(4) ( +, a, T1, T2)

(5) ( :=, T2, , x)

(6) ( j, , , (9))

(7) ( -, b, a, T3)

(8) ( :=, T3, , x)

(9) ( … … )

八、化简后的的四元式序列为

A :=D+12

E :=E+F

C :=28

编译原理(清华大学第2版)课后习题答案

第三章 N=>D=> {0,1,2,3,4,5,6,7,8,9} N=>ND=>NDD L={a |a(0|1|3..|9)n且 n>=1} (0|1|3..|9)n且 n>=1 {ab,} a n b n n>=1 第6题. (1) <表达式> => <项> => <因子> => i (2) <表达式> => <项> => <因子> => (<表达式>) => (<项>) => (<因子>)=>(i) (3) <表达式> => <项> => <项>*<因子> => <因子>*<因子> =i*i (4) <表达式> => <表达式> + <项> => <项>+<项> => <项>*<因子>+<项> => <因子>*<因子>+<项> => <因子>*<因子>+<因子> = i*i+i (5) <表达式> => <表达式>+<项>=><项>+<项> => <因子>+<项>=i+<项> => i+<因子> => i+(<表达式>) => i+(<表达式>+<项>) => i+(<因子>+<因子>) => i+(i+i) (6) <表达式> => <表达式>+<项> => <项>+<项> => <因子>+<项> => i+<项> => i+<项>*<因子> => i+<因子>*<因子> = i+i*i 第7题

第9题 语法树 s s s* s s+a a a 推导: S=>SS*=>SS+S*=>aa+a* 11. 推导:E=>E+T=>E+T*F 语法树: E +T * 短语: T*F E+T*F 直接短语: T*F 句柄: T*F 12.

短语: 直接短语: 句柄: 13.(1)最左推导:S => ABS => aBS =>aSBBS => aBBS => abBS => abbS => abbAa => abbaa 最右推导:S => ABS => ABAa => ABaa => ASBBaa => ASBbaa => ASbbaa => Abbaa => a1b1b2a2a3 (2) 文法:S → ABS S → Aa S →ε A → a B → b (3) 短语:a1 , b1 , b2, a2 , , bb , aa , abbaa, 直接短语: a1 , b1 , b2, a2 , , 句柄:a1 14 (1) S → AB A → aAb | ε B → aBb | ε (2) S → 1S0 S → A A → 0A1 |ε 第四章 1. 1. 构造下列正规式相应的DFA (1)1(0|1)*101 NFA (2) 1(1010*|1(010)*1)*0 NFA

最新编译原理试题汇总+编译原理期末试题(8套含答案+大题集)

编译原理考试题及答案汇总一、选择 1.将编译程序分成若干个“遍”是为了_B__。 A . 提高程序的执行效率 B.使程序的结构更加清晰 C. 利用有限的机器内存并提高机器的执行效率 D.利用有限的机器内存但降低了机器的执行效率 2.正规式 MI 和 M2 等价是指__C__。 A . MI 和 M2 的状态数相等 B.Ml 和 M2 的有向弧条数相等。 C .M1 和 M2 所识别的语言集相等 D. Ml 和 M2 状态数和有向弧条数相等 3.中间代码生成时所依据的是 _C_。 A.语法规则 B.词法规则 C.语义规则 D.等价变换规则 4.后缀式 ab+cd+/可用表达式__B_来表示。 A. a+b/c+d B.(a+b)/(c+d) C. a+b/(c+d) D. a+b+c/d 6.一个编译程序中,不仅包含词法分析,_A____,中间代码生成,代码优化,目标代码生成等五个部分。 A.( ) 语法分析 B.( )文法分析 C.( )语言分析 D.( )解释分析 7.词法分析器用于识别__C___。 A.( ) 字符串 B.( )语句 C.( )单词 D.( )标识符 8.语法分析器则可以发现源程序中的___D__。 A.( ) 语义错误 B.( ) 语法和语义错误 C.( ) 错误并校正 D.( ) 语法错误 9.下面关于解释程序的描述正确的是__B___。 (1) 解释程序的特点是处理程序时不产生目标代码 (2) 解释程序适用于 COBOL 和 FORTRAN 语言 (3) 解释程序是为打开编译程序技术的僵局而开发的 A.( ) (1)(2) B.( ) (1) C.( ) (1)(2)(3) D.( ) (2)(3) 10.解释程序处理语言时 , 大多数采用的是__B___方法。 A.( ) 源程序命令被逐个直接解释执行 B.( ) 先将源程序转化为中间代码 , 再解释执行 C.( ) 先将源程序解释转化为目标程序 , 再执行 D.( ) 以上方法都可以 11.编译过程中 , 语法分析器的任务就是__B___。 (1) 分析单词是怎样构成的 (2) 分析单词串是如何构成语句和说明的 (3) 分析语句和说明是如何构成程序的 (4) 分析程序的结构 A.( ) (2)(3) B.( ) (2)(3)(4)C.( ) (1)(2)(3) D.( ) (1)(2)(3)(4) 12.编译程序是一种___C__。 A. ( ) 汇编程序 B.( ) 翻译程序 C.( ) 解释程序 D.( ) 目标程序 13.文法 G 所描述的语言是_C____的集合。 A. ( ) 文法 G 的字母表 V 中所有符号组成的符号串 B.( ) 文法 G 的字母表 V 的闭包 V* 中的所有符号串 C.( ) 由文法的开始符号推出的所有终极符串 D. ( ) 由文法的开始符号推出的所有符号串 14.文法分为四种类型,即 0 型、1 型、2 型、3 型。其中 3 型文法是___B__。 A. ( ) 短语文法 B.( ) 正则文法 C.( ) 上下文有关文法 D.( ) 上下文无关文法15.一个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组 __D___。 A.( ) 句子 B.( ) 句型 C.( ) 单词 D.( ) 产生式

《编译原理》模拟期末试题汇总 6套,含答案

《编译原理》模拟试题一 一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分) 1.计算机高级语言翻译成低级语言只有解释一种方式。(×) 2.在编译中进行语法检查的目的是为了发现程序中所有错误。(×) 3.甲机上的某编译程序在乙机上能直接使用的必要条件是甲机和乙机的操作系统功能完全相同。 (√ ) 4.正则文法其产生式为 A->a , A->Bb, A,B∈VN , a 、b∈VT 。 (×) 5.每个文法都能改写为 LL(1) 文法。 (√) 6.递归下降法允许任一非终极符是直接左递归的。 (√) 7.算符优先关系表不一定存在对应的优先函数。 (×) 8.自底而上语法分析方法的主要问题是候选式的选择。 (×) 9.LR 法是自顶向下语法分析方法。 (×) 10.简单优先文法允许任意两个产生式具有相同右部。 (×) 二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分) 1.一个编译程序中,不仅包含词法分析,_____,中间代码生成,代码优化,目标代码生成等五个部分。 A.( ) 语法分析B.( )文法分析C.( )语言分析D.( )解释分析 2.词法分析器用于识别_____。 A.( ) 字符串B.( )语句 C.( )单词 D.( )标识符 3.语法分析器则可以发现源程序中的_____。 A.( ) 语义错误 B.( ) 语法和语义错误 C.( ) 错误并校正D.( ) 语法错误 4.下面关于解释程序的描述正确的是_____。

(1) 解释程序的特点是处理程序时不产生目标代码 (2) 解释程序适用于 COBOL 和 FORTRAN 语言 (3) 解释程序是为打开编译程序技术的僵局而开发的 A.( ) (1)(2) B.( ) (1)C.( ) (1)(2)(3) D.( ) (2)(3) 5.解释程序处理语言时 , 大多数采用的是_____方法。 A.( ) 源程序命令被逐个直接解释执行 B.( ) 先将源程序转化为中间代码 , 再解释执行 C.( ) 先将源程序解释转化为目标程序 , 再执行 D.( ) 以上方法都可以 6.编译过程中 , 语法分析器的任务就是_____。 (1) 分析单词是怎样构成的 (2) 分析单词串是如何构成语句和说明的 (3) 分析语句和说明是如何构成程序的 (4) 分析程序的结构 A.( ) (2)(3) B.( ) (2)(3)(4) C.( ) (1)(2)(3) D.( ) (1)(2)(3)(4) 7.编译程序是一种_____。 A. ( ) 汇编程序B.( ) 翻译程序 C.( ) 解释程序 D.( ) 目标程序 8.文法 G 所描述的语言是_____的集合。 A. ( ) 文法 G 的字母表 V 中所有符号组成的符号串 B.( ) 文法 G 的字母表 V 的闭包 V* 中的所有符号串 C.( ) 由文法的开始符号推出的所有终极符串 D. ( ) 由文法的开始符号推出的所有符号串 9.文法分为四种类型,即0型、1型、2型、3型。其中3型文法是_____。 A. ( ) 短语文法 B.( ) 正则文法 C.( ) 上下文有关文法 D.( ) 上下文无关文法 10.一个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组 _____。 A.( ) 句子B.( ) 句型 C.( ) 单词 D.( ) 产生式 三、填空题(每空1分,共10分)

编译原理第六章答案

第6 章自底向上优先分析 第1 题 已知文法G[S]为: S→a|∧|(T) T→T,S|S (1) 计算G[S]的FIRSTVT 和LASTVT。 (2) 构造G[S]的算符优先关系表并说明G[S]是否为算符优先文法。 (3) 计算G[S]的优先函数。 (4) 给出输入串(a,a)#和(a,(a,a))#的算符优先分析过程。 答案: 文法展开为: S→a S→∧ S→(T) T→T,S T→S (1) FIRSTVT - LASTVT 表: 表中无多重人口所以是算符优先(OPG)文法。 友情提示:记得增加拓广文法 S`→#S#,所以# FIRSTVT(S),LASTVT(S) #。 (3)对应的算符优先函数为:

Success! 对输入串(a,(a,a))# 的算符优先分析过程为: Success! 第2 题 已知文法G[S]为: S→a|∧|(T) T→T,S|S

(1) 给出(a,(a,a))和(a,a)的最右推导,和规范归约过程。 (2) 将(1)和题1 中的(4)进行比较给出算符优先归约和规范归约的区别。答案:

(2)算符优先文法在归约过程中只考虑终结符之间的优先关系从而确定可归约串,而与 非终结符无关,只需知道把当前可归约串归约为某一个非终结符,不必知道该非终结符的名字是什么,因此去掉了单非终结符的归约。 规范归约的可归约串是句柄,并且必须准确写出可归约串归约为哪个非终结符。 第3题:

有文法G[S]: S V V T|ViT T F|T+F F )V*|( (1) 给出(+(i(的规范推导。 (2) 指出句型F+Fi(的短语,句柄,素短语。 (3) G[S]是否为OPG?若是,给出(1)中句子的分析过程。 因为该文法是OP,同时任意两个终结符的优先关系唯一,所以该文法为OPG。(+(i(的分析过程

编译原理_第三版_课后答案

编译 原理 课后题答案 第二章 P36-6 (1) L G ()1是0~9组成的数字串 (2) 最左推导: N ND NDD NDDD DDDD DDD DD D N ND DD D N ND NDD DDD DD D ??????????????????0010120127334 556568 最右推导: N ND N ND N ND N D N ND N D N ND N ND N D ??????????????????77272712712701274434 886868568 P36-7 G(S) O N O D N S O AO A AD N →→→→→1357924680||||||||||| P36-8 文法: E T E T E T T F T F T F F E i →+-→→|||*|/()| 最左推导: E E T T T F T i T i T F i F F i i F i i i E T T F F F i F i E i E T i T T i F T i i T i i F i i i ?+?+?+?+?+?+?+?+??????+?+?+?+?+?+********()*()*()*()*()*()*() 最右推导:

E E T E T F E T i E F i E i i T i i F i i i i i E T F T F F F E F E T F E F F E i F T i F F i F i i i i i ?+?+?+?+?+?+?+?+?????+?+?+?+?+?+?+**********()*()*()*()*()*()*()*() 语法树:/******************************** E E F T E + T F F T +i i i E E F T E -T F F T -i i i E E F T +T F F T i i i *i+i+i i-i-i i+i*i *****************/ P36-9 句子iiiei 有两个语法树: S iSeS iSei iiSei iiiei S iS iiSeS iiSei iiiei ???????? P36-10 /************** ) (|)(|S T T TS S →→ ***************/ P36-11 /*************** L1: ε ||cC C ab aAb A AC S →→→ L2:

编译原理复习题及答案

编译原理复习题及答案 一、选择题 1.一个正规语言只能对应(B) A 一个正规文法 B 一个最小有限状态自动机 2.文法G[A]:A→εA→aB B→Ab B→a是(A) A 正规文法 B 二型文法 3.下面说法正确的是(A) A 一个SLR(1)文法一定也是LALR(1)文法 B 一个LR(1)文法一定也是LALR(1)文法 4.一个上下文无关文法消除了左递归,提取了左公共因子后是满足LL(1)文法的(A) A 必要条件 B 充分必要条件 5.下面说法正确的是(B) A 一个正规式只能对应一个确定的有限状态自动机 B 一个正规语言可能对应多个正规文法 6.算符优先分析与规范归约相比的优点是(A) A 归约速度快 B 对文法限制少 7.一个LR(1)文法合并同心集后若不是LALR(1)文法(B) A 则可能存在移进/归约冲突 B 则可能存在归约/归约冲突 C 则可能存在移进/归约冲突和归约/归约冲突 8.下面说法正确的是(A) A Lex是一个词法分析器的生成器 B Yacc是一个语法分析器 9.下面说法正确的是(A) A 一个正规文法也一定是二型文法 B 一个二型文法也一定能有一个等价的正规文法 10.编译原理是对(C)。 A、机器语言的执行 B、汇编语言的翻译 C、高级语言的翻译 D、高级语言程序的解释执行 11.(A)是一种典型的解释型语言。

A.BASIC B.C C.FORTRAN D.PASCAL 12.把汇编语言程序翻译成机器可执行的目标程序的工作是由(B)完成的。 A. 编译器 B. 汇编器 C. 解释器 D. 预处理器 13.用高级语言编写的程序经编译后产生的程序叫(B) A.源程序 B.目标程序C.连接程序D.解释程序 14.(C)不是编译程序的组成部分。 A.词法分析程序 B.代码生成程序 C.设备管理程序 D.语法分析程序 15.通常一个编译程序中,不仅包含词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成等六个部分,还应包括(C)。 A.模拟执行器B.解释器 C.表格处理和出错处理D.符号执行器16.编译程序绝大多数时间花在(D)上。 A.出错处理B.词法分析C.目标代码生成D.表格管理 17.源程序是句子的集合,(B)可以较好地反映句子的结构。 A. 线性表 B. 树 C. 完全图 D. 堆栈 18.词法分析器的输出结果是(D)。 A、单词自身值 B、单词在符号表中的位置 C、单词的种别编码 D、单词的种别编码和自身值 19.词法分析器不能(D) A. 识别出数值常量 B. 过滤源程序中的注释 C. 扫描源程序并识别记号 D. 发现括号不匹配 20.文法:G:S→xSx | y所识别的语言是(D)。 A、xyx B、(xyx)* C、x*yx* D、x n yx n (n≥0) 21.如果文法G是无二义的,则它的任何句子α(A) A.最左推导和最右推导对应的语法树必定相同 B.最左推导和最右推导对应的语法树可能不同 C.最左推导和最右推导必定相同 D.可能存在两个不同的最左推导,但它们对应的语法树相同 22.正则文法(A)二义性的。 A. 可以是 B. 一定不是 C. 一定是 23.(B)这样一些语言,它们能被确定的有穷自动机识别,但不能用正则表达式表示。 A. 存在 B. 不存在 C. 无法判定是否存在 24.给定文法A→bA | ca,为该文法句子的是(C) A. bba B. cab C. bca D. cba

编译原理期末考试卷

2001年编译原理试题 1.(10分)处于/* 和 */之间的串构成注解,注解中间没有*/。画出接受这种注解的DFA的状态转换图。 2.(10分)为语言 L ={a m b n | 0 ≤ m ≤ 2n}(即a的个数不超过b的个数的两倍) 写一个LR(1)文法,不准超过6个产生式。(若超过6个产生式,不给分。若所写文法不是LR(1)文法,最多给5分。) 3.(10分)构造下面文法的LL(1)分析表。 D → TL T → int | real L → id R R → , id R | ε 4.(15分)就下面文法 S → ( L) | a L → L , S | S ?给出一个语法制导定义,它输出配对括号的个数。 ?给出一个翻译方案,它输出每个a的嵌套深度。 如句子(a, (a, a) ),第一小题的输出是2,第二小题的输出是1 2 2。 5.(10分)Pascal语言for语句的含义见教材第222页习题7.13。请为该语句设计一种合理的中间代码结构。你可以按第215页图7.17的方式或者第219页图7.19的方式写出你的设计,不需要写产生中间代码的语法制导定义。 6.(5分)一个C语言程序如下: func(i1,i2,i3) long i1,i2,i3; { long j1,j2,j3; printf("Addresses of i1,i2,i3 = %o,%o,%o\n",&i1,&i2,&i3); printf("Addresses of j1,j2,j3 = %o,%o,%o\n",&j1,&j2,&j3); } main() { long i1,i2,i3;

最新编译原理复习题(经典)

编译原理复习题 一、是非题 1.计算机高级语言翻译成低级语言只有解释一种方式。(×) 3.每个文法都能改写为 LL(1) 文法。 (×) 4.算符优先关系表不一定存在对应的优先函数。 (√) 5.LR分析方法是自顶向下语法分析方法。 (×) 6.“ 用高级语言书写的源程序都必须通过编译,产生目标代码后才能投入运行”这种说法。(× ) 7.一个句型的句柄一定是文法某产生式的右部。(√) 8.仅考虑一个基本块,不能确定一个赋值是否真是无用的。(√ ) 9.在中间代码优化中循环上的优化主要有不变表达式外提和削减运算强度。(× ) 10.对于数据空间的存贮分配,FORTRAN采用动态贮存分配策略。(×) 11.甲机上的某编译程序在乙机上能直接使用的必要条件是甲机和乙机的操作系统功能完全相同。(× ) 12.递归下降分析法是自顶向下分析方法。(√ ) 13.产生式是用于定义词法成分的一种书写规则。(×) 14.在SLR(1)分析法的名称中,S的含义是简单的。(√) 15.综合属性是用于“ 自上而下” 传递信息。(× ) 16.符号表中的信息栏中登记了每个名字的属性和特征等有关信息,如类型、种属、所占单元大小、地址等等。(×) 17.程序语言的语言处理程序是一种应用软件。(×) 18.解释程序适用于COBOL 和FORTRAN 语言。(×) 19.一个LL(l)文法一定是无二义的。(√) 20.正规文法产生的语言都可以用上下文无关文法来描述。(√) 21.一张转换图只包含有限个状态,其中有一个被认为是初态,最多只有一个终态。(×) 22.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。(√) 22.逆波兰法表示的表达式亦称后缀式。(√ ) 23.如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。(√ ) 24.数组元素的地址计算与数组的存储方式有关。(√) 25.算符优先关系表不一定存在对应的优先函数。(×) 26.编译程序是对高级语言程序的解释执行。(× ) 27.一个有限状态自动机中,有且仅有一个唯一的终态。(×) 28.一个算符优先文法可能不存在算符优先函数与之对应。(√ ) 29.语法分析时必须先消除文法中的左递归。(×) 30.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。(√) 31.逆波兰表示法表示表达式时无须使用括号。(√ ) 32.静态数组的存储空间可以在编译时确定。(√) 33.进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。(√) 34.两个正规集相等的必要条件是他们对应的正规式等价。(√) 35.一个语义子程序描述了一个文法所对应的翻译工作。(×) 36.设r和s分别是正规式,则有L(r|s)=L(r)L(s)。(×) 37.确定的自动机以及不确定的自动机都能正确地识别正规集。(√) 38.词法分析作为单独的一遍来处理较好。(× ) 39.构造LR分析器的任务就是产生LR分析表。(√) 40.规范归约和规范推导是互逆的两个过程。(√) 41.同心集的合并有可能产生新的“移进”/“归约”冲突。(× )

编译原理模拟试题六

《编译原理》模拟试题六 一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分) 1.设r和s分别是正规式,则有L(r|s)=L(r)L(s)。(×) 2.确定的自动机以及不确定的自动机都能正确地识别正规集。(√) 3.词法分析作为单独的一遍来处理较好。 (× ) 4.构造LR分析器的任务就是产生LR分析表。 (√) 5.规范归约和规范推导是互逆的两个过程。 (× ) 6.同心集的合并有可能产生新的“移进”/“归约”冲突。 (× ) 7.LR分析技术无法适用二义文法。 (× ) 8.树形表示和四元式不便于优化,而三元式和间接三元式则便于优化。 (×) 9.程序中的表达式语句在语义翻译时不需要回填技术。 (√) 10.对中间代码的优化依赖于具体的计算机。 (× ) 二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分) 1.编译程序绝大多数时间花在_____ 上。 A.( ) 出错处理 B.( ) 词法分析 C.( ) 目标代码生成D.( ) 表格管理 2.编译程序是对_____。 A.( ) 汇编程序的翻译 B.( ) 高级语言程序的解释执行 C.( ) 机器语言的执行D.( ) 高级语言的翻译

3.采用自上而下分析,必须_____。 A.( ) 消除左递归 B.( ) 消除右递归 C.( ) 消除回溯 D.( ) 提取公共左因子 4.在规范归约中,用_____来刻画可归约串。 A.( )直接短语B.( )句柄 C.( )最左素短语D.( )素短语 5.若a为终结符,则A->α ·aβ为_____项目。 A.( )归约B.( ) 移进C.( ) 接受D.( ) 待约 6.间接三元式表示法的优点为_____。 A.( ) 采用间接码表,便于优化处理B.( ) 节省存储空间,不便于表的修改 C.( ) 便于优化处理,节省存储空间 D.( ) 节省存储空间,不便于优化处理 7.基本块内的优化为_____。 A. ( ) 代码外提,删除归纳变量B.( ) 删除多余运算,删除无用赋 值 C.( ) 强度削弱,代码外提 D.( ) 循环展开,循环合并 8. 在目标代码生成阶段,符号表用_____。 A.( ) 目标代码生成B.( ) 语义检查 C.( ) 语法检查D.( ) 地址分配 9.若项目集Ik含有A->α·,则在状态k时,仅当面临的输入符号a∈FOLLOW(A)时,才采取“A->α ·”动作的一定是_____。

编译原理课后习题答案-清华大学-第二版

第1章引论 第1题 解释下列术语: (1)编译程序 (2)源程序 (3)目标程序 (4)编译程序的前端 (5)后端 (6)遍 答案: (1) 编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。 (2) 源程序:源语言编写的程序称为源程序。 (3) 目标程序:目标语言书写的程序称为目标程序。 (4) 编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶 段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符 号表管理等工作。 (5) 后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。 (6) 遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。 第2题 一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。 答案: 一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。其各部分的主要功能简述如下。 词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。 语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。 语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。

目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。 表格管理程序:负责建立、填写和查找等一系列表格工作。表格的作用是记录源程序的各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。可以说整个编译过程就是造表、查表的工作过程。需要指出的是,这里的“表格管理程序”并不意味着它就是一个独立的表格管理模块,而是指编译程序具有的表格管理功能。 错误处理程序:处理和校正源程序中存在的词法、语法和语义错误。当编译程序发现源程序中的错误时,错误处理程序负责报告出错的位置和错误性质等信息,同时对发现的错误进行适当的校正(修复),目的是使编译程序能够继续向下进行分析和处理。 注意:如果问编译程序有哪些主要构成成分,只要回答六部分就可以。如果搞不清楚,就回答八部分。 第3题 何谓翻译程序、编译程序和解释程序?它们三者之间有何种关系? 答案: 翻译程序是指将用某种语言编写的程序转换成另一种语言形式的程序的程序,如编译程序和汇编程序等。 编译程序是把用高级语言编写的源程序转换(加工)成与之等价的另一种用低级语言编写的目标程序的翻译程序。 解释程序是解释、执行高级语言源程序的程序。解释方式一般分为两种:一种方式是,源程序功能的实现完全由解释程序承担和完成,即每读出源程序的一条语句的第一个单词,则依据这个单词把控制转移到实现这条语句功能的程序部分,该部分负责完成这条语句的功

哈工大编译原理习题及答案

1.1何谓源程序、目标程序、翻译程序、编译程序和解释程序?它们之间可能有何种关系? 1.2一个典型的编译系统通常由哪些部分组成?各部分的主要功能是什么? 1.3选择一种你所熟悉的程序设计语言,试列出此语言中的全部关键字,并通过上机使用该语言以判明这些关键字是否为保留字。 1.4选取一种你所熟悉的语言,试对它进行分析,以找出此语言中的括号、关键字END以及逗号有多少种不同的用途。 1.5试用你常用的一种高级语言编写一短小的程序,上机进行编译和运行,记录下操作步骤和输出信息,如果可能,请卸出中间代码和目标代码。 第一章习题解答 1.解:源程序是指以某种程序设计语言所编写的程序。目标程序是指编译程序(或解释程序)将 源程序处理加工而得的另一种语言(目标语言)的程序。翻译程序是将某种语言翻译成另一种语言的程序的统称。编译程序与解释程序均为翻译程序,但二者工作方法不同。解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机器指令并执行之,然后再读入下一条语句继续进行解释、执行,如此反复。即边解释边执行,翻译所得的指令序列并不保存。编译程序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指定的空间中,在用户需要时再执行之。即先翻译、后执行。 2.解:一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成 程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。 3.解:C语言的关键字有:auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while。上述关键字在C语言中均为保留字。 4.解:C语言中括号有三种:{},[],()。其中,{}用于语句括号;[]用于数组;()用于函数(定 义与调用)及表达式运算(改变运算顺序)。C语言中无END关键字。逗号在C语言中被视为分隔符和运算符,作为优先级最低的运算符,运算结果为逗号表达式最右侧子表达式的值(如:(a,b,c,d)的值为d)。 5.略 第二章前后文无关文法和语言 21设有字母表A1={a,b,…,z},A2={0,1,…,9},试回答下列问题: (1) 字母表A1上长度为2的符号串有多少个? (2) 集合A1A2含有多少个元素? (3) 列出集合A1 (A1∪A2)*中的全部长度不大于3的符号串。

编译原理期末考试习题及答案知识分享

一、填空题|(每题4分,共20分) 1. 乔母斯基定义的3型文法(线性文法)产生式形式 A→Ba|a,或A→aB|a,A,B∈Vn, a,b∈Vt 。 2.语法分析程序的输入是单词符号,其输出是语法单位。 3 型为 B → .aB 的LR(0)项目被称为移进项目,型为 B → a.B 的LR(0) 项目被称为待约项目, 4.在属性文法中文法符号的两种属性分别为继承属性和综合属性。 5、运行时存贮管理方案有静态存储分配、动态存储分配和堆式存储分配和方案。 二.已知文法 G(S) (1) E → T | E+T (2) T → F | F*F (3) F →(E)| i (1)写出句型(T*F+i)的最右推到并画出语法树。(4分) (2)写出上述句型的短语,直接短语和句柄。(4分) 答:(1)最右推到(2分) E ==> T ==> F ==> (E) ==> (E+T) ==> (E+F) ==> (E+i) ==> (T+i) ==> (T*F+i) (2) 语法树(2分) (3)(4分) 短语:(T*F+i),T*F+i ,T*F , i 直接短语:T*F , i 句柄:T*F 三. 证明文法G(S) :S → SaS |ε是二义的。(6分) 答:句子aaa对应的两颗语法树为: 因此,文法是二义文法

四.给定正规文法G(S): (1) S → Sa | Ab |b (2) A → Sa 请构造与之等价的DFA。(6分) 答:对应的NFA为:(6分) 状态转换表: a b {F} Φ{S} {S} {S,A} Φ {S,A} {S,A} {S} 五. 构造识别正规语言b*a(bb*a)*b* 最小的DFA(要求写出求解过程)。(15分)答:(1)对应的NFA(5分) a b {0} {1,3} {0} {1,3} Φ{2,3} {2,3} {1,3} {2,3} (5分) 六. 已知文法G(S) : (1) S → ^ | a | (T) (2) T → T,S | S 试:(1)消除文法的左递归;(4分) (2)构造相应的first 和 follow 集合。(6分) 答:(1)消除文法的左递归后文法 G’(S)为: (1) S → ^ | a | (T) (2) T → ST’ | S (3) T’→ ,ST’ |ε(4分)

编译原理教程课后习题答案——第四章

第四章语义分析和中间代码生成 4.1 完成下列选择题: (1) 四元式之间的联系是通过实现的。 a. 指示器 b. 临时变量 c. 符号表 d. 程序变量 (2) 间接三元式表示法的优点为。 a. 采用间接码表,便于优化处理 b. 节省存储空间,不便于表的修改 c. 便于优化处理,节省存储空间 d. 节省存储空间,不便于优化处理 (3) 表达式(┐A∨B)∧(C∨D)的逆波兰表示为。 a. ┐AB∨∧CD∨ b. A┐B∨CD∨∧ c. AB∨┐CD∨∧ d. A┐B∨∧CD∨ (4) 有一语法制导翻译如下所示: S→bAb {print″1″} A→(B {print″2″} A→a {print″3″} B→Aa) {print″4″} 若输入序列为b(((aa)a)a)b,且采用自下而上的分析方法,则输出序列为。a. 32224441 b. 34242421 c. 12424243 d. 34442212 【解答】 (1) b (2) a (3) b (4) b 4.2 何谓“语法制导翻译”?试给出用语法制导翻译生成中间代码的要点,并用一简例予以说明。 【解答】语法制导翻译(SDTS)直观上说就是为每个产生式配上一个翻译子程序(称语义动作或语义子程序),并且在语法分析的同时执行这些子程序。也即在语法分析过程中,当一个产生式获得匹配(对于自上而下分析)或用于归约(对于自下而上分析)时,此产生式相应的语义子程序进入工作,完成既定的翻译任务。 用语法制导翻译(SDTS)生成中间代码的要点如下: (1) 按语法成分的实际处理顺序生成,即按语义要求生成中间代码。 (2) 注意地址返填问题。 (3) 不要遗漏必要的处理,如无条件跳转等。 例如下面的程序段: if (i>0) a=i+e-b*d; else a=0; 在生成中间代码时,条件“i>0”为假的转移地址无法确定,而要等到处理“else”时方可确定,这时就存在一个地址返填问题。此外,按语义要求,当处理完(i>0)后的语句(即“i>0”为真时执行的语句)时,则应转出当前的if语句,也即此时应加入一条无条件跳转指令,并且这个转移地址也需要待处理完else之后的语句后方可获得,就是说同样存在着地址返填问题。对于赋值语句a=i+e-b*d,其处理顺序(也即生成中间代码顺序)是先生成i+e的代码,再生成b*d的中间代码,最后才产生“-”运算的中间代码,这种顺序不能颠倒。 4.3 令S.val为文法G[S]生成的二进制数的值,例如对输入串101.101,则S.val= 5.625。按照语法制导翻译方法的思想,给出计算S.val的相应的语义规则,G(S)如下: G[S]: S→L.L|L

编译原理考试试题1

编译原理 一、(5×6分)回答下列问题: 1.什么是S-属性文法?什么是L-属性文法?它们之间有什么关系? 2.什么是句柄?什么是素短语? 3.划分程序的基本块时,确定基本块的入口语句的条件是什么? 4.运行时的DISPLAY 表的内容是什么?它的作用是什么? 5.对下列四元式序列生成目标代码: A:=B*C D:=E+F G:=A+D H:=G*2 其中,H 是基本块出口的活跃变量, R0和R1是可用寄存器 二、(8分)设∑={0,1}上的正规集S 由倒数第二个字符为1的所有字符串组成,请给出该字集对应的正规式,并构造一个识别该正规集的DFA 。 三、(6分)写一个文法使其语言为L(G)={ a n b m a m b n | m,n ≥1}。 四、(8分)对于文法G(E): E →T|E+T T →F|T* F F →(E)|i 1. 写出句型(T*F+i)的最右推导并画出语法树。 2. 写出上述句型的短语,直接短语、句柄和素短语。 五、(12分)设文法G(S): ( |*)B B |B A A A |SiA S A →+→→ 1.构造各非终结符的FIRSTVT 和LASTVT 集合; 2.构造优先关系表和优先函数。 六、(9分)设某语言的do-while 语句的语法形式为 S → do S (1) While E 其语义解释为: 真 假 S (1)的代码 E 的代码

针对自下而上的语法分析器,按如下要求构造该语句的翻译模式: (1) 写出适合语法制导翻译的产生式; (2) 写出每个产生式对应的语义动作。 七、(8分)将语句if (A0) then while C>0 do C:=C+D; 翻译成四元式。 八、(10分) 设有基本块如下: T1:=S+R T2:= 3 T3:= 12/T2 T4:=S/R A:=T1-T4 T5:=S+R B:=T5 T6:=T5*T3 B:=T6 (1)画出DAG图; (2)设A,B是出基本块后的活跃变量,请给出优化后的四元式序列。 九、(9分) 设已构造出文法G(S): (1) S → BB (2) B → aB (3) B→ b 的LR分析表如下 ACTION GOTO 状态 a b # S B 0 s3 s4 1 2 1 acc 2 s6 s7 5 3 s3 s 4 8 4 r3 r3 5 r1 6 s6 s 7 9 7 r3 8 r2 r2 9 r2 假定输入串为abab,请给出LR分析过程(即按照步骤给出状态,符号,输入串的变化过程)。

编译原理龙书第六章课后作业答案

6.1 假如有下面的Pascal说明 TYPE atype=ARRAY [0..9,-10..10] OF integer; cell=RECORD a,b:integer END; pcell=↑cell; foo=ARRAY [1..100] OF cell; FUNCTION bar(r:integer;y:cell):pcell; BEGIN……END; 写出atype,cell,pcell,foo和bar的类型表达式。 解答: atype: ARRAY(0..9, ARRAY(-10..10, integer)); cell: RECORD((a× integer)× (b×integer)); pcell: POINTER(cell); 或 : POINTER(RECORD((a ×integer)× (b× integer))); foo: ARRAY(1..100, cell); 或 : ARRAY(1..100, RECORD((a ×integer)× (b× integer))); bar: integer× cell→pcell; 或 : integer× cell→POINTER(RECORD((a×integer) ×(b×integer))); 6.4 假定类型定义如下: TYPE link=↑cell; cell=RECORD info:integer; next: link END; 下面哪些表达式结构等价?哪些名字等价? (1)Link (2)pointer(cell) (3)pointer(Link) (4)pointer(record(info?integer)?(next ? pointer(cell))) 解答:(1)(2)(4)结构等价,无名字等价。

编译原理课后习题答案+清华大学出版社第二版

第 1 章引论 第1 题 解释下列术语: (1)编译程序 (2)源程序 (3)目标程序 (4)编译程序的前端 (5)后端 (6)遍 答案: (1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。 (2)源程序:源语言编写的程序称为源程序。 (3)目标程序:目标语言书写的程序称为目标程序。 (4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶 段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符 号表管理等工作。 (5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。 (6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。 第2 题 一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。 答案: 一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。其各部分的主要功能简述如下。 词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。 语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。 语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。 中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。 中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。

编译原理:学习指导与典型题解析

(1)——不是NFA的成分o A.有穷字母表B.初始状态集合 c.终止状态集合D.有限状态集合 (北京航天航空大学研究生入学考试试题 (2)——不是编译程序的组成部分0 A.词法分析程序B.代码生成程序 c.设备管理程序D.语法分析程序 (北京航天航空大学研究生入学考试试题 解答 (1)B,(2)C 例题2.2 给出下面描述的正规表达式 (1)以0l结尾的二进制数串; (2)能被5整除的十进制整数; (3)包含奇数个t或奇数个0的二进制数串 解题思路 (1)分析题意,要求的是二进制串,即由0和1构成的串,并且必须以ot结尾,所以 本题可以分两部分去完成,一部分实现由o和1构成的任意串,一部分即01,然后将它们连接到一起就可以了,所以本题的解答是:(1|0)*01 (2)分析题意,本题要求是十进制整数,也就是由o09这10个数字组成的字符串, 并且不能以o开头(整数“o”除外),要求能被5整除,则该串必须以0或者5结尾0根据我们的分析,可以把本题分成两种情况考虑:一种情况是该整数只有1位,则该整数有0 和5两种可能;另外一种情况是该整数有多位,则该整数可以分成3部分考虑,一是第l 位必须不为0,二是最后1位必须为0或5,三是中间部分可有可无,并且可以由0…9之间任意数字构或,所以本题的正规表达式为:(1|2|3|4|5|6|7|8|9) (0|1|2|3|4|5|6|7|8|9)*(0|5)| (0|5) (3)本题求二进制串,并且要求包含奇数个0或奇数个1,由于o和1都可以在二进制串 中任何地方出现,所以本题只需要考虑一种情况,另外一种情况也可以类似求得0考虑包含奇数个0的字符串:由于只关心0的个数的奇偶数,我们可以把二进制串分成多段来考虑,第1段为二进制串的开始到第1个0为止,这一段包含1个o,并且0的前面有0个或多个l,对于剩下的二进制串按照每段包含两个0的方式去划分,即以o开始,以0结尾,中间可以有0个或多个1,如果一个二进制串被这样划分完后,剩下的部分如果全部是全1串(这些全1串在前面划分的串之间或最后),则该二进制串就具有奇数个o,所以该二进制串可以这样描述:以第1段(1‘o)开始.后面由全1串(1‘)以及包含两个o的串(ol0o)组成,所以包含奇数个0的正规表达式为:100(1[ol’o]‘,本题的解答则是:1*0(1|01*0)*|0*1(0|10*1)*

相关主题