当前位置:文档之家› 编译原理简答

编译原理简答

编译原理简答
编译原理简答

1、给出算符优先文法的定义,算符优先表是否都存在对应的优先函数?给出优先函数的定义。

设有一不含ε产生式的算符文法G,如果对任意两个终结符对a,b之间至多只有、和h三种关系的一种成立,则称G一个算符优先文法。

算符优先关系表不一定存在对应的优先函数

优先函数为文法字汇表中

2、考虑文法G[T]:

T→T*F|F

F→F↑P|P

P→(T)|i

证明T*P↑(T*F)是该文法的一个句型,并指出直接短语和句柄。

首先构造T*P↑(T*F)的语法树如图所示。

句型T*P↑(T*F)的语法树

由图可知,T*P↑(T*F)是文法G[T]的一个句型。

直接短语有两个,即P和T*F;句柄为P。

3、文法G[S]为:

S→SdT | T

T→T

G→(S) | a

试给出句型(SdG)

句型(SdG)

短语:(SdG)

简单(直接)短语:G 、a

句柄:G

最左素短语:SdG

4、目标代码有哪几种形式?生成目标代码时通常应考虑哪几个问题?

三种形式:可立刻执行的机器语言代码;汇编语言程序;待装配的机器语言代码模块

考虑的问题包括:

每一个语法成分的语义;

目标代码中需要哪些信息,怎样截取这些信息。

5、符号表的作用是什么?符号表的查找的整理技术有哪几种?

作用:登记源程序中出现的各种名字及其信息,以及编译各阶段的进展状况。主要技术:线性表,对折查找与二叉树,杂凑技术。

1、实现高级语言程序的途径有哪几种?它们之间的区别?

计算机执行用于高级语言编写的程序主要有两种途径:解释和编译。

在解释方式下,翻译程序并不对高级语言进行彻底的翻译,而是读入一条语句,就解释其含义并执行,然后再读入下一条语句,再执行。

在编译方式下,翻译程序先对高级语言进行彻底的翻译并生成目标代码,然后再对目标代码进行优化,即对源程序的处理是先翻译后执行。

从速度上看,编译方式下,源程序的执行比解释方式下快,但在解释方式下,有利于程序的调试。

2、文法G[S]为:

S->Ac|aB

A->ab

B->bc

该文法是否为二义的?为什么?

对于串abc

(1)S=>Ac=>abc

(2)S=>aB=>abc

即存在两不同的最右推导

所以,该文法是二义的。

3、将文法G[S] 改写为等价的G'[S],使G'[S]不含左递归和左公共因子。

G[S]:S→SAe|Ae

A→dAbA|dA|d

文法G[S] 改写为等价的不含左递归和左公共因子的G'[S]为:

S →AeS'

S' →AeS'|ε

A →dA'

A' →AB|ε

B →bA |ε

4、证明LL(1)文法是无二义性文法

证明:LL(1)文法中任意两个产生式P i,P j,(P i,P j具有相同的左部非终极符) Predict(P i) ∩Predict(P j) 为空

设Pi: A→α1α2…αn

P j: A→α11α21…αm1

(A∈V N, α1α2…αn, α11α21…αm1∈ V N∪V T)

因为Predict(P i) ∩Predict(P j) 为空,因此P i,P j中的A经一步推导,

最左的终极符肯定不同,因此,对于一个字符串,不可能有两种方法推导。

5、文法G[S]为:

S->Ac|aB

A->ab

B->bc

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

S=>Ac=>abc

或S=>aB=>abc

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

1、解释什么是推导?

我们称αAβ直接推出αγβ,即αAβTαγβ,仅当A→ γ是一个产生式,且α、β∈(V N∪V T)*。如果α1α2…αn,则我们称这个序列是从α1至α2的一个推导。若存在一个从α1αn的推导,则称α1可推导出αn。推导是归约的逆过程。

2、将文法G[S] 改写为等价的G′[S],使G′[S]不含左递归和左公共因子。

G[S]:S→bSAe | bA

A→Ab | d

文法G[S] 改写为等价的不含左递归和左公共因子的G'[S]为:

S→bB

B→SAe | A

A→d A'

A' →bA' | ε

3、写出Pascal 或C语言的字母表。

pascal语言的字母表是:

{0,1,……,9}∪{a,……,z}∪{A,……,Z}∪{+,-,*,/,\,↑,?,?,_,(,),[,],;,:,=,<,>,',",Enter,Space,Tab}

C语言的字母表是:

_, 0……9, a……z, A……Z, +, -, *, /, \, %, (, ), [, ], ., &, |, !, =, #, {, }, ’, ”, ?, :,<,>,Enter,Space,Tab

4、有文法G[Z]:Z→aZbZ|aZ|a

该文法是否是二义的,试证明之。

对于句子aaaba,画出二棵不同的语法树,因而是二义的。

5、LL (1 )分析法对文法有哪些要求?

LL(1)分析法对文法的要求是:对于G的每个非终结符A的任何两个不同产生式A->α|β,有下述条件成立:

First(α)∩ First(β)=Ф

若β=*>ε,则First(α)Follow(A)=Ф

1、解释编译程序中“遍”的概念,何谓“单遍扫描”?

遍指编译程序对源程序或中间代码程序从头到尾扫描一次

对于源程序或中间代码程序,从头到尾扫描一次并完成所规定的工作称为一遍。单遍扫描是编译程序的一种极端情形。在这种情形下,整个编译程序同时驻留在内存中,编译程序的各部门之间采用“调用转接”方式连接在一起。

2、设有文法G[S]为:

S→a|b|(A)

A→SdA|S

给出句型(SdSdS)的短语、简单短语、句柄、素短语和最左素短语。

短语:S,SdS,SdSdS,(SdSdS)

简单短语(即直接短语):S

句柄(即最左直接短语):S

素短语:SdS,它同时也是该句型的最左素短语。

图5-7-3句型(SdSdS)的语法树

3、写出表达式A+B*(C-D)+E/(C-D)*N的逆波兰表示及三元式序列。

(1)(_, C,D)

(2) (*,B,(1))

(3) (+,A,(2))

(4) (_,C,D)

(5) (/,E,(4))

(6) (*,N,(5))

(7)(+,(3),(6))

4、画出编译程序的总体结构图。

编译程序的总框图见下图。

5、给出0,1,2,3型文法的定义。

乔姆斯基(chomsky)把文法分成类型,即0型,1型,2型和3型,0型强于1型,1型强于2型,2型强于3型。

如果它的每个产生式α->β的结构是α∈(V

n UV

t

)*且至少含有一个非终结符,

而β∈(V

n UV

t

)*,我们说G=(Vt,V

N

,S,δ)是一个0型文法。

0型文法也称短语文法。一个非常重要的理论结果是,0型文法的能力相当于图灵(Tunring)机。或者说,任何0型语言都是递归可枚举的;反之,递归可枚举集必定是一个0型语言。

如果把0型文法分别加上以下的第i条限制,则我们就得i型文法为:

1.G的任何产生式α->β均满足|α|<=|β|;仅仅S->ε例外,但S不得出现在任何产生式的右部。

2.G的任何产生式为A->β,A∈V n,β∈(V n UV t)*

3.G的任何产生式为A->aB或A->a,其中A,B∈V n

1型文法也称上下文有关文法。这种文法意味着,对非终结符进行替换时务必考虑上下文,而且,—般不允许替换成空串。

2型文法对非终结符进行替换时无须考虑上下文,

3型文法也称线性文法。

1、什么是规范推导?每个句型都有规范推导吗?

规范推导就是最右推导

每一个句子都有一个规范推导,而每一个句型则不一定都有规范推导,比如说采用非规范推导得到的句型。

2、已知文法G[E]:

E→ET+|T T→TF* | F F→F^ | a

试证:FF^^*是文法的句型,指出该句型的短语、简单短语和句柄。

该句型对应的语法树如下:

该句型相对于E的短语有FF^^*;相对于T的短语有FF^^*,F;相对于F的短语有F^;F^^;简单短语有F;F^;句柄为F.

3、写出表达式w+(a+b)*(c+d/(e-10)+8)的逆波兰表示及三元式序列。

(1)(+,a,b)

(2) (-,e,10)

(3) (/,d,(2))

(4) (+,c,(3))

(5) (+,(4),8)

(6) (*,(1),(5))

(7) (+,w,(6))

4、何谓优化?按所涉及的程序范围可分为哪几级优化?

所谓优化,一般是指为提高目标程序的质量而进行的各项工作,即对程序或中间代码进行各种等价变换,使得从变换后的程序出发,能生成更有效的目标代码。

在源程序级在语义动作的设计上在中间代码级在目标代码级

5、简述自顶向下分析法。

从识别符号出发,不断建立直接推导,试图构造一个推导序列,最终由它推导出与输入符号串相同的符号串。从语法树角度看,自顶向下分析过程是以识别符号

为根结点,试图向下构造一棵语法树,使其末端结点符号串正好与输入符号串相同。

1、计算机执行用高级语言编写的程序有那些途径?它们之间的主要区别是什么?

计算机执行用于高级语言编写的程序主要有两种途径:解释和编译。

在解释方式下,翻译程序并不对高级语言进行彻底的翻译,而是读入一条语句,就解释其含义并执行,然后再读入下一条语句,再执行。

在编译方式下,翻译程序先对高级语言进行彻底的翻译并生成目标代码,然后再对目标代码进行优化,即对源程序的处理是先翻译后执行。

从速度上看,编译方式下,源程序的执行比解释方式下快,但在解释方式下,有利于程序的调试。

2、编译程序的实现途径有那些?

编译程序的实现途径可有:

- 手工构造:用机器语言、汇编语言或高级程序设计语言书写。

- 自动构造工具:Lex,Yacc。Lex ,Yacc分别是词法和语法分析器的生成器。

- 移植方式:目标程序用中间语言

- 自展方式:用T型图表示

3、文法G[E]为:E→E+T|T

T→T*F|F

F→(E)|i

试给出句型(E+F)*i的短语,简单(直接)短语,句柄和最左素短语。

短语有: (E+F)*i ,(E+F) ,E+F ,F ,i

简单(直接)短语有: F ,i

句柄是: F

最左素短语是: E+F

4、有人认为:“1型文法对规则的限制比2型文法对规则的限制要多一些”,这种说法对吗?

文法是严格按照规则的形式来分类的

1型文法的规则是:

xUy->xuy u∈V n u∈V+ x,y∈V*

要求将U替换为u时,U的前后一定要有x和y。而2型文法的规则形式为

U->u u∈V n u∈V*

没有什么要求,似乎1型的规则限制要多一些。但仔细看看1型规则中的条件x 和y时,就不难发现当x和y为空时,正好是2型文法。从0型文法到3型文法,是依次增加对文法的限制,所以描述的语言集合越来越小。

5、简述自底向上分析法。

基本思想是:从待输入的符号串开始,利用文法的规则步步向上归约,试图归约到文法的识别符号。从语法树的角度看,自底向上分析的过程是以输入符号串作为末端结点符号串,向着根结点方向往上构造语法树,使识别符号正好是该语法树的根结点。如果最终根结点是识别符号,则输入符号串被识别是相应语言的一个句子;否则不是。

自底向上分析过程实际上是一个不断进行直接归约的过程。

1.对如下文法:

G[S]:S→abS|aaB|ad

B→bbB|b

分别给出句子abaabbb和ad的句柄(6分)

句子abaabbb的句柄是b;句子ad的句柄是ad

2.什么是可规约活前缀?举一例说明。(6分)

若活前缀是含句柄的活前缀,即有α=α′π,且π是句柄,则活前缀α为可归约活前缀。

例 S → a | b C d

C→ e

则be为一个可归约活前缀

3.写出表达式(a+b*c)/(a+b)-d的逆波兰表示及三元式序列或P代码。

(6分)

(1)(*,b,c)

(2) (+,a,(1))

(3) (+,a,b)

(4) (/,(2),(3))

(5) (-,(4),d)

4.词法分析和语法分析都是对字符串进行识别,二者有何区别?(4分)

在词法分析和语法分析中,都是对输入符号串进行识别。但词法分析的输入符号串是一个单词,而语法分析的输入符号串是一个句子或者说是一个程序。为了讨论方便,我们都是用小写字母来表示终结符号,但一定要明白在词法分析中小写字母表示组成单词的字符,而在语法分析中小写字母表示组成程序的的一个单词,识别方式来说,词法分析和语法分析都是对输入符号串结构的识别,但由于单词和程序的结构有所区别,所以具体的识别方式不一样。

5.已知文法G[S]为:

S→a|^|(T)

T→T,S|S

判断该文法是否是算符优先文法?如是,请给出算符优先关系表。(8分)(1)

FIRSTVT和LASTVT

(2)

算符优先关系

1、语法分析的主要(功能)任务是什么?有哪二种分析分方法?

语法分析的主要任务是对词法分析的输出结果-----单词序列进行分析,识别合法的语法单位。若给定的输入符号是该文法所产生的语言中的句子,就给出它的语法树,否则就报告出错信息。

自上而下语法分析和自下而上语法分析。

2、令文法G为

S→a|ε|(T)

T→T,S|S

(1)给出(a,(a,a))的最右推导和最左推导。

(2)画出语法分析树

最左推导:S=>(T) =>(T,S) =>(a,S)=>(a,(T,S))

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

最右推导:S=>(T)=>(T,S)=>(T,(T))=>(T,(T,S))

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

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

3、写出表达式A=(a+b)+(c+d)*(x+y+c)的三元式序列或P代码表示。

(1)(+,a,b)

(2) (+,c,d)

(3) (+,x,y)

(4) (+,(3),c)

(5) (*,(2),(4))

(6) (+,(1),(5))

4、什么是二义性文法?请举例说明。

一个文法如果它的一个句子有两棵或两棵以上的语法树,则称此句子具有二义性,如果一个文法含有二义性的句子,则称此文法具有二义性。

例:

E→i | (E) | EAE

A→ + | - | * | /

i+i+i

E E

E A E E A E

E A E t I i t E A E

i t i i t i

5、在一个基本块内通常可实现哪些优化?

①合并已知量

②删除公共子表达式

③删除无用代码

④复写传播

1、DFA和NFA有何区别?

DFA和NFA的区别表现在三个方面。一是NFA可有若干个开始状态,而DFA 仅有一个。二是DFA的映像M是从K╳Σ到K,而的映象M是从K╳Σ到K 的子集,即映像M将产生一个状态集合(可能为空集),而不单个状态。三是NFA在没有扫描输入符号的情况下,也可以进行空移。

2、已知文法G为:

S aAcB|Bd

A AaB|c

B bScA|b

写出句子acabcbbdcc得最左推导及语法树

s->aAcB

->aAaBcB

->aCaBcB

->acabcB

->acabcbScA

->acabcbBCCA

->acabcbbdcc

S

a A c B

A a

B b S c A

C b B d

b

3、写出表达式A=(x+y)*(c+d)+(x+y+c)的四元式序列或P代码表示。

(1)(+,x,y)

(2) (+,c,d)

(3) (*,(1),(2))

(4) (+,x,y)

(5) (+,(4),c)

(6) (+,(3),(5))

4、什么是语法树?

满足下面4个条件的树称之为文法G[S]的一棵语法树。

①每一终结均有一标记,此标记为VN∪VT中的一个符号;

②树的根结点以文法G[S]的开始符S标记;

③若一结点至少有一个直接后继,则此结点上的标记为VN中的一个符号;

④若一个以A为标记的结点有K个直接后继,且按从左至右的顺序,这些结点的标记分别为X1,X2,…,X k,则A→X1,X2,…,X k,必然是G的一个产生式。

5、在编译过程中为什么要建立符号表,简述符号表的组织,即它一般分成几部分,含有那些域?

在编译过程中,始终涉及到对一些语法符号的处理,需要用到这些语法符号的相关属性。为了在需要的时候能找到这些语法成分及其相关属性,必须使用一些表格保存这些语法成分及其属性,这些表格就是符号表。

符号表应包括语法符号的名字和相关属性,不同语法符号在符号表中存放的信息不同。符号表的条目一般由两部分组成,即名字栏和信息栏。符号表域包括标识符名、其他信息、地址等。

对名字栏,为节省空间,可另外设立一个存放标识符的字符数组。

对信息栏中的类型等信息可以用数值或向量来表示,以节省空间

1、简述自顶向下分析法。

从识别符号出发,不断建立直接推导,试图构造一个推导序列,最终由它推导出与输入符号串相同的符号串。从语法树的角度看,自顶向下分析过程是以识别符号为根结点,试图向下构造一棵语法树,使其末端结点符号串正好与输入符号串相同。

2、设有文法G[A]的产生式集为:

A→BaC|CbB

B→Ac|c

C→Bb|b

试消除G[A]的左递归。

提示:不妨以A、B、C排序.先将A代入B中,然后消除B中左递归;再将A、B代入C中。再消除C中左递归。

最后结果为:G[A]:

A→BaC|CbB

B→CbBcB'|cB'

B'→aCcB'|ε

C→cB'bC'|bC'

C'→bBcB'bC'|ε

3、写出表达式a+b*(c-d)+e/(c-d)*n的三元式序列或P代码表示。

(1)(_,c,d)

(2) (*,b,(1))

(3) (+,a,(2))

(4) (_,c,d)

(5) (/,e,(4))

(6) (*,n,(5))

(7)(+,(3),(6))

4、什么样的文法是算符优先文法,请举个算符优先文法的例子。

设文法G,如果它的产生式右部不包含相邻非终结符号,则称文法G为算符文法,如果算符文法的终结符号集中任意两个符号之间至多存在一种优先关系,则称该算符文法为算符优先文法。

例如:E->E+T|T

T->T*F|F

F->(E)|i

5、解释什么是归约?

我们称αγβ直接归约出αAβ,仅当A→γ 是一个产生式,且α、β∈(VN∪VT)*。归约过程就是从输入串开始,反复用产生式右部的符号替换成产生式左部符号,直至文法开始符。

1.什么是算符优先文法?给出一个非教材上提供的算符优先文法的例子,并给出算符优先表?(6分)

设文法G,如果它的产生式右部不包含相邻非终结符号,则称文法G为算符文法,如果算符文法的终结符号集中任意两个符号之间至多存在一种优先关系,则称该算符文法为算符优先文法。

例如:E->E+T|T

T->T*F|F

F->(E)|i

2.设有文法G[S]:

S→a|ε|(T)

T→T,S|S

请给出句子(a,(a,a))的最左和最右推导,给出该句子的短语和句柄。(7分)

最左推导:S=>(T) =>(T,S) =>(a,S)=>(a,(T,S))

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

最右推导:S=>(T)=>(T,S)=>(T,(T))=>(T,(T,S))

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

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

3.编译程序的实现应考虑的问题有那些?(4分)

编译程序的实现应考虑:开发周期、目标程序的效率、可移植性、可调试性、可维护性、可扩充性等。

4.什么是二义性文法?请用例说明文法G[E]:

E→i | (E) | EAE

A→ + | - | * | /

是二义性文法。(6分)

一个文法如果它的一个句子有两棵或两棵以上的语法树,则称该句子具有二义性,如果一个文法含有二义性的句子,则该文法是二义性文法。

如句子:i+i+i

5.在编译过程中为什么要建立符号表?简述符号表的组织,即它一般分成几部分,含有那些域?(6分)

在编译过程中,始终涉及到对一些语法符号的处理,需要用到这些语法符号的相关属性。为了在需要的时候能找到这些语法成分及其相关属性,必须使用一些表格保存这些语法成分及其属性,这些表格就是符号表。

符号表应包括语法符号的名字和相关属性,不同语法符号在符号表中存放的信息不同。符号表的条目一般由两部分组成,即名字栏和信息栏。符号表域包括标识符名、其他信息、地址等。

对名字栏,为节省空间,可另外设立一个存放标识符的字符数组。

对信息栏中的类型等信息可以用数值或向量来表示,以节省空间

编译原理期末考试习题及答案

一、填空题|(每题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)

编译原理试题

中间语言与语法制导翻译 重点与难点 重点:语法制导翻译的基本思想,属性文法,翻译模式,说明语句的翻译方案。 三地址码,各种语句的目标代码结构、属性文法与翻译模式。 难点:属性的意义,对综合属性,继承属性,固有属性的理解,属性计算,怎么通过属性来表达翻译。布尔表达式的翻译,对各种语句的目标代码结构、属性文法与翻译模式的理解。 基本要求 掌握语法制导翻译的基本思想,属性文法,综合属性,继承属性,固有属性,属性计算,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( num, num.val ) } (1) 指出文法中的各非终结符具有哪些综合属性和哪些继承属性 ⑵画出按本翻译模式处理表达式 a + 20 + ( b - 10 ) 时所生成的语法树 【解】 (1)E的综合属性 p,R的继承属性i,综合属性s;T的综合属性p (2) 处理表达式 a + 20 + ( b - 10 ) 时所生成的语法树如下 + (NUM, 20) - ( ID, b) (NUM, 10) 例2 定义一个计算器的属性文法,完成一个输入表达式值的计算和显示, 【解】计算器的文法 L → E

编译原理样题1(有答案)

编译原理 一、是非题(下列各题你认为正确的,请在题干的括号内打“√”,错的打“×”。每题1分,共5分) l、一个LL( l)文法一定是无二义的。…………………………………………… ( ) 2、逆波兰法表示的表达式亦称前缀式。……………………………………………() 3、目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。……………() 4、正规文法产生的语言都可以用上下文无关文法来描述。………………………() 5、一张转换图只包含有限个状态,其中有一个被认为是初态,最多只有一个终态。 ……………………………………………………………………………………() 二、填空题(每题2分,共5分) 1、语法分析是依据语言的( )规则进行的,中间代码产生是依据语言的( )规进行的。 2、程序语言的单词符号一般可以分为( )等等。 3、语法分析器的输入是( ),其输出是( )。 4、所谓自上而下分析法是指( )。 5、如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是( )。 6、对于文法G,仅含终结符号的句型称为( )。 7、逆波兰式ab十c+d*e—所表达的表达式为( )。 8、一个名字的属性包括( )和( )。 9、对于数据空间的存贮分配,FORTRAN采用( )策略,PASCAL采用( )策略。 10、所谓优化是指( )。 三、名词解释题(每题2分,共10分) l、词法分析器: 2、语法: 3、最右推导: 4、语法制导翻译: 5、基本块: 四、简述题(每题4分,共24分) l、考虑下面的程序: ………… Var i:integer; a:array[1··2] of integer; prncedure Q( b); Var b:integer; Begin i:=1;b:=b十2; i:=2;b:=b+3 End;

编译原理期末考试题目及答案

一、填空题(每空2分,共20分) 1.编译程序首先要识别出源程序中每个单词,然后再分析每个句子并翻译其意义。 2.编译器常用的语法分析方法有自底向上和自顶向下两种。 3.通常把编译过程分为分析前端与综合后端两大阶段。词法、语法和语义分析是对源程序的分析,中间代码生成、代码优化与目标代码的生成则是对源程序的综合。 4.程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即静态存储分配方案和动态存储分配方案。 5.对编译程序而言,输入数据是源程序,输出结果是目标程序。 1.计算机执行用高级语言编写的程序主要有两种途径:解释和编译。 2.扫描器是词法分析器,它接受输入的源程序,对源程序进行词法分析并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。 3.自下而上分析法采用移进、归约、错误处理、接受等四种操作。 4.一个LL(1)分析程序需要用到一张分析表和符号栈。 5.后缀式abc-/所代表的表达式是a/(b-c)。 二、单项选择题(每小题2分,共20分) 1.词法分析器的输出结果是__C。 A.单词的种别编码B.单词在符号表中的位置 C.单词的种别编码和自身值D.单词自身值 2.正规式M 1 和M 2 等价是指__C_。 A.M1和M2的状态数相等 B.M1和M2的有向边条数相等 C.M1和M2所识别的语言集相等D.M1和M2状态数和有向边条数相等 3.文法G:S→xSx|y所识别的语言是_C____。 A.xyx B.(xyx)* C.xnyxn(n≥0) D.x*yx* 4.如果文法G是无二义的,则它的任何句子α_A____。 A.最左推导和最右推导对应的语法树必定相同B.最左推导和最右推导对应的语法树可能不同 C.最左推导和最右推导必定相同D.可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握____D__。 A.源程序B.目标语言C.编译方法D.以上三项都是 6.四元式之间的联系是通过__B___实现的。 A.指示器B.临时变量C.符号表D.程序变量 7.表达式(┐A∨B)∧(C∨D)的逆波兰表示为__B___。 A.┐AB∨∧CD∨B.A┐B∨CD∨∧ C.AB∨┐CD∨∧D.A┐B∨∧CD∨ 8. 优化可生成__D___的目标代码。 A.运行时间较短 B.占用存储空间较小 C.运行时间短但占用内存空间大D.运行时间短且占用存储空间小 9.下列___C___优化方法不是针对循环优化进行的。 A. 强度削弱B.删除归纳变量C.删除多余运算D.代码外提 10.编译程序使用_B_区别标识符的作用域。 A. 说明标识符的过程或函数名B.说明标识符的过程或函数的静态层次 C.说明标识符的过程或函数的动态层次 D. 标识符的行号 三、判断题(对的打√,错的打×,每小题1分,共10分) 2.一个有限状态自动机中,有且仅有一个唯一的终态。x

编译原理考试试卷

一、填空题(每空 2 分,共 30 分) 1、编译程序的整个过程可以从逻辑上划分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等几个阶段,另外还有两个重要的工 作是表格管理和出错处理 2、规范规约中的可归约串是句柄,算符优先分析中的可归约串是最左素短语。 3、语法分析方法主要可分为自顶向下和自底向上两大类。 4、 LR ( 0)文法的项目集中不会出现移进 -归约冲突和归约 -归约冲突。 5、数据空间的动存态储分配方式可分为栈式和堆式两种。 6、编译程序是指能将源语言程序翻译成目标语言程序的程序。 7、确定有穷自动机DFA 是NFA的一个特例。 8、表达式 (a+b)*c的逆波兰表示为ab+c*。 二、选择题(每题 2 分,共 20 分) 1、 L R 语法分析栈中存放的状态是识别B的 DFA 状态。 A 、前缀B、可归前缀C、项目 D 、句柄 2、D不可能是目标代码。 A 、汇编指令代码 B 、可重定位指令代码 C、绝对机器指令代码 D 、中间代码 3、一个控制流程图就是具有C的有向图 A 、唯一入口结点B、唯一出口结点C、唯一首结点 D 、唯一尾结点 4、设有文法G[S] : S→ b|bB B → bS ,则该文法所描述的语言是C。 A 、 L ( G)={b i|i≥ 0}B、 L (G) ={b 2i |i≥0} C、 L ( G)={b 2i+1|i≥ 0} D 、 L ( G)={b 2i+1|i ≥1} 5、把汇编语言程序翻译成机器可执行的目标程序的工作是由 B完成的。 A 、编译器 B 、汇编器C、解释器D、预处理器6、在目标代码生成阶段,符号表用于D。 A 、目标代码生成 B 、语义检查C、语法检查D、预处理器地址分配0 7、规范归约是指B。 A 、最左推导的逆过程 B 、最右推导的逆过程C、规范推导D、最左归约逆过程 8、使用A可以定义一个程序的意义。 A 、语义规则B、词法规则C、语法规则D、左结合规则 9、经过编译所得到的目标程序是D。 A 、三元式序列B、四元式序列C、间接三元式 D 、机器语言程序或汇编语言程序 10、在一个基本块内进行的代码优化是B。 A 、全局优化B、局部优化C、循环优化D、代码外提 三、简答题( 3 小题,共 30 分) 1、已知文法G[S]:S→Ac|aB A→ ab B→ bc 证明该文法具有二义性(本题 6 分) 证明:因为该文法的句型abc 存在如下两棵语法树: 所以,该文法具有二义性 一、填空题(每空 1分,共 20分) 1.编译过程一般分为、、中间代码生成、 和目标代码生成五个阶段。 2.语法分析最常用的两类方法是和分析法。 3.确定的有穷自动机是一个,通常表示为。

编译原理试题

中间语言与语法制导翻译重点与难点 重点:语法制导翻译的基本思想,属性文法,翻译模式,说明语句的翻译方案。 三地址码,各种语句的目标代码结构、属性文法与翻译模式。 难点:属性的意义,对综合属性,继承属性,固有属性的理解,属性计算,怎么通过属性来表达翻译。布尔 表达式的翻译,对各种语句的目标代码结构、属性文法与翻译模式的理解。 基本要求 掌握语法制导翻译的基本思想,属性文法,综合属性,继承属性,固有属性,属性计算,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

编译原理实验报告一

实验一词法分析程序实现 一、实验目得与要求 通过编写与调试一个词法分析程序,掌握在对程序设计语言得源程序进行扫描得过程中,将字符流形式得源程序转化为一个由各类单词符号组成得流得词法分析方法 二、实验内容 基本实验题目:若某一程序设计语言中得单词包括五个关键字begin、end、if、then、else;标识符;无符号常数;六种关系运算符;一个赋值符与四个算术运算符,试构造能识别这些单词得词法分析程序(各类单词得分类码参见表I)。 表I语言中得各类单词符号及其分类码表 输入:由符合与不符合所规定得单词类别结构得各类单词组成得源程序文件。 输出:把所识别出得每一单词均按形如(CLASS,VALUE)得二元式形式输出,并将结果放到某个文件中。对于标识符与无符号常数,CLASS字段为相应得类别码得助记符;V AL UE字段则就是该标识符、常数得具体值;对于关键字与运算符,采用一词一类得编码形式,仅需在二元式得CLASS字段上放置相应单词得类别码得助记符,V ALUE字段则为“空". 三、实现方法与环境 词法分析就是编译程序得第一个处理阶段,可以通过两种途径来构造词法分析程序.其一就是根据对语言中各类单词得某种描述或定义(如BNF),用手工得方式(例如可用C语言)构造词法分析程序。一般地,可以根据文法或状态转换图构造相应得状态矩阵,该状态矩阵连同控制程序一起便组成了编译器得词法分析程序;也可以根据文法或状态转换图直接编写词法分析程序。构造词法分析程序得另外一种途径就是所谓得词法分析程序得自动生成,即首先用正规式对语言中得各类单词符号进行词型描述,并分别指出在识别单词时,词法分析程

编译原理试题(卷)汇总-编译原理期末试题(卷)(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.( ) 产生式 16.通常一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括_C____。

编译原理试题

1997年编译原理试题 1.(10分)某操作系统下合法的文件名为 device:name.extension 其中第一部分(device:)和第三部分(.extension)可缺省,若device, name和extension都是字母串,长度不限,但至少为1,画出识别这种文件名的确定有限自动机。 2.(20分) a. 下面的二义文法描述命题演算公式,为它写一个等价的非二义文法。 S—> S and S | S or S | not S | p | q | (S) b. 下面文法是否为LL(1)文法?说明理由。 S—> A B | P Q x A—> x y B—> b c P—> d P | εQ—> a Q | ε 3.(10分)某些语言允许给出名字表的一个属性表,也允许声明嵌在另一个声明里面,下面文法抽象这个问题。 D —> attrlist namelist | attrlist (D) namelist —> id, namelist | id attrlist —> A attrlist | A A —> decimal | fixed | float | real D —> attrlist namelist的含义是:在namelist中的任何名字有attrlist 中给出的所有属性。D—> attrlist (D) 的含义是:在括号中的声明提到的所有名字有attrlist 中给出的所有属性,而不管声明嵌套多少层。写一个翻译方案,它将每个名字的属性个数填入符号表。为简单起见,若属性重复出现,则重复计数。4.(10分)把表达式 -(a+b)*(c+d)+(a+b+c) 翻译成四元式。 5.(10分)由于文法二义引起的LR(1)分析动作冲突,可以依据消除二义的规则而得到LR(1)分析表,根据此表可以正确识别输入串是否为相应语言的句子。对于非二义非LR(1)文法引起的LR(1)分析动作的冲突,是否也可以依据什么规则来消除LR(1)分析动作的冲突而得到LR(1)分析表,并且根据此表识别相应语言的句子?若可以,你是否可以给出这样的规则? 6.(5分)UNIX 下的C编译命令cc的选择项g和O的解释如下,其中dbx 的解释是“dbx is an utility for source-level debugging and execution of programs written in C”。试说明为什么用了选择项g后,选择项O便被忽略。 -g Produce additional symbol table information for dbx(1) and dbxtool(1) and pass -lg option to ld(1) (so as to include the g library, that is:

编译原理试题集33493

第一章引论 一.单项选择题 1. 如果一个编译程序能产生不同于其宿主机的机器代码,则称它为:___________________ 。 a. 诊断编译程序 b. 优化编译程序 c. 交叉编译程序 d. 可变目标编译程序 2. 编译程序将高级语言程序翻译成_________ 。 a. 机器语言程序或高级语言程序 b. 汇编语言或机器语言程序 c. 汇编语言程序或高级 语言程序d. 中间语言程序或高级语言程序 3. 下面的四个选项中,__________不是编译程序的组成部分。 a. 词法分析程序 b. 代码生成程序 c. 设备管理程序 d. 语法分析程序 4. 现代多数实用编译程序所产生的目标代码都是一种可重定位的指令代码,在运行前必须借助于一个_______把各个目标模块,包括系统提供的库模块连接在一起,确定程序变量或常 数在主存中的位置,装入内存中制定的起始地址,使之成为一个可运行的绝对指令代码的程序。 a. 重定位程序; b. 解释程序; c. 连接装配程序; d. 诊断程序; 5. 从编译程序的角度说,源程序中的错误通常分为________两大类。 a. 词法错误和语法错误; b. 语法错误和语义错误; c. 编辑错误和诊断错误; d. 词法错误和语义错误; 6. 下面对编译原理的有关概念正确描述的是:____。 a. 目标语言只能是机器语言 b. 编译程序处理的对象是源语言。 c. Lex是语法分析自动生成器 d. 解释程序属于编译程序 7. 目标代码生成阶段所生成的目标代码的形式不可能是____。 a. 绝对指令代码 b. 可充定位的指令代码。 c. 汇编指令代码 d. 三地址代码 8. 语义错误是指源程序中不符合语义规则的错误,不包括:____ a. 非法字符错误 b. 类型不一致错误。 c. 作用域错误 d. 说明错误

编译原理实验指导书

编译原理实验指导 书

《编译原理》实验指导书 太原科技大学计算机学院 -3-1

序 《编译原理》是国内外各高等院校计算机科学技术类专业,特别是计算机软件专业的一门重要专业课程。该课程系统地向学生介绍编译程序的结构、工作流程及编译程序各组成部分的设计原理和实现技术。由于该课程理论性和实践性都比较强,内容较为抽象复杂,涉及到大量的软件设计和算法,因此,一直是一门比较难学的课程。为了使学生更好地理解和掌握编译原理和技术的基本概念、基本原理和实现方法,实践环节非常重要,只有经过上机进行程序设计,才能使学生对比较抽象的教学内容产生具体的感性认识,增强学生综合分析问题、解决问题的能力,并对提高学生软件设计水平大有益处。 为了配合《编译原理》课程的教学,考虑到本课程的内容和特点,本指导书设置了七个综合性实验,分别侧重于词法分析、NFA的确定化、非递归预测分析、算符优先分析器的构造、LR分析、语义分析和中间代码的生成、基于DAG的基本块优化,以支持编译程序的各个阶段,基本涵盖了《编译原理》课程的主要内容。 本指导书可作为《编译原理》课程的实验或课程设计内容,在课程教学的同时,安排学生进行相关的实验。实验平台可选择在MS-DOS或Windows操作系统环境,使用C/C++的任何版本作为开发工具。学生在做完试验后,应认真撰写实验报告,内容应

包括实验名称、实验目的、实验要求、实验内容、测试或运行结果等。

目录 实验一词法分析 ........................................................... 错误!未定义书签。实验二 NFA的确定化.................................................... 错误!未定义书签。实验三非递归预测分析 ............................................... 错误!未定义书签。实验四算符优先分析器的构造................................... 错误!未定义书签。实验五 LR分析 .............................................................. 错误!未定义书签。实验六语义分析和中间代码生成................................ 错误!未定义书签。实验七基于DAG的基本块优化................................... 错误!未定义书签。

编译原理考试

编译原理考试

————————————————————————————————作者:————————————————————————————————日期:

一、判断对错:(对√;错 ;每小问2分共24分) <1>算符优先分析法是一种规范归约分析法。( ) <2>若文法Gs中不含形如T→…BD…的产生式,T、B、D∈V N,则称Gs为算符文法。(√) <3>若一个语言是有穷集合,则定义该语言的文法一定是递归的。( ) <4>若两个正规式所表示的正规集相同,则认为二者是等价的。(√) <5>LR分析法是一种规范归约分析法。(√) <6>一个LR(0)项目集I={B →α.bβ, P →aA.},则说I中含有“移进—归约”冲突。(√) <7>SLR(1)文法是无二义性文法。(√) <8>消除左递归后的文法一定是LL(1)文法。( ) <9>对任何编译程序而言,代码优化是必不可少的。( ) <10>编译程序与具体的机器无关。( ) <11>在自动机的概念中,终态与非终态是可区别的。(√) <12>逆波兰式ab+cd+*所代表的中缀表达式是:(a+b)*(c+d)(√) 1. 一个语言有文法是不惟一的。(√) 2. 若一个语言是无穷集合,则定义该语言的文法一定是递归的。(√) 3. 紧跟在条件转移语句后面的语句是基本块的入口语句。(√) 4. 算符优先分析法是一种规范归约分析法。( ) 5. 自下而上语法自导翻译的特点:当栈顶形成句柄时,在归约的同时执行其语义动作。(√) 6. LR(0)文法、SLR(1)文法都是无二义性文法。(√) 7.K、∑分别表示有限状态集和有穷字母表, DFA M的转换函数f是一个从K ?∑到K的单值映射。(√) 8. 对任何编译程序而言,代码优化是必不可少的。( ) 9. 直接短语是某规则的右部,它对应简单子树叶结点从左到右排列形成的符号串。(√) 10. 两个有穷自动机等价是指它们的状态数和有向弧数相等。( ) 11. 一个LR(0)项目集为:I={A→α.bβ, D→β.},则说I中含有“移进--归约”冲突。 (√) 12. 若两个正规式所表示的正规集相同,则认为二者是等价的。(√) 13. 无左递归的文法是LL(1)文法。( ) 14. 逆波兰式abcde/+*+所代表的中缀表达式是:a+b*(c+d/e)(√) 15. 编译程序结构中,中间代码优化及目标代码生成两个阶段与具体的机器有关。( ) 16. LALR分析法中,同心集的合并不会产生“移进--归约”冲突。(√)

编译原理考试试题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分析过程(即按照步骤给出状态,符号,输入串的变化过程)。

编译原理实验报告2

学生学号实验课成绩 武汉理工大学 学生实验报告书 实验课程名称编译原理 开课学院计算机科学与技术学院 指导老师姓名饶文碧 学生姓名 学生专业班级

—学年第学期 实验课程名称:编译原理 实验项目名称单词的词法分析实验成绩 实验者专业班级组别 同组者实验日期 第一部分:实验分析与设计(可加页) 一、实验内容描述(问题域描述) 完成对某一种常用高级语言(如Pascal、C语言、PL/0语言)的各类单词进行词法分析,即对源程序从左到右进行扫描,对组成源程序的字符串拼接成为单词;并把其转换成属性字输出。 实验要求: (1)选择常用高级程序设计语言(如 Pascal、C语言、PL/0语言)的源程序作为词法分析对象。 (2)根据教学要求和学生具体情况,从上列语言之一中选取它的一个适当大小的子集,可以选取一类典型单词,也可以尽可能使各种类型的单词都能兼顾到。其基本要求是:对源程序从左到右进行扫描,对组成源程序的字符串拼接成为单词,并把其转换成属性字输出。

二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述) #include #include #include #include char *table[7]={" ","main","int","if","then","else","return"},TOKEN[20],ch; //定义关键字 int lookup(char *TOKEN){ //关键字匹配函数 int m,i; for(i=1;i<6;i++){ if((m=strcmp(TOKEN,table[i]))==0) return(i); } return(0); } void out(int c,char *TOKEN){ //输出函数 printf("(%d,%s)\n",c,TOKEN); } void scanner(FILE *fp){ //扫描函数

编译原理考试试卷

南京工业大学继续教育学院编译原理期末考试试卷 (2012-2013学年) A卷 一、选择题(每题2分,共20分) 得分 1. 一个上下文无关文法G包括四个组成部分:一组终结符,一组非终结符,一个_____,以及一组产生式。 A.字符串 B.运算符号 C.开始符号 D.文法 2.程序的基本块是指_____。 A.一个子程序 B.一个仅有一个入口和一个出口的语句 C.一个没有嵌套的程序段 D.一组顺序执行的程序段,仅有一个入口和一 个出口 3. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于_____分析方法。 A.自左向右 B.自顶向下 C.自底向上 D.自右向左 4.经过编译所得到的目标程序是_____。 A.四元式序列 B.间接三元式序列 C.二元式序列 D.机器语言程序或汇编语言程序 5.运行阶段的存储组织与管理的目的是_____。 ①提高编译程序的运行速度②节省编译程序的存储空间 ③提高目标程序的运行速度④为运行阶段的存储分配做准备 A. ①② B. ②③ C. ③④ D. ④②6.词法分析器的输出结果是_____。 A.( ) 单词的种别编码B.( ) 单词在符号表中的位置C.( ) 单词的种别编码和自身值D.( ) 单词自身值 7.正规式M 1 和M 2 等价是指_____。

A.( ) M1和M2的状态数相等B.( ) M1和M2的有向边条数相等 C.( ) M1和M2所识别的语言集相等D.( ) M1和M2状态数和有向边条数相等 8.文法G:S→xSx|y所识别的语言是_____。 A.( ) xyx B.( ) (xyx)* C.( ) xnyxn(n≥0) D.( ) x*yx* 9.语言是_____。 A.句子的集合B.产生式的集合 C.符号串的集合D.句型的集合 10.编译程序前三个阶段完成的工作是 A.词法分析、语法分析和代码优化 B.代码生成、代码优化和词法分析 C.词法分析、语法分析、语义分析和中间代码生成 D.词法分析、语法分析和代码优化 二、名词解释(每题2分,共20分) 得分 1.最左推导: 2.语法: 3.文法: 4.基本块: 5.语法制导翻译: 6.短语: 7.规范句型:

编译原理 试题

一、简答题(每题5分,共20分) 1、简述编译程序所完成的主要工作。 2、应用递归下降和LL(1)分析技术的先决条件是什么? 3、简述在程序的声明部分语义分析所完成的基本工作。 4、试说明中间代码的作用及其形式。 二、演算题(共60分) 1、试为下列语言构造相应的文法。(6分) {a 2m b m | m>0} 2、设有文法G[S]为:(6分) S→dAB A→aA|a B→Bb|λ 其表示的相应语言是什么? 3、设有A=({q0,q1,q2},{a,b},M,{q0},{q1}),其中M为:(10分) M(q0,a)={q1,q2} M(q0,b)={q0} M(q1,a)={q0,q1} M(q2,a)={q0,q2} M(q2,b)={q1} 试为其构造DFA,它能接受bababab和abababb吗? 4、设有文法G[Z]:(8分) Z→S S→L=R | R L→*R| i R→L 已知LR(1)项目集IS={[ Z→.S,#]},计算CLOSURE(IS)的值。 5、选做题:要求从下面给出的(1)、(2)两题中任选一题完成。 (1)设当前层数为L,可用偏移量Offset值为101,且有下面程序,写出相关的符号表和类型表。(20分) CONST a=245.43; TYPE r=record y:integer; x:real; end; V AR c:integer; d:array [3..6] of r; (2)已知文法G(E) E→T|E+T T→F|T* F F→(E)|i (i) 给出句型(T * F+i)的最右推导及画出语法树(10分); (ii) 给出句型(T * F+i)的所有短语、直接短语。(10分)

编译原理实验报告:实验一编写词法分析程序

( 编译原理实验报告 , 实验名称:实验一编写词法分析程序 实验类型:验证型实验 指导教师:何中胜 专业班级:( 13软件四 姓名:丁越 学号: 实验地点:) 秋白楼B720

实验成绩: 日期:2016年 3 月 18 日

一、实验目的 通过设计、调试词法分析程序,实现从源程序中分出各种单词的方法;熟悉词法分析程序所用的工具自动机,进一步理解自动机理论。掌握文法转换成自动机的技术及有穷自动机实现的方法。确定词法分析器的输出形式及标识符与关键字的区分方法。加深对课堂教学的理解;提高词法分析方法的实践能力。通过本实验,应达到以下目标:[ 1、掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。 2、掌握词法分析的实现方法。 3、上机调试编出的词法分析程序。 二、实验过程 以编写PASCAL子集的词法分析程序为例 1.理论部分 > (1)主程序设计考虑 主程序的说明部分为各种表格和变量安排空间。 数组 k为关键字表,每个数组元素存放一个关键字。采用定长的方式,较短的关键字后面补空格。 P数组存放分界符。为了简单起见,分界符、算术运算符和关系运算符都放在 p表中(编程时,还应建立算术运算符表和关系运算符表,并且各有类号),合并成一类。 id和ci数组分别存放标识符和常数。 instring数组为输入源程序的单词缓存。 ¥ outtoken记录为输出内部表示缓存。 还有一些为造表填表设置的变量。 主程序开始后,先以人工方式输入关键字,造 k表;再输入分界符等造p表。 主程序的工作部分设计成便于调试的循环结构。每个循环处理一个单词;接收键盘上送来的一个单词;调用词法分析过程;输出每个单词的内部码。 ⑵词法分析过程考虑 将词法分析程序设计成独立一遍扫描源程序的结构。其流程图见图 1-1。 …

编译原理试题及答案(期末复习版).pdf

<编译原理>历年试题及答案 一.(每项选择 2 分,共 20 分)选择题 1.将 编译程序分成若干个“遍”是为了_b__。 a.提 高程序的执行效率 b.使程序的结构更加清晰 c. 利用有限的机器内存并提高机器的执行效率 d. 利用有限的机器内存但降低了机器的执行效率 2.构造编译程序应掌握__d__。 a.源程序 b.目标语言 c.编译方 法 d.以上三项都是 3.变量应 当 c_。 a.持有左值 b.持有右值 c.既持有左值又持有右值 d.既不持 有左值也不持有右值 4.编译程序绝大多数时间花在 _d___上。 a.出错处理 b.词法分析 c.目标代码 生成 d.管理表格 5.词法分析器的输 出结果是_c___。 a.单词的种别编码 b.单词在符号表中的位置 c.单词 的种别编码和自身值 d.单词自身值 6.正规式 MI 和 M2 等价是指__c__。 a. MI 和 M2 的状态数相等 b.Ml 和 M2 的有向弧条数相等。 C.M1 和 M2 所识别的语言集相等 d. Ml 和 M2 状态数和有向弧条数相等7.中间代码生成时所依据的是—c。 a.语法规则 b.词法规则c.语义规则 d.等价变换规则 8.后缀式 ab+cd+/可用表达式__b_来表示。 a. a+b/c+d b. (a+b)/(c+d) c. a+b/(c+d) d. a+b+c/d 9.程序所需 的数据空间在程序运行前就可确定,称为____c__管理技术。 a.动态存储 b.栈式存储 c.静态存储 d.堆式存储 10.堆式 动态分配申请和释放存储空间遵守___d_____原则。 a.先请先放 b.先请后放 c.后请先放 d.任意 二(每小题 10 分,共 80 分)简答题 1.画出编译程序的 总体结构图,简述各部分的主要功能。 2. 已知文法 G[E]: E→ET+|T T→TF* | F F→F^ | a 试证:FF^^*是文法的句型,指出该句型的短语、简单短语和句柄.

编译原理试卷

一、填空题(每题3分,共15分) 1.编译原理是一种翻译程序,它将高级语言编写的源程序翻译成等价的机器语言或汇编 语言的目标程序 2.整个编译过程可以分为五个阶段,分别是:词法分析、语法分析、语义分析及中 间代码生成、代码优化和目标代码的生成。 3.设X是符号串,符号串的幂运算X0= ε 4.乔姆斯基把文法分为四种类型,即0型、1型、2型、3型文法。2型文法也称为 上下文无关文法 5.采用递归下降分析法进行语法分析,要求文法是文法。 二、选择题(每题3分,共15分) 1.若文法G定义的语言是无限集,则文法必然是(D)。 A.上下文无关文法 B.正规文法 C.二义性文法 D.递归文法 2.文法G产生的()的集合是该文法的描述语言。 A.句型 B.终结符集 C.非终结符集 D.句子 3.通常程序设计语言的词法规则可用正规式描述,词法分析器可用(B)来实现。 A.语法树 B.有穷自动机 C.栈 D.数组 4.设有文法G[S]:S→Bb│b,B→bS,该文法所描述的语言是(C) A. b n,n≥0 B.b2n,n≥0 C.b2n+1,n≥0 D.b2n+1,n≥1 5.用1代表字母,d代表数字,则定义标识符单词的正规式是(C) A.1d* B.11* C.1(1│d)* D.11*│d* 三、判断题(每小题2分,共10分) ()给定一个文法,就能从结构上唯一地确定其语言,给定一种语言,就能唯一地确定其文法。 ()用二义性文法定义的语言也是二义性的。 ()正规式、正规文法、有穷自动机都是描述正规集的工具,它们的描述能力是等价的,它们之间是可以相互转换的。 ()采用自下而上分析法进行语法分析需要消除文法的递归性。 ()算符优先文法中,任何两个终结符对(a,b)在·>,<·和=·这三种关系中只有一种关系成立。

相关主题
文本预览
相关文档 最新文档