Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Context free grammar 如何编写上下文无关语法? 我试图写一个CFG在字母表 { A,B } /代码>中,所有单词的起始和结尾都用相同数量的 A < /代码>,中间至少有一个 b>代码> _Context Free Grammar - Fatal编程技术网

Context free grammar 如何编写上下文无关语法? 我试图写一个CFG在字母表 { A,B } /代码>中,所有单词的起始和结尾都用相同数量的 A < /代码>,中间至少有一个 b>代码>

Context free grammar 如何编写上下文无关语法? 我试图写一个CFG在字母表 { A,B } /代码>中,所有单词的起始和结尾都用相同数量的 A < /代码>,中间至少有一个 b>代码> ,context-free-grammar,Context Free Grammar,现在我了解了CFG的基本概念、变量、产生式规则等。不幸的是,我已经没有了编写上述CFG的想法。到目前为止我只知道 S → aYXYa X → XbX | b | λ Y → ??? 我认为生产规则 S/S>和 x>代码>将给我一个字符串,其中两个**代码> a < /代码> **,两边有尽可能多的**代码> b>代码> *>。但是,我不确定如何在**b**s的两侧放置尽可能多的**a**s,同时确保每侧的**a**s数量完全相同 如有任何建议、解决方案,将不胜感激。谢谢。作为一名曾经教过这门课

现在我了解了CFG的基本概念、变量、产生式规则等。不幸的是,我已经没有了编写上述CFG的想法。到目前为止我只知道

S → aYXYa
X → XbX | b | λ
Y → ???

我认为生产规则<代码> S/S>和<代码> x>代码>将给我一个字符串,其中两个**代码> a < /代码> **,两边有尽可能多的**代码> b>代码> *>。但是,我不确定如何在**

b
**s的两侧放置尽可能多的**
a
**s,同时确保每侧的**
a
**s数量完全相同


如有任何建议、解决方案,将不胜感激。谢谢。

作为一名曾经教过这门课的前教授,我不会给你答案。不过,我会给你一个提示:

你有正确的想法把它分成两部分,a和其他。然而,你没有做对其中任何一个

首先试着写:安班然后从那里分支

希望有帮助

S → aSa | B B → b | bB s→ aSa|B B→ b | bB
这应该是你要找的CFG。无论何时开始和结束处理相同的事情,请记住,您不能保证相同的var将以相同的方式填充。因此,您必须明确这些内容。

从我的CS本科生时代开始已经有一段时间了,但这看起来是合理的:

S->aSa | bX

X->bX | E


基本上,您可以从S开始,添加任意多对a,然后切换到X,添加任意多的b。

为了确保每边都有相同数量的a,只需确保生产规则始终与a匹配。嗨,阿尔伯特,请举个例子好吗?感谢规则“X”→ XBX“B”是比必要的更复杂的,但是是的,它确实产生了任意数量的B’s。匹配的A类似于S的生产规则。每当你用A生成一个A,结束时,你的意思是我的规则应该首先在B的中间放置多个平衡A,然后把B放在中间。我的意思是你应该先写S=aSa | b。。。然后算出第二行。。。但是是的…DBendit以6秒的优势击败了我:)不用担心,也谢谢你的回答。我稍微修改了两种解决方案,使start变量只接受两边的a,并带有一个额外的变量(有点重复),以允许添加更多的a和b.:)非常感谢你!现在我终于可以继续了。:)不用谢。我有我自己的乐趣与理论计算机科学的介绍(我的大学喜欢叫它)哈哈。祝你一切顺利!:)