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

2022-07-09 19:06:11 字數 2868 閱讀 5366

一、實驗目的:

利用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 pg[80],token[80]; //

pg用於存放輸入陣列,token用於存放輸出陣列

char

ch;int

r,syn,sum,m,i,p;

char *rwtab[6]=;

int z=0

;void

e();

void

t();

void

e1();

void

t1();

void

f();

void

getsyn()

if((ch>='

a'&&ch<='

z')||(ch>='

a'&&ch<='

z'))

token[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; token[i++]=ch;

ch=pg[p++];

if(ch=='='

)else

if(ch=='

>')

else

break

;

case

'>':

i=0; token[i++]=ch;

ch=pg[p++];

if(ch=='='

)else

break

;

case'=

':token[

0]=ch;syn=25

;

break

;

case';

':token[

0]=ch;syn=26

;

break

;

case'(

':token[

0]=ch;syn=27

;

break

;

case')

':token[

0]=ch;syn=28

;

break

;

case'#

':token[

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;}

intmain()

while(ch!='#'

); p=0

; getsyn();

e();

printf(

"分析結束!

");

getchar();

}

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

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

作業12 遞迴下降語法分析

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

實驗二 遞迴下降語法分析

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