我需要找到以下语言的上下文无关语法:
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
我需要找到以下语言的上下文无关语法:
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
您可以构建一个识别语言的 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 写起来会很痛苦,因为没有排序限制。这意味着您将有许多相同基本规则的排列。