编译原理简答

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

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α

2

1…αm1

(A∈V

N , α1α

2

…αn, α

1

2

1…α

m

1∈ 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型文法的规则是:

u∈V+ x,y∈V*

xUy->xuy u∈V

n

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

u∈V*

U->u u∈V

n

没有什么要求,似乎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分)

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

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

编译原理期末复习

编译原理期末复习 鉴于编译原理马上就要期末考试,我将手中集中的一些资料上的题目进行了整理归类,每种类型题目给出了所涉及到的基本知识,然后对每类题目中的第一道例题进行了做法进行了讲解,剩下的例题请给大家作为练习,答案也都给出,希望对大家复习有所帮助,最后由于时间很紧,整理的有些仓促,整理中难免有遗漏或错误,请大家见谅。 注:下面出现的字母中,若无特别说明,小写英文字母为终结符,大写英文字母为非终结符,希腊字母为终结符与非终结符的任意组合。 1、简答题(或者名词解释) 下面涉及到的概念中,加下划线的都是在以往一些试卷中出现的原题,务必掌握。 注:这类题目老师说答案不会超过一百个字,否则写的再多也不给分,有些点到即可,不要重复啰嗦。(1)简述编译程序的概念及其构成 答:1)编译程序:它特指把某种高级程序设计语言翻译成等价的低级程序设计语言的翻译程序。 2)构成: (2)简述词法分析阶段的主要任务(也有可能问语法分析阶段主要任务)答:词法分析的任务是输入源程序,对源程序进行扫描,识别其中的单词符号,把字符串形式的源程序转换成单词符号形式的源程序。 语法分析的主要任务是对输入的单词符号进行语法分析(根据语法规则进行推导或者归约),识别各类语法单位,判断输入是不是语法上正确的程序 (3) 简述编译程序的构造过程(这个大家看看,是对(1)和(2)的综合) 答:1)构造词法分析器:用于输入源程序进行词法分析,输出单词符号; 2)构造语法分析器:对输入的单词符号进行语法分析,识别各类语法单位,判断输入是不是语法上正确的程序 3)构造语义分析和中间代码产生器:按照语义规则对已归约出的语法单位进行语义分析并把它们翻译成中间代码。 4)构造优化器:对中间代码进行优化。 5) 构造目标代码生成器:把中间的代码翻译成目标程序。 6) 构造表格管理程序:登记源程序的各类信息和编译各阶段的进展情况。 7)构造错误处理程序:对出错进行处理。 (4) 说明编译和解释的区别: 1)编译要程序产生目标程序,解释程序是边解释边执行,不产生目标程序; 2)编译程序运行效率高而解释程序便于人机对话。 (5)文法:描述语言语法结构的形式规则,一般用一个四元式表示: G=(V T,V N,S,P),其中V T:终结符集合(非空) V N:非终结符集合(非空),且V T ?V N=? S:文法的开始符号,S?V N P:产生式集合(有限)。

编译原理考试试卷

一、填空题(每空 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语言)构造词法分析程序。一般地,可以根据文法或状态转换图构造相应得状态矩阵,该状态矩阵连同控制程序一起便组成了编译器得词法分析程序;也可以根据文法或状态转换图直接编写词法分析程序。构造词法分析程序得另外一种途径就是所谓得词法分析程序得自动生成,即首先用正规式对语言中得各类单词符号进行词型描述,并分别指出在识别单词时,词法分析程

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

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

编译原理试题

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分,共20分) 1. 不同的编译程序关于数据空间的存储分配策略可能不同,但大部分编译中采用的方案有两种:静 态存储分配方案和动态存储分配方案,而后者又分为(1) 和 (2) 。 2. 规范规约是最(3)规约。 3. 编译程序的工作过程一般划分为5个阶段:词法分析、(4) 、语义分析与中间代码生成,代码优化及(5) 。另外还有(6)和出错处理。 4.表达式x+y*z/(a+b)的后缀式为 (7) 。 5.文法符号的属性有综合属性和 (8)。 6.假设二位数组按行存放,而且每个元素占用一个存储单元,则数组a[1..15,1..20]某个元素a[i ,j]的地址 计算公式为(9)。 7.局部优化是局限于一个(10)范围内的一种优化。 二. 选择题(1-6为单选题,7-8为多选题,每问2分,共20分) 1. 一个上下文无关文法G 包括四个组成部分:一组终结符,一组非终结符,一个( ),以及一组 ( )。 A . 字符串 B . 产生式 C . 开始符号 D . 文法 2.程序的基本块是指( )。 A . 一个子程序 B . 一个仅有一个入口和一个出口的语句 C . 一个没有嵌套的程序段 D . 一组顺序执行的程序段,仅有一个入口和一个出口 3. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于( )分析方法。 A . 自左向右 B . 自顶向下 C . 自底向上 D . 自右向左 4.在通常的语法分析方法中,( )特别适用于表达式的分析。 A . 算符优先分析法 B . LR 分析法 C . 递归下降分析法 D . LL (1)分析法 5.经过编译所得到的目标程序是( )。 A . 四元式序列 B . 间接三元式序列 C . 二元式序列 D . 机器语言程序或汇编语言程序 6. 一个文法所描述的语言是( );描述一个语言的文法是( )。 A . 唯一的 B . 不唯一的 C . 可能唯一,也可能不唯一 7. 如果在文法G 中存在一个句子,当其满足下列条件( )之一时,则称该文法是二义文法。 A . 其最左推导和最右推导相同 B . 该句子有两个不同的最左推导 C . 该句子有两个不同的最右推导 D . 该句子有两棵不同的语法树

编译原理考试

编译原理考试

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

一、判断对错:(对√;错 ;每小问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){ //扫描函数

《编译原理》期末考试复习题

《编译原理》期末考试复习题 一、是非题(请在括号内,正确的划√,错误的划×)(每个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.简单优先文法允许任意两个产生式具有相同右部。 () 三、填空题(每空1分,共10分) 1.编译程序的工作过程一般可以划分为词法分析,语法分析,语义分析,中间代码生成,代码优化等几个基本阶段,同时还会伴有__ ___和 ___ _。 表格管理出错处理_ 2.若源程序是用高级语言编写的,__ __是机器语言程序或汇编程序,则其翻译程序称为 __ __ 。 _目标程序_编译程序 3.编译方式与解释方式的根本区别在于__ __。 是否生成目标代码_ 4.对编译程序而言,输入数据是__ __, 输出结果是__ ___。 _源程序目标程序

5.产生式是用于定义__ __的一种书写规则。 _语法成分 6.语法分析最常用的两类方法是___ __和__ __分析法。 自上而下_自下而上 四、简答题(20分) 1. 什么是句子?什么是语言 ? 答:(1)设G是一个给定的文法,S是文法的开始符号,如果S x(其中x∈VT*),则称x是文法的一个句子。 (2)设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为:L(G)={x│S x,x∈VT*} 。 一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分) ×1.对于数据空间的存贮分配,FORTRAN采用动态贮存分配策略。() ×2.甲机上的某编译程序在乙机上能直接使用的必要条件是甲机和乙机的操作系统功能完全相同。() √3.递归下降分析法是自顶向上分析方法。() ×4.产生式是用于定义词法成分的一种书写规则。() √5.LR 法是自顶向下语法分析方法。() √6.在SLR (1 )分析法的名称中,S的含义是简单的。() ×7.综合属性是用于“ 自上而下” 传递信息。() ×8.符号表中的信息栏中登记了每个名字的属性和特征等有关信息,如类型、种属、所占单元大小、地址等等。() ×9.程序语言的语言处理程序是一种应用软件。() ×10.解释程序适用于COBOL 和FORTRAN 语言。() 三、填空题(每空1分,共10分) 1.一个句型中的最左简单短语称为该句型的___句柄__。

编译原理考试试卷

南京工业大学继续教育学院编译原理期末考试试卷 (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。 …

相关文档
最新文档