12 遞迴下降語法分析

2022-07-09 19:00:20 字數 3262 閱讀 6865

一、實驗目的:

利用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 match(); //

匹配的方法

void pre(); //

對語法進行預處理

void statement(); //

匹配語法宣告(賦值)

void expression(); //

匹配運算子

void term(); //

匹配*/運算子

void factor(); //

匹配括號

char temp[500],test[500

];char

ch;const

char *keyword[6]= ; //

儲存保留字

int i=0,num,n,ednum=0,bnum=0

;int

main()

temp[i]='#'

; i++;

temp[i]='\0'

; i=0

; match();

pre();

}void

match()

if((ch>='

a'&&ch<='

z')||(ch>='

a'&&ch<='

z'))

test[n++]='\0'

;

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

if(num==6

)

break

; }

}i--;

if(num==10

) }

if(ch>='

0'&&ch<='

9')

else

else

break

;

case

'ch=temp[i++];

if(ch=='='

) else

if(ch='

>

')

else

break

;

case

'>':

ch=temp[i++];

if(ch=='='

) else

break

;

case'=

':num=25;printf("

[%c,%d]\n

",ch,num);break

;

case';

':num=26;printf("

[%c,%d]\n

",ch,num);break

;

case'(

':num=27;printf("

[%c,%d]\n

",ch,num);break

;

case')

':num=28;printf("

[%c,%d]\n

",ch,num);break

; }

}}void pre()

statement();

while(num==26

)

if(bnum!=1

)

return;}

void statement()

else

} else

}return;}

void expression()

return;}

void term()

return;}

void factor()

else

if(num==27

) else

} else

return

;}

實驗結果:

作業12 遞迴下降語法分析

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

遞迴下降語法分析

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

遞迴下降語法分析

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