编译原理习题课
编译原理-第1-5章习题课答案解析
不同的语法树,或者两种以上不同的最 左/右推导,则称这个文法是二义的。
首先:找到此文法对应的一个句子 iiiei 其次:构造与之对应的两棵语法树
S
S
i SeS
iS
iS
i
i S eS
i
ii
结论:因为该文法存在句子iiiei对应两棵 不同的语法树,因而该文法是二义的。
思路:先写出满足条件的正规式,由正规式构造 NFA,再把NFA确定化和最小化。
满足条件的正规式:(0|10)*
(0|10)*
x
y
1
0
1
0
0
1
2
0
x 1
y
编译原理
确定化: 给状态编号:
0
1
2
0
x 1
{X,1,Y} {1,Y} {2}
0
{1,Y} {1,Y} {1,Y}
0
0
1
1
1
2
1
chapter1~5习题
(1){0,1}上的含有子串010的所有串。 正规式:(0 | 1)* 010 (0 | 1)*
(2) {0,1}上不含子串010的所有串。 正规式:1*(0|11*1)* 1*( 0 | 11)*1* 1*0*1* (0 | 11)*(0 | 1) DFA做法同第7题。
编译原理
chapter1~5习题
编译原理
chapter1~5习题
8、给出下面正规表达式 (5)沒有重複出現的數字的數字符號串的全體
令ri=i| ,i=0,1,2...9 R0|R1|R2|...|R9記為∑Ri i (0,1,2...,9) P(0,1,2...,9)表示0,1,2...,9的全排列
编译原理习题课(词法分析)
4.构造自动机A,使得它识别字母表{a,b}上的符 号串,但符号串不能含有两个相邻的a,也不能 含有两个相邻的b. 解:正规文法为: S→aB | bA | a | b | ε A→aB | a B→bA | b
5.构造自动机A,使得它识别字母表{0,1}上的符 号串,这些符号串由任意的1,0和随后任意的 11,00对组成. 解:正规表达式为 (1 | 0 )* (11 |00)*
10.设有穷自动机的状态图如图所示,其中,状态 ①为开始状态,状态③为终止状态.下述正规 c 表达式中_______不可被该有穷自动机接受. a.0(10)*0 b.11(01)*1 c.1(101)*00
四.解答题
1.已知语言求文法 (1).构造语言L(G[S])={ (n )n | n≥0 } 的文法. 句子结构特征: L={ε,(),(( )),((( ))),…} 文法为: G[S] : S→(S) | ε (2).构造语言L(G)={ am bn | n>m>0 } 的文法. 单独生成am 或bn 可以用 A→Aa|a B→Bb|b 要考虑句子中b的个数大于a的个数,因此文法为 G[S]: S→Ab | Sb A→aAb | ab
8.下述正规表达式中 d,e 下述正规表达式中_______与(a*+b)*(c+d)等价. 等价. 下述正规表达式中 与 等价 a.a*(c+d)+b(c+d) b. a*(c+d)*+b(c+d)* c. a*(c+d)+b*(c+d) d. (a+b)*c+(a+b)*d e. (a*+b)*c+(a*+b)*d 9.已知文法 定义为:G=( {S,W,X,Y,Z} , {x,y,z} , P , S ) 已知文法G定义为 已知文法 定义为: 与该文法描述相同语言的正规表达式有_______. 与该文法描述相同语言的正规表达式有 b . 其中P为 a.xx* | yy* | zz* 其中 为 S→WZ W→X | Y b. (xx* | yy* ) zz* X→x | xX c. xx* ( yy* | zz*) Y→y | yY d. (xx | yy)* zz* Z→z | zZ e. xx* yy* zz*
编译原理习题课(3)
四元式序列: (1) + (2) (3) + (4) * (5) + (6) + (7) -
a b T1 T1 - T2 c d T3 T2 T3 T4 a b T5 T5 c T6 T4 T6 T7
23
赋值语句的翻译
简单算术表达式及赋值语句 数组元素的引用 产生有关类型转换的指令
24
P218-4. 按7.3节所说的办法,写出下面赋值句
L→En print(E.val)
E→E1+T E.val := E1.val+T.val
E→T
E.val :=T.val
T→T1*F T.val :=T1.val* F.val
T→F
T.val :=F.val
F→ (E) F.val :=E.val
F→digit F.val :=digit.lexval
5
digit.lexval=4
E → T { R.i:=T.val } R { E.val:=R.s }
P164-2. 对表达式((a)+(b))R:→ +
(的1)抽按象照语表法6树.4所;示的属性文R 法→ TR构- 1{ {造RR1..该i:s=:=R表.Ri+1达T.s.v式}al }
(式2)的按抽照象图语6法.17树所。示的翻译R模→式TR1,{{ RR构1.s.i::=造=R{RR.该.ii-.}sT表:.=vaR达l }1.s }
综合属性:“自下而上”传递信息 继承属性性文法的处理方法
依赖图 树遍历 一遍扫描
L-属性文法适合于一遍扫描的自上而下分析 S-属性文法适合于一遍扫描的自下而上分析
4
L
P164–1按照表6.1所
编译原理习题课解析
1.首先拓展文法
• • • • • •
S→ A → A → B → B → B →
A Ab bBa aAc a aAb
2.分解LR(0)项目
• • • • • • S → ·A;S → A·; A → ·Ab;A → A·b;A → Ab· ; A →·bBa;A→b·Ba;A→bB·a;A→bBa·; B →·aAc;B→a·Ac;B→aA·c;B→aAc· ; B → · a; B → a · ; B →·aAb;B→a·Ab;B→aA·b;B→aAb· ;
S→ABS B→SBB S→Aa S→ B→b A→a A
S
B
S
a
S
B
B
A
a
b
b
a
短语、句柄
习题解答
7.给文法G[S]: – SaA|bQ – AaA|bB|b – BbD|aQ – QaQ|bD|b – DbB|aA S – EaB|bF – FbD|aE|b 构造相应的最小的DFA。
由于从S出发任何输入串都 不能到达状态E和F,所以, 状态E,F为多余的状态, 不予考虑。
a a b a
A b Z
b
B a
b
D
b
b
b Q a
简化产生式后生成的NFA
I 1[S] 2[A] 3[Q] 4[B,Z] 5[D,Z] 6[D] 7[B]
Ia
= ε -closure(MoveTo(I,a))
4 5 6 7
8 9
{11,14,16,3,6} {8} {5} {7}
{4,19,17} {9}
编译原理(习题课)(二)
第六题(P36 第11题),要求b和c的个数一样多,因此可以使用一个非解:分析L2终结符去生成b n c n串,而用另外一个非终结符去生成a i,使用一个非终结符去生成b n c n,而用因此,可以模拟L1另外一个非终结符去生成a i。
L2的文法:S→ABA→aA| εB→bBc| bc第六题(P36 第11题),可以将a n b n a m b m分成两段考虑,即a n b n和a m b m,解:分析L3然后使用两个非终结符分别去产生它们。
L3的文法:S→ABA→aAb| εB→aBb| ε第六题(P36 第11题)解:L不能采用分段处理的方式,它要求中间的0和1的个数4相同,而且一前一后的1和0的个数相同。
对于这种文法我们可以采用从里向外扩展的方式进行,即先用一个非终结符生成处于中间的m个0和m个1,然后,使用另外一个非终结符在该串的基础上扩充前后的n个1和n个0。
L4:A→0A1 | εS →1S0 | A第七题(P64 第7题)7.构造下列正规式相应的DFA①1(0|1)*101②1(1010*|1(010)*1)*0③0*10*10*10*④(00|11)*((01|10)(00|11)*(01|10)(00|11)*)*{1,2,3}1状态第七题(P64 第7题①)á初始划分:{{0,1,2,3,4},{5}},{0,1,2,3,4}0={2,4,_}, {0,1,2,3,4}1={1,3,5}。
由于0不能接受字符0,需要把状态0划分出来;另外,只有状态4读入字符1后进入状态5,因此将状态4划分出来,划分的结果为4个集合:{{0},{1,2,3},{4},{5}}。
á对于集合{1,2,3},由于{1,2,3}0={2,4},因此需要对{1,2,3}进一步划分,划分结果为5个集合:{{0},{1,2},{3},{4}, {5}}。
检查集合{1,2},由于{1,2}0={2},{1,2}1={3},不需要进一步的划分。
编译原理习题课(词法分析)
+
二.判断题
(×)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. :=
UN_编译原理(习题课)(一)
第一题(P36 第6题)6.令文法G6为N→D | NDD→0|1|2|3|4|5|6|7|8|9①G6的语言L(G6)是什么?②给出句子0127、34和568的最左推导和最右推导。
第一题(P36 第6题)解:①根据产生式N→D | ND可以看出,N最终可以推出1个或多个(可以是无穷多个)D,根据产生式D→0|1|2|3|4|5|6|7|8|9可以看出,每个D可以推导出0~9中的某一个数字。
因此,N最终推导出的就是由0~9这10个数字组成的字符串。
因此G6的语言L(G6)就是由0~9这10个数字组成的字符串。
第一题(P36 第6题)②句子0127、34和568的最左推导如下:N⇒ND⇒NDD⇒NDDD⇒DDDD⇒0DDD⇒01DD⇒012 D⇒0127N⇒ND⇒DD⇒3D⇒34N⇒ND⇒NDD⇒DDD⇒5DD⇒56D⇒568第一题(P36 第6题)②句子0127、34和568的最右推导如下:N⇒ND⇒N7⇒ND7⇒N27⇒ND27⇒N127⇒D127⇒0127 N⇒ND⇒N4 ⇒D4 ⇒34N⇒ND⇒N8⇒ND8 ⇒N68 ⇒D68 ⇒568第二题(P36 第7题)7.写一个文法,使其语言是奇数集,且每个奇数不以0开头。
解:首先分析题意,本题希望构造一个文法,由它产生的句子是奇数,并且不以0开头,也就是说它的每个句子都是以1、3、5、7、9中的某个数结尾。
如果数字只有一位,则满足要求,如果有多位,则要求第1位不能是0,而中间有多少位,每位是什么数字(必须是数字)则没有什么要求,因此,我们可以把这个文法分3个部分来完成。
第二题(P36 第7题)解:引入几个非终结符,其中,一个用作产生句子的开头,可以是1~9之间的数,不包括0;一个用来产生句子的结尾,为奇数;另一个则用来产生以非0整数开头后面跟任意多个数字的数字串。
由此得到文法如下:G(S):D→1|3|5|7|9A→2|4|6|8|DB→A|0C→CB|AS→CD|D第三题(P36 第8题)8.令文法为E→T|E+T|E-TT→F|T*F|T/FF→(E)|i①给出i+i*i、i*(i+i)的最左推导和最右推导;②给出i+i+i、i+i*i和i-i-i的语法树。
编译原理 习题课
4.8
0. 1. 2. 3. 4.
S’ -> S S -> AS S -> b A -> SA A -> a
(2). I1,I5,I6存在“移进-归约”冲突。不是LR(0)文法。
(3). 对于abab有两棵不同的语法树,任何二义性文法不是SLR(1)文法, 也不是LALR(1)或LR(1)文法。
4.13
不含有冲突,因此是LR(1)文法
合并同心集6和9, I69: {A->x· ,d/e, B-> · ,d/e} 出现“归约-归约”冲突,因此不是LALR(1)文法
Thank you!
2.6
E
E + T T * F
短语:E+T*F, T*F 直接短语:T*F 句柄:T*F 2.7 G1:S -> AB A -> aA | ε B -> bc | bBc G2:S -> aA|a A -> aS L(G2[S])={a2n+1|n>=0}
L(G1[S])={aibncn|i>=0,n>=1}
第三章
3.1 (3) ((0|1)*|(11))*
B
1 X ε ε A ε 1 ε Y 0 Q {X,A,C,Y} {A,C,Y} {B,A,C,Y} 0 {A,C,Y} {A,C,Y} {A,C,Y} 1 {B,A,C,Y} {B,A,C,Y} {A,C,Y}
C
X 0,1 1
重命名
Q
{X,A,Y} {A,Y} {B,C,D} {C,D}
First S A A’ {(,)} {(,)} {i, ε}
Follow {$} {$,*} {$,*}
B B’ C
编译原理第2章习题课
1.构造正规式的DFA。
(1)1(0|1)*101状态转换表:化简后得:(2)(a|b)*(aa|bb)(a|b)*NFA化为DFA:化简后得;2.将下图确定化和最小化。
aa⇒a,b解: 首先取A=ε-CLOSURE({0})={0},NFA确定化后的状态矩阵为:NFA确定化后的DFA为:aa⇒abb将A,B 合并得:ab⇒a3.构造一个DFA ,它接受∑={0,1}上所有满足如下条件的字符串,每个1都有0直接跟在后边。
解:按题意相应的正规表达式是0*(0 | 10)*0*构造相应的DFA ,首先构造NFA 为DFA 为44.给出NFA等价的正规式R。
方法一:首先将状态图转化为得0,1NFA等价的正规式为(0|1)*11方法二:NFA→右线性文法→正规式A→0A|1A|1BB→1CC→εA=0A+1A+1BB=1A=0A+1A+11A=(0+1)*11→(0|1)*115.试证明正规式(a|b )*与正规式(a *|b *)*是等价的。
证明: (1)正规式(a|b)*的NFA 为=>ba其最简DFA 为=>b(2)正规式(a*|b*)*的 NFA 为: aa εεεεbbDFA 的状态转换表:由于这两个正规式的最小DFA 相同,所以正规式(a|b)*等价于正规式(a*|b*)*。
6.设字母表∑={a,b},给出∑上的正规式R=b*ab(b|ab)*。
(1)试构造状态最小化的DFA M,使得L(M)=L(R)。
(2)求右线性文法G,使L(G)=L(M)。
解:(1)构造NFA:(2)将其化为DFA,转换矩阵为:再将其最小化得:(2)对应的右线性文法G=({X,W,Y},{a,b},P,X)P: X→aW|bXW→b Y|b y→a W|bY|b3.8文法G[〈单词〉]为:〈单词〉-〉〈标识符〉|〈整数〉〈标识符〉-〉〈标识符〉〈字母〉|〈标识符〉〈数字〉|〈字母〉〈整数〉-〉〈数字〉|〈整数〉〈数字〉〈字母〉-〉A|B|C〈数字〉|->1|2|3(1)改写文法G为G’,使L(G’)=L(G)。
编译原理习题及答案课堂ppt课件
A.提高程序的执行效率
B.使程序的结构更加清晰
C.利用有限的机器内存并提高机器的执行效率
D.利用有限的机器内存但降低了机器的执行效
率
(3) 构造编译程序应掌握 。
A.源程序
B.目标语言
C.编译方法
D.A~C项
.
2
严格执行突发事件上报制度、校外活 动报批 制度等 相关规 章制度 。做到 及时发 现、制 止、汇 报并处 理各类 违纪行 为或突 发事件 。
来到达2的弧都导向1,并删除状态2。最后,得到如图2-4
所示的化简了的DF.A M′。
21
严格执行突发事件上报制度、校外活 动报批 制度等 相关规 章制度 。做到 及时发 现、制 止、汇 报并处 理各类 违纪行 为或突 发事件 。
《编译原理教程》习题解析
22
图2-4 图2-3化简后的DFA M′
.
.
4
严格执行突发事件上报制度、校外活 动报批 制度等 相关规 章制度 。做到 及时发 现、制 止、汇 报并处 理各类 违纪行 为或突 发事件 。
《编译原理教程》习题解析
5
(4) 编译各阶段的工作都涉及到构造、查找或更新有 关表格,即编译过程的绝大部分时间都用在造表、查表和 更新表格的事务上。故选D。
《编译原理教程》习题解析
16
(5) NFA可以有DFA与之等价,即两者描述能力相同; 也即,对于任一给定的NFA M,一定存在一个DFA M',使 L(M)=L(M′)。故选B。
(6) DFA便于识别,易于计算机实现,而NFA便于定 理的证明。故选C。
(7) 本题虽然是第二章的题,但答案参见第三章3.1.3 节。即选C。
.
8
严格执行突发事件上报制度、校外活 动报批 制度等 相关规 章制度 。做到 及时发 现、制 止、汇 报并处 理各类 违纪行 为或突 发事件 。
编译原理习题课
第三章习题:例17
下面旳文法不是LR(1)旳,对它略做修改,使之成为一 种等价旳SLR(1)文法 program begin declist ; statement end declist d ; declist | d statement s ; statement | s
该文法产生旳句子旳形式是 begin d ; d ; … ; d ; s ; s ; … ; s end
第三章习题:例15(续)
I8: goto ( I2, R ) R (R ) R R ‘|’ R R R R R R * R R ‘|’ R R RR R R* R (R) R a R b
I9: goto ( I5, R ) R R ‘|’ R R R ‘|’ R R R R R R * R R ‘|’ R R RR R R* R (R) R a R b
状态9中R R ‘|’ R ,遇到| * a b (都会产 生移进-归约冲突,但因为| 旳优先级低于 连接和 *,且为左结合,所以只有 遇到 | 时为归约,其他情况都为移进。
第三章习题:例15(续)
状态
动作 | ( )a
b$
6 s5/r2 s7/r2 s2/r2 r2 s3/r2 s4/r2 r2 7 r3 r3 r3 r3 r3 r3 r3
I5: goto ( I1, | ) R R ‘|’ R
R R ‘|’ R
I4: goto ( I0, b) R b
R RR R R* R (R)
R a
I7: goto ( I1, *) R R *
R b
I6: goto ( I1, R ) R R R R R ‘|’ R R R R R R * R R ‘|’ R R RR R R* R (R) R a R b
编译原理习题课共37页文档
1、合法而稳定的权力在使用得当时很 少遇到 抵抗。 ——塞 ·约翰 逊 2、权力会使人渐渐失去温厚善良的美 德。— —伯克
3、最大限度地行使权力总是令人反感 ;权力 不易确 定之处 始终存 在着危 险。— —塞·约翰逊 4、权力会奴化一切。——塔西佗
5、虽然权力是一头固执的熊,可是金 子可以 拉着它 的并使享受加强。 ——德 谟克利 特 67、今天应做的事没有做,明天再早也 是耽误 了。——裴斯 泰洛齐 68、决定一个人的一生,以及整个命运 的,只 是一瞬 之间。 ——歌 德 69、懒人无法享受休息之乐。——拉布 克 70、浪费时间是一桩大罪过。——卢梭
计算机编译原理课后习题及答案详细解析
在此深情而热烈的感谢沈仲秋同学的大力支持和帮助,同时希望本文档对各位有些帮助。
一1、画出编译程序的总体结构图,简述其部分的主要功能。
[答案]编译程序的总框图见下图。
图编译程序的总体结构图其中词法分析器,又称扫描器,它接受输入的源程序,对源程序进行词法分析,识别出一个个的单词符号,其输出结果上单词符号。
语法分析器对单词符号串进行语法分析(根据语法规则进行推导或归纳),识别出程序中的各类语法单位,最终判断输入串是否构成语语义分析及中间代码产生器,按照语义规则对语法分析器归纳出(或推导出)的语法单位进行语义分析并把它们翻译成一定形式的中间优化器对中间代码进行优化处理。
一般最初生成的中间代码执行效率都比较低,因此要做中间代码的优化,其过程实际上是对中间代码目标代码生成器把中间代码翻译成目标程序。
中间代码一般是一种与机器无关的表示形式,只有把它再翻译成与机器硬件相关的机器能表格管理模块保持一系列的表格,登记源程序的各类信息和编译各阶段的进展状况。
编译程序各个阶段所产生的中间结果都记录在表格出错处理程序对出现在源程序中的错误进行处理。
如果源程序有错误,编译程序应设法发现错误,把有关错误信息报告给用户。
编译程2、计算机执行用高级语言编写的程序有哪些途径?它们之间的主要区别是什么?[答案]计算机执行用高级语言编写的程序主要途径有两种,即解释与编译。
像Basic之类的语言,属于解释型的高级语言。
它们的特点是计算机并不事先对高级语言进行全盘翻译,将其变为机器代码,而是每读总而言之,是边翻译边执行。
像C,Pascal之类的语言,属于编译型的高级语言。
它们的特点是计算机事先对高级语言进行全盘翻译,将其全部变为机器代码,再统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+。
编译原理(习题课)(二)
第六题(P36 第11题),要求b和c的个数一样多,因此可以使用一个非解:分析L2终结符去生成b n c n串,而用另外一个非终结符去生成a i,使用一个非终结符去生成b n c n,而用因此,可以模拟L1另外一个非终结符去生成a i。
L2的文法:S→ABA→aA| εB→bBc| bc第六题(P36 第11题),可以将a n b n a m b m分成两段考虑,即a n b n和a m b m,解:分析L3然后使用两个非终结符分别去产生它们。
L3的文法:S→ABA→aAb| εB→aBb| ε第六题(P36 第11题)解:L不能采用分段处理的方式,它要求中间的0和1的个数4相同,而且一前一后的1和0的个数相同。
对于这种文法我们可以采用从里向外扩展的方式进行,即先用一个非终结符生成处于中间的m个0和m个1,然后,使用另外一个非终结符在该串的基础上扩充前后的n个1和n个0。
L4:A→0A1 | εS →1S0 | A第七题(P64 第7题)7.构造下列正规式相应的DFA①1(0|1)*101②1(1010*|1(010)*1)*0③0*10*10*10*④(00|11)*((01|10)(00|11)*(01|10)(00|11)*)*{1,2,3}1状态第七题(P64 第7题①)á初始划分:{{0,1,2,3,4},{5}},{0,1,2,3,4}0={2,4,_}, {0,1,2,3,4}1={1,3,5}。
由于0不能接受字符0,需要把状态0划分出来;另外,只有状态4读入字符1后进入状态5,因此将状态4划分出来,划分的结果为4个集合:{{0},{1,2,3},{4},{5}}。
á对于集合{1,2,3},由于{1,2,3}0={2,4},因此需要对{1,2,3}进一步划分,划分结果为5个集合:{{0},{1,2},{3},{4}, {5}}。
检查集合{1,2},由于{1,2}0={2},{1,2}1={3},不需要进一步的划分。
编译原理(习题课)(三)
编译原理朱雪峰 博士计算机科学与技术系Tel: 89733787(O) Email: xuefeng.zhu@1第三十题( P218 第6题)6. 按7.4.2节的办法,写出布尔式A or (B and not (C or D))的四元式序列。
23第三十题( P218 第6题)1 (jnz, A, _, 0) 2 (j, _, _, 3) 3 (jnz, B, _, 5) 4 (j, _, _, 0) 5 (jnz, C, _, 0) 6 (j, _, _, 7) 7 (jnz, D, _, 0) 8 (j, _, _, 0) 1 (jnz, A, _, 0) 2 (j, _, _, 3) 3 (jnz, B, _, 5) 4 (j, _, _, 0) 5 (jnz, C, _, 4) 6 (j, _, _, 7) 7 (jnz, D, _, 5) 8 (j, _, _, 1)4第三十一题( P218 第7题)7. 用7.5.1节的办法,把下面的语句翻译成四元式 序列: while A<C and B<D do if A=1 then C:=C+1 else while A≤D do A:=A+256第三十一题( P218 第7题)四元式序列: 1 (j<, A, C, 0→3) 2 (j, _, _, 0→16) 3 (j<, B, D,0→5) 4 (j, _, _, 0→16) 5 (j=, A, 1, 0→7) 6 (j, _, _, 0→10) 7 (+, C, 1, T1) 8 (:=, T1, _, C) 四元式序列: 9 (j, _, _, _→ 1) 10 (j≤, A, D, 0→12) 11 (j, _, _, 0→1) 12 (+, A, 2, T2) 13 (:=, T2, _, A) 14 (j, _,_, 10) 15 (j, _, _, 1) 167第三十二题( P219 第12题)12. 略(选作,不讲)8第三十三题( P270 第9题)9. 对于下面的程序,若参数传递的办法分别为(1)传名;(2) 传地址;(3)得结果;(4)传值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
a i ε b 1
3
a 6 b ε f
a i ε b 1 ε 2
a
3
a 5 ε
a
Ia
{i,1,2} {1,2,3} {1,2,4} {1,2,3,5,6,f}
Ib
A C A C
{1,2,4} {1,2,4} {1,2,4,5,6,f} {1,2,4,6,f}
S A B C
{1,2,3} {1,2,3,5,6,f} {1,2,3} {1,2,3,5,6,f}
编译原理习题课
得到文法G‘[S]:S→ST|T T→(S)|() 显然,该文法是非二义文法。 3 3、已知文法G[Z]如下: G[Z] Z→RS⑴ R→aAc⑵ A→aAc|bBb⑶ S→aSb| ε⑷ B→bB| ε
编译原理习题课
请写出它对应的语言L(G)。 对于已知文法写对应语言,处理过程是已知 语言写对应的文法的逆过程,可以借鉴串 联和并联的方法。 由⑴可知,句子被分为前后两部分。 ⑵⑶是关于前部R的含义的产生式,明显地, R由前缀的若干a和后缀的等量个c再在中间 加若干个b组成。由⑵可知,a和c至少有一 个,由⑶⑸知,b至少是二个。
等价的DFA
a a S b A a b B b D b a F a C a b a b b E
编译原理习题课
7、将上述的DFA最小化。
DFA的最小化就是寻求最小状态DFA 最小状态DFA的含义:
没有多余状态(死状态) 没有两个状态是互相等价(不可区别)
两个状态s和t可区别:不满足
兼容性——同是终态或同是非终态 传播性——从s出发读入某个a(a∈∑)和从 t出发读入某个a到达的状态等价。
编译原理习题课
⑷是关于后部S的含义的产生式,S由前缀的 若干a和后缀的等量个b构成。S→ ε可知, 可知, a和b的个数可以为0。综上,该文法所对应 的语言是: L(G)={am bpcmanbn|m≥1,p≥2,n≥0}
编译原理习题课
练习:1、生成非0开头的正偶数集的文法。 2、试构造生成语言L={anbnci|n≥1, i≥0}的文法。 3、有文法G[N]: N→SE|E S→SD|D E→0|2|4|6|8|10 D→0|1|2|3|4|5|6|7|8|9
编译原理习题课
系统的初态由CLOSURE(S’→.S)形成。 GO(I,X)表示,处在I状态时,若当前面临 输入X(X可以是输入的终结符,也可以是 归约的产物非终结符)这个符号,状态变 迁成的次态。根据上述方法,可求得如下 结果:
编译原理习题课
2)从初始子集出发,填写下表,每产生一个 新的集合就检验它是否已经在第一列中出 现过,将未曾出现者填入到第一列后面的 空行中,重复此过程,直到产生的所有状 态子集均在第一列中出现。由于NFA的状 态子集总数是有限的,上述过程一定会在 有限的步骤内终止。
编译原理习题课
例子
a ε 2 b 4 b a 5 ε
编译原理习题课
2、说明下面的文法是二义文法,并把它改写 为无二义性的等价文法。 S→SS|(S)|() 首先,不存在一个一般性的在有限步骤中 证明一个文法是二义文法的方法。 只要找到文法中的某一句子对应两棵不同 的语法树,该文法的二义性就得到证明。
编译原理习题课
鉴别文法是二义文法有如下一些方法: ⑴二义文法的同构文法是二义文法。 ⑵二义文法作为产生式集合的子集的文法。 如()()()作为句子。 改写这类文法,可以参考表达式的非二义文 法的写法。把右部原来并列的相同非终结 符改为不同的非终结符,从而消除其二义 性。
DFA的最小化算法 DFA M =(K,∑,f, k0,, kt),最小状态DFA M’ 1.构造状态的一初始划分∏: 终态kt 和非终态K- kt两组(group) 2.对∏施用过程PP 构造新划分∏new 过程PP 过程 3. 如∏new =∏,则令 ∏final=∏ 并继续步 骤4,否则∏:=∏new重复2 . 4.为∏final中的每一组选一代表,这些代 表构成M’的状态。若k是一代表且 f(k,a)=t,令r是t组的代表,则M’中有一 转换f’(k,a)=r
编译原理习题课
G[S]可以定义为:S→ <非零数字><数串><奇数字 >|<奇数字> 再加上对<数串>和<奇数字>及其他相关内容的产生 式的书写,最后结论为: , : S→ <非零数字><数串><奇数字>|<奇数字> <数串>→<数串><数字>|ε ε <数字>→<非零数字>|0 <非零数字> →1|2|…|8|9 <奇数字> →1|3|5|7|9
B B D E
{1,2,4,5,6,f} D {1,2,4,6,f} E {1,2,3,6,f} F
{1,2,3,6,f} F {1,2,3,6,f} F {1,2,3,5,6,f} C
{1,2,4,5,6,f} D {1,2,4,5,6,f} D {1,2,4,6,f} E
编译原理习题课
表中的初态是{i,1,2},终态是所有含f的 子集。对表中的所有状态子集用新的字母 或一个整数命名,就可以得到一个新的状 态矩阵。如上页图。
编译原理习题课
证明此文法有二义性,此文法所描述的语言 是什么?改写该文法为无二义性的。 4、对如下文法: S →aB|bA A → aS|bAA|a B → bS|aBB|b 写出文法的开始符号,终结符号集,非终结符号 集。
编译原理习题课
给出串aaabbabbba的最左推导、最右推导。 画出语法树。 5、自动机与正规式的等价变换 NFA与正规式的变换函盖了DFA与正规式 的变换。变换方法是: ⑴在NFA M的状态图上加上唯一的初态X和唯 一的终态Y,由X到每一个原来的初态引出 一条ε箭弧,由原来的每一个终态引出一 ε 条ε箭弧到Y,这样一来就形成了一个等价 ε
编译原理习题课
6、将下图的NFA转化成对应的DFA。 分析:1)设I是给定NFA状态集的一个子集, 定义如下:
定义对状态集合I的几个有关运算:
1. 状态集合I的ε-闭包,表示为ε-closure(I),定义为一状 状态集合I
态集,是状态集I中的任何状态S经任意条ε弧而能到达 的状态的集合。 状态集合I的任何状态S都属于ε-closure(I)。 若q ∈ I,q ∈ ε-closure(I),且从q出发,经过任意条ε 弧能到达的任何状态都属于ε-closure(I)。 2. 状态集合I的a弧转换,表示为move(I,a)。定义为状态集 状态集合I 合J,其中J是所有那些可从I中的某一状态经过一条a弧 而到达的状态结点的全体。
编译原理习题课
写文法没有一个形式化的算法,但可以使 用“串联”和“并联”两种手段。 串联:是把一个句子结构分解为几个相连接 的子结构。 并联:是把难以用统一形式表达的句子用几 种不同的方式表达出来。(这些方式应构 成不相交的划分。)
编译原理习题课
就本题而言,句子由数字串构成,结尾是 1、3、5、7、9,首字符不为零,所以句子 形式按串联方式应写为: <非零数字><数串><奇数字> 这样的三部分串联,使一位数和二位数不在 其中,考虑对数串的定义若包含空串,则二位 数就在其中了,剩下的一位数就可以通过并 联定义。
编译原理习题课
为了使接受状态容易识别,我们总把原文法加以拓 广,引入一个不在G[S]中出现的非终结符S’,并 加入一个产生式S’→S,形成了文法G’[S],显然 它和原文法等价。 A→β.刻划产生式 →β的 右部β已出现在栈顶 →β. →β的 →β 刻划产生式A→β 右部β A→β1 . β2 刻划 →β1β2 的右部子串 β1 已出 刻划A→β 的右部子串β →β 现在栈顶,期待从输入串中看到β 推出的符号 现在栈顶,期待从输入串中看到β2推出的符号 A→ . β 刻划没有句柄的任何符号 在栈顶 , 此 刻划没有句柄的任何符号在栈顶 在栈顶, → 时期望A→β →β的右部所推出的符号串 时期望 →β的右部所推出的符号串 对于 →ε的LR(0)项目只有 →. 对于A→ε LR(0 项目只有A→ →ε的
编译原理习题课
8、对正规式 R=(a|ab)* b b*,画出其所对应 的DFA。
编译原理习题课
对于正规式向NFA或DFA的变化,只需 按原式分成若干串联或并联的部分,中间 加上相应的状态即可。
– 接受正规式的最小状态有穷自动机不计同构是 唯一的。
编译原理习题课
9、已知增广文法G’[S]为: 0、S’→S 1、S →aSb 2、S →aSc 3、S → ab 求它的LR(0)项目集规范族,写出LR(0) 分析表。
编译原理习题课
分析:在文法中的任何一个产生式的右部的 任何位置添加一个圆点就成了一个LR(0) 的项目,比如说,若A→Ab是产生式,则 A→.Ab A→A.b A→Ab.这三种形式就是这 个产生式对应的全部LR(0)项目形式。产生 式表示的是一个归约的规则,项目则是动 态地表示归约的一个阶段。对于项目 A→A.b ,可以这样理解它,”.”之前的A表 示的是在识别Ab过程中已输入到符号栈中
“分割法”
DFA的最小化算法的核心 把一个DFA的状态分成一些不相交的子集,使得任 何不同的两子集的状态都是可区别的,而同一子 集中的任何两个状态都是等价的. . 算法假定每个状态射出的弧都是完全的,否则,引入 一个新状态,叫死状态,该状态是非状态,将不完全 的输入弧都射向该状态,对所有输入,该状态射 出的弧还回到自己.
编译原理习题课
的部分,”.”之后的b表示的是在识别Ab过程中 期望出现的部分,”.”表示的则是在识别Ab过 程中当前识别进度的定位。项目A→Ab.已 具备了识别Ab的一切条件,因此也被称为 归约项目。 LR(0)分析表中的状态,是一个项目集, 初态的得到,状态的形成,次态的取得, 就是构造LR(0)分析表的三项主要工作。