十二 實驗二 遞迴下降語法分析

2022-09-07 00:21:18 字數 2197 閱讀 1992

一、實驗目的:

利用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#includechar wsym[80],ssym[80];

char ch;

int row,syn,sum,m,i,p;

char *word[6]=;

int flag=0;

void e();

void t();

void e1();

void t1();

void f();

void getsyn()

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

ssym[m++]='\0';

p--;

syn=10;

for(i=0;i<6;i++)

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

p--;

syn=11;

}else switch(ch)else

break;

case '

i=0;

ssym[i++]=ch;

ch=wsym[p++];

if(ch=='=')else if(ch=='>')else

break;

case '>':

i=0;

ssym[i++]=ch;

ch=wsym[p++];

if(ch=='=')else

break;

case '=':

ssym[0]=ch;syn=25;

break;

case ';':

ssym[0]=ch;syn=26;

break;

case '(':

ssym[0]=ch;syn=27;

break;

case ')':

ssym[0]=ch;syn=28;

break;

case '#':

ssym[0]=ch;syn=0;

break;

case '\n':

syn=100;

break;

default:

syn=-1;

break;

}}void e()

if(syn==6)

}else

}else

return ;

}void t()else

}else

}}void e1()

return ;

} void t1()

return ;

}void f()else if(syn==27)

}else

return ;

}int main()while(ch!='#');

p=0;

getsyn();

e();

printf("分析結束!");

實驗二 遞迴下降語法分析

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

實驗二 遞迴下降語法分析

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

實驗二 遞迴下降語法分析

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