码迷,mamicode.com
首页 > 其他好文 > 详细

12.30递归下降分析

时间:2016-01-01 00:29:43      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

  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 }
技术分享

 

12.30递归下降分析

标签:

原文地址:http://www.cnblogs.com/zzy999/p/5092824.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!