我目前正在嘗試使用boost spirit x3編寫一個編譯器。 我完成了解析器(現在沒有語義操作和錯誤處理,只是解析爲ast)。 由於我想實現支持範圍和函數調用的語言,我問自己什麼時候檢查被調用的函數是否存在? 我應該在構建ast時檢查當前範圍中是否存在函數(在使用語義操作進行解析時),還是應該在編譯ast時檢查該函數? 與範圍堆棧相同。我應該在解析,使用語義操作時,還是編譯出ast時構建範圍堆棧?語義檢查與提升精神x3
0
A
回答
1
這個問題是非常不明顯的。
其中大部分很大程度上取決於您正在實施的語言的性質(它是如何進行範圍界定的?您是否擁有詞彙範圍?關閉?您是否擁有動態堆棧?協程?變量是動態的還是完全的靜態?打字?)。
我應該在構建ast時(在使用語義操作進行解析時)檢查當前範圍中是否存在函數,還是應該在編譯ast時檢查該函數?
就像我說的,都可以工作。我通常會推薦分離問題。只需簡單地解析並在AST上進行操作(多次),思考起來就會簡單得多,並且結果更簡潔,更容易在大多數情況下擴展代碼。根據情況(例如,當想要變量在分析過程中可能隱藏某些關鍵字或某些其他情境感知謂詞時),您可能需要在範圍內維護具有已知標識符的符號表。這將 - IME - 構成設計氣味,您應該考慮是否需要複雜性。
與範圍堆棧相同。我應該在解析,使用語義操作時,還是編譯出ast時構建範圍堆棧?
再次,編譯過程中的處理通常要簡單得多。
相關問題
- 1. 解析成與提升精神X3
- 2. 編譯時間與提升精神x3
- 3. 升壓精神X3:解析成結構
- 4. 提升精神不檢查int溢出
- 5. 語義演員與提升::精神::卡爾曼::點燃
- 6. 從精神開始X3
- 7. 與升壓::精神
- 8. 提振精神X3與我目前解析限制
- 9. 提升精神或秩序
- 10. 提升精神齊期待
- 11. 提升精神的BUG?
- 12. 提升圖形和精神
- 13. 幫助提升精神ASTs
- 14. 提升精神語法以檢測登錄失敗
- 15. 升壓精神X3局部變量和獲得綜合屬性
- 16. 提振精神語義動作參數
- 17. 解析字符串對失敗。不好的精神x3語法
- 18. 用提升精神解析交錯線
- 19. 關於提升精神的建議
- 20. 使用局部變量提升精神
- 21. 提升精神:緩慢解析優化
- 22. 提升精神語法匹配嘈雜的輸入
- 23. 提升精神,從語義動作返回的值干擾規則屬性
- 24. 再合成與升壓::精神::氣
- 25. 解析一對整數與提升精神
- 26. 升壓精神QI遞歸
- 27. 精神x3:本地定義的規則定義必須附帶一個屬性?
- 28. 提升精神語法規則以提取字母數字標記
- 29. 提升精神 - 提取列表爲單個字符串
- 30. 提供了默認值提升爲解析器屬性::精神