我是CFG的新手,
有人可以给我一些关于创建生成某种语言的CFG的技巧
例如
L = {am bn | m >= n}
我得到的是:
So -> a | aSo | aS1 | e
S1 -> b | bS1 | e
但是我认为这个领域是错误的,因为有可能的数量b可能大于a.
grammar lexical-analysis context-free-grammar formal-languages
绘制minimal的直接简单方法是什么DFA,它接受与给定语言相同的语言Regular Expression(RE).
我知道可以通过以下方式完成:
Regex ---to----? NFA ---to-----? DFA ---to-----? minimized DFA
Run Code Online (Sandbox Code Playgroud)
但是有没有捷径?像(a+b)*ab
在我的计算理论课中,我们有一个证明语言是常规的任务.该语言定义为:
B = { | 在与含有至少 1秒,对}
1kyy{0, 1}*ykk >= 1
这种语言在我看来就像需要一个下推自动机来为此创建一台机器,但是如果有人能够推动我朝着正确的方向努力来证明这是一种常规语言.向我展示其中一种证明方法:创建NFA,DFA,正则表达式或常规语法会很有帮助.
我目前正在浏览CFG,看到了答案,但不确定他们是如何得到的。他们是如何在这里将其从CFG转换为正则表达式的?
S -> aS|bX|a
X -> aX|bY|a
Y -> aY|a
answer:
R.E -> (a*(a+ba*a+ba*ba*a))
Run Code Online (Sandbox Code Playgroud)