[英]Context-free grammar for set {a,b} with specifications length/amt?
這是針對練習考試的問題,因此,請解釋答案,並提供思考類似問題的提示。 所以我有一個問題:
為一種語言接受上下文無關的語法,該語言接受字母{a,b}上的字符串,其中a的個數可被3整除或x的長度可被3整除,或兩者均可....其中x =輸入字符串。
我在如何開始這個問題上苦苦掙扎。
我了解一種接受字母{a,b}可以被3整除的字符串的語法可能是這樣的:
0 -> a1 | b1
1 -> a2 | b2
2 -> a | b | a0 | b0
下面是我到目前為止的工作,試圖同時跟蹤x的總長度和x中a的數量,以了解a和b的任何組合:
0 -> a1 | b1
1 -> a2 | b3
2 -> a | a0 | b1
3 -> a | b | a2 | b4
4 -> a1 | b5
5 -> b | b1 | a2
以上顯然是錯誤的,但我需要一些幫助。 因此,應該傳遞的示例字符串:
ababab
abaa
abbabb
根據我的經驗和學歷,最好是:
建立這種類型的語法(一定數量的終端)時,最好遞歸進行。 首先,您假設您的起始符號是您想要的字符串。 然后將其拆分為子字符串,每個子字符串仍符合您的規則,直到僅剩下終端為止。
您通過從頭開始構建字符串並嘗試計算您有多少個終端(這是上下文無關的語法無法做到的(它們可以,但僅對於有限的字符串))來加倍地解決該問題。
所以第一個規則是
S -> 3
哪里
S...starting symbol
3..."multiple of three"
“ 3的倍數”可以是3個a或3個長度的字符串。
3 -> A | L
哪里
A...string with 3 a's
L...string with length of 3
為了能夠構建任何長度的字符串,我們可以將符合相同“三規則”的任何字符串加在一起。
A -> AA
L -> LL
現在-長度為3的字符串很簡單。
L -> aM | bM
M -> aN | bN
N -> a | b
3a字符串只是三個a的字符串,在三個a之間和周圍散布着任意數量的b。
A -> bA | aB
B -> bB | aC
C -> bC | a | aD
D -> bD | b
3a字符串是從左到右構建的。 每個規則可以產生任意數量的b,直到將其用a覆蓋。 最終規則可以在右側產生任何數字b。
一切都在一起:
S -> 3
3 -> A | L
L -> LL | aM | bM
M -> aN | bN
N -> a | b
A -> AA | bA | aB
B -> bB | aC
C -> bC | a | aD
D -> bD | b
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.