編譯原理與技術(第二版)個人總結3

2021-10-01 15:35:31 字數 1703 閱讀 9342

語法分析程式分為自頂向下和自底向上兩種。

語法分析程式的基本目標如下:

1.能夠清楚而準確地報告發現的錯誤,如錯誤的位置和性質。

2.能夠迅速地從錯誤中恢復過來,以便繼續診斷後面可能存在的錯誤。

3.錯誤處理功能不應該明顯地影響編譯程式對正確程式的處理效率。

自頂向下分析方法是一種面向目標的分析方法,該方法從文法開始符開始,試圖推導出與輸入符號完全匹配的句子。該方法又分為確定的和不確定的兩種。

有效的無回溯的自頂向下分析程式常稱之為**分析程式。

由於分析時對輸入符號串的掃瞄是自左向右進行的,為保證能夠按照掃瞄的順序去匹配輸入的符號串,採用最左推導好些。但是這種方法要消除左遞迴,同時回溯浪費時間較多。

下面介紹first集的求法:

1.終結符的first集是其本身

2.非終結符的first集是由其推出的開頭終結符或者空串

3.非終結符a如果能推出非終結符b並且b不在a能推出的終結符之後,則將b的first集併入a的first集

例如:其中@表示空串

終結符:

i + * ( ) #

非終結符

e a t b f

產生式:

e→ta

a→+ta|@

t→fb

b→ * fb|@

f→(e)|i

求出的first集如下:

非遞迴**分析程式用到:乙個輸入緩衝區。乙個分析棧。一張分析表。其核心是**分析程式,此外還有輸出流。

注意:這裡分析的符號串只能含有終結符,並且要消除左遞迴。從開始符開始推,根據**分析表的式子推即可,推不動或者與符號串不匹配就是語法錯誤。

下面介紹follow集的求法:

1.終結符沒有follow集

2.對於產生式:a->abc,將除去空串的first(c)加入follow(b)中

3.對於產生式:a->ab或者a->abc,(其中c可以推導出空串,c=>空串),則將follow(a)加入follow(b)中

4.把所有的follow集都補上美元符號。

注意:2.3中的c可以是終結符也可以是非終結符

例如:其中@表示空串

終結符:

i + * ( ) #

非終結符

e a t b f

產生式:

e→ta

a→+ta|@

t→fb

b→ * fb|@

f→(e)|i

求出的follow集如下:

對於g中的每乙個產生式, a -> α ,執行以下2步:

for ∀ a ∈ first(α),

}注意:a可以是空串

例如:其中@表示空串

終結符:

i + * ( ) #

非終結符

e a t b f

產生式:

e→ta

a→+ta|@

t→fb

b→*fb|@

f→(e)|i

求出的**分析表如下:

編譯原理第二版3 4答案

給出識別練習 3.3.2 中各個正規表示式所描述的語言狀態轉換圖。解答解答步驟 nfa dfa 最少狀態的 dfa 狀態轉換圖 最少狀態的 dfa 狀態轉換圖 合併不可區分的狀態 b 和 d c 最少狀態的 dfa 狀態轉換圖 合併不可區分的狀態 a 和 c 給出識別練習 3.3.5 中各個正規表示...

編譯原理第二版4 3答案

下面是乙個只包含符號 a 和 b 的正規表示式文法。它使用 替代表示並運算的字元 以避免和文法中作為元符號使用的豎線相混淆 rexpr rexpr rterm rterm rterm rterm ctor ctor ctor ctor rprimary rprimary a b對這個文法提取左公因子...

opencv交叉編譯第二版

主機 ubuntu 12.04 32bit tar xvf arm 2009q3 gcc.tg.bz2 c 預設指定的跟檔案目錄 sudo gedit etc profile source etc profile 修改檔案 export path paht opt friendly toolscha...