2012-01-08 53 views
2

我正在爲Java語言的一個子集編寫一個編譯器,並且在編寫掃描器期間,我想知道如何識別不是原始類型,而是來自庫的類型。例如,在Java語言中,String類型不是原始的。一般來說,我如何從庫中識別出新的類型作爲「關鍵字」,而不用提前知道它們。謝謝!從庫中識別新類型

+0

我誤解了。基於語法,類型將在源中具有已知位置。 – 2012-01-08 19:46:05

回答

4

嘗試通過http://www.antlr.org/grammar/1152141644268/Java.g(注意type聲明及其用法) - 它會給你一些見解。

簡而言之,當你解析源代碼時,你知道你希望看到一個類型,在字段和方法中的修飾符之後,在正式參數列表中的參數名稱之前,等等。當你知道String是某些類型,您可以使用import表格檢查以獲取全名,並在類路徑中查找實際的類。

現在,正如巴特在評論(現在刪除)中提到的那樣,真正的決議發生在管道後面。在解析階段,您只創建一個節點,說您有一個type這是一個Identifier這是String所以現在的答案是,「你不知道」。

更新:嘗試以下this thesis,它應該幫助你。

+0

@alf當你說import table時,你是指該源代碼文件中所有導入的列表。另外,當你說「然後去類路徑中找到實際的類」,這是否意味着去那個目錄,並檢查天氣存在一個與類型(類)名稱相同的名稱的文件名,如果它確實存在,那麼它已驗證?謝謝 – 2012-01-08 19:59:10

+0

@MikeG是的,我願意;不,你不要馬上去目錄:你有[使用的一系列資源](http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/javac.html#搜索)。 – alf 2012-01-08 20:38:30

+0

@MikeG添加了「分佈式Java編譯器:實現和評估」論文的鏈接。它對標準Java編譯器也有適當的介紹(對於當前的問題,它是第12頁)。 – alf 2012-01-09 00:15:40