我正在編譯mini c#的編譯器。符號表已經完成了,我所知道的下一個階段我必須構建一個抽象語法樹。 所以我的問題是: 1.爲什麼我需要一個抽象語法樹,當我已經有一個符號表,它可以容納比語法樹更多的信息。 2. AST節點應該擁有哪些屬性?最後,如果有人知道我可以使用的書或任何參考資料,請告訴我。Abstrac語法樹實現
-1
A
回答
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
相關問題
- 1. 樹算法實現C#
- 2. 實現糖語法
- 3. kd樹實現
- 4. 段樹實現
- 5. shouldComponentUpdate的語法實現?
- 6. C++ ntree實體樹實現
- 7. 語法樹
- 8. C++ AVL樹實現
- 9. R * - 樹C實現?
- 10. 範圍樹實現
- 11. 實現二叉樹
- 12. C++實現Splay樹
- 13. 段樹java實現
- 14. Mysql B +樹實現
- 15. 紅黑樹實現
- 16. 指數樹實現
- 17. 二叉樹實現
- 18. 實現常規樹
- 19. B +樹的實現
- 20. 行爲樹實現
- 21. C#minimax樹實現
- 22. 用Ruby實現樹
- 23. AVL樹的實現
- 24. 紅黑樹 - 旋轉方法實現 - C++
- 25. 從二叉樹實現二叉樹實現的線程
- 26. ANTLR的樹語法
- 27. 語法解析樹?
- 28. ANTLR解析語法 - >樹語法
- 29. AVL樹,C,旋轉實現
- 30. 使用NatTable的樹實現
你叫什麼「*符號表*」? – 2011-03-09 12:02:17
如何在AST之前檢索符號表?這沒有意義。符號表在AST的分析過程中被填充。 – Marcus 2011-03-09 12:15:30