我們使用antlr作爲數據點的層次結構,它們可以相互計算,其中計算由公式表示。
假設我們有來自外部測量系統的基礎數據點a1和a2。 然後,我們可以通過公式 「a1 + a2」定義一個數據點b作爲a1和a2之和。
一切工作到目前爲止,但問題是,antlr似乎回溯錯誤分支時解析通過拋出,捕獲和重新拋出NoViableAltException。
我們使用Sam Harwell的Antlr的C#端口並將其用於C#,並在VStudio 2012中進行調試。 Visual Studio捕獲並顯示第一次機會異常,這是一個相當緩慢的過程。 即使在調試器窗口中選擇不顯示第一次機會異常,它們仍然被捕獲並減慢調試器。
由於有數百個由公式定義的數據點,這些第一次機會異常會使調試非常慢。
我的問題是:有沒有辦法改進語法以減少第一次機會的次數NoViableAltException?
或者更改antlr代碼是否有意義,通過返回值實現回溯,而不是拋出/捕獲NoViableAltException?第一次機會NoViableAltException減慢調試速度
回答
我不確定ANTLR 3如何與backtrack=true
選項相互作用,因爲我個人從未在生產中使用該構造。
如果你有能力,你應該考慮updating to ANTLR 4,不需要訴諸回溯長期先行序列(事實上,有在ANTLR 4沒有
backtrack
選項)。否則,您應該更新語法以在成功解析輸入時刪除
backtrack=true
選項。即使在調試器之外,這也會顯着提高解析器的性能。
backtrack=true
選項應僅作爲實驗選項處理。它對生產代碼的影響很大,往往會導致不可預知和/或無法解釋的行爲。
我沒有明確設置backtrack = true選項。可能是我沒有正確使用術語回溯。無論如何,在解析過程中拋出許多第一次機會NoViableAltException。這是antlr的常規行爲還是語法錯誤? – Stoffelche
這意味着語法不是您輸入的正確表示,反之亦然。如果你糾正了語法或語法錯誤,它將停止拋出異常。 –
感謝您的回覆。我一直認爲這個異常是解析過程中的常規機制,因此如果它與輸入表達式的某個部分相關,則不會檢查。 – Stoffelche
- 1. 減速機第一次調用時
- 2. RandomAccessFile第一次訪問速度很慢
- 3. VisualStudio2005調試速度很慢
- 4. Visual Studio調試速度慢
- 5. 第一次調用pytz.timezone在virtualenv中速度很慢
- 6. 第一次調用WebViewClient時頁面加載速度較慢
- 7. 在iPad上第一次調用glDrawArrays的速度非常緩慢
- 8. 第一次調用.net webservice的速度很慢
- 9. Groovy在從Java第一次調用時加載速度慢
- 10. Redux會減慢開發速度嗎?
- 11. wxPython - 按鈕動畫會減慢計算機的速度
- 12. 第一次RandomAccessFile初始化速度慢,後來快速
- 13. 批減慢.mov速度
- 14. Servlet:response.setContentLength()減慢下載速度
- 15. 減慢鼠標速度
- 16. GridSeachCV優化速度減慢
- 17. parfor減慢計算速度
- 18. jQuery拖放速度減慢
- 19. XML解析速度減慢
- 20. 減慢模擬器速度
- 21. dotfuscator減慢執行速度?
- 22. tsql合併速度減慢
- 23. SubversionNotify.exe減慢顛覆速度
- 24. ISNULL減慢查詢速度
- 25. 其他進程調用GC會減慢我的遊戲速度
- 26. 爲什麼第一次運行HttpClient速度很慢但速度要快得多?
- 27. 只有調用另一個函數的函數會減慢速度嗎?
- 28. MSVC2005 std :: _ Iterator_base ::函數調試速度慢
- 29. ASP.NET Visual Studio 2013調試速度極慢
- 30. Visual Studio JavaScript調試速度極慢
我不是antlr用戶,但是這些異常是否出現在您的代碼或庫中? – rene
它們出現在圖書館和我的語法中由antlr自動生成的代碼中。 – Stoffelche