2014-02-14 169 views
2

我參加了一個編譯器課程,我正在重新介紹這個介紹。這是編譯器過程如何工作的一般概述。解析器或詞法分析器是否生成符號表?

但是我有點困惑。

在我當然它指出:「除了一個詞法分析器通常會訪問符號表來存儲/獲取某些源語言概念的信息」。所以這讓我相信一個詞法分析器實際上會構建一個符號表。我看到它的方式是創建令牌並存儲最小表格並指定它是什麼類型的符號。例如,像「x - > VARIABLE」一樣。

話又說回來,通過谷歌閱讀點擊率,我只能似乎找到有關解析器產生這樣一個事實含糊的信息是什麼時候?但解析階段出現在詞法分析階段之後。所以我有點困惑。

Symbol Table Population after parsing; Compiler building (美國解析器填充表)

http://www.cs.dartmouth.edu/~mckeeman/cs48/mxcom/doc/Symbols.html 說「符號表是通過遍歷語法樹建。」語法樹由解析器生成,對嗎? (解析樹)。那麼在解析器之前運行的詞法分析器如何使用這個符號表呢?

我明白,一個詞法分析器無法知道的是包含一個符號田部內的變量和其他信息的範圍。因此我明白解析器會將這些信息添加到表中。然而,詞法分析器知道一個詞是變量,聲明關鍵字等,因此它應該能夠建立一個部分(?)符號表。那麼它們可能會構成符號表的一部分嗎?

回答

5

我覺得困惑的一部分的事實,「符號表」是指在編譯過程的不同階段不同的事情,不同的人,和潛在的莖。

人們普遍認爲,詞法分析器將輸入流分成標記(有時被稱爲詞位或端子)。正如你所說,這些可以分爲不同的類型,數字,關鍵字,標識符,標點符號等等。

詞法分析器可以將識別的標識符標記存儲在符號表中,但由於詞法分析器通常不知道標識符代表什麼,並且由於相同的標識符在不同的編譯範圍中可能意味着不同的事物,所以通常是解析器 - 具有更多上下文知識 - 負責構建符號表。但是,在某些編譯器設計中,詞法分析器只是簡單地構建一個標記列表,並將其傳遞給解析器(或解析器根據需要從輸入流中請求標記),然後解析器依次生成一個解析樹(或者有時候是抽象語法樹)作爲輸出,然後通過遍歷分析樹,僅在爲某個編譯單元完成解析之後才構建符號表。

許多不同的設計是可能的。

相關問題