基於SPARK的解析器比基於PLY的解析器AFAIK更慢。但是速度有多慢?它們適用於工業級編譯器嗎? 如果您有任何關於SPARK的利弊的話,我會很高興聽到。基於SPARK的解析器的性能如何?
2
A
回答
4
這些解析器的速度大多是它們支持的語法的屬性。 SPARK支持Earley語法,PLY支持LALR(1)語法。關於每種語法風格的優缺點都有大量的信息,所以我只是在這裏提供一個快速的概述。
Earley和LALR解析器最大的區別在於它們如何處理語法中的重疊和含糊。
LALR(k)解析是確定性的。它只能處理語法中的重疊,可以在k個令牌的前瞻中解決。好處在於與LALR解析器兼容的語法的最壞情況運行時間爲O(n)。
Earley解析與更常見的GLR解析非常相似。他們可以處理無限的前瞻和歧義,但他們通過在每個重疊點或模糊點處將解析樹分成多個路徑來實現。這可能會導致解析器的工作量大大增加,因此Earley/GLR解析的最壞情況運行時間爲O(n^3)。
你使用哪個取決於你想要做什麼。 LALR解析器對速度來說是完美的,但Earley解析器允許比LALR解析器更靈活的語法。由於語言中含糊不清,C++不能被LALR解析器解析。它需要一個Earley/GLR解析器,並且是您爲什麼想要使用Earley/GLR解析器而不是LALR解析器的一個例子。
相關問題
- 1. 基於屬性的Unity容器解析
- 2. 基於FK的解析屬性
- 3. 基於屬性ID的XML解析
- 4. 基於C的XML解析器
- 5. 基於條件的容器解析
- 6. JSON解析器低性能
- 7. 如何用scala中的spark xml解析器解析XML中的字符串?
- 8. 如何用基於語法的解析器替換宏?
- 9. 以性能記錄爲基礎的基於時間的性能分析
- 10. PHP的HTML解析器性能
- 11. 如何解析CSV基於IF條件
- 12. Interning字符串是否有助於解析器的性能?
- 13. 用於解決性能問題的Java分析器
- 14. JSON解析器的基準?
- 15. 使用Scala解析器組合器解析基於縮進的語言
- 16. VTD解析器性能VS DOM解析器
- 17. Spark DataSet過濾器性能
- 18. SBT不使用基於SSH的解析器來解決依賴
- 19. Javascript解析性能
- 20. XML解析性能
- 21. 解析JSON性能
- 22. 基於SAX的解析器,用於android PLIST格式數據
- 23. Spark不良查詢性能:如何提高Spark上的查詢性能?
- 24. Spark性能問題(可能是由於「基本」錯誤造成的)
- 25. LINQ如何篩選基於性能
- 26. 基於Prolog的解釋器
- 27. 如何進一步改善基於Scala語法分析器 - 組合器的解析器中的錯誤消息?
- 28. 正在搜索基於Web的分析器來測量基於Web的應用程序的性能
- 29. 春 - 基於性能
- 30. 春:基於性能