我需要帮助我使用这种语言的无上下文语法:
{b^4 n^m bd^n n^3n+m | m,n >= 0}
到目前为止,我得到了这个:
S-> bbbbXbY
X-> n | E
Y-> dYnnnX
答案 0 :(得分:1)
假设S是开始符号,E是空字(),您的语言是{b^4 n^r b d^s n^(3s+r) | r,s ≥ 0}
。
S → bbbbN
N → bD | nNn
D → dDnnn |
S
在左侧生成b^4
并切换到N
。它永远不会再次出现在派生中。N
双方生成n^r
,然后b
生成D
并切换到D
。之后,它再也不会出现在推导中。d^s n^(3s)
生成Y
并完成推导。S (start symbol) → b^4 N (applied S → bbbbN) → b^4 n^r N n^r (applied N → nNn r-times) → b^4 n^r bD n^r (applied N → bD) → b^4 n^r b d^s D (nnn)^s n^r (applied D → dDnnn s-times) → b^4 n^r b d^s (nnn)^s n^r (applied D → )
您的语法会生成空语言,因为n
将始终存在于每个派生步骤(无限递归)的乘积中。上下文也存在一个基本问题:X
的第一个序列由S → bbbbXbY
由X
生成,而Y → dYnnnX
由Y →
生成的第二个序列独立于{b^4 n^r b d^s n^(3s+t)}
}}。如果您添加bbbbXbddYnnnXnnnX
,则语言为Y → dYnnnX
。语法将是模糊的,因为n
可以生成(使用Y →
两次),X
的最终序列通常可以通过多种方式生成。
Y → dYnnnX
以停止无限递归。S → bbbbXbY
从X
的末尾移至S → bbbbXbYX
的末尾,以消除歧义。n
中的{{1}}链接在一起以强制上下文。必须由两者生成相同数量的{{1}}。现在你在这个答案的顶部有正确的语法。