手工打造編譯器之語義分析1

2021-05-23 21:51:44 字數 887 閱讀 9301

語義分析階段的任務是:將變數的定義與它們的各個使用聯絡起來,檢查每乙個表示式是否有正確的型別,並將抽象語法變為更簡單的更適合生成機器**的表示。

符號表是繫結的集合。這些繫結是識別符號與其含義的一種對映關係。因為作用域的改變,符號表也隨之改變。如下面的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 語言的意義 編譯器的語義分析階段將變數與其用法關聯起來,檢查每個表示式是否有正確的型別,還有,將抽象的語法翻譯成更簡單的形式以 方便生成機器語言 碼 符號表將識別符號和其型別 位置關聯起來,當我們去處理變數,函式的宣告時,就是將這些資訊組織 繫結 起來,放在表裡,當需 要知道這些函...