D

  1 #include <string.h>
  2 #include <stdio.h>
  3 #include <stdlib.h>
  4 char str[100];
  5 int c,num;
  6 void E();
  7 void G();
  8 void T();
  9 void S();
 10 void F();
 11 int main()
 12 {
 13     scanf("%s",str);
 14     E();
 15     if(str[c]=='#')
 16         printf("accept
");
 17     else
 18         printf("error
");
 19         return 0;
 20     }
 21 void E()
 22 {
 23     if(str[c]=='('||str[c]=='i')
 24     {
 25         printf("%d E-->TG
",num);
 26         num++;
 27         T();
 28         G();
 29     }
 30     else
 31     {
 32         printf("error
");
 33         exit(0);
 34     }
 35 }
 36 
 37 void G()
 38 {
 39     if(str[c]=='+')
 40     {
 41         c++;
 42         printf("%d G-->+TG
",num);
 43         num++;
 44         T();
 45         G();
 46     }
 47     else
 48     {
 49         printf("%d G-->&
",num);
 50         num++;
 51     }
 52 }
 53 
 54 void T()
 55 {
 56     if(str[c]=='('||str[c]=='i')
 57     {
 58         printf("%d T-->FS
",num);
 59         num++;
 60         F();
 61         S();
 62     }
 63     else
 64     {
 65         printf("error
");
 66         exit(0);
 67     }
 68 }
 69 void S()
 70 {
 71     if(str[c]=='*')
 72     {
 73         c++;
 74         printf("%d S-->*FS
",num);
 75         num++;
 76         F();
 77         S();
 78     }
 79     else
 80     {
 81         printf("%d S-->&
",num);
 82         num++;
 83     }
 84 }
 85 void F()
 86 {
 87     if(str[c]=='(')
 88     {
 89         c++;
 90         printf("%d F-->(E)
",num);
 91         num++;
 92         E();
 93         if(str[c]==')')
 94         {
 95             c++;
 96         }
 97         else
 98         {
 99             printf("error
");
100             exit(0);
101         }
102     }
103     else if (str[c]=='i')
104     {
105         c++;
106         printf("%d F-->i
",num);
107         num++;
108     }
109     else
110     {
111         printf("error
");
112         exit(0);
113     }
114 }
原文地址:https://www.cnblogs.com/Angfe/p/15429056.html