有沒有BNF無法描述的任何種類的文件格式?理論上,BNF是否足以描述所有文件格式?
回答
沒有,BNF是不夠的。 BNF描述了context-free grammars,它甚至不接近所有可以想象的語法。幾乎所有的編程語言,如果不是所有理智的數據序列化格式等是上下文,但既然你問到理論,答案是否定的。對於初學者,有context-sensitive grammars,這(如果名稱不提示你)不能用上下文無關文法表示。一個簡單的例子是n
倍a
隨後n
倍b
隨後n
倍c
(相同n
每個)。
另外,語法只描述,以及,語法或句法。根據文件格式的不同,這種格式的某些數據可能有更多的要求是有效的(格式良好) - 比如說,在編程語言中進行類型檢查。你無法用上下文無關的語法或大多數語法來描述這種語義約束。可能有一些非常複雜的理論上可以做到。當然,它們相應地不切實際。
是。 BNF只描述上下文無關語法。如果一個文件包含它自己語法的描述,讀取這樣一個文件的規則就不能用BNF表示。你需要一臺圖靈機。同樣,如果接受或拒絕文件的決定不能通過下推自動機來表示,那麼bnf也不會起作用。
BNF不能很好地描述英語語法,例如。
它可以用來描述像ELF和PE這樣的文件格式嗎? –
不,絕對不是PE(也可能不是精靈)。讀取PE文件需要取消引用指針。我想象一個ELF文件也會(我確實知道是因爲我寫了PE讀者/作者,但我沒有深入地看過ELF格式)。這不能在BNF中表達。你可以很容易地寫手寫遞歸下降,儘可能多地閱讀一個PE文件。 –
你提到'你可以很容易地寫出手寫遞歸下降來儘可能地完成PE文件的讀取,但是怎麼做? –
- 1. 是否有描述平面文件的標準格式?
- 2. VMDK描述符文件格式
- 3. cleartool描述-ahlink - 所有文件名
- 4. 是否EXEC保存文件描述符
- 5. fopen是否創建文件描述符?
- 6. 是否有與Java和Swift兼容的任何格式描述?
- 7. BNF(EBNF)來描述與可選列
- 8. 是否可以添加描述/評論到Microsoft SQL 2000+中的表格
- 9. 如何處理所有描述
- 10. 在Linux中的文件描述符的理論限制
- 11. Linux系統:檢查是否文件描述符可以讀取
- 12. 是否可以在JSDoc中描述非JavaScript文件?
- 13. 是否可以找到XToolkit的描述?
- 14. 是否可以重新定義「描述」?
- 15. 是否有所有可用的wxPython小工具的描述?
- 16. 是否有任何論文描述flex爲什麼比lex更快?
- 17. 檢查文件描述符是否有效
- 18. Linux內核 - 檢查是否有文件描述符
- 19. 字符串格式描述文本
- 20. 是否有BNF與參數
- 21. 確定文件結構(描述文件描述符)是否爲'特殊文件'(即塊/字符設備)
- 22. 文件描述符是在Unix上是其本地進程還是全局文件描述符
- 23. 套接字描述符基本上是文件描述符的同義詞嗎?
- 24. 地震2 MD2文件格式(理論)
- 25. SOCKET文件描述
- 26. 以UTF-8格式保存所有源代碼文件是否有缺點?
- 27. 是否有可用於PHP的文件描述腳本的文件擴展名?
- 28. 是否有一種REST風格的方式來描述過濾集合的URL?
- 29. Format .Net datetime的描述性文本格式,如「上個月」?
- 30. 文件描述符飢餓和阻斷文件描述符
是否可以用來形容像'ELF'和'PE'文件格式? –