L = ((a^n)(b^n+m)(a^m)) | n, m = 0, 1, 2...)
我是新來的上下文自由語法,知道基礎知識,但我一直在爲此掙扎了一段時間。構建語法需要幫助嗎?
對於初學者來說,我不知道是什麼的這部分代碼的意思是:
| n, m = 0, 1, 2...)
其次,怎麼可能有不同的指數相同的變量?我覺得我沒有得到完整的概念。
編輯:我也需要能夠構造規則來構造這個語法。
編輯:添加標籤
L = ((a^n)(b^n+m)(a^m)) | n, m = 0, 1, 2...)
我是新來的上下文自由語法,知道基礎知識,但我一直在爲此掙扎了一段時間。構建語法需要幫助嗎?
對於初學者來說,我不知道是什麼的這部分代碼的意思是:
| n, m = 0, 1, 2...)
其次,怎麼可能有不同的指數相同的變量?我覺得我沒有得到完整的概念。
編輯:我也需要能夠構造規則來構造這個語法。
編輯:添加標籤
首先,用文字描述語言。這種語言有一個特別簡潔的描述:它是以a開始的所有字符串的語言,其次是b,其次是a,其中b的數量等於a的總數(在兩側)。
接下來,我們將嘗試提出一條規則,在語言中使用字符串並生成新字符串。給定一個字符串,你可以通過在前面添加一個a,在中間添加一個b,或者在後面添加一個a,在中間添加一個b,來獲得下一個最長的字符串。空字符串也是用這種語言(n = m = 0),所以這可以作爲歸納的基礎。如果我們仔細觀察一下,我們可以得到一個更好的規則:我們可以將任何一個字符串分割成兩個字符串(a^n b^n)(a^m b^m)。由於級聯很容易處理語法,並且對於語法很容易,所以就是這樣。
我得到的規則...
S := LR
L := empty | aLb
R := empty | bRa
要獲得如aabbba,...
S := LR := aLbR := aaLbbR := aabbR := aabbbRa := aabbba
如果這是家庭作業,將它標記爲好。如果這是自學,希望你能拿走以下技巧:用英語描述語言;嘗試識別簡單的基本案例;嘗試從已經在語言中的字符串中識別出形成更復雜的字符串(即更長的字符串)的規則;重新制定你的規則和/或注意技巧,以便你可以在語法上容易的事情陳述規則;編寫語法並在幾個字符串上檢查它。
在語法中容易做什麼?語言聯合,語言連接,甚至符號對(例如a^k b^k),迴文等的匹配。
是整個問題描述/是這個作業嗎? –
是的,我只是添加了標籤。問題是要求構造一個生成以下語言的語法。我還添加了一些我不明白的Michael幫助過的東西。 – tehman