一、實驗目的:
利用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#includechar wsym[80],ssym[80];char ch;
int row,syn,sum,m,i,p;
char *word[6]=;
int flag=0;
void e();
void t();
void e1();
void t1();
void f();
void getsyn()
if((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z'))
ssym[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;
ssym[i++]=ch;
ch=wsym[p++];
if(ch=='=')else if(ch=='>')else
break;
case '>':
i=0;
ssym[i++]=ch;
ch=wsym[p++];
if(ch=='=')else
break;
case '=':
ssym[0]=ch;syn=25;
break;
case ';':
ssym[0]=ch;syn=26;
break;
case '(':
ssym[0]=ch;syn=27;
break;
case ')':
ssym[0]=ch;syn=28;
break;
case '#':
ssym[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 ;
}int main()while(ch!='#');
p=0;
getsyn();
e();
printf("分析結束!");
實驗二 遞迴下降語法分析
一 實驗目的 利用c語言編制遞迴下降分析程式,並對簡單語言進行語法分析。編制乙個遞迴下降分析程式,實現對詞法分析程式所提供的單詞序列的語法檢查和結構分析。二 實驗原理 每個非終結符都對應乙個子程式。該子程式根據下乙個輸入符號 select集 來確定按照哪乙個產生式進行處理,再根據該產生式的右端 三 ...
實驗二 遞迴下降語法分析
一 實驗目的 利用c語言編制遞迴下降分析程式,並對簡單語言進行語法分析。編制乙個遞迴下降分析程式,實現對詞法分析程式所提供的單詞序列的語法檢查和結構分析。二 實驗原理 每個非終結符都對應乙個子程式。該子程式根據下乙個輸入符號 select集 來確定按照哪乙個產生式進行處理,再根據該產生式的右端 三 ...
實驗二 遞迴下降語法分析
一 實驗目的 利用c語言編制遞迴下降分析程式,並對簡單語言進行語法分析。編制乙個遞迴下降分析程式,實現對詞法分析程式所提供的單詞序列的語法檢查和結構分析。二 實驗原理 每個非終結符都對應乙個子程式。該子程式根據下乙個輸入符號 select集 來確定按照哪乙個產生式進行處理,再根據該產生式的右端 三 ...