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); } }