0916 编程实验一 词法分析程序
2015-09-21 13:10
357 查看
#include<stdio.h> #include<string.h> #include <conio.h> #include <ctype.h> char prog[80],token[8],ch; int p,syn,m,n,sum; char *rwtab[6]={"begin","if","then","while","do","end"}; scaner() { sum=0; for(m=0;m<8;m++) token[m]='\0'; ch=prog[p++]; m=0; while((ch==' ')||(ch=='\n')) ch=prog[p++]; if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))) { while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9'))) {token[m++]=ch; ch=prog[p++]; } p--; syn=10; for(n=0;n<6;n++) if(strcmp(token,rwtab )==0) { syn=n+1; break; } } else if((ch>='0')&&(ch<='9')) { while((ch>='0')&&(ch<='9')) { sum=sum*10+ch-'0'; ch=prog[p++]; } p--; syn=11; } else switch(ch) { case '<':token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=21; token[m++]=ch; } else if(ch=='>'){ syn=22; token[m++]=ch; } else { syn=20; p--; } break; case '>':token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=24; token[m++]=ch; } else { syn=23; p--; } break; case '+':syn=13; token[m++]=ch; break; case '-':syn=14; token[m++]=ch; break; case '*': syn=15; token[m++]=ch; break; case '/': syn=16; token[m++]=ch; break; case ':': token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=18; token[m++]=ch; } else { syn=17; p--; } break; case '=':syn=25; token[m++]=ch; break; case '(': syn=27; token[m++]=ch; break; case ')': syn=28; token[m++]=ch; break; case ';': syn=26; token[m++]=ch; break; case '#': syn=0; token[m++]=ch; break; default: syn=-1; break; } token[m++]='\0'; } main() { p=0; printf("\nplease input a string(end with #):\n"); do{ scanf("%c",&ch); prog[p++]=ch; }while(ch!='#'); p=0; do{ scaner(); switch(syn) {case 11:printf("( %-10d%5d )\n",sum,syn); break; case -1:printf("you have input a wrong string\n"); getch(); break; default: printf("( %-10s%5d )\n",token,syn); break; } }while(syn!=0); getch(); }
![](http://images2015.cnblogs.com/blog/808551/201509/808551-20150921130943662-1006297784.png)
相关文章推荐
- C语言打印100—200之间的素数
- Dialog与FragmentDialog源代码分析
- 安装laravel 的两种方式
- C#执行异步操作的几种方式总结比较
- C++ shared_ptr deleter的实现
- PHP自动判断字符集并转码的方法
- 让php支持yar.packager实现文字高亮的效果
- PHP几个防SQL注入攻击自带函数区别 .
- STL - C++ 11的Lambda表达式(下)
- 解决vsftpd 530 Permission denied报错
- Laravel中路由基础知识点总结
- C#银行系统
- 推荐系统综述与代码
- ASP.NET MVC SignalR(1):背景
- ASP.NET MVC SignalR
- c语言编程:输入一个数看它是不是素数
- VC++下图形界面与非图形界面入口
- Lambda表达式
- VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径
- Selenium Python Safari for Mac 环境搭建