.3、上下文无关语言练习.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
.3、上下文无关语言练习

第3章、上下文无关语言习题解答 - 练习 3.1 回忆一下例3.3中给出的CFG G4。为方便起见,用一个字母重新命名它的变元如下: E→E+T|T T→T×E|F F→(E)|a 给出下述字符串的语法分析树和派生。 a a+a a+a+a ((a)) 答: 3.2 a. 利用语言A={ambncn | m,n(0}和B={anbncm | m,n(0}以及例3.20(语言B={anbncn | n(0}不是上下文无关的),证明上下文无关语言在交的运算下不封闭。 b. 利用(a)和DeMorgan律(定理1.10),证明上下文无关语言在补运算下不封闭。 证明: a.先说明A,B均为上下文无关文法,对A构造CFG C1 S(aS|T|( T(bTc|( //生成bncn 对B,构造CFG C2 S(Sc|R|( R(aRb |( //生成anbn 由此知 A,B均为上下文无关语言。 由例3.20, A∩B={anbncn|n(0}(假设m≤n)不是上下文无关语言,所以上下文无关语言在交的运算下不封闭。 b. 用反证法。 假设CFL在补运算下封闭,则对于(a)中上下文无关语言A,B,,也为CFL。因为CFL对并运算封闭,所以也为CFL,进而知道为CFL。由DeMorgan定律,得出是CFL。 这与(a)的结论矛盾,所以CFL对补运算不封闭。 3.3 设上下文无关文法G: R→XRX|S S→aTb|bTa T→XTX|X|ε X→a|b 回答下述问题: G的变元和终结符是什么?起始变元是哪个? 答:变元是:R,X,S,T;起始变元是R。终结符是:a,b,ε 给出L(G)中的三个字符串。答:ab,ba,aab。 给出不在L(G)中的三个字符串。答:a,b,ε。 是真是假:。答:假 是真是假:。答:真 是真是假:。答:假 是真是假:。答:假 是真是假:。答:真 是真是假:。答:假 是真是假:。答:真 是真是假:。答:真 是真是假:。答:假 用普通的语言描述L(G): 3.4和3.5 给出产生下述语言的上下文无关文法和PDA,其中字母表(={0,1}。 {w | w至少含有3个1} S→A1A1A1A A→0A|1A|( 读输入中的符号。每读一个1,把一个1推入栈,每读1个0,不读栈也不写栈。同时非确定性地转移,并把1个1弹出栈。如果能转移三次,共弹出三个1,则接受这个输入,并继续读输入符号直至结束。否则拒绝这个输入。 {w | w以相同的符号开始和结束,w的长大于1} S→0A0|1A1 A→0A|1A|( 读输入中的第一个符号并将其推入栈。继续读后面的符号,同时非确定性地猜想输入符号和栈符号是否相同,如果相同则转移到接受状态,如果此时输入结束,则接受这个输入,否则继续输入。 {w | w的长度为奇数} S→ASA|0|1 A→0|1 读输入中的1个符号,转移到接受状态,再读一个符号,转移到非接受状态,如此循环。可见接受长度为奇数的字符串。 {w | w的长度为奇数且正中间的符号为0} S→ASA|0 A→0|1 读输入中的1个符号,推入1个0 。每当读到0时就非确定性地猜想已经到达字符串的中点,然后变成读输入中的1个符号,就把栈中的0弹出。当输入结束的同时栈被排空,则接受,否则拒绝。 {w | w中1比0多} 答:S→T1T | T1S // T1T可以产生1比0多1个的所有字符串。 // T1S可以产生1比0多2个以上的所有字符串。 T→0T1T | 1T0T | ε // T可以产生0和1数目相等的所有字串。 如果输入0时,栈顶元素是1,则弹出1;否则将0推入堆栈。 如果输入1时,栈顶元素是0,则弹出0;否则将1推入堆栈。 非确定地猜想栈顶元素是1,且栈中都是1,如果是,则接受;否则拒绝。 {w | w=wR,即w是一个回文,回文是顺读和倒读都一样的字符串} S→0S0|1S1|1|0|ε 如果W是回文,那么它的中点有三种可能: 字符个数是奇数,中点的字符是1。 字符个数是奇数,中点的字符是0。 字符个数是偶数,中点的字符是(。 开始时,把读到的字符推入栈中,在每一步非确定性地猜想已经到达字符串的中点。然后变成把读到的每一个字符弹出栈,检查在输入中和在栈顶读到的字符是否一样。如果它们总是一样的,并且当输入结束时栈是空的,则接受;否则拒绝。 空集 S→S 3.6 给出产生下述语言的上下文无关文法: 字母表{a,b}上a的个数是b的个数的两倍的所有字符串组成的集合。 答:S→bSaSaS|aSbSaS|aSaSbS|( 语言{anbn|n(0}的补集。见问题3.25

文档评论(0)

xyl118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档