資源簡(jiǎn)介
WHILE循環(huán)語(yǔ)句的翻譯程序設(shè)計(jì)(遞歸下降法、輸出四元式)

代碼片段和文件信息
/*
??文法G(S)
??S-->WEG???W代表while
??E-->aFb???E代表while的執(zhí)行條件
??F-->?>|?
??G-->c=R
??R-->dTe|d??R為一個(gè)
??T-->+|-|*|/
*/
#include?
#include
#include
#include
#include
char?a[40]s[40][40];?//a[40]保存輸入串s[40][40]保存四元式
char?ch;
int?i1=0i2=0i3=0;?//i1通過(guò)自加來(lái)取得a[i1]輸入串中的字符?i2用來(lái)選擇用哪種四元式i3用來(lái)選擇用‘W‘的報(bào)錯(cuò)
int?total=0;??
void?S();??//文法開始
void?W();??//判斷輸入是否為while文法.是?則字符串以W開頭
void?E();??//while(E)
void?F();??//“<“or“>“
void?G();
void?R();
void?T();
void?main()
{???
???int?pj=0;
???char?str[20];
???
??
????printf(“請(qǐng)輸入while語(yǔ)句并以#結(jié)束:\n“);
do{
??scanf(“%s“str);
??if(strcmp(str“W“)==0)
??{?
??a[j]=‘W‘;
??j++;
??}
??else?if(strcmp(str“a>b“)==0)
??{
??a[j++]=‘a(chǎn)‘;
??a[j++]=‘>‘;
??a[j++]=‘b‘; ?
??continue;
??}
??else?if(strcmp(str“a ??{
??a[j++]=‘a(chǎn)‘;
??a[j++]=‘<‘;
??a[j++]=‘b‘; ?
??continue;
??}
??else?if(strcmp(str“c=d+e“)==0)
??{?
??a[j++]=‘c‘;
??a[j++]=‘=‘;
??a[j++]=‘d‘;
??a[j++]=‘+‘;
??a[j++]=‘e‘;
??continue;
??}
??else?if(strcmp(str“c=d-e“)==0)
??{
??a[j++]=‘c‘;
??a[j++]=‘=‘;
??a[j++]=‘d‘;
??a[j++]=‘-‘;
??a[j++]=‘e‘;
??continue;
??}
??else?if(strcmp(str“c=d*e“)==0)
??{
??a[j++]=‘c‘;
??a[j++]=‘=‘;
??a[j++]=‘d‘;
??a[j++]=‘*‘;
??a[j++]=‘e‘;
??continue;
??}
??else?if(strcmp(str“c=d/e“)==0)
??{
??a[j++]=‘c‘;
??a[j++]=‘=‘;
??a[j++]=‘d‘;
??a[j++]=‘/‘;
??a[j++]=‘e‘;
??continue;
??}
?
??else?{
????????for(int?i=0;i {
???a[j+i]=str[i];
}
?????j=j+strlen(str);
??
??}
?
}while(strcmp(str“#“)!=0);
????printf(“\n“);
printf(“輸入串變?yōu)?s\n“a);
printf(“\n“);
ch=a[0];
??
????S();
???????
??????
???if?(ch==‘#‘)??
???????{???printf(“accept\n“);
??????????????printf(“四元式為:\n“);
??????????????p=0;
??????????????for(;p<=i2+1;p++)
??{
????printf(“%d?%s\n“ps[p]); ??
??}???????????????????????????????
??????????????
???????}
???????else?{
??????????????printf(“error\n“);
??????????????printf(“回車返回\n“);
??????????????getchar();getchar();?
??????????????return;?
???????}
???????printf(“\n“);
???????printf(“回車返回\n“);
???????getchar();
???????getchar();
}
void?S()
{
?
???printf(“%d\tS-->WEG\n“total);total++;//total用來(lái)記數(shù)
?????
???W();
???E();
???G();
???
}
void?W()
{
?if(i3==0)
?{?
???ch=a[i1++];
???if(ch!=‘W‘)
???{?
???cout<<“不為W2“< ??printf(“第%d個(gè)字符%c為有非法字符請(qǐng)按回車返回!!“i1+1ch);
??getchar();
??????getchar();
??exit(1);
??}
?
?}
?else{
?++i1;
?ch=a[++i1];
?if(ch!=‘W‘)
???{?
?cout<<“不為W“< ??printf(“第%d個(gè)字符%c為有非法字符請(qǐng)按回車返回!!“i1+1ch);
??getchar();
??????getchar();
??exit(1);
??}
?}
}
void?E()
{
??ch=a[i1++];
???if(ch!=‘a(chǎn)‘)
???{?
???cout<<“不為a“< ??printf(“第%d個(gè)字符%c為有非法字符請(qǐng)按回車返回!!“i1+1ch);
??getchar();
??????getch
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????554??2010-01-10?20:08??while語(yǔ)句遞歸下降法分析\while語(yǔ)句遞歸下降法分析.dsw
?????文件??????33792??2010-01-10?20:10??while語(yǔ)句遞歸下降法分析\while語(yǔ)句遞歸下降法分析.ncb
?????文件??????41984??2010-01-10?20:09??while語(yǔ)句遞歸下降法分析\Debug\vc60.idb
?????文件??????61440??2010-01-10?20:09??while語(yǔ)句遞歸下降法分析\Debug\vc60.pdb
?????文件?????282224??2010-01-10?20:09??while語(yǔ)句遞歸下降法分析\Debug\while語(yǔ)句遞歸下降法分析.pch
?????文件??????26516??2010-01-10?20:09??while語(yǔ)句遞歸下降法分析\Debug\while語(yǔ)句遞歸下降法分析.obj
?????文件?????242356??2010-01-10?20:09??while語(yǔ)句遞歸下降法分析\Debug\while語(yǔ)句遞歸下降法分析.ilk
?????文件?????221271??2010-01-10?20:09??while語(yǔ)句遞歸下降法分析\Debug\while語(yǔ)句遞歸下降法分析.exe
?????文件?????418816??2010-01-10?20:09??while語(yǔ)句遞歸下降法分析\Debug\while語(yǔ)句遞歸下降法分析.pdb
?????文件???????5467??2010-01-10?20:09??while語(yǔ)句遞歸下降法分析\while語(yǔ)句遞歸下降法分析.cpp
?????文件????????973??2010-01-10?20:09??while語(yǔ)句遞歸下降法分析\while語(yǔ)句遞歸下降法分析.plg
?????文件??????48640??2010-01-10?20:10??while語(yǔ)句遞歸下降法分析\while語(yǔ)句遞歸下降法分析.opt
?????文件???????4490??2010-01-10?20:10??while語(yǔ)句遞歸下降法分析\while語(yǔ)句遞歸下降法分析.dsp
?????目錄??????????0??2010-01-10?20:08??while語(yǔ)句遞歸下降法分析\Debug
?????目錄??????????0??2010-01-10?20:08??while語(yǔ)句遞歸下降法分析
-----------?---------??----------?-----??----
??????????????1388523????????????????????15
評(píng)論
共有 條評(píng)論