上下文免费语法嵌套括号,关闭可能的']'

时间:2016-06-06 17:27:45

标签: compiler-construction context-free-grammar

我对CFG比较陌生,我想知道你们中的一个人是否能够帮助我确定我当前的解决方案是否正确。我被要求生成上下文无关语法,该语法接受嵌套括号的语言,这样如果最后一个标记是右方括号,它将关闭所有剩余的左括号。

接受这些字符串的一些例子是:(((,,(()(](()()) 不接受这些字符串的一些例子是:(]),)(,())

目前我的语法如下:

  • S - > epsilon
  • S - > ()
  • S - > (]
  • S - > (S)
  • S - > (S]
  • S - > (S
  • S - > SS

从我尝试的所有示例中,包括上面列为已接受和未接受状态的示例,我认为我的CFG是正确的。我想知道是否有任何方法可以更具体地检查这一点,而不是简单地随机尝试大量的可能性,或者如果你们中的任何人能发现任何错误?

提前致谢!

更新:

我相信我找到了理想的解决方案,但我又错了。从我遇到问题的基本案例开始:

  • S->(]
  • S->(()]
  • S->()(]

从我的归纳步骤

  • S->(I]
  • S->(I()]
  • S->((I)]
  • S->(()I]
  • S->(I)(]
  • S->()I(]
  • S->()(I

  • I->()

  • I-> II
  • I->(
  • I->(I)

1 个答案:

答案 0 :(得分:2)

由于第一次制作,第二部和第三部作品是多余的(因此第四部和第五部作品将分别衍生出explicit()

但是,您的语法将派生出来,例如(](重复使用制作6然后制作1),因此它不仅识别所需的语言。