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