第6章P231:1、构造产生下列语言的CFG(2) {1n02m1n |n,m≥1}解:需保证1的个数相等且0的个数为偶数S1S1|1A1A00A|00(4)含有相同个数的0和1的所有0、1串S0AS|1BS|εA1|0AAB0|1BB错解1: S10S|01S|10|01|ε错解2: S1S0|0S1|1A0|0A1, A10|01|ε(推不出0110)错解3: S10S|1S0|S10|01S|0S1|S01|ε(推不出00111100)讨论: 不能限制0和1必须在同一次推导中都出现15、构造与下列文法(原题中去产生式后的文法)等价的CNFS a|b|aB|aBB|bA|bAAB aa|aB|Ba|aBaA bb|bbA解:第一步S a|b|B a B|B a BB|B b A|B b AAB B a B a|B a B|BB a|B a BB aA B b B b|B b B b AB a aB b b 第二步S a|b|B a B|B a B1|B b A|B b A1 B B a B a|B a B|BB a|B a B2A B b B b|B b B3B a aB b bB 1BBA 1AAB 2BB aB 3B b A讨论: 这种题需要将步骤写清, 意义在于机械化这种事情是我们的目标, 你不必加入太多自己的智慧.Ba和B a 的区别第7章P257:1、构造识别下列语言的PDA(2) L = {1n02m1n|n,m≥1}要求用两种方法做用七元组表示用推广的状态转换图表示解法1:先构造产生该语言的GNF文法,再由文法推导的启示或依定理7-3的构造方法,设计出PDA构造出产生该语言的CFGS1S1|1B1S 1SA|1BA A 1 B 0C|0CB C构造PDA M 1=({q},{0,1},{S,A,B,C}, δ1, q, S, Φ)其中δ1为:δ1(q, 1, S)={(q, SA), (q, BA)} δ1(q, 1, A)={(q, ε) } δ1(q, 0, B)={(q, C), (q, CB)} δ1(q, 0, C)={(q, ε) } 有N(M 1)= {1n 02m 1n |n,m≥1} 用推广的状态转换图如右所示:提示,还可以仿照书中例题,加入终止状态q f 及初始栈符号Z, 使N(M 1)= L(M 1)={1n 02m 1n |n,m≥1}, 注意: 如果要这样做, 请加适当的说明解法1拓展(2005级崔卫华的想法):问能否把GNF 中A a 中的a 用作00思考: 崔同学实际是想设计接受{1n a m 1n |n,m≥1}的PDA 以简化, 但又没有底气 这种想法很大胆(褒义的"大胆") 也是可行的. 过程是:先设计PDA 接受L={1n a m 1n |n,m≥1} 这儿={1,a}构造代换f: f(1)=1, f(a)=00, 则f(L)就是我们要的={1,0}上的语言, PDA 随之而定只是未向同学们介绍如何利用代换设计PDA解法2之一:可以将PDA 的工作分为3个阶段:(1)接受1并记载的阶段; (2)接受偶数个0的阶段; (3)匹配1的阶段设q 0为开始状态,q 1为接受1并记载的阶段,Z 0为初始栈符号δ2(q 0, 1, Z 0)={(q 1,AZ 0)} δ2(q 1, 1, A)={(q 1,AA)}q 1状态下读入0将进入接受0的状态q 2δ2(q 1, 0, A)={(q 2,BA)}为了接受偶数个0,可设q 3状态用于接受第2个0,这时只要将进入q 2状态时压入的B 出栈即可, q 3状态下读入0的情形同q 1状态下读入0时的情形δ2(q 2, 0, B)={(q 3, ε)} δ2(q 3, 0, A)={(q 2,BA)}在q 3状态下读入1且栈顶是A 时,进入对1的匹配阶段1,S/SA 1,S/BA 1,A/ε 0,B/C 0,B/CB 0,C/εqδ2(q4, 1, A)={(q4, ε)}正确的匹配应是q3状态下读完所有的符号,且栈中只余Z0δ2(q4, ε, Z0)={(q5, ε)}综上,设计的PDA为:M2=({q0, q1, q2, q3, q4, q5},{0,1},{A,B,Z0}, δ2, q0, Z0, {q5})有L(M2)=N(M2) = L用推广的状态转换图如下所示:解法2之二:可以将PDA的工作分为3个阶段:(1)接受1并记载的阶段;(2)接受偶数个0的阶段;(3)匹配1的阶段设q0为开始状态,q1为接受1并记载的阶段,Z0为初始栈符号δ2(q0, 1, Z0)={(q1,AZ0)}δ2(q1, 1, A)={(q1,AA)}q1状态下读入0将进入接受0的状态q2, 用栈符号B记忆δ2(q1, 0, A)={(q2,BA)}q2状态读入0且栈顶为B, 这时一定是第偶数个0, B被匹配, B出栈δ2(q2, 0, B)={( q2, ε)}q2状态读入0且栈顶为A, 这时已经出现过偶数个0, 这个零为第奇数个0, 将B压栈δ2(q2, 0, A)={(q2,BA)}在q2状态下读入1且栈顶是A时,进入对1的匹配阶段δ2(q2, 1, A)={(q3, ε)}q3状态下继续进入1和A的匹配δ2(q3, 1, A)={(q3, ε)}正确的匹配应是q3状态下读完所有的符号,且栈中只余Z0δ2(q3, ε, Z0)={(q4, ε)}综上,设计的PDA为:M2=({q0, q1, q2, q3, q4 },{0,1},{A,B,Z0}, δ2, q0, Z0, {q4})有L(M2)=N(M2) = L解法2之三(采纳2005级岳宝的思路, 贺利坚改正并整理):M2=({q0, q1, q f},{0,1},{A,B,Z0}, δ2, q0, Z0, {q f})在记忆阶段, 用A记忆读入的0, B记忆读入的1, 则有:δ2(q0, 1, Z0)={(q0,BZ0)}δ2(q0, 1, B)={(q0,BB)}设计不确定的PDA, 由记忆阶段转到匹配阶段:δ2(q0, ε, A)={(q1,A)}匹配阶段的工作, 再匹配的0的个数与栈中A的个数必相等, 即0必为偶数个:δ2(q1, 0, A)={(q1, ε)} ;匹配阶段, 再匹配的1的个数与栈中B的个数必相等:δ2(q1, 1, B)={(q1, ε)} ;进入终态:δ2(q1, ε, Z0)={(q2, ε)} ;这样, 有L(M2)=N(M2) = L解法2之四(2005级孙磊提供, 贺利坚加说明):将L看作两部分, 前面部分为1n0m, 后面部分为0m1nM2=({q0, q1, q f},{0,1},{A,B,Z0}, δ2, q0, Z0, {q f})其中: q0: 处理句子的前半部分q1: 处理句子的后半部分q f: 终止状态(1) 在q0状态时先接受1并将B压入栈δ2(q0, 1, Z0)={(q0,BZ0)}δ2(q0, 1, B)={(q0,BB)}(2) 在q0状态栈顶为B时接受一个0, 首先要将A压栈以记忆δ2(q0, 0, B)={(q0,AB)}(3) 在q0状态栈顶为A时接受一个0, 可能是前半部分的0需要记忆, 也可能是后半部分的0需要匹配δ2(q0, 0, A)={(q0,AA), (q1, ε)}(注意不定义δ2(q0, 1, A))(4)在q1状态下对读入的0和1逐个地进行匹配δ2(q1, 0, A)={(q1, ε)}δ2(q1, 1, B)={(q1, ε)}(5)当栈中只留Z0时, 清栈且进入终止状态δ2(q1, ε, Z0)={(q f, ε)}这样, 有L(M2)=N(M2) = L解法2之四(2006级的“集体智慧”,贺利坚完善):M2=({q0, q1, q2, q f},{0,1},{A,B1, B2,Z0}, δ2, q0, Z0, {q f})(1) q0状态:在读入0之前,记载1的个数,每读入一个1,在栈中压入符号Aδ2(q0, 1, Z0)={(q1,AZ0)}δ2(q1, 1, A)={(q1,AA)}(2) 在读到0后,0的个数为偶数个,第奇数个0,压入栈符号B1,第偶数个0时,用栈符号B2取代B1。
δ2(q1, 0, B2)={(q1, B1)}δ2(q1, 1, B2)={(q2, ε)}(3) 在q2状态,匹配1δ2(q2, 1, A)={(q2, ε)}δ2(q2, ε, Z0)={(q f, ε)}有L(M2)=N(M2) = L本题主要存在的问题:(1)不写解题过程的说明, 无法看清思路(考试中会强调一定要写过程)(2)不写清接受方式: 以空栈方式接受或以终止状态接受或二者均可(3)未画状态转移图(布置时有这一要求)8、构造与下列文法等价的PDA(1)S aBB|bAA, B aBB|aA|a, A bBA| b解:(根据定理7-3证明中提供的构造方法完成)有PDA M= ({q},{a,b},{S,A,B }, δ, q, S, Φ)δ (q, a, S)={(q, BB) }δ (q, b, S)={(q, AA) }δ (q, a, B)={(q, BB), (q, A), (q, ε) }δ (q, b, A)={(q, BA),(q, ε) }从而N(M)=L(G) ------一定要点出接受方式是以空栈方式接受主要问题(1)不按定理的方法构造:PDA M= ({p, q},{a,b},{S,A,B }, δ, q, S, Φ)!学会机械化的构造方法如果另起炉灶(鼓励这样做, 唯有此才能前进, 才能进步, 这也是终极目标), 但要先有前期工作.不能突然而至, 似有照猫画虎嫌疑, 结果不猫不虎.(2) 按教材上的原题做: S aBB|bAA, B aBB|aA|a, A bBA|ε有PDA M= ({q},{a,b},{S,A,B }, δ, q, S, Φ)δ (q, a, S)={(q, BB) }δ (q, b, S)={(q, AA) }δ (q, a, B)={(q, BB), (q, A), (q, ε) }δ (q, b, A)={(q, BA) }δ (q, ε, A)={(q, ε)}从而N(M)=L(G)错误!原因: 给出的CFG是GNF吗这能保证这一点, 不能这么做.消除文法S aBB|bAA, B aBB|aA|a, A bBA|ε中的空产生式, 并转换为等价的GNF, 有S aBB|bAA|bA|b, B aBB|aA|a, A bBA|bB从而有PDA M= ({q},{a,b},{S,A,B }, δ, q, S, Φ)δ (q, a, S)={(q, BB) }δ (q, b, S)={(q, AA), (q, A), (q, ε)}δ (q, a, B)={(q, BB), (q, A), (q, ε) }δ (q, b, A)={(q, BA), (q, B)}从而N(M)=L(G)11、构造CFG,产生如下PDA用空栈接受的语言(1)M=({q,p},{0,1},{A,B,C}, δ, q, A, Φ)δ(q, 0, A)={(q, B), (q, BB)}δ(q, 1, A)={(q, C), (q, CC)}δ(q, 0, B)={(q, BB), (q, BBB), (p, ε)}δ(q, 1, B)={(q, CB), (q, CCB)}δ(q, 0, C)={(q, BC), (q, BBC)}δ(q, 1, C)={(q, CC), (q, CCC), (p, ε)}δ(p, 0, B)={(p, ε)}δ(p, 1,C)={(p, ε)}解:(根据定理7-4证明中提供的构造方法完成)构造得CFG G=(V, {0,1}, P, S), 其中V={S}∪{[pAp],[pBp],[pCp],[pAq],[pBq],[pCq],[qAp],[qBp],[qCp],[qAq],[qBq],[qCq]}产生式集合P由以下产生式构成(约定符号p a,p b,p c{q,p}):首先有:S[qAp]| [qAq]由(q, B) δ(q, 0, A)有[qAp a] 0[qBp a],因p a{q,p}, 展开有:[qAp] 0[qBp]和[qAq] 0[qBq]由(q, BB) δ(q, 0, A)有[qAp b] 0[qBp a][p a Bp b]因p a,p b{q,p},展开有:[qAp] 0[qBp][pBp], [qAq] 0[qBp][pBq],[qAp] 0[qBq][qBp], [qAq] 0[qBq][qBq]因p a{q,p}展开有[qAp] 0[qBp]和[qAq] 0[qBq]由(q, C) δ(q, 1, A) 有[qAp a] 1[qCp a], …….(以下同法展开)由(q, CC) δ(q, 1, A) 有[qAp b] 0[qCp a] [p a Cp b]由(q, BB) δ(q, 0, B)有[qBp b] 0[qBp a] [p a Bp b]由(q, BBB) δ(q, 0, B)有[qBp c] 0[qBp a] [p a Bp b] [p b Bp c]由(p, ε)δ(q, 0, B)有[qBp] 0由(q, CB) δ(q, 1, B)有[qBp b] 1[qCp a] [p a Bp b]由(q, CCB) δ(q, 1, B)有[qBp c] 1[qCp a] [p a Cp b] [p b Bp c]由(q, BC) δ(q, 0, C)有[qCp b] 0[qBp a] [p a Cp b]由(q, BBC) δ(q, 0, C)有[qCp c] 0[qBp a] [p a Bp b] [p b Cp c]由(q, CC) δ(q, 1, C)有[qCp b] 1[qCp a] [p a Cp b]由(p, ε)δ(p, 0, B)有[pBp] 0由(p, ε)δ(p, 1, C)有[pCp] 1可以对上面的CFG进行化简。