遞迴下降語法分析

2022-08-22 13:51:12 字數 3449 閱讀 8692

一、實驗目的:

利用c語言編制遞迴下降分析程式,並對簡單語言進行語法分析。

編制乙個遞迴下降分析程式,實現對詞法分析程式所提供的單詞序列的語法檢查和結構分析。

二、實驗原理

每個非終結符都對應乙個子程式。

該子程式根據下乙個輸入符號(select集)來確定按照哪乙個產生式進行處理,再根據該產生式的右端:

三、實驗要求說明

輸入單詞串,以「#」結束,如果是文法正確的句子,則輸出成功資訊,列印「success」,否則輸出「error」,並指出語法錯誤的型別及位置。

例如:

輸入begin a:=9;x:=2*3;b:=a+x end #

輸出success

輸入x:=a+b*c  end #

輸出『end' error

四、實驗步驟

1.待分析的語言的語法(參考p90)

2.將其改為文法表示,至少包含

–語句

–條件

–表示式

3. 消除其左遞迴

4. 提取公共左因子

5. select集計算

6. ll(1)文法判斷

7. 遞迴下降分析程式

#include

#include

#include

void lrparser();

void yucu();

void scaner(); //詞法分析

void statement();//語句

void condition();//條件

void expression();//表示式

void term();//項

void factor();//因子

int kk=0;

char prog[100],token[10];//輸入程式段陣列,大小為80

int syn,i=0,ks=0,js=0,m,n,sum=0,k=0;

char ch;

const char *blz[7]= ;//保留字

int main()

printf("********************語法分析程式***************\n");

printf("請輸入源程式,以#結束:\n");

ch=getchar();

while(ch!='#')

prog[i]='#';

i++;

prog[i]='\0';

i=0;

scaner();

lrparser();

printf("語法分析結束!\n");

}void scaner()

if((ch>='a' && ch<='z') ||(ch>='a' && ch<='z'))

token[n++]='\0';

for(n=0; n<7; n++)

if(syn==6)

break;}}

i--;

if(syn==10)

} else if(ch>='0' && ch<='9') else else if(ch=='=') else

break;

case '>':

ch=prog[i++];

if(ch=='=') else

break;

case ':':

ch=prog[i++];

if(ch=='=') else

break;

case '+':

syn=13;//當為+時,數字碼為13

printf("\n",ch,syn);

break;

case '-'://當為-時,數字碼為14

syn=14;

printf("\n",ch,syn);

break;

case '*':

syn=15;//當為*時,數字碼為15

printf("\n",ch,syn);

break;

case '/':

syn=16;//當為<>時,數字碼為21

printf("\n",ch,syn);

break;

case ';':

syn=26;//當為;時,數字碼為26

printf("\n",ch,syn);

break;

case '(':

syn=27;//當為(時,數字碼為27

printf("\n",ch,syn);

break;

case ')'://當為)時,數字碼為28

syn=28;

printf("\n",ch,syn);

break;

case '='://當為=時,數字碼為25

syn=25;

break;

case '#'://當為#時,數字碼為0

遞迴下降語法分析

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

遞迴下降語法分析

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

遞迴下降語法分析實驗

通過設計 開發乙個高階語言的遞迴下降語法分析程式,實現 對詞法分析程式所提供的單詞序列進行語法檢查和結構分析,加 深對相關課堂教學內容的理解,提高語法分析方法的實踐能力。1 理解語法分析在編譯程式中的作用,以及它與詞法分析程式的 關係 2 掌握遞迴下降語法分析方法的主要原理 3 理解遞迴下降分析法對...