實驗二 遞迴下降語法分析 作業12

2022-09-02 13:39:06 字數 2726 閱讀 2679

一、實驗目的:

利用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

char prog="

a+b*20#

", token[20]; //

程式段,單詞符號

char

ch;int syn,p,m,n,sum; //

單詞符號型別syn,整數sum

char *rwtab[6]= ;

void

e();

void

t();

void

e1();

void

t1();

void

f();

void

error();

void

scanner()

if (ch>='

a' && ch<='z'

)

syn=10;p--;

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

if(strcmp(token,rwtab[n])==0)

}else

if(ch>='

0' && ch<='9'

)

syn=11;p--;

}else

switch

(ch)

else

if (ch=='=')

else

break

;

case

'>

': m=0; token[m++]=ch;

ch=prog[p++];

if (ch=='

=')

else

break

;

case':

': m=0; token[m++]=ch;

ch=prog[p++];

if (ch=='

=')

else

break

;

case'+

': syn=13;token[0]=ch;break

;

case'-

': syn=14;token[0]=ch;break

;

case'*

': syn=15;token[0]=ch;break

;

case'/

': syn=16;token[0]=ch;break

;

case'=

': syn=25;token[0]=ch;break

;

case';

': syn=26;token[0]=ch;break

;

case'(

': syn=27;token[0]=ch;break

;

case')

': syn=28;token[0]=ch;break

;

case'#

': syn=0; token[0]=ch;break

;

default : syn=-1;token[0]=ch;

}}void

e()void

e1()

else

if (syn==0 || syn==28

)

else

error();

} void

t()void

t1()

else

if (syn==0 || syn==28 || syn==13

)

else

error();

}void

f()

else

if (syn==11 || syn==10

) scanner();

else

error();

}void

error()

main()

作業12 實驗二 遞迴下降語法分析

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

作業12 遞迴下降語法分析

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

實驗二 遞迴下降語法分析

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