资源简介
是基于c++环境的词法分析器,C MINUS ,程序要求输入一个文件,再以文件的方式输出结果。

代码片段和文件信息
#include
#include
#include
#define MAX_NAME 30
#define MAX_FILE 10000
enum member {elsesymifsymreturnsymintsymvoidsymwhilesymident
numberplusminustimesrnotelnoteslashgeqleqlssgrteqlbecomes
uneqlsemicolonlparentrparentlbracerbracelbracketrbracketcomma};
struct word{
member character;
char name[MAX_NAME];
};
void write(FILE* ofpchar* name){
int i=0;
int len=strlen(name);
for(i=0;i fputc(putc(*(name+i)ofp)stdout);
}
}
void analyze(char* sFILE* fpword* ssym){
FILE* ofp;
char ch;
char filename[]=“wordstring.txt“;
int count=0i=0k=0j=0;
if((ofp=fopen(filename“w“))==NULL){
printf(“cannot open file\n“);
exit(0);
}
while(!feof(fp)){
ch=fgetc(fp);
if(k>=MAX_FILE){
printf(“file is too long\n“);
exit(0);
}
if(ch>=‘a‘&&ch<=‘z‘||ch>=‘A‘&&ch<=‘Z‘){
*(s+count)=ch;
count++;
*(s+count)=‘\0‘;
ch=fgetc(fp);
if(!(ch>=‘a‘&&ch<=‘z‘||ch>=‘A‘&&ch<=‘Z‘)){
write(ofps);
strcpy(ssym[k].names);
if(!strcmp(s“else“)){
write(ofp“ elsesym\n“);
ssym[k].character=elsesym;
k++;
}
else if(!strcmp(s“if“)){
write(ofp“ ifsym\n“);
ssym[k].character=ifsym;
k++;
}
else if(!strcmp(s“int“)){
write(ofp“ intsym\n“);
ssym[k].character=intsym;
k++;
}
else if(!strcmp(s“return“)){
write(ofp“ returnsym\n“);
ssym[k].character=returnsym;
k++;
}
else if(!strcmp(s“void“)){
write(ofp“ voidsym\n“);
ssym[k].character=voidsym;
k++;
}
else if(!strcmp(s“while“)){
write(ofp“ whilesym\n“);
ssym[k].character=whilesym;
k++;
}
else{
write(ofp“ ident\n“);
ssym[k].character=ident;
k++;
}
count=0;
}
fseek(fp-sizeof(char)1);
ch=NULL;
}
if(ch>=‘0‘&&ch<=‘9‘){
*(s+count)=ch;
count++;
*(s+count)=‘\0‘;
ch=fgetc(fp);
if(!(ch>=‘0‘&&ch<=‘9‘)){
write(ofps);
strcpy(ssym[k].names);
write(ofp“ number\n“);
ssym[k].character=number;
k++;
count=0;
}
fseek(fp-sizeof(char)1);
ch=NULL;
}
if(ch==‘+‘){
write(ofp“ plus\n“);
ssym[k].character=plus;
k++;
}
if(ch==‘-‘){
write(ofp“ minus\n“);
ssym[k].character=minus;
k++;
}
if(ch==‘/‘){
ch=fgetc(fp);
if(ch==‘*‘){
write(ofp“ lnote\n“);
ssym[k].character=lnote;
k++;
}
else{
write(ofp“ slash\n“);
ssym[k].character=slash;
k++;
fseek(fp-sizeof(char)1);
}
ch=NULL;
}
if(ch==‘<‘){
ch=fgetc(fp);
if(ch==‘=‘){
write(ofp“ leq\n“);
ssym[k].character=leq;
k++;
}
e
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 722 2011-05-19 21:30 wordstring.txt
目录 0 2011-05-19 14:02 Debug\
文件 184383 2011-05-19 14:02 Debug\1.exe
文件 197432 2011-05-19 14:02 Debug\1.ilk
文件 14715 2011-05-19 14:02 Debug\1.obj
文件 226520 2011-05-19 13:56 Debug\1.pch
文件 467968 2011-05-19 14:02 Debug\1.pdb
文件 184373 2011-05-15 08:08 Debug\cifafenxiqi.exe
文件 194332 2011-05-15 08:08 Debug\cifafenxiqi.ilk
文件 222424 2011-05-14 11:53 Debug\cifafenxiqi.pch
文件 484352 2011-05-15 08:08 Debug\cifafenxiqi.pdb
文件 41984 2011-05-19 21:30 Debug\vc60.idb
文件 53248 2011-05-19 14:02 Debug\vc60.pdb
文件 4833 2011-05-19 14:02 1.cpp
文件 3341 2011-05-19 21:29 1.dsp
文件 510 2011-05-19 21:32 1.dsw
文件 41984 2011-05-19 21:32 1.ncb
文件 48640 2011-05-19 21:32 1.opt
文件 236 2011-05-19 21:29 1.plg
文件 4334 2011-05-13 23:48 cifafenxiqi.dsp
文件 528 2011-05-13 20:37 cifafenxiqi.dsw
文件 41984 2011-05-17 13:17 cifafenxiqi.ncb
文件 48640 2011-05-17 13:17 cifafenxiqi.opt
文件 256 2011-05-17 13:17 cifafenxiqi.plg
文件 214 2011-05-19 14:22 in
文件 131 2011-05-19 14:02 input
文件 0 2011-05-18 13:12 output
- 上一篇:C89文法描述PDF
- 下一篇:俄罗斯方块-毕业设计开题报告
相关资源
- GD32通过规则组寄存器 DMA获取多组AD
- 基于MFC的TCP调试助手源码95706
- 国际象棋的qt源代码
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- 基于mfc的多线程文件传输
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 利用C++哈希表的方法实现电话号码查
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 移木块游戏,可以自编自玩,vc6.0编写
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- C++纯文字DOS超小RPG游戏
- 个人日常财务管理系统(C语言)
- MFC数字钟(基于VC6.0)
评论
共有 条评论