沒有深入的理論和證明(你可以在維基百科中看到這個),在將上下文免費語法轉換爲喬姆斯基範式時,你必須做一些事情,你通常必須執行四個標準形式轉換。首先,您需要直接或間接識別可以產生空字符串(lambda/epsilon)的所有變量(無Lambda形式)。其次,你需要刪除單位制作 - (無單位表格)。第三,你需要找到所有生活/有用的變量(有用性)。四,你需要找到所有可到達的符號(Reachable)。在每一步你可能會或可能沒有新的語法。因此,對於你的問題,這是我想出了...
上下文無關文法
G(Variables = { A B S }
Start = S
Alphabet = { a b lamda}
Production Rules = {
S -> | AB | aB |
A -> | aab | lamda |
B -> | bbA | })
刪除的λ/小量
ERRASABLE(G) = { A }
G(Variables = { A S B }
Start = S
Alphabet = { a b }
Production Rules = {
S -> | AB | aB | B |
B -> | bbA | bb | })
刪除單元produtions
UNIT(A) { A }
UNIT(B) { B }
UNIT(S) { B S }
G (Variables = { A B S }
Start = S
Alphabet = { a b }
Production Rules = {
S -> | AB | aB | bb | bbA |
A -> | aab |
B -> | bbA | bb | })
確定活的符號小號
LIVE(G) = { b A B S a }
G(Variables = { A B S }
Start = S
Alphabet = { a b }
Production Rules = {
S -> | AB | aB | bb | bbA |
A -> | aab |
B -> | bbA | bb | })
刪除可達
REACHABLE (G) = { b A B S a }
G(Variables = { A B S }
Start = S
Alphabet = { a b }
Production Rules = {
S -> | AB | aB | bb | bbA |
A -> | aab |
B -> | bbA | bb | })
與固體非終結符替換所有混合串
G(Variables = { A S B R I }
Start = S
Alphabet = { a b }
Production Rules = {
S -> | AB | RB | II | IIA |
A -> | RRI |
B -> | IIA | II |
R -> | a |
I -> | b | })
喬姆斯基範式
G(Variables = { V A B S R L I Z }
Start = S
Alphabet = { a b }
Production Rules = {
S -> | AB | RB | II | IV |
A -> | RL |
B -> | IZ | II |
R -> | a |
I -> | b |
L -> | RI |
Z -> | IA |
V -> | IA | })
檢查時,你讀的第一件事[維基百科(http://en.wikipedia.org/wi文/ Chomsky_normal_form)? – Nayuki
澄清請求:什麼是lambda?它是一個終端符號嗎? – Nayuki
是的,爲什麼?我不知道最後一條規則是什麼意思。 Lambda是維基百科中的Epsilon,它在空格 – tehman