找到这种语言的语法

时间:2014-03-25 04:28:43

标签: grammar context-free-grammar context-free-language

我需要为以下语言找到无上下文语法:

  

L = {w来自{a,b,c,d} *:#a + 2#b = 2#c + #d}

这是我的尝试,但我怀疑这是正确的:

S -> aSd|dSa|BSC|CSB|abSdc|baScd|dcSab|cdSba|SS|λ
B -> c|dd
C -> b|aa 

1 个答案:

答案 0 :(得分:1)

您可以构建一个识别如下语言的PDA:

  • 输入中的字符ab对应于堆栈中的a
  • 字符cd对应于堆栈上的c
  • 如果堆栈为空或者顶部为a,并且输入中有a,请将其消耗并将a推送到堆栈。
  • 如果堆栈为空或者顶部为a,并且输入中有b,请将其消耗并将aa推送到堆栈。
  • 如果堆栈为空或者顶部为c,并且输入中有c,请将其消耗并将cc推送到堆栈。
  • 如果堆栈为空或者顶部为c,并且输入中有d,请将其消耗并将c推送到堆栈。
  • 如果堆栈顶部为ca位于输入上,请使用a并弹出c
  • 如果堆栈顶部为c并且b位于输入上,则使用b并弹出c,转移到另一个弹出另一个c的特殊状态如果堆栈为空,则推送a
  • ...
  • 接受状态是输入和堆栈都是空的。

这意味着您必须能够构建CFG。我认为你是在正确的轨道上,但是由于没有排序限制,这个CFG会很难写。这意味着您将拥有相同基本规则的大量排列。