我正在爲Java語言的一個子集編寫一個編譯器,並且在編寫掃描器期間,我想知道如何識別不是原始類型,而是來自庫的類型。例如,在Java語言中,String類型不是原始的。一般來說,我如何從庫中識別出新的類型作爲「關鍵字」,而不用提前知道它們。謝謝!從庫中識別新類型
從庫中識別新類型
回答
嘗試通過http://www.antlr.org/grammar/1152141644268/Java.g(注意type
聲明及其用法) - 它會給你一些見解。
簡而言之,當你解析源代碼時,你知道你希望看到一個類型,在字段和方法中的修飾符之後,在正式參數列表中的參數名稱之前,等等。當你知道String
是某些類型,您可以使用import
表格檢查以獲取全名,並在類路徑中查找實際的類。
現在,正如巴特在評論(現在刪除)中提到的那樣,真正的決議發生在管道後面。在解析階段,您只創建一個節點,說您有一個type
這是一個Identifier
這是String
。所以現在的答案是,「你不知道」。
更新:嘗試以下this thesis,它應該幫助你。
@alf當你說import table時,你是指該源代碼文件中所有導入的列表。另外,當你說「然後去類路徑中找到實際的類」,這是否意味着去那個目錄,並檢查天氣存在一個與類型(類)名稱相同的名稱的文件名,如果它確實存在,那麼它已驗證?謝謝 – 2012-01-08 19:59:10
@MikeG是的,我願意;不,你不要馬上去目錄:你有[使用的一系列資源](http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/javac.html#搜索)。 – alf 2012-01-08 20:38:30
@MikeG添加了「分佈式Java編譯器:實現和評估」論文的鏈接。它對標準Java編譯器也有適當的介紹(對於當前的問題,它是第12頁)。 – alf 2012-01-09 00:15:40
- 1. ExpressJS識別文件類型
- 2. 無法識別的類型
- 3. 識別滾動的類型
- 4. 識別哈希類型
- 5. 如何識別泛型類?
- 6. 未識別Json類型
- 7. 識別噪音類型
- 8. Java庫類未識別?
- 9. 從另一種方法/類中識別android intent類型?
- 10. Visual Studio不識別新類
- 11. 識別Windows中的文件類型
- 12. 識別模板中的基元類型
- 13. 無法識別數據庫中的數據類型nvarchar
- 14. 如何從url字符串中識別數據類型?
- 15. 如何從內容中識別二進制壓縮類型?
- 16. 如何從任何文本中識別字體類型
- 17. 如何從文件中識別數據類型
- 18. 識別新行
- 19. cakephp 3. *不識別新數據庫列
- 20. 字典不能識別密鑰類型(更新)
- 21. QT Creator無法識別新項目的STL類型
- 22. LINQ到數據:聰明類型識別
- 23. SharePoint如何識別文件類型?
- 24. 以編程方式識別PDF類型
- 25. 確定(識別)dc.js圖表類型
- 26. 如何識別兒童輸入類型
- 27. 物體識別/圖像分類模型
- 28. ndk-r7無法識別va_list類型
- 29. JdbcTemplate如何識別數據類型?
- 30. C++ Boost多索引類型識別
我誤解了。基於語法,類型將在源中具有已知位置。 – 2012-01-08 19:46:05