【发布时间】:2020-01-03 11:12:28
【问题描述】:
这是最初的语法:
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的出现总是偶数,所以这个正则表达式是错误的。考虑到自动机不能计数,我可以断定语言不规则吗?非常感谢!
【问题讨论】:
-
你的直觉是正确的。决定常规语言的 DFA 不能保留除机器所处状态之外的任何其他数据,因此它只能使用状态“计数”。表达这一点的更正式的方式是抽水引理 (en.wikipedia.org/wiki/Pumping_lemma_for_regular_languages),它可以让您找到您的语言中任意长度的字符串的示例,该示例可以“抽水”到不是您的语言的字符串中。一个很好的示例起始字符串是
b^ncb^n,因为无论这个字符串如何被抽取,结果都不是你的语言。 -
@Welbog 谢谢!如果你不介意,你能给我一个简单的非正则语法的例子吗?
标签: grammar context-free-grammar regular-language