1217 递归下降语法分析程序设计

  1 #include<stdio.h>
  2 
  3 #include<string>
  4 
  5 char str[10];   //记录要分析的字符串
  6 
  7 int x=0;        //记录第一个字符
  8 
  9   
 10 
 11 void E();           
 12 
 13 void X();           
 14 
 15 void T();           
 16 
 17 void Y(); 
 18 
 19 void F(); 
 20 
 21   
 22 
 23 int main()
 24 
 25 {
 26 
 27     int len;
 28 
 29     printf("请输入算数表达式:");
 30 
 31     scanf("%s",str);
 32 
 33     len=strlen(str);
 34 
 35     str[len]='#';
 36 
 37     str[len+1]='\0';
 38 
 39     E();
 40 
 41     printf("\n是正确表达式!\n");
 42 
 43     strcpy(str,"");
 44 
 45     x=0;
 46 
 47     return 0;
 48 
 49 }
 50 
 51   
 52 
 53 void E()
 54 
 55 {
 56 
 57     T();
 58 
 59     X();
 60 
 61 }
 62 
 63   
 64 
 65 void X()
 66 
 67 {
 68 
 69     if(str[x]=='+'||str[x]=='-')
 70 
 71     {
 72 
 73         x++;
 74 
 75         T();
 76 
 77         X();
 78 
 79     } 
 80 
 81 }
 82 
 83   
 84 
 85 void T()
 86 
 87 {
 88 
 89     F();
 90 
 91     Y();
 92 
 93 }
 94 
 95   
 96 
 97 void Y()
 98 
 99 {
100 
101     if(str[x]=='*'||str[x]=='/')
102 
103     {
104 
105         x++;
106 
107         F();
108 
109         Y();
110 
111     }
112 
113 }
114 
115   
116 
117 void F()
118 
119 {
120 
121     if(str[x]>='a'&&str[x]<='z')
122 
123     {
124 
125         x++;
126 
127     }
128 
129     else if(str[x]>=0&&str[x]<=9)
130 
131     {
132 
133         x++;
134 
135     }
136 
137     else if (str[x]=='(')
138 
139     {     
140 
141         x++;
142 
143         E();
144 
145         if(str[x]==')')
146 
147         {
148 
149             x++; 
150 
151         }
152 
153         else
154 
155         {
156 
157             printf("\n有语法错误!\n");
158 
159             exit(0);
160 
161         }
162 
163     } 
164 
165     else
166 
167     {
168 
169         printf("\n有语法错误!\n"); exit(0); } }

 

posted on 2016-01-04 08:36  17郑培轩  阅读(166)  评论(0编辑  收藏  举报