考慮以下對允許規則在非終端右側有一個(或多個)終端的上下文無關語法的擴展。也就是說,形式的規則:擴展到CFG,它是什麼?
A b -> ...
右手邊可以是任何東西,像在上下文無關文法。特別是,需要而不是,右側末尾將具有完全相同的終端符號。在這種情況下,這個擴展會對上下文敏感。但終端不僅僅是一個上下文。有時候,這個終端被稱爲「回推」。
顯然,這不再是CFG(類型2)。它包括類型1。但是它是什麼?真的已經輸入0了嗎?
在Prolog的確定子句語法dcg中允許使用此特定擴展。 (爲了避免誤解,我在這裏不考慮Prolog的完全擴展,即我假設終端來自有限字母表,並且不是任意的術語,也不認爲Prolog的額外參數在DCG中是允許的, 0的話)
編輯:這是描述擴展一個簡單的方法:添加到窗體的CFG規則
A b -> <epsilon>
您如何知道推回對應於A b - > ...規則?爲什麼不b A - > ...? –
@CookieMonster:這就是Colmerauer的形式主義。 – false
不是必需的,尤其是沒有任何參考資料。這也可能是一件麻煩的事情。 –