编译原理第二章(2-构造文法)
编译原理第6节课第二章

为一先天二义性语言。 为一先天二义性语言。 • CFL的先天二义性也是不可判定的。 的先天二义性也是不可判定的。 的先天二义性也是不可判定的
2.3.3 短语和句柄
• 问题:在自底向上 问题: 的语法分析中, 的语法分析中,对 于每一步直接归约, 于每一步直接归约, 应如何正确地确定 当前句型中应被归 约的最左子串 约的最左子串? 最左子串 F i E T + T F i T * F i E
E(2) + T(2)
• 但是 对一句型而言,其直接短语可能不唯一。 但是,对一句型而言,其直接短语可能不唯一。 对一句型而言 为了让分析能够机械地进行,我们只考虑最左 为了让分析能够机械地进行,我们只考虑最左 归约。 归约。 E E T F i + T F i T * F i E + T F i
* +
归约时被替换子串的选择
• 从句型 η=E+T*F+i 的语法树可知 E+T 绝不是 的语法树可知, 它的一个直接短语 因为虽然 它的一个直接短语,因为虽然 E→E+T 是 G2[E] 直接短语 的一个产生式,但不存在从 的推导。 的一个产生式 但不存在从 E 到 E*F+i 的推导。 E E(1) E(2) + T(3) T(2) * F(3) + T(1) F(1) i
E + T F T * F i
i • 对一语法树而言,其构造过程不同对应了不 对一语法树而言, 同的推导(归约)过程。 同的推导(归约)过程。 推导
文法的二义性
• 存在这样的文法 ,其某个句子 w ∈ L(G) , 存在这样的文法G, 可对应结构不同的语法树, 可对应结构不同的语法树,即 w 对应了多个 不同的最左(右)推导,这类文法称为二义 不同的最左* +
(完整word版)编译原理课后答案

第二章 高级语言及其语法描述4.令+、*和↑代表加,乘和乘幂,按如下的非标准优先级和结合性质的约定,计算1+1*2↑2*1↑2的值:(1) 优先顺序(从高至低)为+,*和↑,同级优先采用左结合。
(2) 优先顺序为↑,+,*,同级优先采用右结合。
解:(1)1+1*2↑2*1↑2=2*2↑1*1↑2=4↑1↑2=4↑2=16 (2)1+1*2↑2*1↑2=1+1*2*1=2*2*1=2*2=46.令文法G6为 N →D|NDD →0|1|2|3|4|5|6|7|8|9 (1) G6 的语言L (G6)是什么?(2) 给出句子0127、34和568的最左推导和最右推导。
解:(1)L (G6)={a|a ∈∑+,∑=﹛0,1,2,3,4,5,6,7,8,9}}(2)N =>ND => NDD => NDDD => DDDD => 0DDD => 01DD => 012D => 0127 N => ND => N7=> ND7=> N27=> ND27=> N127=> D127=> 0127 N => ND => DD => 3D => 34 N => ND => N4=> D4 =>34N => ND => NDD => DDD => 5DD => 56D => 568 N => ND => N8=> ND8=> N68=> D68=> 5687.写一个文法,使其语言是奇数集,且每个奇数不以0开头。
解:A →SN, S →+|-|∑, N →D|MDD →1|3|5|7|9, M →MB|1|2|3|4|5|6|7|8|9 B →0|1|2|3|4|5|6|7|8|9 8. 文法:E T E T E T TF T F T F F E i→+-→→|||*|/()| 最左推导:E E T T TF 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 TF 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 ⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒⇒⇒⇒⇒+⇒+⇒+⇒+⇒+⇒+⇒+**********()*()*()*()*()*()*()*()语法树:/********************************EE FTE +T F F T +iiiEEFTE-T F F T -iiiEEFT+T F FTiii*i+i+ii-i-ii+i*i*****************/9.证明下面的文法是二义的:S → iSeS|iS|I解:因为iiiiei 有两种最左推导,所以此文法是二义的。
编译原理练习题及答案

第一章练习题(绪论)一、选择题1.编译程序是一种常用的软件。
A) 应用B) 系统C) 实时系统D) 分布式系统2.编译程序生成的目标代码程序是可执行程序。
A) 一定B) 不一定3.编译程序的大多数时间是花在上。
A) 词法分析B) 语法分析C) 出错处理D) 表格管理4.将编译程序分成若干“遍”将。
A)提高编译程序的执行效率;B)使编译程序的结构更加清晰,提高目标程序质量;C)充分利用内存空间,提高机器的执行效率。
5.编译程序各个阶段都涉及到的工作有。
A) 词法分析B) 语法分析C) 语义分析D) 表格管理6.词法分析的主要功能是。
A) 识别字符串B) 识别语句C) 识别单词D) 识别标识符7.若某程序设计语言允许标识符先使用后说明,则其编译程序就必须。
A) 多遍扫描B) 一遍扫描8.编译方式与解释方式的根本区别在于。
A) 执行速度的快慢B) 是否生成目标代码C) 是否语义分析9.多遍编译与一遍编译的主要区别在于。
A)多遍编译是编译的五大部分重复多遍执行,而一遍编译是五大部分只执行一遍;B)一遍编译是对源程序分析一遍就立即执行,而多遍编译是对源程序重复多遍分析再执行;C)多遍编译要生成目标代码才执行,而一遍编译不生成目标代码直接分析执行;D)多遍编译是五大部分依次独立完成,一遍编译是五大部分交叉调用执行完成。
10.编译程序分成“前端”和“后端”的好处是A)便于移植B)便于功能的扩充C)便于减少工作量D)以上均正确第二章练习题(文法与语言)一、选择题1.文法 G 产生的 (1) 的全体是该文法描述的语言。
A.句型B. 终结符集C. 非终结符集D. 句子2.若文法 G 定义的语言是无限集,则文法必然是 (2) A递归的 B 上下文无关的 C 二义性的 D 无二义性的3. Chomsky 定义的四种形式语言文法中, 0 型文法又称为(A)文法;1 型文法又称为(C)文法;2 型语言可由(G) 识别。
A 短语结构文法B 上下文无关文法C 上下文有关文法D 正规文法E 图灵机F 有限自动机G 下推自动机4.一个文法所描述的语言是(A);描述一个语言的文法是(B)。
编译原理第二章 文法和语言资料

第二章文法和语言本章讲述目前广泛使用的上下文无关文法。
即用上下文无关文法作为程序设计语言语法的描述工具。
阐明语法的一个工具是文法。
本章将介绍文法和语言的概念。
本章重点:上下文无关文法及其句型分析中的有关问题。
第一节文法的直观概念当我们表述一种语言时,无非是说明这种语言的句子,如果语言只含有有穷多个句子,则只需列出句子的有穷集就行了,但对于有无穷句子的语言来讲,存在着如何给出它的有穷表示的问题。
以自然语言为例,人们无法列出全部句子,但是人们可以给出一些规则,用这些规则来说明(或者定义)句子的组成结构,比如:“我是大学生”。
是汉语的一个句子。
汉语句子可以是由主语后随谓语而成,构成谓语的是动词和直接宾语,我们采用EBNF来表示这种句子的构成规则:〈句子〉∷=〈主语〉〈谓语〉〈主语〉∷=〈代词〉|〈名词〉〈代词〉∷=我|你|他〈名词〉∷=王明|大学生|工人|英语〈谓语〉∷=〈动词〉〈直接宾语〉〈动词〉∷=是|学习〈直接宾语〉∷=〈代词〉|〈名词〉“我是大学生”的构成符合上述规则,而“我大学生是”不符合上述规则,我们说它不是句子。
这些规则成为我们判别句子结构合法与否的依据。
一旦有了一组规则以后,我们可以按照如下方式用它们去推导或产生句子。
我们开始去找∷=左端的带有〈句子〉的规则并把它表示成∷=右端的符号串,这个动作表示成:〈句子〉⇒〈主语〉〈谓语〉,然后在得到的串〈主语〉〈谓语〉中,选取〈主语〉或〈谓语〉,再用相应的规则∷=右端代替之。
比如,选取了〈主语〉,并采用规则〈主语〉∷=〈代词〉,那么得到:〈主语〉〈谓语〉⇒〈代词〉〈谓语〉,重复做下去,我们得到句子:“我是大学生”的全部动作过程是:〈句子〉⇒〈主语〉〈谓语〉⇒〈代词〉〈谓语〉⇒我〈谓语〉⇒我〈动词〉〈直接宾语〉⇒我是〈直接宾语〉⇒我是〈名词〉⇒我是大学生符号⇒的含义是,使用一条规则,代替⇒左边的某个符号,产生⇒右端的符号串。
显然,按照上述办法,不仅生成“我是大学生”这样的句子,还可以生成“王明是大学生”,“王明学习英语”,“我学习英语”,“他学习英语”,“你是工人”,“你学习王明”等几十个句子。
编译原理第二章习题答案

第2章习题解答1.文法G[S]为:S->Ac|aBA->abB->bc写出L(G[S])的全部元素[答案]S=>Ac=>abc或S=>aB=>abc所以L(G[S])={abc}2.文法G[N]为:N->D|NDD->0|1|2|3|4|5|6|7|8|9G[N]的语言是什么?[答案]G[N]的语言是V。
V={0,1,2,3,4,5,6,7,8,9}N=>ND=>NDD.... =>NDDDD...D=>D……D3.已知文法G[S]:Sf dAB Af aA|a B|bB问:相应的正规式是什么?G[S]能否改写成为等价的正规文法? [答案]正规式是daa*b* ;相应的正规文法为(由自动机化简来):G[S]:S —dA A —a|aB B —aB|a|b|bC C —bC|b也可为(观察得来):G[S]:S —dA A —a|aA|aB B —bB| &4.已知文法G[Z]:Z->aZb|ab写出L(G[Z])的全部元素。
[答案]Z=>aZb=>aaZbb=>aaa..Z...bbb=> aaa..ab...bbbL(G[Z])={a n b n|n>=1}5.给出语言{a n b n c1 n>=1,m>=0}的上下文无关文法。
[分析]本题难度不大,主要是考上下文无关文法的基本概念。
上下文无关文法的基本定义是:A-> B ,A € Vn ,B€( VnU Vt) *,注意关键问题是保证a n b n的成立,即“ a与b的个数要相等”,为此,可以用一条形如A->aAb|ab的产生式即可解决。
[答案]构造上下文无关文法如下:S->AB|AA->aAb|abB->Bc|c[扩展]凡是诸如此类的题都应按此思路进行,本题可做为一个基本代表。
基本思路是这样的:要求符合a n b n c m,因为a与b要求个数相等,所以把它们应看作一个整体单元进行,而c m做为另一个单位,初步产生式就应写为S->AB,其中A推出a n b n,B推出c m。
《编译原理》第2章 编译基础-形式语言与有穷自动机

句型、推导
G[E]: E→E+T|T T→T*F|F F→(E)|a
对于句子a+a*a 有不同 的推导
EE+T T+T F+T a+T a+T*F a+F*F a+a*F a+a*a
EE+T E+T*F E+T*a E+F*a E+a*a T+a*a F+a*a a+a*a
整理课件
例:奇偶测试器
0
0
1
q0
q1
∈
1
自动机:M=(Q,∑ ,δ ,q0,Z)
Q={ q0, q1}
∑ ={0,1}
q0=q0 Z={q1}
整理课件
映射函数:
δ( q0,0)= q0 0
0
δ( q0,1)= q1
1
δ( q1,0)= q1 q0
q1
δ( q1,1)= q0
1
例:000110001
整理课件
第四节 正规文法与有穷自动机 1、正规文法 产生的语言的推导 例:文法 G=(VN,VT,P,S) 其中: VN={A,B,C}
VT={a,b,c} S=A P:A →aB A →aA
B →bB B →bC C →cC C →c
整理课件
A=>aA=>aaA=>…..=>aa…aB =>aa…abB=>aa…abb…bC =>aa…abb…bcC=> aa…abb…bccC => aa…abb…bcc…c
D→ε
Aa→bD
自然语言属于上下文有关文法
整理课件
文法的类型
《编译原理》课后习题答案第二章

4、试为文法G[P]:
P∷=begin S end S∷=A|C
A∷=V:=E C∷=if E then S
E∷=V E∷=E+V V∷=i
采用某种程序设计语言构造递归下降识别程序。
解:由于文法存在左递归,进行文法等价变换,得到等价文法G′[P]:
步骤三检查可得f的值与原有的优先矩阵一致所以上表函数即为所求优先函数bell有向图法形式化步骤一构造布尔矩阵b步骤二使用warshall算法构造布尔矩阵b1521步骤三则优先函数为
第二章
习题1
6.答:省略表示法:{1.3,1.33,1.333…};描述表示法:{1.3i|i=1,2,3…}
7.答:x+={0,12,123,1234…};
最小化:
(2)由e构造转换系统:
去ε弧及无用状态和死状态:
因为现在只有一个状态,所以无需再最小化,此时就是最小化.
13.解:建立方程组如下:
W=Ua+Vb ①
U=Va+c ②
V=Ub+c ③
把③代入②得,U=(Ub+c)a+c
=Uba+ca+c
把它改写成U=(ca+c){ba},因此U=(ca|c){ba} ④
follow(E)={#,)}
follow(E′)={#,)}
follow(T)={#,),+,-}
follow(T′)={#,),+,-}
follow(F)={*,/,#,),+,-}
识别输入符号串i*i-(i+i)/i,则识别过程
步骤 栈 输入 输出
0 #E i*i-(i+i)/i# E∷=TE′
编译原理教程课后习题答案第二章

第二章 词法分析2.1 完成下列选择题:(1) 词法分析器的输出结果是。
a. 单词的种别编码b. 单词在符号表中的位置c. 单词的种别编码和自身值d. 单词自身值(2) 正规式M1和M2等价是指。
a. M1和M2的状态数相等b. M1和M2的有向边条数相等c. M1和M2所识别的语言集相等d. M1和M2状态数和有向边条数相等(3) DFA M(见图2-1)接受的字集为。
a. 以0开头的二进制数组成的集合b. 以0结尾的二进制数组成的集合c. 含奇数个0的二进制数组成的集合d. 含偶数个0的二进制数组成的集合【解答】(1) c (2) c (3) d图2-1 习题2.1的DFA M2.2 什么是扫描器?扫描器的功能是什么?【解答】 扫描器就是词法分析器,它接受输入的源程序,对源程序进行词法分析并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。
通常是把词法分析器作为一个子程序,每当词法分析器需要一个单词符号时就调用这个子程序。
每次调用时,词法分析器就从输入串中识别出一个单词符号交给语法分析器。
2.3 设M=({x,y}, {a,b}, f, x, {y})为一非确定的有限自动机,其中f 定义如下:f(x,a)={x,y} f {x,b}={y}f(y,a)=Φ f{y,b}={x,y}试构造相应的确定有限自动机M ′。
【解答】 对照自动机的定义M=(S,Σ,f,So,Z),由f 的定义可知f(x,a)、f(y,b)均为多值函数,因此M 是一非确定有限自动机。
先画出NFA M 相应的状态图,如图2-2所示。
图2-2 习题2.3的NFA M 用子集法构造状态转换矩阵,如表表2-1 状态转换矩阵1b将转换矩阵中的所有子集重新命名,形成表2-2所示的状态转换矩阵,即得到 M ′=({0,1,2},{a,b},f,0,{1,2}),其状态转换图如图2-3所示。
表2-2 状态转换矩阵将图2-3所示的DFA M ′最小化。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<数字>→0|1|2|3|4|5|6|7|8|9
2.3.3 和语言有关的几个概念
1.直接推导
如果α → β是文法G的一条产生式,而γ ,δ是(VT∪VN)*中任意 一个符号串,则将α → β作用于符号串γ α δ上得到符号串γ β δ ,称 符号串γ β δ 是符号串γ α δ的直接推导,记为 γ α δ γβδ 直接推导的逆过程称为直接归约,即由符号串γ β δ可直接归约到γ α δ 。
G4[<无符号整数>]: <无符号整数>→<数字>|<无符号整数><数字> <数字>→0|1|2|3|4|5|6|7|8|9
2.3
2型和3型 。
文法的分类
乔姆斯基(Chomsky)把文法分成四种类型 ,即0型、1型、
这四类文法的区别在于:对产生式规则的形式上施加不同 的限制。从0型到3型对产生式的要求越来越严格,而其描述语 言的能力是逐步减弱的。
符号串集合的正闭包A+ 与 闭包A* A是集合 A的正闭包 A+= A1∪A2 ∪ …… ∪ An A的闭包 A*= A0 ∪ A1∪A2 ∪ …… ∪ An = {ε} ∪ A+ A={a,b} A+ = { a, b, aa, ab, ba, bb, aaa, aab,…..} A* = {ε, a , b, aa , ab, ba, bb, aaa, aab,…..} A+表示A上元素a,b构成的所有符号串的集合。
2.3
文法的分类
0型文法(无限制文法或短语结构文法)
产生式为 : α→β 其中:α (VN∪VT)* 且至少包含一个非终结符 β (VN∪VT)*, 0型文法没有其他任何限制条件,故称无限制文法。 0型文法所生成的语言称为无限制语言。
例如 有0型文法G=(VN,VT,P,S) ,其中 P={S→0AB 1B→0 B→SA|01 A1→SB1 A0→S0B} 其描述的0型语言为 L(G[S])={ }
8.规则左递归与规则右递归
如果文法的产生式呈 U→U… 的形式,则称其为 规则左递归。 如果文法的产生式呈 U→…U 的形式,则称其为 规则右递归。 规则左(右)递归,也称直接左(右)递归。
9.文法左递归与文法右递归
+ 如果文法中有推导 U U… ,则称其为文法左递归,也称
间接左递归。
+ 如果文法中有推导 U …U ,则称其为文法右递归,也称
符号串的方幂 设x是符号串,xn 是x自身连结n次。并且x0= ε 则 x1= x x2= xx xn= xx……x= x xn-1 n个 例如, 设 x=abc,则 x1= abc x2= abcabc ……
符号串集合的方幂 A是符号串的集合, An 是集合A自身n次相乘, 并且A0= {ε} 则 A 1= A A2= AA An= AA……A= A An-1 (n>0) n个A 例1 A={a,b} A0= {ε} A1 = {a,b} A2= {aa,ab,ba,bb} A3= {aa,ab,ba,bb}· {a,b} = { aaa,aab,aba,abb,baa,bab,bba,bbb }
例如:1)<句子> → <主语> <谓语> 2)<主语> → <冠词> <名词> 3)<谓语> → <动词> <宾语> 4)<宾语> → <冠词> <名词> 5)<名词> → man | car 6)<冠词> → the 7)<名词> → drive The man drive the car The car drive the man 一组规则规定一个语言 The car drive the car 的语法结构 The man drive the man
【例1】设有文法G[S]: S→01∣0S1
S => 01 S => 0S1 => 00S11 => 000111
S,01,0S1,00S11,000111 都是句型。 01和000111 又是句型。
【例2】设有文法G[E]: E→E+T∣E-T∣T T→T*F∣T/F∣F F→(E)∣I
·
文法的实用限制
形式语言理论
由Chomsky于1956年首先提出。
是指由数学方法——形式化方法研究自然语言(如英
语)和人工语言(如程序设计语言)的语法的理论。
目前在自然语言的翻译、计算机语言的描述和转换、
编译程序的构造、模式识别等方面有广泛的应用。
2.1 语言成分的基本概念
一个语言的成分包括字母表(Alphabet),文法(G
间接右递归。
递归举例
G1[S]: S→Sa|Ab|b|c A→Bc|a B→Sb|b G2[S]: S→a|ε|aTb
T→S, T |S 直接右递归
直接左递归 G3[S]: S→Aa|c
A→Bc|a B→Sb|b
间接左递归
2.3.3 和语言有关的几个概念 文法递归的作用:
用较少的产生式产生无穷多个句子,实现“用有穷表示无穷”。
直接推导举例
例1 文法G[E]: E →E+T|T T →T*F|F F →(E)|i
* T F * T*F F
例2 见P14
2.3.3 和语言有关的几个概念
2. 推导
设α0、α1、…αn均为(VT∪VN)*中的符号串,且有 α0α1α2…αn-1αn 则称以上序列是长度为n的推导,即α0可经过n步推导得到αn。
2.3 文法和语言的形式定义
2.3.1 文法的有关概念
1.终结符号 终结符号是组成语言的基本符号,如保留字、标识符、常数、 运算符、界限符等。终结符号是语言的不可再分的基本符号。终 结符号形成的集合记为VT。一般用小写字母表示。 2.非终结符号 非终结符号用来表示语言的语法成分(或语法范畴、语法单 位),例如“赋值语句”。非终结符号所形成的集合记为VN。一 般用大写字母来表示。 VT∩VN=
2.3.3 和语言有关的几个概念 P15
4.
句型
* * 设有文法G[S],如果 S u ,且 u∈ (VT∪VN)
则称符号串u
为文法G[S]的句型。由规范推导(最右推导)得到的句型称为规范句型.
5.
句子
,且 uVT* ,则称符号串u为
* 设有文法G[S],如果 S u
文法G[S]的句子。
由此可看出: 句型包含句子
前述内容回顾
· 编译程序 · 编译方式与解释方式的根本区别
· 编译程序的工作过程
· 编译程序的结构
· 编译程序的组织方式
· 编译程序的构造
第二章 文法和语言的基本知识
本章主要介绍形式语言理论中的一些最 基本的概念和基础知识,它是学习以后各章
节的基石。
本章内容简介
· 文法的形式定义 · 语言的形式定义 · 为语言构造文法与由文法推出语言 · 语法树及文法的二义性 · 文法和语言的分类
rammar)以及它的语义。 字母表是符号的有穷集,而符号构成了语言中的句子。 语法是结构规则的有穷集,这些规则定义了句子中符号 的合法上下文。 语义通常是操作规则的有穷集,这些规则定义了用该语 言编写的任何程序在某个计算机上执行的操作性效果。
2.2.1 字母表与符号串
1. 字母表
字母表是元素的有穷非空的集合。 字母表中的元素称为符号。 例如{a,b,……,y,z},{0,1}等。 常用∑ 来表示 。 注意: 字母表中至少包含一个元素。元素可以是字母、数字 或其他符号。
【例1】设有文法G[N1]: N1→N N→ND∣D D→0∣1∣2
N1 =>N =>ND =>N2 =>D2 =>12 N1 =>N =>ND =>DD =>1D =>12 最右推导 最左推导 不是最左推导 也不是最右推导
N1 =>N =>ND =>DD =>D2 =>12
【例2】设有文法G[E]: E→E+T∣E-T∣T T→T*F∣T/F∣F F→(E)∣i
*
2.3.3 和语言有关的几个概念
P17
7
直接递归与间接递归
如果文法的产生式呈U→…U…形式,则称其为规则递归,也
称直接递归。(U为非终结符)
* 如果文法中有推导 U …U… ,则称其为文法递归,也称
间接递归。
所谓递归即,规则的左部或右部具有相同的非终结符。
*
2.3.3 和语言有关的几个概念
2.2.2符号串运算
符号串的连接 设x和y是符号串,则称xy是他们的连接。 例如:x=abc , y=1a 则 xy=abc1a , yx=1aabc 即 |x|=3, |y|=2, |xy|=3+2=5 注意:对任意一个符号串x 我们有εx = x ε= x
符号串集合的乘积 设A和B是符号串的集合,则A和B的乘积定义为 AB={xy | x∈A,y ∈B} 例如: A={a,b} B={c,d} 则AB={ac,ad,bc,bd} 集合的乘积是满足于x∈A , y ∈B 的所有符号串xy 所构成的集合。 注意: 1、对于任何集合A , 有{ε}A = A {ε}= A 2、 {ε}= Ø Ø≠ { }
=>(T+i)*i-F =>(F+i)*i-F =>(i+i)*i-i
2.3.3 和语言有关的几个概念 6. 语言
文法G[S]产生的所有句子的集合称为G所定义的语言,记为L(G[S]) L(G[S])={u |