发布时间 : 星期二 文章FOR循环语句的翻译程序设计(递归下降法、输出四元式表示)更新完毕开始阅读765b33a669dc5022aaea00b2
武汉理工大学《编译原理》课程设计说明书
#include
char a[50] ,b[50],d[200],e[10]; char ch;
int n1,i1=0,flag=1,n=5; int total=0;/*步骤计数器*/
int E(); int E1(); int T();
int G();/*E’*/ int S();/*T’*/ int F();
void input(); void input1(); void output();
void main() /*递归分析*/ {
int f,p,j=0; char x; d[0]='E'; d[1]='='; d[2]='>'; d[3]='T'; d[4]='G'; d[5]='#';
printf(\请输入字符串(长度<50,以#号结束)\\n\ do{
scanf(\ a[j]=ch; j++; }while(ch!='#'); n1=j;
ch=b[0]=a[0];
printf(\步骤\\t文法\\t分析串\\t\\t分析字符\\t剩余串\\n\ f=E1();
if (f==0) return; if (ch=='#')
- 9 -
武汉理工大学《编译原理》课程设计说明书
{
printf(\ p=0; x=d[p];
while(x!='#') {
printf(\ /*输出推导式*/ } }else {
printf(\ printf(\回车返回\\n\ getchar(); getchar(); return; }
printf(\
printf(\回车返回\\n\ getchar(); getchar(); }
int E1() {
int f,t;
printf(\ flag=1; input(); input1(); f=T();
if (f==0) return(0); t=G();
if (t==0) return(0); else return(1); }
int E() {
int f,t;
printf(\
e[0]='E';e[1]='=';e[2]='>';e[3]='T';e[4]='G';e[5]='#'; output(); flag=1; input();
- 10 -
武汉理工大学《编译原理》课程设计说明书
input1(); f=T();
if (f==0) return(0); t=G();
if (t==0) return(0); else return(1); }
int T() {
int f,t;
printf(\
e[0]='T';e[1]='=';e[2]='>';e[3]='F';e[4]='S';e[5]='#'; output(); flag=1; input(); input1(); f=F();
if (f==0) return(0); t=S();
if (t==0) return(0); else return(1); }
int G() {
int f;
if(ch=='+') { b[i1]=ch;
printf(\
e[0]='G';e[1]='=';e[2]='>';e[3]='+';e[4]='T';e[5]='G';e[6]='#'; output(); flag=0;
input();input1(); ch=a[++i1]; f=T();
if (f==0) return(0); G();
return(1); }
printf(\
e[0]='G';e[1]='=';e[2]='>';e[3]='^';e[4]='#'; output();
- 11 -
武汉理工大学《编译原理》课程设计说明书
flag=1;
input();input1(); return(1); }
int S() {
int f,t;
if(ch=='*') {
b[i1]=ch;printf(\
e[0]='S';e[1]='=';e[2]='>';e[3]='*';e[4]='F';e[5]='S';e[6]='#'; output(); flag=0;
input();input1(); ch=a[++i1]; f=F();
if (f==0) return(0); t=S();
if (t==0) return(0); else return(1);} printf(\
e[0]='S';e[1]='=';e[2]='>';e[3]='^';e[4]='#'; output(); flag=1; a[i1]=ch;
input();input1(); return(1); }
int F() {
int f;
if(ch=='(') {
b[i1]=ch;printf(\
e[0]='F';e[1]='=';e[2]='>';e[3]='(';e[4]='E';e[5]=')';e[6]='#'; output(); flag=0;
input();input1(); ch=a[++i1]; f=E();
if (f==0) return(0);
- 12 -