簡體   English   中英

特定語言的上下文相關語法

[英]Context Sensitive Grammar for a specific language

嘿,我已經在這個問題上呆了幾天了,甚至在我的教科書中遇到示例問題以及示例解決方案時,我都無法弄清楚如何使這種語法有效。

為此語言提供語法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,依此類推。

數學上:“ k在1和n之間的2 * k-1的和” = n ^ 2

您實際要做的只是算出奇數。 說起來容易做起來難。

我的語法是這樣的:

在左側,您獲得了先前的結果。 下一個奇數由相同非終端的奇數表示(在我的情況下為“ I”)。 所以我算是aIIIE,aaaIIIIIE等。 每當您達到該狀態時,您就始終決定是繼續進行還是完成計數。

當您繼續計數時,您需要將I乘以“ a”,並在同一時間(I + 2)乘以“ I”。 但是,“ I”和“ a”將按其順序混合。 因此,您必須引入某種機制將所有“ a”移至左側(所有“ i”移至右側)。 此外,您必須始終限制產生單詞的自由度,以使您的“當前路徑”永遠不會留下。 否則,您的產品將陷入困境。 (“ 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM