資源簡介
實驗2. 語法分析實驗報告
一、 實驗?zāi)康?編制一個遞歸下降分析程序,實現(xiàn)對詞法分析程序所提供的單詞序列的語法檢查和結(jié)構(gòu)分析。
二、 實驗內(nèi)容
利用C語言編制遞歸下降分析程序,并對簡單語言進行語法分析。
1、 待分析的簡單語言的語法
用擴充的BNF表示如下:
(1)::=beginend
(2)::={;}
(3)::=
(4)::=ID:=
(5)::={+|-}
(6)::={*|/}
(7)::=ID| NUM|()
2、實驗要求說明
輸入單詞串,以“#”結(jié)束,如果是文法正確的句子,則輸出成功信息,打印“success”,否則輸出“error”。

代碼片段和文件信息
#include
#include
#include
char?prog[80]token[8];
char?ch;
int?synpm=0nsum=0kk;?//p是緩沖區(qū)prog的指針,m是token的指針
char?*rwtab[6]={“begin““if““then““while““do““end“};
void?scaner();
void?factor();
void?term();
void?expression();
void?statement();
void?scaner()
{
????for(n=0;n<8;n++)?token[n]=NULL;
????ch=prog[p++];
????while(ch==‘?‘)
????????ch=prog[p++];
????if((ch>=‘a(chǎn)‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘Z‘))
????{
????????m=0;
????????while((ch>=‘A‘&&ch<=‘Z‘)||(ch>=‘a(chǎn)‘&&ch<=‘z‘)||(ch>=‘0‘&&ch<=‘9‘))
????????{
????????????token[m++]=ch;
????????????ch=prog[p++];
????????}
????????token[m++]=‘\0‘;
????????p--;
????????syn=10;
????????for(n=0;n<6;n++)
????????????if(strcmp(tokenrwtab[n])==0)
????????????{
????????????????syn=n+1;
????????????????break;
????????????}
????}
????else
????if((ch>=‘0‘&&ch<=‘9‘))
????{
????????sum=0;
????????while((ch>=‘0‘&&ch<=‘9‘))
????????{
????????????sum=sum*10+ch-‘0‘;
????????????ch=prog[p++];
????????}
????????p--;
????????syn=11;
????????if(sum>32767)
????????????syn=-1;
????}
????else
????switch(ch)
????{
????????case‘<‘:m=0;
????????????????token[m++]=ch;
????????????????ch=prog[p++];
????????????????if(ch==‘>‘)
????????????????{
????????????????????syn=21;
????????????????????token[m++]=ch;
????????????????}
????????????????else?if(ch==‘=‘)
????????????????{
????????????????????syn=22;
????????????????????token[m++]=ch;
????????????????}
????????????????else
????????????????{
????????????????????syn=23;?p--;
????????????????}
????????????break;
????????case‘>‘:m=0;
????????????????token[m++]=ch;
????????????????ch=prog[p++];
????????????????if(ch==‘=‘)
????????????????{
????????????????????syn=24;
????????????????????token[m++]=ch;
????????????????}
????????????????else
????????????????{
????????????????????syn=20;
????????????????????p--;
????????????????}
????????????break;
????????case‘:‘:m=0;
????????????????token[m++]=ch;
????????????????ch=prog[p++];
????????????????if(ch==‘=‘)
????????????????{
????????????????????syn=18;
????????????????????token[m++]=ch;
????????????????}
????????????????else
????????????????{
????????????????????syn=17;
????????????????????p--;
????????????????}
????????????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=27;token[0]=ch;break;
????????case‘}‘:syn=28;token[0]=ch;break;
????????case‘#‘:syn=0;token[0]=ch;break;
????????case‘\n‘:syn=-2;break;
????????default:?syn=-1;break;
????}
}
void?factor()??//factor()函數(shù)
{
????if(syn==10||syn==11)
????????scaner();?//為標(biāo)識符或整常數(shù)時,讀下一個單詞符號
????else?if(syn==27)
????{
????????scaner();
????????expression();
??
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????4809??2009-06-02?13:27??實驗2.語法分析\yufa.c
?????文件??????13732??2009-06-02?13:26??實驗2.語法分析\YUFA.EXE
?????文件????????734??2009-11-10?18:49??實驗2.語法分析\yufa.plg
?????文件??????72704??2009-11-13?16:19??實驗2.語法分析\實驗2.語法分析實驗報告.doc
?????文件?????657270??2009-05-26?17:44??實驗2.語法分析\語法分析結(jié)果驗證1.JPG
?????文件??????19332??2009-05-26?17:48??實驗2.語法分析\語法分析結(jié)果驗證2.JPG
?????文件?????657270??2009-05-26?17:50??實驗2.語法分析\語法分析結(jié)果驗證3.JPG
?????目錄??????????0??2009-11-13?16:19??實驗2.語法分析
-----------?---------??----------?-----??----
??????????????1425851????????????????????8
評論
共有 條評論