资源简介
是基于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
- 下一篇:俄罗斯方块-毕业设计开题报告
相关资源
- stm32 AD7506
- stc-isp-15xx-v6.86G
- Linux那些事儿之我是USB core
- STC8G1K08A红外遥控点灯
- C语言的嵌入式汇编基本使用.docx(2页
- stm32f103c8t6开发板原理图+pcb
- Arduino 敲琴MIDI电子琴 程序报告.docx
- CAN实验
- LCD驱动芯片ST7701SI SPI接口底层驱动配
- 显示屏操作(stm32f103c8t6(SAN))
- USB CAN Tool 源代码(LabVIEW 2011环境)
- Proteus 8.6仿真STM32F103C6
- atmega128 串口通讯(RS485.c)
- C语言嵌入式Modbus协议栈,支持主站和
- stm32 +w5500 裸机 远程升级 自动dns pi
- 永磁同步电机的FOC控制算法
- arduino I2C设备扫描并串口返回地址(
- Proteus仿真:LCD液晶屏显示.rar
- STM32 PCB封装库 全系列 全网不好找
- 基于STM32F407的W5500 tcpserver(官网例程
- 步进电机调速原理.c
- tm1650+stm32f103源码(board_tm1650.c)
- 颜色识别形状识别STM103嵌入式代码
- 基于STM32的音频信号采样与FFT分析
- 汽车电子编程规范(Unlock-MISRA C 2012)
- cheat engine 7.2源码
- 基于STM32F103C8T6主控板使用BH1750检测光
- cubeMX设计实现stm32f407上的CAN及485的通
- stm32 BootLoader程序(main.c)
- 新编Windows API参考大全.doc
评论
共有 条评论