我必須編寫一個函數來檢查輸入字符串是否對給定語言規範有效。我認爲這將是一個標準的CFG - >喬姆斯基規範形式,然後是CYK解析,但是語言中的規則之一是防止這種情況發生。將語言規範轉換爲生產規則(不知道它是CFG還是CSG)
一些規則是簡單的,如果我們定義端子{a,b,c,d,e,f,P,Q,R,S}
,然後有效字符串是
1)任何在隔離小寫端子
2)如果「X」是一個有效的字符串,則所以是SX
但第三個原則是
3)如果X和Y是有效的輸入字符串,那麼這樣的PXY,QXY,RXY
其中{P,Q,R}
是剩餘的大寫終端,X和Y是非終結符。
這個樣子的生產規則是什麼樣的?我認爲它會像
XY -> PXY (and QXY, RXY)
但這有兩個問題。首先,這不是一個CFG規則 - 這是否意味着這種語言定義了一個CSG呢?
而第二個是,這是不行的,因爲
XY - > PXY - > PPXY
不會是一個有效的在所有情況下的消息。
開始在[CSTheory](http://cstheory.stackexchange.com/)上提出這樣的問題, –