编译原理试题及答案(二)ppt课件
编译原理陈意云课后答案.ppt
5
3.2
• 考虑文法 S -> aSbS|bSaS|ε (a) 为句子abab构造两个不同的最左推导, 以说明此文法二义 (b) 为abab构造对应的最右推导 (c) 为abab构造对应的分析树 (d) 这个文法产生的语言是什么
2019/3/22
luanj@
6
3.2 (续)
luanj@ 9
2019/3/22
3.4 (续)
• 该文法没有体现运算符 |、*、() 、并置的优 先级,因而是二义的。
R=>R|R=> a|R =>a|R*=>a|b* R=>R*=>R|R*=>a|R*=>a|b*
• E -> E’|’T | T T -> TF | F F -> F* | (E) | a | b
• (1) S=>aSbS=>abS=>abaSbS=>ababS=>abab (2) S=>aSbS=>abSaSbS=>abaSbS=>ababS=>abab • S=>aSbS=>aSb=>abSaSb=> abSab =>abab (2)
S a S ε b a S ε (1) 描述的语言是a,b数目相等的串 S b S ε S
S
( L S a L , ( L S a
2019/3/22 luanj@ 3
) S L , ) S a
3.1 (续) - (a,((a,a),(a,a)))
S =>(L) =>(L,S) =>(S,S) =>(a,S) =>(a,(L)) =>(a,(L,S)) =>(a,(S,S)) =>(a,((L),S)) =>(a,((L,S),S)) =>(a,((S,S),S)) =>(a,((a,S),S)) =>(a,((a,a),S)) =>(a,((a,a),(L))) =>(a,((a,a),(L,S))) =>(a,((a,a),(S,S))) =>(a,((a,a),(a,S))) =>(a,((a,a),(a,a))) S =>(L) =>(L,S) =>(L,(L)) =>(L,(L,S)) =>(L,(L,(L))) =>(L,(L,(L,S))) =>(L,(L,(L,a))) =>(L,(L,(S,a))) =>(L,(L,(a,a))) =>(L,(S,(a,a))) =>(L,((L),(a,a))) =>(L,((L,S),(a,a))) =>(L,((L,a),(a,a))) =>(L,((S,a),(a,a))) =>(L,((a,a),(a,a))) =>(S,((a,a),(a,a))) =>(a,((a,a),(a,a)))
编译原理试题及答案(二)ppt课件
CH.4.练习题1(P81.)
1.考虑下面文法G1:
S→a|^|(T) T→T,S|S (1) 消去G1的左递归。然后对每个非终结符,写出 不带回溯的递归子程序。
解(1) 消左后的文法G1’: S→a|^|(T) T→ST’ T’→ ,ST’|ε
2018/11/15 2
3
CH.4.练习题1(P81.)
解(1) 不带回溯的递归 子程序: T→ST’ Procedure T; Begin S; T’ end;
解(1) 不带回溯的递归 子程序: T’→,ST’|ε procedure T’; begin if sym=‘,’ then begin advance; S; T’ end End;
4
CH.4.练习题1(P81.)
(2) 经改写后的文法是否是LL(1)的? 给出它的预测分析表。
消左后的文法G1’ :
(2) 因为G1’ : ① 文法不含左递归; ② 对 S→a|^|(T) FIRST(a)={a}, FIRST(^)={^}, FIRST( (T) )={ ( }, 集合互不相交且不含ε; ③ 对 T’→,ST’|ε FIRST( ,ST’ )={ , }, FIRST(ε)={ε}, 其交集为空。 但ε∈FIRST(T’)=FIRST( ,ST’ )∩FIRST(ε)={,,ε}, 然而,FOLLOW(T’)={ ) } FIRST(T’)={,,ε} ,两者 不 相交。 所以,G1’是LL(1)文法。 5
动作, 所用产生式
.
7
CH.4.练习题3(P82.)
3.下面文法中, 哪些是LL(1)的, 说明理由。 (1) S→ABc A→ a|ε B→ b|ε。
编译原理习题及答案(课堂PPT)
.
8
《编译原理教程》习题解析
9
1.3 请画出编译程序的总框图。如果你是一个编译程 序的总设计师,设计编译程序时应当考虑哪些问题?
【解答】 编译程序总框图如图1-1所示。 作为一个编译程序的总设计师,首先要深刻理解被编 译的源语言其语法及语义;其次,要充分掌握目标指令的 功能及特点,如果目标语言是机器指令,还要搞清楚机器 的硬件结构以及操作系统的功能;第三,对编译的方法及 使用的软件工具也必须准确化。总之,总设计师在设计编 译程序时必须估量系统功能要求、硬件设备及软件工具等 诸因素对编译程序构造的影响。
《编译原理教程》习题解析
1
第一章 绪 论 第二章 词 法 分 析 第三章 语 法 分 析
.
1
《编译原理教程》习题解析
2
第一章 绪 论
1.1 完成下列选择题: (1) 下面叙述中正确的是 。
A.编译程序是将高级语言程序翻译成等价的机 器语言程序的程序
B.机器语言因其使用过于困难,所以现在计算 机根本不使用机器语言
.
5
《编译原理教程》习题解析
6
(4) 编译各阶段的工作都涉及到构造、查找或更新有 关表格,即编译过程的绝大部分时间都用在造表、查表和 更新表格的事务上。故选D。
(5) 由(1)可知,编译程序实际上实现了对高级语言程 序的翻译。故选D。
.
6
《编译原理教程》习题解析
7
1.2 计算机执行用高级语言编写的程序有哪些途径?它们 之间的主要区别是什么?
.
12
《编译原理教程》习题解析
13
图2-1 习题2.1的DFA M
编译原理习题和课件
1.1.叙述正规式(00 | 11)*( (01 | 10) (00 | 11)* (01 | 10) (00 | 11)* )*描述的语言。
答案:该正规式所描述的语言是,所有由偶数个0和偶数个1构成的串。
另外,和该正规式等价的正规式有( 00 | 11 | ( (01 | 10) (00 | 11)* (01 | 10) ) )*。
备注:一、如果题目要求转化为NFA,则方法1:按照课本P54-55(或课件compiler –03)的方法转化。
方法2:见题目1.5的方法。
二、如果题目要求转化为DFA,则方法1:先将正规式转化为NFA,再按照课本P49-51(或课件compiler –03)的方法转化。
方法2:如果掌握的非常熟练,而且正规式比较简单,则可参照题目1.6的方法直接转化。
三、如果题目要求化简DFA,或得到最简DFA,则在得到DFA后,按照课本P56-57(或课件compiler-03)的方法化简。
1.2 给出下面的正规表达式:(1)能被五整除的十进制整数(2)包含奇数个1或奇数个0的二进制数串(3)包含偶数个0和奇数个1的二进制数串答案:(1) 以0|5结尾的十进制数→长度为1的十进制数或长度大于1的十进制数→长度为1的正规式为(0|5)→长度大于1的正规式为(1|2|3|4|5|6|7|8|9) (0|1|2|3|4|5|6|7|8|9)* (0|5)→正规式为:(0|5) | (1|2|3|4|5|6|7|8|9) (0|1|2|3|4|5|6|7|8|9)*(0|5)(2) 包含奇数个1或奇数个0的二进制串→包含奇数个1 或包含奇数个0→思考ing:(偶数个1)* 一定是偶数个1构成的串,但是(奇数个1)* 一定是奇数个1构成的串吗?答案是否定的→那么为了得到奇数个1组成的串怎么办?→1(偶数个1)* 肯定是奇数个1组成的串→为了得到奇数个1的二进制串,还需要补上0→得到正规式0*10*(10*10*)*→同理,可以得到奇个数0的二进制串,1*01*(01*01*)→正规式为0*10*(10*10*)* | 1*01*(01*01*)→与之等价的正规式为0*1(0|10*1)*|1*0(1|01*0)*(3) 包含偶数个0和奇数个1的二进制数串→由1.1可知,偶数个1和偶数个0的正规式为(00 | 11)*( (01 | 10) (00 | 11)* (01 | 10) (00 | 11)* )*,先给该正规式起个名字,even_0_even_1→ (00 | 11)*( (01 | 10) (00 | 11)* (01 | 10) (00 | 11)* )*→在此基础上,我们只需将even_0_even_1与奇数个1和偶数个0构成的串连接即可→对于二进制串,起始字符为1或0→如果是1,那么剩下的部分一定是偶数个0和偶数个1,即得到1 even_0_even_1→如果是0,那么经过若干个00或11,一定会出现一个01或10,才能保证0的个数是偶数,1的个数是奇数。
编译原理陈意云-课后答案2
非二义的
E | T F bF b F * T F a
…
T F a
T
2017/8/23
luanj@
11
3.5
• 下面的条件语句文法
stmt->if expr then stmt | matched_stmt matched_stmt -> if expr then matched_stmt else stmt | other 试图消除悬空else的二义性。请证明此文法仍 是二义的。
3.1 (续) - (a,(a,a))
S =>(L) S =>(L) =>(L,S) =>(L,S) =>(S,S) =>(L,(L)) =>(a,S) =>(L,(L,S)) =>(a,(L)) =>(L,(L,a)) =>(a,(L,S)) =>(L,(S,a)) =>(a,(S,S)) =>(L,(a,a)) =>(a,(a,S)) =>(S,(a,a)) =>(a,(a,a)) =>(a,(a,a))
编译原理习题课(2)
3.1
• 考虑文法 S -> (L)|a L -> L,S|S (a) 建立句子(a,(a,a))和(a,((a,a),(a,a)))的分 析树 (b) 为(a)的两个句子构造最左推导 (c) 为(a)的两个句子构造最右推导 (d) 这个文法产生的语言是什么
2017/8/23 luanj@ 2
luanj@ 9
2017/8/23
3.4 (续)
• 该文法没有体现运算符 |、*、() 、并置的优 先级,因而是二义的。
R=>R|R=> a|R =>a|R*=>a|b* R=>R*=>R|R*=>a|R*=>a|b*
最新编译原理(课后习题答案ppt课件
10
(b) 试对于句子 not ( true or false) 构造一棵分析树.
bexpr bterm bfactor not bfactor
a S b S
(d) 此文法产生的语言是什么?
由相同个数的a和b组成的字符串.
9
1.3 考虑文法 bexpr bexpr or bterm | bterm bterm bterm and bfactor | bfactor bfactor not bfactor | ( bfactor ) | true | false
(a) 0 ( 0 | 1)* 0 由0和1组成且以0开始和结束的符号串全体.
(b) ( ( | 0 ) 1* ) * 由0和1组成的符号串全体.
(c) ( 0 | 1 )* 0 ( 0 | 1) ( 0 | 1) 由0和1组成且以000,001,010或011结束的符号串全体. 长度大于等于3且倒数第3个字符为0的01符号串全体.
16
3.4 对于下列语言分别写出它们的正规表达式:
(a) 英文字母组成的所有符号串, 要求符号串中顺序包含 五个元音字母. 令letter={非元音的英文字母} letter* (a|A) letter* (e|E) letter* (i|I) letter* (o|O) letter* (u|U) letter*
18
(e) 带有偶数个0和奇数个1的由0和1组成的符号串全体. E为带有偶数个0和1的由0和1组成的符号串全体. 即 ( 00 | 11)* ( ( 01 | 10 ) ( 00 | 11)* ( 01 | 10 ) ( 00 | 11)* )* E1E|E0E1E0E
编译原理考试习题及答案PPT课件
自底向上的语法分析是从输入的字符串出发,逐步将其归约为文法的起始符号。
自底向上的语法分析通常采用LR(0)、SLR(1)、LALR(2)等算法。
自底向上的语法分析可以检测出输入的字符串是否符合语言的语法规则,并生成相应的语法结构。
01
02
03
自底向上的语法分析
语法分析的算法和数据结构
语法分析的算法包括预测分析法、移位/归约法、LR(0)、SLR(1)、LALR(2)等。
三地址代码的生成
对三地址代码进行优化可以提高目标代码的执行效率,常见的优化技术包括常量折叠、死代码删除、循环展开等。
三地址代码的优化
循环优化
循环是程序中常见的结构之一,对循环进行优化可以提高程序的执行效率。常见的循环优化技术包括循环展开、循环合并、循环剪枝等。
要点一
要点二
死代码删除
死代码是指程序中永远不会被执行的代码,删除这些死代码可以减小目标代码的大小并提高程序的执行效率。
习题及答案解析
词法分析习题及答案解析
题目
给定一个字符串,判断它是否是合法的标识符。
答案解析
合法的标识符必须以字母或下划线开头,后面可以跟字母、数字或下划线。
题目
给定一个字符串,判断它是否是关键字。
答案解析
关键字是编程语言中预定义的保留字,不能用作标识符。例如,在C语言中,关键字包括`int`, `float`, `if`, `else`等。
答案解析
上下文无关文法是一种形式文法,它的产生式右部不依赖于左部的任何符号。这意味着产生式右部是一个终结符或一个非终结符的序列。
题目
给定一个抽象语法树,判断它是否是二叉树。
答案解析
抽象语法树是源代码的树形表示,每个节点表示源代码中的一个结构。如果一个抽象语法树中的每个节点最多有两个子节点,则它是二叉树。
编译原理(龙书)习题答案(chap2-3)省名师优质课赛课获奖课件市赛课一等奖课件
Hundreds LowHundreds | CD | D LowHundreds | CM
LowHundreds | C | CC | CCC Thousands M Thousands |
第三章 词法分析
3.2.2 试描述下列正则体现式定义旳语言:
2)全部由按词典递增序排列旳小写字母构成旳串。
a *b * z *
3)注释,即/*和*/之间旳串,且串中没有不在双引号 (“)中旳*/。
/\* ([^*"] | \*[^/] | \"([^"]*)\")* \*/
8)全部由a和b构成且不含子串abb旳串。
b *(a | ab)*
9)全部由a和b构成且不含子序列abb旳串。
第二章 一种简朴旳语法制导翻译器
2.2.1 考虑下面旳上下文无关文法:
S S S |S S |a
1)试阐明怎样使用该文法生成串 aa a
S S S S S S a S S 最左推导 aa S aa a
2)试为这个串构造一棵语法分析树。
3)该文法生成旳语言是什么? 以a为变量,+和*为二元操作符旳后缀体现式旳集合
RomanNumeral Thousands Hundreds Tens Ones | RomanNumeral Ones LowOnes | IV |V LowOnes | IX
LowOnes | I | II | III
Tens LowTens | XL | L LowTens | XC
1) a(a | b) * a
以a开头和结尾且至少包括两个字符旳a,b字符串旳集合
2) (( | a)b*) *
编译原理试题及答案(二)ppt课件
else error
end
else error
End;
精选课件
33
CH.4.练习题1(P81.)
解(1) 不带回溯的递归 解(1) 不带回溯的递归
子程序:
子程序:
T→ST’ Procedure T; Begin
S; T’ end;
T’→,ST’|ε procedure T’; begin
if sym=‘,’ then begin advance; S;
FIRST(C)={ c,d } 均不含ε。
所以,文法是LL(1)文法。
精选课件
11 11
程序设计语言
Chapter 7. 语义分析和中 间代码产生
P217-1
a*(-b+c) 后缀式:ab-c+* a+b*(c+d/e) 后缀式:abcde/+*+ -a+b*(-c+d) 后缀式:a-bc-d+*+ not A or not(C or not D)
精选课件
99
CH.4.练习题3(P82.)
3.下面文法中, 哪些是LL(1)的, 说明理由。 (3) S→ABBA A→ a|ε B→ b|ε。
解,虽然
FOLLOW(S)={#}
① 文法不含左递归;
FIRST(S)={a, b,ε}
② 对 A→a|ε,其候选式的FIRST集合不相交;
对 B→b|ε,其候选式的FIRST集合也不相交;
while A ≤ D do
109:(j≤,A,D,111)
A:=A+2;
110:(j,-,-,100)
111:(+,A,‘2’,T2)
编译原理例题与习题解答PPT课件
第27页/共85页
• 例如,假定状态 s 1和s 2经a 弧 分 别 到 达t1和t2,而t1和t 2属于现行 中的两个
不同子集,说明有一个字, t1读出后到达终态,而t2读出后不能到达终 态,或者反之,那么对于字a , s1读出a后到达终态,而s2读出a不能到 达终态,或者反之,所以s1和s2不等价。
{c,d,e} {c,d,f}
{c,d1,f}
1
{c,d}
{c,d,e,g}
{c,d,f}
③.重命名后的状态转换矩阵
I1 {b,c,d}
1 {c,dF,e}
{c,d,e}
0{c,d,e}
{c,d,e,g}
{c,d,e}
S
0
1
A(始态)
Φ
B
B
C
D
C
C
D
D
E
D
E
C
F(终态)
33
F(终态)
第33页/共E85页
40
{10,11}
{12}
第40页/共85页
I1
{1,2,3} {5,9,10,11}
{2,3} {2,3,7,8,13} {5,9,10,11} {5,9,10,11} {2,3,5,9,10,11} {5,9,10,11,13} {2,3,5,9,10,11} {5,9,10,11}
{2,3} {2,3,7,8,13} {2,3,7,8,13}
• 描述工具:正规式和有限自动机理论
ห้องสมุดไป่ตู้
• 语法规则:语法单位的形成规则。
• 语法单位通常包括:表达式、语句、子程序、 过程、函数、程序等;
2
• 描述工具:上下文无关文法
编译原理课后答案——第二章 词法分析课件
换图如图2-3所示。
学习交流PPT
8
表2-2 状态转换矩阵
f 字 符
a
b
状 态
0
2
1
1
—
2
2
2
2
学习交流PPT
9
•
将图2-3所示的DFA M′最小化。首先,
将M′的状态分成终态组{1,2}与非终态组{0}。
其 次 , 考 察 {1,2} , 由 于
{1,2}a={1,2}b={2} {1,2},所以不再将其划分 了,也即整个划分只有两组:{0}和{1,2}。令
•
(2) 画 出 与 正 规 表 达 式
a(b|a(a|b))|b(a|b)对应的NFA,如图2-23所示。
学习交流PPT
46
a
1 a
X b 2
3 b
b
a
Y a
b
图2-23 习题2.10的NFA
学习交流PPT
47
•
用子集法将图2-21的NFA确定化,如
图2-24所示。
I {X} {1} {2} {3} {Y}
规式(a|b)*b。
•
(1) 试用有限自动机的等价性证明这
两个正规式是等价的;
•
(2) 给出相应的正规文法。
•
【解答】 (1) 正规式((a|b)*|aa)*b
对应的NFA如图2-14所示。
学习交流PPT
28
3
a
a
X
b
1
2
Y
a
4
b
图2-14 正规式((a|b)*|aa)*b对应的NFA
学习交流PPT
单词符号时就调用这个子程序。每次调用时,
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
解,因为
FOLLOW(S)={#}
① 文法不含左递归;
FIRST(S)={a,b,c}
② 对 A→a|ε
候选式的FIRST集合互不相交; ε∈ FIRST(A)
但, FOLLOW(A)={b,c} FIRST(A)={a,ε} 两者不相交。
③B→b|ε
其候选式的FIRST集合互不相交; ε∈ FIRST(B)
所以,G1’是LL(1)文法。 .
5
CH.4.练习题1(P81.)
(2)构造G1’的预测分析表:
① 对S→a|^|(T)
② 对T→ST’
FIRST(a)={a}
FIRST(ST’)={a,^,(}
FIRST(^)={^}
③ 对 T’→,ST’|ε
FIRST((T))={(}
FIRST(,ST’)={,}
FOLLOW(A)={ a, b, # }, FIRST(A)={ a,ε} 两者相交。
所以,文法不是LL(1)文法。
.
10
CH.4.练习题3(P82.)
3.下面文法中, 哪些是LL(1)的, 说明理由。 (4) S→aSe|B B→bBe|C C→cCe|d。
解, 因为 ① 文法不含左递归;
FIRST(S)={a,b}
FIRST(B)={b,ε}与FIRST(ε)={ε}相交;
所以文法不是LL(1)文法。
解(2) 对 A→a|ε
因为ε∈FIRST(A)={ a,b,ε} ,FOLLOW(A)={b}, FOLLOW和FIRST两者相交。 所以文法不是LL(1)文法。
.
9
CH.4.练习题3(P82.)
集合互不相交且不含ε;
③ 对 T’→,ST’|ε
FIRST( ,ST’ )={ , }, FIRST(ε)={ε}, 其交集为空。
但ε∈FIRST(T’)=FIRST( ,ST’ )∩FIRST(ε)={,,ε},
然而,FOLLOW(T’)={ ) } FIRST(T’)={,,ε} ,两者 不
相交。
begin
advance;
S;
T’
end
End;
.
4
CH.4.练习题1(P81.)
(2) 经改写后的文法是否是LL(1)的? 给出它的预测分析表。
消左后的文法G1’ : S→a|^|(T)
T→ST’
(2) 因为G1’ : ① 文法不含左递归;
T’→ ,ST’|ε
② 对 S→a|^|(T)
FIRST(a)={a}, FIRST(^)={^}, FIRST( (T) )={ ( },
#)T’ #)T’S, #)T’S #)T’^ #)T’ #) # #
输入串
(a,^)# (a,^)# a,^)# a,^)# a,^)#
,^)# ,^)# ^)# ^)#
)# )# # #
动作, 所用产生式 .
初始;用 S , ( 查表 S→(T), 展开S 匹配(;用 T , a 查表 T→ST’ , 展开T; 用 S ,a 查表 S→ a, 展开S
② 对 S→aSe|B、B→bBe|C 和 C→cCe|d
各产生式的候选式的FIRST集合均不相交; 即
FIRST(aSe) ∩ FIRST(B)= ;
FIRST(bBe) ∩ FIRST(C)= ;
FIRST(cCe) ∩ FIRST(d)= ;
③ FIRST(S)={ a,b,c,d } ,FIRST(B)={ b,c,d }
匹配a; 用T’ , , 查表
T’→ ,ST’, 展开T’
匹配, ;用 S , ^查表
S→ ^, 展开S
匹配^ ;用 T’ , )查表
T’→ε,展 开T’
匹配 )
分析成功, 结束分析
.
7
CH.4.练习题3(P82.)
3.下面文法中, 哪些是LL(1)的, 说明理由。 (1) S→ABc A→ a|ε B→ b|ε。
2020/6/7
.
2
CH.4.练习题1(P81.)
解(1) 不带回溯的递归子程序: S→a|^|(T)
Procedure S;
Begin
if sym=‘a’ or sym=‘^’ then advance
else if sym=‘(‘ then
begin advance;
T;
if sym=‘)’ then advance
预测分析表:
FOLLOW(T’)={)}
a S S→a T T→ST’ T’
2020/6/7
^ S→^ T→ST’
( S→(T) T→ST’
) T’→ε
, T’→ ,ST’
.
#
6
CH4.1.(3) 给出对符号串(a,^) 的分析过程
步骤
0 1 2 3 4
5 6 7 8 9 10 11 12
符号栈
#S #)T( #)T #)T’S #)T’a
else error
end
else error
End;
.
3
CH.4.练习题1(P81.)
解(1) 不带回溯的递归 子程序: T→ST’ Procedure T; Begin S; T’ end;
解(1) 不带回溯的递归 子程序:
T’→,ST’|ε
procedure T’;
begin
if sym=‘,’ then
FIRST(C)={ c,d } 均不含ε。
所以,文法是LL(1)文法。
.
11
程序设计语言
Chapter 7. 语义分析和中 间代码产生
程序设计语言
Chapter 4. 自上而下 语法分析
CH.4.练习题1(P81.)
1.考虑下面文法G1: S→a|^|(T) T→T,S|S
(1) 消去G1的左递归。然后对每个非终结符,写出 不带回溯的递归子程序。
解(1) 消左后的文法G1’: S→a|^|(T) T→ST’ T’→ ,ST’|ε
但, FOLLOW(B)={c} FIRST(B)={b,ε} 两者也不相交。
所以,文法是LL(1)文法。
.
8
CH.4.练习题3(P82.)
3.下面文法中, 哪些是LL(1)的, 说明理由。 (2) S→Ab A→ a|B|ε B→ b|ε。
解(1) 因为
FOLLOW(S)={#}
对 A→a|B|ε ;
3.下面文法中, 哪些是LL(1)的, 说明理由。 (3) S→ABBA A→ a|ε B→ b|ε。
解,虽然
FOLLOW(S)={#}
① 文法不含左递归;
FIRST(S)={a, b,ε}
② 对 A→a|ε,其候选式的FIRST集合不相交;
对 B→b|ε,其候选式的FIRST集合也不相交;
但 对 A→a|ε (由 B→b|ε出发证明也可)