编译原理词法分析程序
来源:互联网 发布:优化驱动器有危险吗 编辑:程序博客网 时间:2024/06/05 08:57
#include <iostream>#include<string>#include<stdio.h>#include<stdlib.h>#include<ctype.h>using namespace std;#define MAX 22char ch =' ';string key[15]={"switch","break","if","then","else","while","write","read","do", "int","const","char","float","double","for"};int Iskey(string c) //关键字判断{ int i; for(i=0;i<MAX;i++) { if(key[i].compare(c)==true) return 1; } return 0;}int IsLetter(char c) //判断是否为字母{ if(((c<='z')&&(c>='a'))||((c<='Z')&&(c>='A'))) return 1; else return 0;}int IsDigit(char c) //判断是否为数字{ if(c>='0'&&c<='9') return 1; else return 0;}void analyse(FILE *fpin) //词法分析程序{ string arr=""; while((ch=fgetc(fpin))!=EOF) { arr=""; if(ch==' '||ch=='\t'||ch=='\n') { } else if(IsLetter(ch)) { while(IsLetter(ch)||IsDigit(ch)) { if((ch<='Z')&&(ch>='A')) ch=ch+32; arr=arr+ch; ch=fgetc(fpin); } fseek(fpin,-1L,SEEK_CUR); if (Iskey(arr)) { cout<<arr<<"\t$关键字"<<endl; } else cout<<arr<<"\t$普通标识符"<<endl; } else if(IsDigit(ch)) { while(IsDigit(ch)||(ch=='.'&&IsDigit(fgetc(fpin)))) { arr=arr+ch; ch=fgetc(fpin); } fseek(fpin,-1L,SEEK_CUR); cout<<arr<<"\t$无符号实数"<<endl; } else switch(ch) { case'+': case'-' : case'*' : case'=' : case'/' :cout<<ch<<"\t$运算符"<<endl;break; case'(' : case')' : case'[' : case']' : case';' : case'.' : case',' : case'{' : case'}' :cout<<ch<<"\t$界符"<<endl;break; case':' : {ch=fgetc(fpin); if(ch=='=') cout<<":="<<"\t$运算符"<<endl; else { cout<<"="<<"\t$运算符"<<endl;; fseek(fpin,-1L,SEEK_CUR); } }break; case'>' :{ch=fgetc(fpin); if(ch=='=') cout<<">="<<"\t$运算符"<<endl; if(ch=='>')cout<<">>"<<"\t$输入控制符"<<endl; else {cout<<">"<<"\t$运算符"<<endl; fseek(fpin,-1L,SEEK_CUR);} }break; case'<' :{ch=fgetc(fpin); if(ch=='=')cout<<"<="<<"\t$运算符"<<endl; else if(ch=='<')cout<<"<<"<<"\t$输出控制符"<<endl; else if(ch=='>') cout<<"<>"<<"\t$运算符"<<endl; else{cout<<"<"<<"\t$运算符"<<endl; fseek(fpin,-1L,SEEK_CUR);} }break; default : cout<<ch<<"\t$无法识别字符"<<endl; } }}int main(){ char in_fn[30]; FILE * fpin; cout<<"请输入源文件名(包括路径和后缀名):"; for(;;) { cin>>in_fn; if((fpin=fopen(in_fn,"r"))!=NULL) break; else cout<<"文件路径错误!请输入源文件名(包括路径和后缀名):"; } cout<<"\n********************分析如下*********************"<<endl; analyse(fpin); fclose(fpin); return 0;}
1 0
- 编译原理词法分析程序
- 编译原理词法分析程序
- 编译原理词法分析程序
- 编译原理:词法分析程序
- 编译原理 词法分析程序
- 编译原理(词法分析程序)
- 编译原理实验一 词法分析程序
- 编译原理-词法分析程序1
- 编译原理 词法分析
- 编译原理词法分析
- 编译原理 词法分析
- 编译原理词法分析
- 编译原理词法分析
- 编译原理词法分析
- 编译原理 词法分析
- 编译原理--词法分析
- 【编译原理】词法分析
- 编译原理-词法分析
- EXP-00091: Exporting questionable statistics
- $_SERVER["REQUEST_URI"],["QUERY_STRING"],["PHP_SELF"] ,["SCRIPT_NAME"]用法
- 如何在Ubuntu中使用Eclipse + CDT开发C/C++程序
- Android中DiaLog大全
- UNION联合多表查询代码举例
- 编译原理词法分析程序
- Android Bitmap 全面解析(二)加载多张图片的缓存处理 ...
- android ssl验证、https验证
- js面向对象编程:两个小括号的使用
- socket 资源
- 《对象程序设计》课程 课程设计、考试安排 及 教师建议(2014.06.30修正)
- 使用 VisualVM 进行性能分析及调优
- Android Bitmap 全面解析(三)开源图片框架分析1-UIL(上) ...
- 编译器DIY——读文件