2016-12-06 37 views
1

我正在編寫一個簡單的類似C語言的編譯器。我想爲下面的例子做分析:這是我在「類型解析」傳球中處理的情況嗎?

struct Foo { 
    char* name; 
}; 
struct Foo foo; 
char* blah = foo.name; 

特別是,如果foo是未解決這一分析將處理,或者如果name是未解決等 兩種方式我的做法,這是名稱解析,即確保foo存在,name存在於foo中。然後是'類型分辨率',這是我確定存在Foo結構的地方。

第一個問題:

  • 我會得到這個權利,如果「富」結構存在的類型解析通將檢查?

我問這個,因爲我對這種方法有一個小問題。因爲名稱解析是在類型解析之前完成的,所以我們無法檢查foo.name,因爲結構Foo尚未解析,所以我們對類型,字段,類型等一無所知。

如果這是一個案例這是處理類型分辨率:

  • 我是否在名稱解析之前或之後鍵入分辨率?

如果我做域名解析類型解析:

  • 怎樣運用我的問題,我需要了解名稱解析的類型?

回答

1

我在過去採取的一種方法是將類型解析與範圍解析合併爲一個遍。

你需要建立兩個環境/表(一個帶有類型,另一個帶有名稱)。

因此在char* blah = foo.name,你必須在你的名字表foo與類型的Foo,在你的類型的表,你必須Foo與現場name一個結構。然後,您可以檢查您的字段訪問foo.name是否有效(這意味着foo已聲明,而foo的類型爲.name作爲字段)。

相關問題