编译原理文法__文法化简
编译原理课后习题答案(清华大学_张素琴)复习例题
编译原理复习例题(有些内容没有覆盖,比如优化、SLR(1)、LR(1)、LALR(1)等。
但要求至少要按照作业题的范围复习。
)一选择题1.编译的各阶段工作都涉及。
[A]词法分析[B]表格管理 [C]语法分析 [D]语义分析2.型文法也称为正规文法。
[A] 0 [B] 1 [C] 2 [D] 33.文法不是LL(1)的。
[A]递归 [B]右递归 [C]2型 [D]含有公共左因子的4.文法E→E+E|E*E|i的句子i*i+i*i有棵不同的语法树。
[A] 1 [B] 3 [C] 5 [D] 75.文法 S→aaS|abc 定义的语言是。
[A]{a2k bc|k>0} [B]{a k bc|k>0}[C]{a2k-1bc|k>0} [D]{a k a k bc|k>0}6.若B为非终结符,则 A→α.Bβ为。
[A]移进项目 [B]归约项目 [C]接受项目 [D]待约项目7.同心集合并可能会产生新的冲突。
[A]二义 [B]移进/移进 [C]移进/归约 [D]归约/归约8.代码优化时所依据的是。
[A]语法规则 [B]词法规则[C]等价变换规则 [D]语义规则9.表达式a-(-b)*c的逆波兰表示(@为单目减)为。
[A]a-b@c* [B]ab@c*- [C]ab@- [D]ab@c-*10.过程的DISPLAY表是用于存取过程的。
[A]非局部变量[B]嵌套层次 [C]返回地址 [D]入口地址二填空题1.词法分析阶段的任务式从左到右扫描字符流,从而逐个识别一个个的单词。
2.对于文法G[E]:E→T|E+T T→F|T*F F→P^F|P P→(E)|i,句型T+T*F+i的句柄是。
3.最右推导的逆过程称为规范归约,也称为最左归约。
4.符号表的每一项是由名字栏和两个栏目组成。
在目标代码生成阶段,符号表是的依据。
三判断题(认为正确的填“T”,错的填“F”)【】1.同心集的合并有可能产生“归约/归约”冲突。
编译原理第三章_有穷自动机
例 过河问题 分析(续)
初始状态:MWGC-φ;终止状态:φ-MWGC。 g
MWGC-φ
WC-MG
问题:
6
例 过河问题 状态转换图
起始 g
MWGC-φ g
g φ-MWGC
g
7
WC-MG
m
m MWC-G
w
w
c
C-MWG
c W-MGC
g
g
MGC-W c
MG-WC
w
m
c G-MWC
m
gg MWG-C
+dd. ddd;
输入符号串
数字 数字
SB
.
数字
+
A
H
-.
数字
.G
接收:若扫描完输入串, 且在一个终止状态上结 束。
数字 阻塞:若扫描结束但未 停止在终止状态上;或 者为能扫描完输入串 (如遇不合法符号)。
不完全描述:某些状态 对于某些输入符号不存 在转换。
练习:+34.567 .123 3.4.5
w
有穷自动机(FA)
数字系统:可以从一个状态移动到另一个状态;每次 状态转换,都上由当前状态及一组输入符号确定的;可以 输出某些离散的值集。
FA:一个状态集合;状态间的转换规则;通过读头来 扫描的一个输入符号串。
读头:从左到右扫描符号串。移动(扫描)是由状态 转换规则来决定的。
8
读头
一个FA的例子
(3)运行: 串f(,Q,且t1tt21)∈= Σf(,f(Qt1,t2t1∈), Σt2*),其中Q∈K, t1t2为输入字符
17
例3
题:试证abba可为例1的DFA M所识别(所接受)。
编译原理习题解答参考
编译原理习题解答参考1.计算机执行用高级语言编写的程序的途径有哪些?它们之间主要区别是什么?答:计算机执行用高级语言编写的程序途径有两种:解释方式和编译方式。
解释方式下直接对源程序进行解释执行,并得到计算结果,特点是计算机并不事先对高级语言进行全盘翻译将其全部变为机器代码,而是每读入一条语句,就用解释器将其翻译为机器代码,予以执行,然后再读入下一条高级语句,翻译为机器代码,再执行,如些反复,即边翻译边执行;编译方式下对源程序的执行需要经过翻译阶段和运行阶段才能得到计算结果,其特点是计算机事先对高级语言进行全盘翻译将其全部变为机器代码,再统一执行,即先翻译后执行。
简单来说解释方式不生成目标代码,编译方式生成目标代码。
2.名字与标识符的区别是什么?答:在程序设计语言中,凡是以字母开头的有限个字母数字的序列都是标识符。
当给予一个标识符确切的含义后,该标识符就叫做一个名字。
标识符是一个没有意义的字符序列,而名字有确切的含义,一个名字代表一个存储单元,该单存放该名字的值。
此外,名字还有属性(如类型和作用域等)。
如objectint, 作为标识符,它没有任何含义,但作为名字,它可能表示变量名、函数名等。
3.许多编译程序在真正编译之前都要进行预处理操作,请问预处理的目的是什么?预处理主要做哪些工作?答:在源程序中有时存在多个连续的空格、回车、换行及注释等编辑性字符,它们不是程序的必要组成部分,它们的意义只是改善程序的易读性和易理解性。
为了降低编译程序的处理负担,许多编译程序在编译之前通过预处理工作将这些部分删除。
预处理的主要工作是对源程序进行格式方面的规范化处理,如去掉注释、将回车换行变成空格、将多个空格替换为一个空格等。
P35 4,6,7,8,9,11(1,2)4.答:256,86.(1)答:所产生的语言是:所有正整数集,且可以以0打头;0127,34,568的推导略。
7.答:S→ABD|AD|DA→2|4|6|8|DB→0|A|B0|BAD→1|3|5|7|98.答:略。
2021-2022学年编译原理之形式语言基础(2)
2.4 两种特性文法
设有文法:G(Z)=(VN,VT,Z,P)
2.4.1 递归文法
【定义】
设 若
AA∈=+V>N,xAxy,,y:∈称(V文N+法VT)具*,有则递;归性;
特别: 若 A -> A ,称文法具有直接左递归性; A -> A ,称文法具有直接右递归性。
如:G1(S): S -> S b | a --- 直接左递归文法;
∵ S->a(A|)bc
∴ S->aAbc|abc
∵ A->d(A|)(B|)e ∴ A->dABe|dBe|dAe|de
∵ B->(A|)
∴ B->A
※ 综合 G`(S) : S->aAbc|abc|bS A->dABe|dBe|dAe|de B->A|b
2.5.2 文法变换方法3
Ⅲ 常用的三种文法变换方法:
D -> f ; G -> b ;
⒊ 删除不可用产生式: ∵ VUS={ S,B,A }; ∴ 应删除 D,G(连同其产生式)
※ 整理后得:G``(S):
S -> Be A -> Ae | e B -> Af
2.5.2 文法变换方法2
Ⅱ 删除 产生式
※假定 文法 G(Z) ; 【算法】
∈ L(G)
2.5.2 文法变换方法
在实际工作中,人们总是希望定义一种语言的 文法尽可能地简单。另外,某些常用的语法分析技 术也会对文法提出一定的要求或限制;为了适应上 述要求,有时需要对文法进行必要的改写。当然改 写后的文法要与原文法等价—通常称为文法变换。
这里重点介绍三类变换:
⑴ 删除无用的产生式(文法的化简); ⑵ 删除ε产生式; ⑶ 常用的三种文法变换方法:
编译原理模拟试题1和2的答案
编译原理模拟试题1和2的答案⼀、是⾮题1、算符优先关系表不⼀定存在对应的优先函数。
( 错)2、数组元素的地址计算与数组的存储⽅式有关。
( 错)3、仅考虑⼀个基本块,不能确定⼀个赋值是否真是⽆⽤的。
( 正确)4、每个⽂法都能改写为LL(1)⽂法。
( 正确)。
5、对于数据空间的存贮分配,FORTRAN采⽤动态贮存分配策略。
( 错)⼆、填空题1、从功能上说,程序语⾔的语句⼤体可分为执⾏性语句和说明性语句两⼤类。
2、扫描器的任务是从源程序中识别出⼀个个单词符号。
3、所谓最右推导是指:任何⼀步αβ都是对α中最右⾮终结符进⾏替换的。
4、语法分析最常⽤的两类⽅法是⾃上⽽下和⾃下⽽上分析法。
5、⼀个上下⽂⽆关⽂法所含四个组成部分是⼀组终结符号,⼀组⾮终结符号、⼀个开始符号、⼀组产⽣式。
6、所谓语法制导翻译⽅法是为每个产⽣式配上⼀个翻译⼦程序,并在语法分析的同时执⾏这些⼦程序。
7、符号表中的信息栏中登记了每个名字的有关的性质,如类型、种属、所占单元⼤⼩、地址等等。
8、⼀个过程相应的DISPLAY表的内容为现⾏活动记录地址和所有外层最新活动记录的地址。
9、常⽤的两种动态存贮分配办法是栈式动态分配和堆式动态分配10、产⽣式是⽤于定义语法范畴的⼀种书写规则。
三、名词解释1.遍--指编译程序对源程序或中间代码程序从头到尾扫描⼀次并作有关的加⼯处理,⽣成新的中间结果或⽬标程序。
2.⽆环路有向图(DAG)--如果有向图中任⼀通路都不是环路,则称庐有向图为⽆环路有向图,简称DAG。
3.语法分析--按⽂法的产⽣式识别输⼊的符号串是否为⼀个句⼦的分析过程。
4.短语--令G是⼀个⽂法。
S划⽂法的开始符号,假定αβδ是⽂法G的⼀个句型,如果有SαAδ且AB,则称β是句型αβ相对⾮终结符A的短语。
5.后缀式--⼀种把运算量写在前⾯,把算符写在后⾯的表⽰表达式的⽅法。
四、简述题1、考虑下⾯程序…………Var a:integer;Procedure S(X);Var X:integer;Begina:=a+1;X:=a+XBegina:=5;S(a);Print(a)End.试问:若参数传递⽅式分别采取传名和传值时,程序执⾏后输出a的值是什么?答:传名:a=12传值:a=62、画出Pascal中实数(不带正负号,可带指数部分)的状态转换图。
编译原理第5章 LL(1)文法及其分析程序
}
else error( )
}
}
27
5.2 预测分析程序(Predictive
parser)无回溯的自顶向下分析程序
特征——根据下一个(几个)输入符号为当前要处理 的非终结符选择产生式
要求——文法是LL(1)的 第一个L 从左到右扫描输入串 第二个L 生成的是最左推导 1 向前看一个输入符号(lookahead)
第5章 LL(1)文法及其分析程序
5.1 自上而下的语法分析 5.2 预测分析程序
递归下降子程序 表驱动的预测分析程序 5.3 LL(1)分析程序的生成
LL(1)文法 FIRST和FOLLOW集 定义和计算 5.4 非LL(1)文法的改造
1
5.1自上而下的语法分析
1语法分析概念 2自上而下的语法分析的一般过程 3自上而下的语法分析面临的问题
到分析结束。
5
分析算法分类
分析算法可分为:
自上而下分析法:
从文法的开始符号出发,寻找与输入符号 串匹配的推导,或者说,为输入串寻找一 个最左推导。
自下而上分析法:
从输入符号串开始,逐步进行归约,直至 归约到文法的开始符号。
6
两种方法反映了语法树的两种构 造过程。
自上而下方法是从文法符号开始,将它做为语法
SaASaSbASaabASaabbaSaabbaa
SaASaSbASaSbAaaabAaaabbaa
4
语法分析
在语言的编译实现中,把句子分析的过程称
为语法分析,即完成这个任务的程序称为 语法分析程序或称为识别程序。分析算法 又称识别算法。 从左到右的分析算法,即总是从左到右地识 别输入符号串,首先识别符号串中的最左 符号,进而依次识别右边的一个符号,直
《编译原理》教学大纲
《编译原理》教学大纲大纲说明课程代码: 3225003总学时: 64 学时(讲课 48 学时,实验16 学时)总学分: 4课程类别:学科基础课适用专业 : 计算机科学与技术(专业)预修要求: C 语言程序设计、 C++ 程序设计、数据结构课程的性质、任务及地位:《编译原理》是计算机科学与技术专业的一门重要基础课。
通过对该课程的学习,使学生掌握编译过程中的相关原理和编译技术,让学生能初步进行编译程序的开发和维护,同时促进提高学生开发软件的能力。
教学目的与基本要求:本课程的目的,通过向学生讲述编译系统的结构、工作流程及编译程序各部分的设计原理和实现技术,使学生既掌握编译技术理论的基础与基本知识,也具有设计、实现、分析和维护编译程序等方面的初步能力。
本课程理论性较强。
因授课对象为工科学生,所以在强调编译系统的构造原理和实现方法的同时,为培养学生的实际工作能力,通过上机实践进一步加深学生对课堂教学内容的理解。
目的是要使学生牢固掌握相关的基本理论和基本方法,并能初步利用上述理论和方法解决简单实际问题。
教学方法和教学手段的建议:在教学方法上,贯彻理论联系实际、“精讲、多练”的原则,进行案例式、启发式的教学,对于一些实际性较强的问题要多采用课堂讨论等方式,以提高学生的思辨能力和学习的主动性;引导学生读书、理解、体悟、运用相结合;提高学生的学习兴趣与热情,培养与发挥学生的提出、分析及解决问题的能力。
教学手段:运用多媒体教学手段 +黑板 +上机实验的手段。
采取课堂讲授、课堂讨论、课后练习与自学等形式。
大纲的使用说明:大纲对课程性质、目的等作简单说明,同时列出各章节要学习的知识点、重点、难点,便于教学时教授重点的安排和学生自学安排。
大纲正文第一章引论学时: 4 学时(讲课 4 学时,实验 0 学时)了解编译的概念;理解编译程序的各组成部分及功能。
本章讲授要点:介绍程序设计语言与编译程序间的关系,主要内容包括:各级程序设计语言的定义、源程序的执行、编译程序的构造、编译程序的分类、形式语言理论与编译实现技术的联系。
编译原理习题课(词法分析)
+
二.判断题
(×)1.编译程序的输入是高级语言程序,输出是 机器语言程序. (×)2.每一个编译程序都由词法分析,语法分析, 语义分析,代码优化,代码生成五部分组成. (×)3.可以使用相同的编译程序在不同类型的计 算机上对同一种高级语言的程序进行翻译. × ( )4.一个语言的文法是唯一的. (√ )5.若一个语言的句子有无穷多个,则对应的 文法必定是递归的. √ ( )6.正规文法不能产生语言L={anbn|n≥1}.
5.有文法 G[S]=( {S , A , B } , {a , b} , P , S ) 其中P为: S→AB | AS A→a | aA B→b |bb b 则图所示的语法树中,_____正确的描述了对符号 串"aaabb"的推导过程.
6.下列工作中,由编译程序扫描器完成的任务有______. 下列工作中,由编译程序扫描器完成的任务有 a…g 下列工作中 a.组织源程序的输入 组织源程序的输入 b.按词法规则分割出单词,识别出其属性 按词法规则分割出单词, 按词法规则分割出单词 c.删除注解 删除注解 d.删除空格以及无用字符 删除空格以及无用字符 e.行计数,列计数 行计数, 行计数 f.发现并定位词法错误 发现并定位词法错误 g.建立符号表 建立符号表 7.假设正在为 假设正在为PASCAL语言构造编译程序,下述单词中, 语言构造编译程序, 假设正在为 语言构造编译程序 下述单词中, c _______不需要超前搜索即可识别. 不需要超前搜索即可识别. 不需要超前搜索即可识别 a. end b.case c. :=
编译原理——二到五章例题整理
S’ S | ε S aA | bS | b A a | aS | bA
22
例题5
b
b
①a ② a ③
解: S aA | bS A bA | a | aB
注意: 若终态无出
弧,则去掉该非 终结符
23
例3.4(1)
1)已知 DFA M → 求 GR
0
B
1
A
00C
1 D
1
0, 1
解:右线性文法GR (A): A →0|0B|1D B →0D|1C C →0|0B|1D
?解解::文文法法GG33:: S AB AS aa|SabA | ab B b|bB
4
例题2.4 构造一个文法G4,使得 L(G4)={ anban | n≧0 }
?解:文法G4: S AbA A ε|aA
因为 SAbA bA baA baaA baa
正解:文法G4:
SaSa|b
5
例题2.5 构造一个文法G5,使得 L(G4)={ ambn | m>n≧0 } 解:文法G5:
I
Ia
0
{X,5,1} 0
{5,3,1} 1
1
{5,3,1} 1 {5,3,1,2,6,Y}3
2
{5,4,1} 2
{5,3,1} 1
3 {5,3,1,2,6,Y}3 {5,3,1,2,6,Y}3
4 {5,4,1,6,Y} 4 {5,3,1,6,Y} 6
5 {5,4,1,2,6,Y}5 {5,3,1,6,Y} 6
6 {5,3,1,6,Y} 6 {5,3,1,2,6,Y}3
Ib
{5,4,1} 2 {5,4,1} 2 {5,4,1,2,6,Y} 5 {5,4,1,6,Y} 4 {5,4,1,2,6,Y} 5 {5,4,1,2,6,Y} 5 {5,4,1,6,Y} 4
编译原理词法2(NFA、DFA的确定化和化简)
2.4 正规表达式到有限自动机的构造
例2.8 求正规表达式(a|b) *(aa|bb) (a|b) *对应的DFA M [解答] (3) 划分的最终结果为 {0} 、{1}、{2}、{3,4,5,6};
对其进行重命名:0、1、2、3 (4) 得到新的状态转换矩阵和化简后的DFA,如下所示:
S ab 0 12 1 32 2 13 3 33
f(s1, b) ={s2 } f(s2, a) = Ф
f(s2, b) ={ s1 }
状态转换图: b
s0 bb
a
s1 b
s2
状态转换矩阵:
∑
f
a
b
s0 {s2} {s0,s2} S s1 Ф {s2}
s2 Ф {s1}
2.3 正规表达式与优先自动机简介
2.3.2:有限自动机(识别的语言) – 对于一个自动机FA 而言,如果存在一条从初始状态到终止状 态的通路,通路上有向边所识别的字符依次连接所得到的字 符串为α, 则称α可以为FA 所接受或者α为FA 所识别 – FA 所能识别的字符串集为FA 所识别的语言,记为L(M) – FA的等价:对于任意两个FA M和 FA M’, 如果L(M)=L(M’), 则称M和M’等价 – 对于任意一个NFA M,一定存在一个DFA M’与其等价
2.3 正规表达式与优先自动机简介
2.3.2:有限自动机 – 1、确定有限自动机(DFA): • DFA是一个五元组,Md= (S, ∑, f, s0 , Z) ,其中: (1) S是一个有限状态集合,它的每个元素称为一个状态 (2) ∑是一个有穷字母表,它的每个元素称为一个输入字符 (3)f是一个从S×∑至S的单值映射,也叫状态转移函数 (4)s0∈S 是唯一的初态 (5) Z S 是一个终态集
编译原理第二章_文法与语言
(8)符号串集合的自反闭包
设符号串集合为A,则A的自反闭包记为A* ,定义为: A* = A0 ∪ A1 ∪ A2∪… ∪ An
即A* = A0 ∪ A+ = {ε} ∪ A+ 例如: A= {a,b},则 A*={ε, a, b, aa, ab, ba, bb, aaa, …… }
AB={xy|x∈A,y∈B} 如:若A={ab,c}, B={d,efg},则AB={abd,abefg,cd,cefg} 特别地,有:{ε}A=A{ε}=A
• 空集φ 表示不含任何元素的空集{ }。 有: φA=A φ= φ
<注>请区别: ε,{},{ε}三种表示方法的含义
12
(5) 符号串的方幂
a1 an 表示:从a1出发经过一步或若干步,可推导出an 。
定义2.5 长度为n(n≥0)的推导 a1 an 表示:从a1出发经过0步( a1 =an )或若干步,可推导
出an 。
22
2.2.3 句型、句子、语言
1.句型:设G[S]是一个文法,S是它的开始符号,若S α , 则称α是文法G[S]的句型。
5
(1) <句子>::= <主语> <谓语>
推导过程(3/5)
(2) <主语>::= <代词> | <名词> (3) <代词>::= 我 | 你 | 他 (4) <名词>::=王明| 大学生|工人|英语
(5) <谓语>::=<动词> <直接宾语>
编译原理习题答案
q3
b
3-13具有ε动作的NFA确定化
(2)解:q0=ε-Closure (S)={S} f’ (q0, a)=ε-Closure (f ({S}, a)) =ε-Closure ({Z}) ={Z}=q1* f’ (q0, b)={R,U}=q2 f’ (q2, a)={S,X}=q3 f’ (q2, b)={Z}=q1 f’ (q3, a)={Z}=q1 f’ (q3, b)={R,U,Y}=q4 f’ (q4, a)={S,X,U}=q5 f’ (q4, b)={Z}=q1 f’ (q5, a)={S,Z}=q6* f’ (q5, b)={R,U,Y,Z}=q7* f’ (q6, a)={Z}=q1 f’ (q6, b)={R,U}=q2 f’ (q7, a)={S,X,U}=q5 f’ (q7, b)={Z}=q1 确定化: b a
2-13化简文法
(3)解:执行算法2.1 因为S →ac, C →d,所以Vn1={S,C} 至此Vn1不再增大,于是得到文法G1为 G1=({S,C}, {a,b,c,d}, P1, S) 其中P1由如下产生式组成 S →ac, C →bc ∣d 再执行算法2.2 Vn2={S} 因为S →ac 所以Vn2={S} Vt2= {a,c} 至此Vn2,Vt2不再增大,于是得到化简后的文法G2为 G2=({S}, {a,c}, P2, S) 其中P2由如下产生式组成 S →ac
(1)解一:消除文法的单产生式得 S →SA∣SB∣(S)∣( )∣[S]∣[ ] A →SB∣(S)∣( )∣[S]∣[ ] B →[S]∣[ ] S为直接左递归的非终结符,消除左递归得 S → (S)S’∣( )S’∣[S]S’∣[ ]S’ S’ →AS’ ∣BS’ ∣ε A →SB∣(S)∣( )∣[S]∣[ ] B →[S]∣[ ] 解二:S,A都是左递归的非终结符 (S A B) = (S A B) A B Φ + (Φ (S)+( ) [S]+[ ]) εΦΦ ΦεΦ 设 A B Φ * = Z = z11 z12 z13 εΦΦ z21 z22 z23 ΦεΦ z31 z32 z33 (S A B) = (Φ (S)+( ) [S]+[ ]) z11 z12 z13 z21 z22 z23 z31 z32 z33 z11 z12 z13 = ε Φ Φ + A B Φ z11 z12 z13 z21 z22 z23 ΦεΦ ε Φ Φ z21 z22 z23 z31 z32 z33 ΦΦε Φ ε Φ z31 z32 z33
编译原理所有名词解释
第一章编译程序是一种程序,它把高级语言编写的源程序翻译成与之在逻辑上等价的机器语言或汇编语言的目标程序。
一个高级语言程序的执行通常分为两个阶段,即编译阶段和运行阶段。
如果编译生成的目标程序是汇编语言形式,那么在编译与运行阶段之间还要添加一个汇编阶段.解释程序也是一种翻译程序,它将源程序作为输入,一条语句一条语句地读入并解释执行。
解释程序与编译程序的主要区别是:编译程序是将源程序翻译成目标程序后再执行该目标程序,而解释程序则是逐条读出源程序中的语句并解释执行,即在解释程序的执行过程中并不产生目标程序。
编译过程源程序符串进行扫描和分解,个具有独立意义的单词;语法分析的任务的基础上,根据语言的语法规则(号串中识别出各种语法单位并进行语法检查;和中间代码生成阶段的任务来描述这种语义即生成中间代码;优化的任务高效(节省时间和空间)的目标代码;的任务定机器上的机器语言程序或汇编语言程序,实现最终的翻译工作。
自编译:用某种高级语言书写自己的编译程序。
交叉编译:指用A机器上的编译程序来产生可在B机器上运行的目标代码。
自展:首先确定一个非常简单的核心语言L0,然后用机器语言或汇编语言书写出它的编译程序T0:再把语言L0扩充到L1,此时有L0 L1,并用L0编写L1的编译程序T1(即自编译)。
移植:指A机器上的某种高级语言的编译程序稍加改动后能够在B机器上运行.第二章对程序设计语言的描述是从语法、语义和语用3个因素来考虑的。
所谓语法是对语言结构的定义;语义是描述了语言的含义;语用则是从使用的角度去描述语言。
形式化的方法:用一整套带有严格规定的符号体系来描述问题的方法。
标识符:以字母打头的字母数字串字母表:是元素的非空有穷集合。
字符:字母表中的元素称为符号,或称为字符。
可以是字母、数字和其他符号。
符号串:符号的有穷序列。
前缀:指从末尾删除0个或多个符号后得到的符号串.后缀:指从开头删除…。
(同上)符号串的运算:符号串的连接、集合的乘积、符号串的幂运算、集合的幂运算、集合A的正闭包A+与闭包A*形式语言:字母表上所有的字符按照某种规则所组成的集合。
编译原理 第二章习题答案
第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......D===============================================3.已知文法G[S]:S→dAB A→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 c m|n>=1,m>=0}的上下文无关文法。
编译原理词法分析__有穷自动机_算法_DFA化简
1 2
a a
3
4
a a
b
两个状态s和t等价的条件
①一致性条件
终态和非终态不等价
②蔓延性条件
对于所有输入符号,状态s和状态t必须转换到 等价的状态里 a a a 1 3 0 b 2
a 4 a
定义: 两个状态可区别- 两个状态s和t不等价
• 终态和非终态可区别
例:
填空 : 等价 可区别
可区别 的 0和4是__________ 可区别 的 2和3是__________
确定有穷自动机的化简
• DFA的最小化 - 寻求等价的最少状态的DFA 没有多余状态 • 不可到达 • 不可终止 没有两个状态互相等价
定义: 两个状态s和t等价
假定s和t是M的两个不同状态,我们称s和t等价 • 如果从s出发能读出某个字w而停于终态, 则从t出发也能读出同样的字w而停于终态; • 如果从t出发能读出某个字w而停于终态, 则从s出发也能读出同样的字w而停于终态。 a 0
例: DFA最小化
a
a 0
b
1
a
3
b
a
4
b 2
a
b b 5 b
a
6
b
a
最小化结果 a
0 b
1
a
a,b
b
2
a
b
3
b 3 3 5 6 3 1 2
a
b 3 5 6 3 1
{1, 2} {3} {4} {5} {6, 7}
1 3 4 5 6
6 1 4 6 4
为∏中的每一子集选取一个代表
最小化结果 a
1 3 4 5 6 6 1 4 6 4
b
3 5 6 3 1
编译原理重点
编译原理什么是编译程序?编译程序也叫编译系统,是把用高级语言编写的面向过程的源程序翻译成目标程序的语言处理程序。
编译的各个阶段什么是文法?文法是以又穷的集合刻画无穷的集合的一个工具。
1、字母表:它是非空有穷集。
例如:∑={a,b,c}或∑={1,2,3}2、符号:字母表中的元素称为符号。
3、符号串:符号的有穷序列,符号串也称为字。
用ε来表示空符号串。
例如:a,ab,abc4、长度:符号串的长度是指该串所包含的符号个数。
用|x|表示符号串x的长度。
例如:|a|=1,|abn|=35、连结:设x和y为符号串,则称xy 为他们的连结。
例如:x=aa,y=bb,则xy=aabb6、空集:不含任何元素的集合,记为 。
7、乘积:设A和B是符号串集,则用AB表示A和B的乘积。
A={a,b},B={c,d},则AB={ac,ad,bc,bd}8、方幂:设A为符号串集,则定义A0={ε}A1=AA n=A n-1 A例如:A={a,b} 则有:A0={ε} A1={a,b}A2={aa,ab,ba,bb}9、正闭包:设A为符号串集,则用A+表示A的正闭包,其具体定义如下:A+=A1∪A2∪A3∪⋯…例如:A={a},A+={a,aa,aaa,……}10、星闭包:设A为一集合,则定义A的星闭包为A* ,其具体定义如下A*=A0∪A+例如:A={a},A*={ε,a,aa,aaa,……}文法G定义为四元组(V N,V T,P,S )其中V N为非终结符号(或语法实体,或变量)集;V T为终结符号集;P为产生式(也称规则)的集合;V N,V T和P是非空有穷集。
S称作识别符号或开始符号,它是一个非终结符,至少要在一条产生式中作为左部出现。
V N和V T不含公共的元素,即V N∩V T = φ用V表示V N ∪V T,称为文法G的字母表或字汇表例文法G=(V N,V T,P,S)V N = { S }, V T ={ 0, 1 }P={ S→0S1, S→01 }S为开始符号推导:用若干次产生式可从x串导出y串,则称y为x的推导,记为x y。
编译原理课后习题答案ch3
答案: 可为句子 a+a*a 构造两个不同的最右推导: 〈运算符〉 〈表达式〉 最右推导 1 〈表达式〉 〈表达式〉 〈表达式〉 〈运算符〉a 〈表达式〉* a 〈表达式〉 〈运算符〉 〈表达式〉* a 〈表达式〉 〈运算符〉a * a 〈表达式〉+ a * a a+a*a 〈运算符〉 〈表达式〉 最右推导 2 〈表达式〉 〈表达式〉 〈表达式〉 〈运算符〉 〈表达式〉 〈运算符〉 〈表达式〉 〈表达式〉 〈运算符〉 〈表达式〉 〈运算符〉 a 〈表达式〉 〈运算符〉 〈表达式〉 * a 〈表达式〉 〈运算符〉a * a 〈表达式〉+ a * a a+a*a
<表达式>
<表达式>
+
<项>
<项> <项> <因子> <因子> i i i * <因子>
盛威网()专业的计算机学习网站
3
《编译原理》课后习题答案第三章
第7题 证明下述文法 G[〈表达式〉]是二义的。 〈表达式〉∷=a|(〈表达式〉)|〈表达式〉 〈运算符〉 〈表达式〉 〈运算符〉∷=+|-|*|/
a
B
A c a b
c
b
第9题 考虑下面上下文无关文法: S→SS*|SS+|a (1)表明通过此文法如何生成串 aa+a*,并为该串构造语法树。 (2)G[S]的语言是什么? S 答案: S (1)此文法生成串 aa+a*的最右推导如下 S=>SS*=>SS*=>Sa*=>SS+a*=>Sa+a*=>aa+a* (2)该文法生成的语言是:*和+的后缀表达式,即逆波兰式。 S + a S
《编译原理》第2章 文法和语言的基本知识
文法和语言的基本知识
教学目标
1. 本章是编译原理课程的理论基础,要求掌握形 式语言的基本术语和概念,重点掌握短语、直接 短语、句柄、素短语、规范推导、规范归约。 2. 掌握文法和语言的定义,文法的二义性与递归 性的判断方法及句型的分析方法,文法分类。 3. 熟练使用文法定义程序设计语言的单词和语法 成分。 4. 对形式语言的理论有一个初步认识。
2013年8月16日
符号串集合的闭包运算
设A是符号串集合,定义 A+= A1 ∪ A2 ∪ A3 ∪……∪ An ∪…… 称为集合A的正闭包。 A*= A0 ∪A+ 称为集合A的闭包。 例:A={x,y} A+=? {x,y, xx,xy,yx,yy , xxx,xxy,xyx,xyy, ……}
A1 A A A2 A A3 A
2013年8月16日
文法的直观概念:以汉语中的“我是大学生”为例。
①一组终结符号 采用BNF来表示汉语句子的构成规则为: (语言的基本符号) 〈句子〉::=〈主语〉〈谓语〉 ②一组非终结符号 〈主语〉::=〈代词〉|〈名词〉 (语法单位) ③一个开始符号 〈代词〉::=我|你|他 文法的四部分 (一个特殊的非终结 〈名词〉::=王明|大学生|工人|英语 符号,最感兴趣的语 〈谓语〉::=〈动词〉〈直接宾语〉 法单位) 〈动词〉::=是|学习 ④一组规则(也称产 生式或产生规则) 〈直接宾语〉::=〈代词〉|〈名词〉 根据上述规则,“我是大学生”的构成符合上述规则,而“我 大学生是”不符合,我们说它不是句子。这些规则成为我们判别 句子结构合法与否的依据。换句话说,这些规则看成是一种元语 言,用它描述汉语。这种的语言描述成为文法。
说明: (1) 有若干语法成分同时存在时,我们总是从最左的语法成 分进行推导,这称之为最左推导,类似的有最右推导(一般推 导)。 (2) 从一组规则可推出不同的句子,如以上规则还可推出 “大象吃象”、“大花生吃象”、“大花生吃花生”等句子, 它们 在语法上都正确,但在语义上都不正确。
蒋立源_《编译原理》_西北工业大学出版社_第3版课后答案
《编译原理》课后习题答案第一章1.解:源程序是指以某种程序设计语言所编写的程序。
目标程序是指编译程序(或解释程序)将源程序处理加工而得的另一种语言(目标语言)的程序。
翻译程序是将某种语言翻译成另一种语言的程序的统称。
编译程序与解释程序均为翻译程序,但二者工作方法不同。
解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机器指令并执行之,然后再读入下一条语句继续进行解释、执行,如此反复。
即边解释边执行,翻译所得的指令序列并不保存。
编译程序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指定的空间中,在用户需要时再执行之。
即先翻译、后执行。
2.解:一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。
3.解:C语言的关键字有:auto break case char const continuedefault do double else enum extern float for goto if int longregister 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.略第二章1.(1)答:26*26=676(2)答:26*10=260(3)答:{a,b,c,...,z,a0,a1,...,a9,aa,...,az,...,zz,a00,a01,...,zzz},共26+26*36+26*36*36=34658个2.构造产生下列语言的文法(1){anbn|n≥0}解:对应文法为G(S) = ({S},{a,b},{ S→ε| aSb },S)(2){anbmcp|n,m,p≥0}解:对应文法为G(S) = ({S,X,Y},{a,b,c},{S→aS|X,X→bX|Y,Y→cY|ε},S)(3){an # bn|n≥0}∪{cn # dn|n≥0}解:对应文法为G(S) = ({S,X,Y},{a,b,c,d,#}, {S→X, S→Y,X→aXb|#,Y →cYd|# },S)(4){w#wr# | w?{0,1}*,wr是w的逆序排列}解:G(S) = ({S,W,R},{0,1,#}, {S→W#, W→0W0|1W1|# },S)(5)任何不是以0打头的所有奇整数所组成的集合解:G(S) = ({S,A,B,I,J},{-,0,1,2,3,4,5,6,7,8,9},{S→J|IBJ,B→0B|IB|e, I→J|2|4|6|8, Jà1|3|5|7|9},S)(6)所有偶数个0和偶数个1所组成的符号串集合解:对应文法为 S→0A|1B|e,A→0S|1C B→0C|1S C→1A|0B3.描述语言特点(1)S→10S0S→aAA→bAA→a解:本文法构成的语言集为:L(G)={(10)nabma0n|n, m≥0}。