特定语言的上下文相关语法



嘿,我已经被这个问题困扰了好几天了,甚至在我的课本上看了一些示例问题和示例解决方案,我都不知道如何让这个语法发挥作用。

给出该语言的语法L:

L = { a^n^2 : n ≥ 0 }

我知道这可能是一个模糊的问题,但我真的需要一些帮助来解决这个问题。

提前感谢!

我的答案可能会来得晚。我希望它对你(或其他读者)仍然有用。

S -> a
S -> aIIIE
Finish counting:
aII -> aaFI
aFII -> aaFI
aFIE -> aa

Going on counting:
Produce "a"s and "J"s
aII -> aCaLPI
PII -> aLPI
PIE -> aRRRE
Move ALL "a"s to the left:
La -> aL
LR -> RR
Ca -> aC
Convert "R"s to "I"s:
CR -> IC
CE -> E

各州名称:

S : Start
E : "End"
I : "1" 
F : "Finish"
P : "Produce"
L : "Left"
R : "Right"
C : "Convert"

说明:

让我也简要介绍一下解决方案的想法。平方数总是奇数序列的和。例如,2^2=1+3=4,3^2=1+3+5=9,依此类推。

数学上:"在1和n之间的k的2*k-1上求和"=n^2

你实际上要做的只是数奇数。说起来容易做起来难。

我的语法是这样的:

在左手边,你有前面的结果。下一个奇数由同一个非终端的奇数表示(在我的情况下为"I")。所以我像爱,爱,等等。每当你达到这种状态时,你总是决定是继续计数还是结束计数。

当你继续计数时,你需要产生I乘以"a",同时(I+2)乘以"I"。然而,"I"one_answers"a"将按顺序混合。因此,你必须引入一些将所有"a"向左移动的机制(所有的"我"都在右边)。此外,你必须始终限制创作文字的自由这样你的"当前路径"无论如何都不能离开。否则,您的生产可能会陷入困境。("F"、"P"、"L"、"R"、"C"、"E"用于此。)

我想用n=2和n=3来证明它。这应该足够了。

"*->":"产生"

n=2:

aIIIE
(aII)IE *-> (aaFI)IE
a(aFII)E *-> a(aaFI)E
aa(aFIE) *-> aa(aa)
aaaa

n=3:

aIIIE
(aII)IE *-> (aCaLPI)IE
aCaL(PII)E *-> aCaL(aLPI)E
aCaLaL(PIE) *-> aCaLaL(aRRRE)
a(Ca)LaLaRRRE *-> aaCLaLaRRRE
aaCLa(La)RRRE *-> aaCLa(aL)RRRE 
aaCLaa(LR)RRE *-> aaCLaa(RR)RRE
aaC(La)aRRRRE *-> aaC(aL)aRRRRE
aaCa(La)RRRRE *-> aaCa(aL)RRRRE
aa(Ca)aLRRRRE *-> aa(aC)aLRRRRE
aaa(Ca)LRRRRE *-> aaa(aC)LRRRRE
aaaaC(LR)RRRE *-> aaaaC(RR)RRRE
aaaa(CR)RRRRE *-> aaaa(IC)RRRRE
aaaaI(CR)RRRE *-> aaaaI(IC)RRRE
aaaaII(CR)RRE *-> aaaaII(IC)RRE
aaaaIII(CR)RE *-> aaaaIII(IC)RE
aaaaIIII(CR)E *-> aaaaIIII(IC)E
aaaaIIIII(CE) *-> aaaaIIIII(E)
aaaaIIIIIE

最新更新