博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
12.30递归下降分析
阅读量:6332 次
发布时间:2019-06-22

本文共 2046 字,大约阅读时间需要 6 分钟。

1 #include
2 #include
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 }
 

 

转载于:https://www.cnblogs.com/zzy999/p/5092824.html

你可能感兴趣的文章
OSChina 周五乱弹 —— 听说富婆需要我这个快乐球
查看>>
OSChina 周四乱弹 —— 你再光玩电脑,咱俩就算掰了
查看>>
分配内存对齐的内存空间
查看>>
Android中ListView.getCount()与ListView.getChildCo...
查看>>
UVa 195-Anagram
查看>>
linux批量修改文件名大小写
查看>>
pyspark访问hive数据实战
查看>>
偶的第一个IOS Demo
查看>>
常见内部排序总结
查看>>
repo original
查看>>
文本处理三剑客之sed命令用法
查看>>
我的友情链接
查看>>
CSS预处理器-Sass
查看>>
mysql主主同步+Keepalived
查看>>
F5 负载均衡学习笔记----V9.x启动U盘制作方法
查看>>
PageRank MATLAB 实现
查看>>
不能盲目选择视频会议系统
查看>>
如何学编程
查看>>
学习Linux决心书
查看>>
javascript中函数的参数与arguments关系
查看>>