我们小组的编译程序
2015-10-14 16:38
225 查看
#include<stdio.h> #include<string.h> void Fenxi(char c,char b); void word(char a[]); void number(char a[]); int i; //定义全局变量i int s=1; //用来记录是否存在非法字符 main(){ char a[50]; printf("请输入源程序:"); gets(a); printf("您要分析的源程序为:"); printf("%s",a); printf("\n"); for(i=0;(a[i]!='\0')&&(i<50)&&s==1;i++) { if((a[i]>='a' && a[i]<='z')||(a[i]>='A' && a[i]<='Z')) word(a); else if(a[i]>='0' && a[i]<='9') number(a); else Fenxi(a[i],a[i+1]); } printf("\n"); } void number(char a[]) //对数字字符进行扫描分析 { char b[50]; int m,k=0,t; m=i; while(a[m]>='0' && a[m]<='9') { b[k]=a[m]; //用数组b存放数组a中的数字 k++; m++; } i=m-1; printf("(11,"); for(t=0;t<k;t++) printf("%c",b[t]); printf(")"); printf("\n"); } void word(char a[]) //对字母字符进行扫描分析,并识别保留字 { int k=0,m,flag=0,t; char b[50]; char *key[6]={"begin","if","then","while","do","end"}; m=i; while((a[m]>='a'&&a[m]<='z')||(a[m]>='A'&&a[m]<='Z')) //用数组b存放数组a中的字母 { b[k]=a[m]; k++; m++; b[k]='\0'; } i=m-1; for(t=0;t<6;t++) { if(strcmp(b,key[t])==0) //将数组b与关键字进行比较 { printf("(%d,%s)",t+1,key[t]); //输出关键字 flag=1; printf("\n"); } } if(flag==0) { printf("(10,%s)",b); //输出标识符 printf("\n"); } } void Fenxi(char c,char b) //对特殊字符进行扫描分析 { switch(c){ case ' ': break; case '+': printf("(13,+)\n"); break; case '-': printf("(14,-)\n"); break; case '*': printf("(15,*)\n"); break; case '/': printf("(16,/)\n"); break; case ':': if(b=='=') { i++; printf("(18,:=)\n"); } else printf("(17,:)\n"); break; case '<': if(b=='>') { i++; printf("(21,<>)\n"); } else if(b=='=') { i++; printf("(22,<=)\n"); } else printf("(20,<)\n"); break; case '>': if(b=='=') { printf("(24,>=)\n"); i++; } else printf("(23,>)\n");
break; case '=': printf("(25,=)\n"); break; case ';': printf("(26,;)\n"); break; case '(': printf("(27,()\n"); break; case ')': printf("(28,))\n"); break; case '#': printf("(0,#)\n"); break; default: { printf("\n存在字符 '%c',无法继续识别!\n",c); s=0; //用s=0记录存在非法字符 break; } } }
相关文章推荐
- IOS-UITextField-全解
- flex4.6 解决label中文字过长显示省略号的办法
- Zabbix 安装报错
- Dumpsys System Diagnostics
- thinkphp在app接口开发过程中的通讯安全认证
- 自增(++)和自减(--)的解析
- eclipse 响应慢 或 未响应
- DAO中方法实现
- C++ vector
- Windows下编译VLC2.2.1 ---CygWin环境
- Android使用http协议与服务器通信
- 使用HttpClient接口实现网络通信
- ExtJs Grid自动生成列
- 如何解决listview/gridview的position=0时,getview被多次调用
- 使用canvas与Paint在View中居中绘制文字
- C++Primer第五版 第11章 关联容器(练习解答)
- git的使用(转)
- ios APP审核加速上架服务
- 调用windows讲述人播放语音
- 如何更新Android SDK