繁体   English   中英

证明常规语言和自动机

[英]Prove regular language and automata

这是一种语法,我想检查一下这种语言是否正常。

 L → ε | aLcLc | LL 

例如,此语法的结果是:
acc, accacc ..., aacccc, acaccc, accacc, aaacccccc, ...

我知道这不是普通语言,但如何证明呢? 建立自动机是证明它的正确方法吗? 什么是自动机。 我看不到用于构建自动机的模式。

感谢您的任何帮助!

首先,让我快速演示一下,不能仅根据语法的不规则性来推断语法的语言是否不规则。 要查看此内容,请考虑无限制的语法:

S -> SSaSS | aS | e
SaS -> aSa
aaS -> SSa

显然这不是常规语法,但是您应该能够验证它会生成a的所有字符串的无限常规语言。

也就是说,我们应该如何进行? 我们将需要弄清楚您的语法生成哪种语言,然后辩称特定的语言不能正常。 我们注意到,唯一引入终端符号的规则总是引入c两倍于a。 此外,不难看出该语言必须是无限的。 我们可以使用Myhill-Nerode定理证明这些观察结果暗示该语言必须是不规则的。

考虑此语法语言中的假设字符串的前缀a ^ n。 可以附加到此前缀末尾以给出由该语法生成​​的字符串的最短字符串为c ^(2n)。 没有更短的字符串将起作用,并且该字符串将始终起作用。 想象一下,现在我们正在为语法语言寻找正确的确定性有限自动机。 然后,无论处理前缀a ^ n的状态如何,我们都需要从那里到自动机中接受状态的最短路径的长度为2n。 但是DFA必须具有有限的多个状态,并且n是任意自然数。 我们的DFA无法在所有可能的n范围内工作(它需要具有任意多个州)。 这是一个矛盾,因此语法语言没有正确的DFA。 由于所有常规语言都具有DFA,这意味着该语法的语言不能是常规语言。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM