我需要为以下语言找到无上下文语法:
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
答案 0 :(得分:1)
您可以构建一个识别如下语言的PDA:
a
和b
对应于堆栈中的a
。c
和d
对应于堆栈上的c
。a
,并且输入中有a
,请将其消耗并将a
推送到堆栈。a
,并且输入中有b
,请将其消耗并将aa
推送到堆栈。c
,并且输入中有c
,请将其消耗并将cc
推送到堆栈。c
,并且输入中有d
,请将其消耗并将c
推送到堆栈。c
且a
位于输入上,请使用a
并弹出c
。c
并且b
位于输入上,则使用b
并弹出c
,转移到另一个弹出另一个c
的特殊状态如果堆栈为空,则推送a
。这意味着您必须能够构建CFG。我认为你是在正确的轨道上,但是由于没有排序限制,这个CFG会很难写。这意味着您将拥有相同基本规则的大量排列。