我通過教程去編寫使用LLVM http://llvm.org/releases/3.1/docs/tutorial/ 玩具編譯器,但沒有太多關於符號表處理。 有一個命令llvm-nm來顯示將位代碼文件作爲輸入的符號表。它僅返回函數名稱。 LLVM編譯器如何處理沒有符號表的局部變量和循環變量?如果不是這樣,符號表是如何在如何在基於LLVM的編譯器中完成符號表處理?
4
A
回答
4
處理其IR的LLVM內存中表示不使用符號表。指令包含指向其操作數(及其用戶)的直接內存鏈接,因此,如果您有指令並想要訪問其操作數,只需按照鏈接操作即可,無需在任何符號表中執行查找。
沒有與LLVM上下文,模塊,功能和基本塊,它允許您訪問包含的元素相關的一些名單,但他們大多隻是列出,不表關聯與任何一個名字。
當然,如果你想解析一個文本文件IR(LL),你可能會需要一個符號表(或類似的東西)這樣做,創建上述鏈接;但是看到LLVM已經包含這樣的解析器(並且解析器確實使用某種方式將「名稱」與值關聯 - 請參閱BitcodeReader
的實現),沒有什麼理由這麼做。
至於用於產生IR LLVM前端 - 這是取決於你。我想說,如果你想解析一個C語言,使用符號表將會非常有用。
相關問題
- 1. 編譯器如何處理符號表中的默認值
- 2. 基於LLVM的編譯器的語言
- 3. 如何在報表生成器中處理&符號編碼?
- 4. 前端到基於LLVM的編譯器
- 5. 如何處理符號未找到java中的編譯錯誤?
- 6. 如何使鐺編譯成LLVM IR
- 7. 基於ANTLR的成熟編譯器v3
- 8. 如何有條件地引用基於編譯符號的DLL?
- 9. 來自clang/llvm編譯器的重複符號錯誤
- 10. 在NSAlert的完成處理程序中需要什麼編號?
- 11. LLVM 5.0編譯器是否等同於GCC編譯器?
- 12. 如何編譯在gcc中完成
- 13. 在C++中獲取基本的文本處理器來編譯
- 14. gcc是基於表的編譯器嗎?
- 15. 如何在基於LLVM MCJIT的JIT中解析當前進程符號?
- 16. 基於Web的編譯器
- 17. LLVM:使用llvm生成特定z80處理器的「ir」文件
- 18. 如何在Hazelcast中完成批處理?
- 19. 編譯器如何處理`(c = getchar())!= EOF`?
- 20. 編譯器如何處理const函數?
- 21. 編譯器如何處理註釋?
- 22. 編譯器階段的符號表和行號編號
- 23. 如何將前端寫入LLVM以生成編譯器
- 24. LLVM中編譯器和編譯器驅動程序的區別?
- 25. LLVM編譯器2.0錯誤?
- 26. 基於C預處理器宏,可在編譯時檢測平臺/編譯器的庫有哪些?
- 27. 編譯器如何生成事件處理程序代碼?
- 28. 如何編譯Pandoric宏中的符號?
- 29. 如何讓Java編譯器在編譯代碼中生成行號碼
- 30. 關於編譯器符號表的簡單問題
你所說的「符號表」是什麼意思? –
符號表或標識符表是一個數據結構,它存儲有關程序中每個符號的信息。它存儲類型,範圍等細節。散列表通常用於實現符號表 – ViG
您認爲它與LLVM IR有關嗎?您在那裏唯一的「符號」是導出的條目(即全局變量和函數)。 –