正则表达式 – 定期证明某种语言
在我的计算理论课中,我们有一个证明语言是常规的任务.
该语言定义为:
这种语言在我看来就像需要一个下推自动机来为此创建一台机器,但是如果有人能够推动我朝着正确的方向努力来证明这是一种常规语言.向我展示其中一种证明方法:创建NFA,DFA,正则表达式或常规语法会很有帮助. 解决方法
语言L:
是一种常规语言.确实,这种语言非常简单. L的简单英文描述是:“所有字符串的集合由’0’和’1’组成,其限制是:每个字符串以’1’开头,并且还包含至少两个’1’”. 有问题的语言描述被有目的地收集,使问题变得棘手.解决这类问题的简单方法是:阅读语言尝试理解语言中的字符串模式.尝试编写所有可能的最小字符串,然后写第二个最小的字符串,依此类推…… 让我们在前几个步骤中尝试理解语言L中允许使用哪种字符串.阅读以下几点: >语言L中的所有字符串都包含’0’和’1′ 现在,正如我所说,尝试用语言编写一些示例字符串: >一些最小的可能字符串可以是: '11' where k = 1 and y = '1' '101' where k = 1 and y = '01' '110' where k = 1 and y = '10' >还有一个例子: '111' where k = 1 and y = 11 #remember in `y` there must be atleat k ones >又一个例子’1111′,现在什么可以是k和y?字符串’1111’可以通过以下方式解释: '1111' with k = 1 and y = 111 #remember in `y` there must be atleat k ones or k = 2 and y = 11 #remember in `y` there must be atleat k ones 一些不在语言中的示例字符串: >不能在L中的字符串是’0′,’00’,’01111′,因为字符串必须以’1’开头.所以带有模式0(0 1)*的所有字符串以’0’开头都不是语言. 所以语言中的所有字符串都以’1’开头,y部分也至少包含’1′. y可以出现’1’没有限制.子串y可以是任意一串零和一串至少一个,y的正则表达式为:0 * 1(1 0)*. L的正则表达式为:10 * 1(1 0)* 现在,类似的方法可以帮助编写语言DFA,可以参考答案@ drawing minmal DFA for the given regular expression并编写常规语法阅读答案@ Left-Linear and Right-Linear Grammars. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |