这是一种常规语言吗?

Is this a regular language?

这是初始语法:

S → ε | c | bSb | aAa
A → aSa | bAb

一些结果词是:

baabaabbbbaabaab
bcb
baabaacaabaab
bbaabcbaabb
ababbaba
bbbb
ababbcbbaba
baabcbaab
aaaacaaaa
aacaa
baaaaaacaaaaaab
bbbbaacaabbbb
abaaabbaaaba
abbbaaacaaabbba

起初我写了这个正则表达式(a|b)*c?(a|b)*但是后来我发现a和b的出现总是偶数,所以这个正则表达式是错误的。考虑到自动机不能计数,我是否可以得出语言不规则的结论?非常感谢!

这种语言不规则。您可以使用 Myhill-Nerode 定理证明同样多的内容,如下所示。考虑前缀 b^n c。可以附加到此字符串以获取语法语言字符串的最短字符串是 b^n;不能将更短的字符串附加到 b^n c 以获取该语言的字符串。想象一下语言是有规律的。然后在处理前缀 b^n c 之后,DFA 必须有一条到达长度为 n 的接受状态的最短路径。但是 n 是一个任意的自然数,DFA 必须有一些固定的常量状态。这是一个矛盾,所以我们的语言没有DFA,不是正则的。

生成常规语言的非常规语法示例如下:

S -> aSa | aS | A | e
aSSaa -> Saa
A -> AA | ASA | aSaSA
SAS -> ASASSASaaSa

这不正常,甚至不是上下文无关的。但它会生成 a a* 的所有字符串的常规语言,仅由于产生式 S -> aS | e