語義分析階段的任務是:將變數的定義與它們的各個使用聯絡起來,檢查每乙個表示式是否有正確的型別,並將抽象語法變為更簡單的更適合生成機器**的表示。
符號表是繫結的集合。這些繫結是識別符號與其含義的一種對映關係。因為作用域的改變,符號表也隨之改變。如下面的c語言
struct m
}上面**的符號表可能為:
t1 =
t2=
這種表具有破壞恢復的功能。假設從符號表t1到
t2,它們有相同的符號,在
t1的時候
s---->type1
,在t2
的時候,
s---->type2
。在t2
的時候,查詢到的
s的資訊為
s---->type2
,這稱為破壞。當
t2的作用域終止的時候,符號表要能恢復到
t1的符號表,這個行為稱為恢復。
那麼這個符號表提供一下對外介面:
查詢,插入,作用域開始,作用域結束。
在實現上它即是乙個
hash
表(查詢),又是乙個棧(恢復)。
見書上詳述
見書上詳述
見書上詳述
補充的是對於遞迴型別
type tree =
type treelist =
書中認為中間插入一句別的語句就是非法的,即下面的描述是非法的。
type tree =
var a:int = nil
type treelist =
我把這個要求去了,改為在同乙個作用域裡面,所有的型別都提前宣告了。也就是在語義分析
type tree =
這句的時候,
treelist
的型別已經宣告過了。
手工打造編譯器之語法分析器1
語法分析 分析程式的短語結構 文法描述一種語言。文法是如下產生式 production 的集合 symbol symbol,symbol 出現在左部的符號是非終結符 nonterminate 出現在右部的排除掉非終結符就是終結符 terminate 計算first,follow,nullable集合...
編譯器之語義分析
semantic 語言的意義 編譯器的語義分析階段將變數與其用法關聯起來,檢查每個表示式是否有正確的型別,還有,將抽象的語法翻譯成更簡單的形式以 方便生成機器語言 碼 符號表將識別符號和其型別 位置關聯起來,當我們去處理變數,函式的宣告時,就是將這些資訊組織 繫結 起來,放在表裡,當需 要知道這些函...
編譯器之語義分析
semantic 語言的意義 編譯器的語義分析階段將變數與其用法關聯起來,檢查每個表示式是否有正確的型別,還有,將抽象的語法翻譯成更簡單的形式以 方便生成機器語言 碼 符號表將識別符號和其型別 位置關聯起來,當我們去處理變數,函式的宣告時,就是將這些資訊組織 繫結 起來,放在表裡,當需 要知道這些函...