一、實驗目的:
利用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="
begin a:=9;x:=2*3;b:=a+x #
", token[20]; //
程式段,單詞符號
char
ch;int syn,p,m,n,sum,kk=0; //
單詞符號型別syn,整數sum,#
const
char *rwtab[6]=;
void
scanner();
void
transfer();
void
yuju();
void
statement();
void
factor();
void
expression();
void
term();
void scanner()
ch=prog[p++];
while(ch == '')
if (ch>='
a'&&ch<='z')
syn=10
; p--;
for(n=0;n<6;n++) }}
else
syn=11
; p--;
}else
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=30
; token[
0]=ch;
break
;
case')
':syn=31
; token[
0]=ch;
break
;
case'#
':syn=0
; token[
0]=ch;
break
;
default
: syn=1
; token[
0]=ch;}}
}}void
transfer()
}else}}
else
}void
yuju()
}void
statement()
else
}else
}void
expression()
}void
term()
}void
factor()
else
if (syn==30
)
else
}else }
intmain()
實驗二 遞迴下降語法分析
一 實驗目的 利用c語言編制遞迴下降分析程式,並對簡單語言進行語法分析。編制乙個遞迴下降分析程式,實現對詞法分析程式所提供的單詞序列的語法檢查和結構分析。二 實驗原理 每個非終結符都對應乙個子程式。該子程式根據下乙個輸入符號 select集 來確定按照哪乙個產生式進行處理,再根據該產生式的右端 三 ...
實驗二 遞迴下降語法分析
一 實驗目的 利用c語言編制遞迴下降分析程式,並對簡單語言進行語法分析。編制乙個遞迴下降分析程式,實現對詞法分析程式所提供的單詞序列的語法檢查和結構分析。二 實驗原理 每個非終結符都對應乙個子程式。該子程式根據下乙個輸入符號 select集 來確定按照哪乙個產生式進行處理,再根據該產生式的右端 三 ...
遞迴下降語法分析實驗
通過設計 開發乙個高階語言的遞迴下降語法分析程式,實現 對詞法分析程式所提供的單詞序列進行語法檢查和結構分析,加 深對相關課堂教學內容的理解,提高語法分析方法的實踐能力。1 理解語法分析在編譯程式中的作用,以及它與詞法分析程式的 關係 2 掌握遞迴下降語法分析方法的主要原理 3 理解遞迴下降分析法對...