遞迴下降語法分析程式的設計與實現

2021-06-02 01:09:56 字數 2730 閱讀 1697

一、實驗目的:

加深對語法分析器工作過程的理解;加強對遞迴下降法實現語法分析程式的掌握;能夠採用一種程式語言實現簡單的語法分析程式;能夠使用自己編寫的分析程式對簡單的程式段進行語法翻譯。

二、實驗內容:

在實驗1的基礎上,用遞迴下降分析法編制語法分析程式,語法分析程式的實現可以採用任何一種程式設計工具。

三、實驗要求:

1. 對語法規則有明確的定義;

2. 編寫的分析程式能夠進行正確的語法分析;

3. *對於遇到的語法錯誤,能夠做出簡單的錯誤處理,給出簡單的錯誤提示,保證順利完成語法分析過程;

4. 實驗報告要求用文法的形式對語法定義做出詳細說明,說明語法分析程式的工作過程,說明錯誤處理的實現*。

四、實驗步驟:

1. 定義目標語言的語法規則;

2. 根據語法規則輸入語句段,用遞迴下降分析的方法進行語法分析,直到結束;

3. *對遇到的語法錯誤做出錯誤處理。

五、實驗內容:

1.程式設計實現給定文法的遞迴下降分析程式。

e→t|e+t

t→f|t*f

f→(e)|i

2.對文法先進行消除左遞迴。

3.分析程式由一組遞迴過程組成,文法中每個非終結符對應乙個過程幾個全域性過程和變數:

advance,把輸入串指示器ip指向下乙個輸入符號,即讀入乙個單字符號

sym,ip當前所指的輸入符號

error,出錯處理子程式

每個非終結符有對應的子程式的定義,首先在分析過程中,當需要從某個非終結符出發進行展開(推導)時,就呼叫這個非終結符對應的子程式。

4. 具體實現時:

(1)當遇到終結符,編寫: if(當前讀到的輸入符號=i)

讀入下乙個輸入符號

(2)當遇到非終結符e時,編寫語句: 呼叫e()

(3)當遇到e-->e 編寫語句 if(當前讀到的輸入符號不屬於follow(e))

error();

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

#include

using namespace std;

chara[80]; 

// 字串的存入

charsym; 

// 單個的判斷字元

inti=0; 

// 字串下標

voide(); 

// 功能識別函式

voide2(); 

// 功能識別函式

voidt(); 

// 功能識別函式

voidt2(); 

// 功能識別函式

voidf(); 

// 功能識別函式

void input(); 

// 輸入函式

void advance(); // 字串小標進一函式

。。。。。。。。

#include

#include

#include

#include

char a[50] ,b[50],d[200],e[10];

char ch;

int n1,i1=0,flag=1,n=5;

int total=0;

int e();

int e1();

int t();

int g();

int s();

int f();

void input();

void input1();

void output();

voidmain() 

while(ch!='#');

n1=j;

ch=b[0]=a[0];

printf("步驟t文法t分析串tt分析字元t剩餘串n");

f=e1();

if (f==0) return;

if (ch=='#') 

}else

printf("n");

printf("回車返回n");

getchar();

getchar();

}int e1()

int e()

int t()

int  g()

printf("%dtg-->^t",total);total++;

e[0]='g';e[1]='=';e[2]='>';e[3]='^';e[4]='#';

output();

flag=1;

input();input1();

return(1);

}int s()

printf("%dts-->^t",total);total++;

e[0]='s';e[1]='=';e[2]='>';e[3]='^';e[4]='#';

output();

flag=1;

a[i1]=ch;

input();input1();

return(1);}

int f()

else

}else if(ch=='i')

else

return(1);

}voidinput() 

void input1()

d[n]='#';

for(j=3;e[j]!='#';j++)

k=k+1;

while(d[k]!='=') 

d[n]='#';

system("pause");

}

遞迴下降語法分析

看了這篇部落格之後,總算搞明白了以前編譯原理沒搞懂的ll文法的意義。下面用這種方法實現乙個簡單的計算機器程式 其bnf正規化如下 operator operator operator operator expression 0,1,2,3,4,9 expression operator expres...

遞迴下降語法分析

一 實驗目的 利用c語言編制遞迴下降分析程式,並對簡單語言進行語法分析。編制乙個遞迴下降分析程式,實現對詞法分析程式所提供的單詞序列的語法檢查和結構分析。二 實驗原理 每個非終結符都對應乙個子程式。該子程式根據下乙個輸入符號 select集 來確定按照哪乙個產生式進行處理,再根據該產生式的右端 三 ...

遞迴下降語法分析

一 實驗目的 利用c語言編制遞迴下降分析程式,並對簡單語言進行語法分析。編制乙個遞迴下降分析程式,實現對詞法分析程式所提供的單詞序列的語法檢查和結構分析。二 實驗原理 每個非終結符都對應乙個子程式。該子程式根據下乙個輸入符號 select集 來確定按照哪乙個產生式進行處理,再根據該產生式的右端 三 ...