也就是說,有沒有一種工具可以自動顯示給定語法的完整語言,包括突出顯示歧義(如果有的話)?告訴BNF文法是否含糊不清的最簡單方法是什麼?
回答
BNF風格的語法可能有一些特殊性,但總的來說,決定給定的上下文無關文法(如BNF)是否不明確是不可能的。
總之,不存在一個工具,因爲一般來說,該工具在數學上是不可能的。不過,可能有些特殊情況可能適用於您。
更具體地說,你可以檢查不管語法是否模棱兩可,但是你不能證明它不是。 – OrangeDog 2011-01-26 00:22:50
@OrangeDog:那麼,一般來說你不能證明它,但是對於某些語法來說是可能的(下面是一個你可以很容易地證明它的小語法:「goal = a;」)。 – 2012-04-16 23:30:04
一般來說,沒有。
但是作爲一種實用的方法,你可以做什麼,給定一個語法,是爲每個規則,列舉可能的有效終端/非終結符串,看看是否有任何規則有兩個或更多等價的派生(這將是含糊不清)。
我們的DMS Software Reengineering Toolkit是任意計算機語言的程序轉換系統,由明確的語法描述驅動。 DMS使用解析器生成器來驅動其GLR解析引擎。
DMS的解析器生成器可選地通過在所有語法規則上運行迭代加深搜索,在上面勾畫出模糊性檢查。這很實用,因爲它具有分析表來有效地指導選項的枚舉。您可以告訴它將此檢查運行到某個選定的深度。如果您選擇任意有趣尺寸的深度,可能需要很長時間,但實際上,3或4的深度足以發現大語法中引入的許多愚蠢歧義。在我們最初的語法調試過程中,我們通常會這樣做,並且在我們認爲我們已經非常正確的時候。
- 1. Scala:包含文件的最簡單方法是什麼
- 2. 告訴spring bean將特定值視爲null的最簡單方法是什麼?
- 3. 告訴應用程序是否在Lotus Notes中使用存儲表單的最簡單方法是什麼?
- 4. 在webkit中清除浮動的最簡單方法是什麼?
- 5. 在CDI擴展中,告訴注入點是否滿足的最簡單方法是什麼?
- 6. 使模塊警告致命的最簡單方法是什麼?
- 7. 告訴對象是否被修改的最好方法是什麼?
- 8. 在Objective-C中否定BOOL的最簡單方法是什麼?
- 9. 語法含糊不清:爲什麼? (問題是:「(一)」與「(AZ)」)
- 10. 從C++調用Java方法的最簡單方法是什麼?
- 11. 什麼是從Javascript調用C#方法的最簡單方法
- 12. 什麼是告訴servlet文件位置的正確方法?
- 13. 在C++中,告訴兩個字符串或二進制文件是否不同的最快方法是什麼?
- 14. 從Django發送文本最簡單的方法是什麼?
- 15. 什麼是從gfortran讀取.dbf文件的最簡單方法
- 16. 訪問Azure文件存儲的最簡單方法是什麼?
- 17. 什麼是加密word和pdf文件的最簡單方法?
- 18. 獲取XmlElement頂級文本的最簡單方法是什麼?
- 19. 創建jar文件的最簡單方法是什麼?
- 20. 在c#中加密文件最簡單的方法是什麼?
- 21. 調試ActionScript類文件最簡單的方法是什麼?
- 22. 什麼是生成DOC文件的最簡單方法?
- 23. 創建文件最簡單的方法是什麼?
- 24. MVC2:什麼是從文本框回發最簡單的方法
- 25. 什麼是最簡單的Rails文件上傳方法?
- 26. 在iPad上生成報告的最快和最簡單的方法是什麼
- 27. 計算器鍵盤算法最簡單的方法是什麼?
- 28. 什麼是更新不可變AST的最簡單方法?
- 29. 什麼是清理不可解析的csv文件的簡單方法
- 30. Groovy含糊不清的方法重載
也許這是相關的:http://cstheory.stackexchange.com/questions/4352/how-is-proving-a-context-free-language-to-be-ambiguous-undecidable – 2011-01-25 03:23:32