12.30递归下降分析

  1 #include<stdio.h>
  2 #include<string.h>  
  3 char str[10];
  4 int index=0;
  5 void E();            //E->TX;
  6 void X();            //X->+TX|-TX| e
  7 void T();            //T->FY
  8 void Y();            //Y->*FY |/fy| e
  9 void F();            //F->(E) | id
 10 int id();           //id
 11 int main()
 12 {
 13     int len;
 14     int m;
 15 
 16         printf("请输入算数表达式:");
 17         scanf("%s",str);
 18         len=strlen(str);
 19         str[len]='#';
 20         str[len+1]='\0';
 21         E();
 22         printf("正确语句!\n");
 23         strcpy(str,"");
 24         index=0;
 25     
 26     return 0;
 27 }
 28 void E()
 29 {
 30     T();
 31     X();
 32 }
 33 void X()
 34 {
 35     if(str[index]=='+')
 36     {
 37         index++;
 38         T();
 39         X();
 40     } 
 41     else if(str[index]=='-')
 42     {
 43         index++;
 44         T();
 45         X();
 46     } 
 47 }
 48 void T()
 49 {
 50     F();
 51     Y();
 52 }
 53 void Y()
 54 {
 55     if(str[index]=='*')
 56     {
 57         index++;
 58         F();
 59         Y();
 60     }
 61     else if(str[index]=='/')
 62     {
 63         index++;
 64         F();
 65         Y();
 66     }
 67 }
 68 void F()
 69 {
 70     if(id())
 71     {
 72         index++;
 73     }
 74     else if (str[index]=='(')
 75     {     
 76         index++;
 77         E();
 78         if(str[index]==')')
 79         {
 80             index++; 
 81         }else{
 82             printf("\n分析失败!\n");
 83             exit (0);
 84         }
 85     } 
 86     else{
 87         printf("分析失败!\n"); 
 88         exit(0);
 89     }
 90  }
 91 int id()
 92 {
 93      if(str[index]>='0'&&str[index]<='9')
 94     {
 95         while( str[index+1]>='0'&&str[index+1]<='9' )
 96         {
 97             index++;
 98         }
 99         if(str[index+1]>='a'&&str[index+1]<='z' )
100             return 0;
101 
102         return 1;
103     }
104      else if(str[index]>='a'&&str[index]<='z' )
105      {
106          return 1;
107      }
108      else 
109          return 0;
110      
111 }

 

posted @ 2015-12-31 23:37  douidoui  阅读(160)  评论(0编辑  收藏  举报