查找上下文无关语法生成的语言


11

这是《龙书》中的一个问题(对于翻译错误,我深表歉意,我手头没有英文版本):

该语法生成​​什么语言?

SaSbSbSaSϵ

我不知道该怎么办。书中有关语言的定义说明了这一点(本章中的内容差不多):

语言是任何解析树都可以产生的所有单词的集合。

因此,如果我想根据这种语法制作“任何”解析树,则可以仅使用前两个规则来递归地继续构建它。我搜索了一下,并得出了每个规则都必须使用一次的印象,但是我不确定。如果有人能够提供一些解决此类问题的技巧,那将非常有帮助。


1
提示:使用正则表达式
Bartosz Przybylski 2013年

有关提示,请参见下面的答案。回答您的问题:不,没有必要至少使用一次每个规则。从开始符号(或公理)开始,并应用重写规则,直到仅剩下终端符号(此处为小写)。
Hendrik

假设空字符串不是终端符号,据我所知,不可能只剩下终端符号,否则我会误会吗?
2013年


@担。空字符串消失了,因此只能以终端结尾:。例如。SaSbSaaSbbSaabbSaabbbSaaabbba
Hendrik

Answers:


6

提示:您能说出生成的单词中和的数目吗?bab

如果有人能够提供一些解决此类问题的技巧,那将非常有帮助。

这里没有一种千篇一律的食谱。通常,两个CFG产生相同的语言还是两个CFL是相同的语言,这是不确定的。一种有用的方法是尝试注意到在生产过程中保持不变的属性。


5

提示:构造一些由该语法生成​​的单词。你看到图案了吗?您可以仅通过查看规则来描述语法生成的所有单词的某些属性吗?一旦对语法生成的语言有一个(正确的)猜测,证明它就不会太困难了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.