2011-03-09 49 views
-1

我正在編譯mini c#的編譯器。符號表已經完成了,我所知道的下一個階段我必須構建一個抽象語法樹。 所以我的問題是: 1.爲什麼我需要一個抽象語法樹,當我已經有一個符號表,它可以容納比語法樹更多的信息。 2. AST節點應該擁有哪些屬性?最後,如果有人知道我可以使用的書或任何參考資料,請告訴我。Abstrac語法樹實現

+0

你叫什麼「*符號表*」? – 2011-03-09 12:02:17

+1

如何在AST之前檢索符號表?這沒有意義。符號表在AST的分析過程中被填充。 – Marcus 2011-03-09 12:15:30

回答

1

1) 那麼,符號表(ST)只能保存有關符號的靜態信息。但要收集這些信息,必須瞭解符號在表達式或命令中的語法位置。例如,如果你的詞法分析器告訴你它創建了一個「type」標記,那麼你的ST中就沒有任何事情要做。接下來它可以找到你一個「標識符」。所以int i;可以是命令。你需要把你的ST放入一個整型變量。但是如果序列是int i();,則需要將標識符i定義爲返回int的函數。

我很困惑,你怎麼可能已經有一個沒有AST的ST,因爲這是ST如何實現的。

2) 一般來說,AST不包含有關符號的信息。樹中符號的位置是其最有價值的信息。所以,如果你看到這樣:

int main(void) 
{ 
    int i=0; 
    if(i==0) 
    { 
    int i=1; 
    printf("i=%d\n", i); 
    } 
    printf("i=%d\n", i); 
} 

因爲在AST第二i的位置,貝婁樹,裏面的「如果」,你可以告訴你的ST有2 i的,並且他們是不同的變量。一些事先不能猜測的東西,直到你用所有符號創建一棵樹。

保重, 貝喬

PS。編輯: 的最好的書我用:

編譯原理,技術,&工具與Gradiance(PKG)(第2版) 由Alfred V.阿霍,莫妮卡·S·拉姆,拉維·塞特,傑弗裏·烏爾曼 出版商:Addison Wesley; 2版(2007年10月15日) ISBN-10:0321547985 ISBN-13:978-0321547989