語法分析上機實習題

2022-03-01 19:36:57 字數 1333 閱讀 3819

(一)對於如下的文法,試編寫除錯乙個語法分析程式:

《程式》→program《識別符號》;《分程式》

《分程式》→《變數說明》begin《語句表》end.

《變數說明》→var《變數說明表》;

《變數說明表》→《變數表》:《型別》 | 《變數表》:《型別》;《變數說明表》

《型別》→integer | real

《變數表》→《變數》 | 《變數》 ,《變數表》

《語句表》→《語句》 | 《語句》;《語句表》

《語句》→《賦值語句》 | 《條件語句》 | 《賦值語句》→《變數》:=《算術表示式》

《條件語句》→if《關係表示式》then《語句》else《語句》

《復合語句》→begin《語句表》end

《算術表示式》→《項》 | 《算術表示式》+《項》 | 《算術表示式》-《項》

《項》→《因式》 | 《項》*《因式》 | 《項》/《因式》

《因式》→《變數》 | 《常數》 | (《算術表示式》)

《關係表示式》→《算術表示式》《關係符》《算術表示式》

《變數》→《識別符號》

《識別符號》→《識別符號》《字母》 | 《識別符號》《數學》 | 《字母》

《常數》→《整數》 | 《浮點數》

《整數》→《數字》 | 《數字》《整數》

《浮點數》→·《整數》 | 《整數》·《整數》

《關係符》→= | < | <= | > | >= | <>

《字母》→a | b | c | ··· | x | y | z

《數字》→0 | 1 | 2 | ··· | 8 | 9

《空》→

要求和提示:

(1) 可選擇一種你感興趣的語法分析方法(算符優先、ll(1)、遞迴下降、slr(1)等)作為編制語法分析程式的依據。

(2) 對於所選定的分析方法,如有需要,應選擇一種合適的資料結構,以構造所給文法的機內表示。

(二)試編寫乙個程式,用來判定給定的文法是否為簡單優先文法(或算符優先文法)。

提示:(1) 確定文法的機內表示方法;

(2) 分別編寫計算布林矩陣的程式,為此,還需要編寫乙個計算布林矩陣b的閉包b+的子程式,供計算上述各布林矩陣時呼叫;

(3) 編制判定優先矩陣是否有多重定義元素的程式,用來判斷所給文法是否為簡單優先(算符優先)文法;

(4) 要求輸出各優先關係的布林矩陣以及有關判定結果的資訊。

(三)試編寫乙個程式,用來計算給定文法的全部first集及follow集,並判定所給文法是否為ll(1)文法。

要求:(1) 以給定的文法作為輸入(為此,需確定文法的機內表示);

(2) 程式的輸出是各first及follow集,以及所給文法是否為ll(1)文法等資訊。

編譯原理 語法分析

include include include include using namespace std define maxn 20000 int syn,p,sum,kk,m,n,row,error double dsum,pos char index 800 len 記錄指數形式的浮點數 cha...

語法分析器

部分核心 如下 first follow 計算first集,u xx.void first int u else else j if j p i rlength 當產生式右部都能推出空時 addfirst u,1 加入first集 void addfirst int u,int nch 當數值小於1...

編譯原理分知識點習題自下而上語法分析

1 已知文法g s s saa a a abb b b csd e 請證實aacabcbaadbed是文法的乙個句型,並寫出該句型的所有短語 素短語以及控制代碼。解 本題考查 句型 短語 控制代碼 素短語 等概念。因為存在從文法開始符號s到符號串aacabcbaadbed的推導過程 如圖6.1中的語...