FOR循环语句的翻译程序设计(递归下降法、输出四元式表示) 联系客服

发布时间 : 星期二 文章FOR循环语句的翻译程序设计(递归下降法、输出四元式表示)更新完毕开始阅读765b33a669dc5022aaea00b2

武汉理工大学《编译原理》课程设计说明书

#include #include #include #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 -