語法分析 算術表示式遞迴下降分析程式設計

2021-07-11 05:36:44 字數 1465 閱讀 5171

1、實驗目的: 

(1)掌握自上而下語法分析的要求與特點。 

(2)掌握遞迴下降語法分析的基本原理和方法。 

(3)掌握相應資料結構的設計方法。 

2、實驗內容: 

程式設計實現給定算術表示式的遞迴下降分析器。 

算術表示式文法如下: 

e-->e+t|t 

t-->t*f|f 

f-->(e)|i 

3、設計說明: 

首先改寫文法為ll(1)文法;然後為每乙個非終結符,構造相應的遞迴過程,過程的名字表示規則左部的非終結符;過程體按規則右部符號串的順序編寫。 

4、設計分析 

這個題目屬於比較典型的遞迴下降語法分析。需要先將原算術表示式方法改寫為ll(1)文法為: 

e-->te' 

e'-->+te'|ε 

t-->ft' 

t'-->*ft'|ε 

f-->(e)|i 

然後再為每個非終結符設計乙個對應的函式,通過各函式之間的遞迴呼叫從而實現遞迴下降語法分析的功能。 

具體方法為: 

(1)當遇到終結符a時,則編寫語句 

if(當前讀到的輸入符號==a)讀入下乙個輸入符號 

(2)當遇到非終結符a時,則編寫語句呼叫a()。 

(3)當遇到a-->ε規則時,則編寫語句 

if(當前讀到的輸入符號不屬於follow(a))error() 

(4)當某個非終結符的規則有多個候選式時,按ll(1)文法的條件能唯一地選擇乙個候選式進行推導. 

//源程式** 

#include 

#include 

using namespace std; 

void e(); 

void e1(); 

void t(); 

void t1(); 

void f(); 

string s; 

int i; 

int err; 

int switchnum; 

int main() 

void e()  } 

void e1() 

else if(s[i]!='#'&&s[i]!=')') 

{ cout<<"fail"<

測試用例 

(1)輸入i,預期顯示success 

(2)輸入iii,預期顯示fail 

(3)輸入a,預期顯示fail 

(4)輸入(i),預期顯示success 

(5)輸入(a),預期顯示fail 

(6)輸入(i+i),預期顯示success 

(7)輸入(i+i,預期顯示fail 

(8)輸入((i*i)+i)*i,預期顯示success 

(9)輸入((((i+i*i)))),預期顯示success 

(10)輸入(i+ia,預期顯示fail 

(11)輸入i+i*i+i*a,預期顯示fai

語法分析 算術表示式遞迴下降分析程式設計

1 實驗目的 1 掌握自上而下語法分析的要求與特點。2 掌握遞迴下降語法分析的基本原理和方法。3 掌握相應資料結構的設計方法。2 實驗內容 程式設計實現給定算術表示式的遞迴下降分析器。算術表示式文法如下 e e t t t t f f f e i 3 設計說明 首先改寫文法為ll 1 文法 然後為每...

語法分析 算術表示式遞迴下降分析程式設計

1 實驗目的 1 掌握自上而下語法分析的要求與特點。2 掌握遞迴下降語法分析的基本原理和方法。3 掌握相應資料結構的設計方法。2 實驗內容 程式設計實現給定算術表示式的遞迴下降分析器。算術表示式文法如下 e e t t t t f f f e i 3 設計說明 首先改寫文法為ll 1 文法 然後為每...

語法分析 算術表示式 C 實現

我用的是遞迴下降法,當我得到這個 分析表後,我為每個非終結符設計乙個函式,在內部通過判斷讀入的非終結符判斷該用哪乙個產生式進行替換,而主程式中就是最左推導,通過呼叫最左邊的非終結符的遞迴子程式,讓整個過程鏈式執行下去,最後能得到輸入的算術表示式,則識別成功 include include defin...