作業12 遞迴下降語法分析

2022-04-01 04:01:27 字數 3424 閱讀 8319

一、實驗目的:

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

statement();

void

expression();

void

term();

void

factor();

int a=0

;char prog="

a+b*20#

",token[8]; //

程式段,單詞符號

char

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

單詞符號型別syn,整數sum

char *rwtab[6]=;

void

scaner()

token[m++]='\0'

; syn=10

; p=p-1; //

回退乙個字元

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

else

if(ch>='

0' && ch<='9'

) p=p-1

; syn=11

; }

else

else

if(ch=='='

) else

p=p+1

; token[m]='\0'

;

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=26

; token[

0]=ch;

break

;

case'(

':syn=27

; token[

0]=ch;

break

;

case')

':syn=28

; token[

0]=ch;

break

;

case'=

':syn=25

; token[

0]=ch;

break

;

case'#

':syn=0

; token[

0]=ch;

break

;

default

: syn=-1

; }

}}void

lrparser()

else

} else

return;}

void

yucu()

return;}

void

statement()

else

} else

return;}

void

expression()

return;}

void

term()

return;}

void

factor()

} else

return;}

int main(void

) while(ch!='#'

); p=0

; scaner();

lrparser();

printf(

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

getchar();

}

實驗截圖:

12 遞迴下降語法分析

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

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

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

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

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