我正在研究有限的自动机和语法测试,我坚持这个问题:
构造一个生成L的语法: L = {a ^ n b ^ m c ^ 2n | n> = 0,m> = 0}
如何构建生成此语言的语法? 语法上下文无语法自动机
答案 0 :(得分:0)
我认为这应该可以解决问题。我在http://mdaines.github.io/grammophone/上验证了这一点。
S - > a B c c
|一个S c c
| 。
B - > b B.
|
答案 1 :(得分:0)
我发现这些问题总是有助于提出一些如何用小字符串构建大字符串的规则。首先,确定您语言中最小的字符串。在我们的例子中,我们可以从观察开始,如果n = 0,则b ^ m在我们的语言中;也就是说,b *中的w是我们的语言。然后我们注意到如果x是我们语言中的字符串,我们通过在左边添加一个a和在右边添加两个cs来获得另一个字符串;也就是说,axcc也是我们语言中的一个字符串。所以我们的规则是:
现在可以直接用CFG来写这个:
S -> B
S -> aScc
这里,S生成我们的语言L,B生成语言b *。我们通过为b *提供带有起始符号B的语法来完成语法:
(1) S -> B
(2) S -> aScc
(3) B -> e
(4) B -> B
任何字符串a ^ nb ^ mc ^ 2n都可以使用规则2的n个应用程序,规则1的1个应用程序,规则4的m个应用程序和规则3的1个应用程序生成。该语法不生成不使用该语言的字符串留作练习。