递归下降分析
递归下降分析
商软一班
曾婉婷
201506110136
四、 程序代码:
1 #include<stdio.h> 2 char string[10]; 3 int index=0; 4 void E(); //E->TE1; 5 void X(); //X->+TE1 | e 6 void T(); //T->FT1 7 void Y(); //Y->*FT1 | e 8 void F(); //F->(E) | i 9 int i(); 10 11 int main() 12 { 13 int length; 14 int m; 15 printf("请输入表达式的个数:"); 16 scanf("%d",&m); 17 while(m--) 18 { 19 printf("请输入算数表达式:"); 20 scanf("%s",string); 21 length=strlen(string); 22 string[length]='#'; 23 string[length+1]='\0'; 24 E(); 25 printf("正确!\n"); 26 strcpy(string,""); 27 index=0; 28 } 29 return 0; 30 } 31 void E() 32 { 33 T(); 34 E1(); 35 } 36 void E1() 37 { 38 if(string[index]=='+') 39 { 40 index++; 41 T(); 42 E1(); 43 } 44 } 45 void T() 46 { 47 F(); 48 T1(); 49 } 50 void T1() 51 { 52 if(string[index]=='*') 53 { 54 index++; 55 F(); 56 T1(); 57 } 58 } 59 void F() 60 { 61 if(string[index]=='i') 62 { 63 index++; 64 } 65 else if (string[index]=='(') 66 { 67 index++; 68 E(); 69 if(string[index]==')') 70 { 71 index++; 72 }else{ 73 printf("\n失败!\n"); 74 exit (0); 75 } 76 } 77 else{ 78 printf("失败!\n"); 79 exit(0); 80 } 81 } 82 int i() 83 { 84 if(string[index]>='0'&&string[index]<='9') 85 { 86 while( string[index+1]>='0'&&string[index+1]<='9' ) 87 { 88 index++; 89 } 90 if(string[index+1]>='a'&&string[index+1]<='z' ) 91 return 0; 92 93 return 1; 94 } 95 else if(string[index]>='a'&&string[index]<='z' ) 96 { 97 return 1; 98 } 99 else 100 return 0; 101 102 }