平衡的parethesis的上下文无关语法

时间:2017-02-24 03:14:49

标签: context-free-grammar computation-theory

我想为以下语言设计一个无上下文语法:

  

L = {w e {(,)} * | w是平衡的}

我提出了以下语法:

  

S - > (S)S | ë

而讲座中提出的解决方案是:

  

S - > (S)| SS | ë

我无法弄清楚,我的解决方案可能会出现什么问题。 我为各种情况运行了语法,例如:

  

(()()),()()()和(())()

并且CFG都接受这些字符串。

有人可以帮忙,我的CFG不会涵盖哪些情况。或者它们都是等价的。或者达到最终状态所需的转换次数也不同。

2 个答案:

答案 0 :(得分:2)

两种语法都生成相同的语言,因此两者都不正确。

我更喜欢你的,因为它是明确的,但这不是要求的一部分。许多人似乎发现其他答案更容易理解,但这也不是要求的部分,而且这是一个非常主观的标准。

答案 1 :(得分:1)

rici是正确的。要显示语法是等效的(它们生成相同的语言),您可以显示一个语句能够复制另一个语法,从而生成相同的字符串。

例如,建议的语法可以生成(S)SE,如下所示:

`S => SS => (S)S` and `S => E`.

您的语法可以复制其他语法如下:

`S => (S)S => (S)`
`S => E`

对于S => SS,您实际上无法复制该语法或讲座中语法可以使用的任何其他S^n。没关系,因为只要覆盖了一串终端,就不需要覆盖所有这些。对于这一点,请注意S^n最终必须将其S的所有内容更改为(S)(另一条规则),然后从左侧开始工作:

`S => (S)S => (S)(S)S => ... => (S)^n S => (S)^n`

现在你已经完成了。

你也可以通过显示(a)你的语法生成的每个字符串都在L来证明它; (b)如果一个字符串在L中,那么你的语法就会生成它。您可以通过引导来完成此操作,例如,括号对的数量。

基本情况:对于n = 0,字符串为E,此内容位于Ln = 0唯一的字符串是E,它是由我们的语法生成的。

归纳假设:由我们的语法生成的包括k个括号的所有字符串都在L中,而L中的所有字符串都包含{{1}我们的语法生成了一对括号。

归纳步骤:我们显示我们的语法生成的k个括号对的所有字符串都在k+1中,而L中的所有字符串都带有L个括号对由我们的语法生成。

  1. 假设我们的语法使用规则k+1生成了带w个括号的字符串k+1。然后S => (S)S =(x)y w x where y and L are words in k + 1 with fewer than w pairs of parentheses. But then they are balanced by the induction hypothesis. x { {1}}(x)is therefore balanced since(x)y = w`也是。

  2. 假设is balanced, thus个括号为is balanced and的字符串w位于k+1。然后,根据L的定义,L是平衡的。平衡的括号字符串必须具有相同数量的左括号和右括号,并且必须至少具有与任何前缀中的右括号一样多的左括号(因此它们必须至少具有与任何后缀中的左括号一样多的右括号)。选择第一个左括号和第一个右括号,使前缀包含相同数量的左括号和右括号;这是w的子字符串(x)。在该子字符串之后必须具有与右括号相同数量的左括号,并且必须在任何前缀中具有至少与右括号一样多的左括号(这是为了满足w平衡的条件);因此,之后发生的事情 - 我们称之为w - 也必须是一个平衡的括号字符串。作为(正确的)子串,yx必须短于y(包含较少的括号对),并且它们必须均衡,因此两者都在{{1} }。但它们都是由语法生成的,语法生成w,因为它包含生成L

  3. QED