cn700_vc52499446672

所属分类:PropertySheet
开发工具:C/C++
文件大小:33KB
下载次数:1
上传日期:2006-06-05 19:43:38
上 传 者star1111
说明:  Accidence Translation devices, absolute good and assured down. Thank you, the initial upload, hope that the
(Accidence Translation devices, absolute good and assured down. Thank you, the initial upload, hope that the)

文件列表:
cn700_vc52499446672\res\by.rc2 (394, 2005-05-22)
cn700_vc52499446672\res\by.ico (1078, 2005-05-22)
cn700_vc52499446672\res\xptheme.bin (653, 2005-05-22)
cn700_vc52499446672\res\1.ico (3638, 2005-05-22)
cn700_vc52499446672\res\HAND.CUR (2238, 2005-05-22)
cn700_vc52499446672\res (0, 2005-05-22)
cn700_vc52499446672\by.aps (39132, 2005-05-22)
cn700_vc52499446672\by.clw (1354, 2005-05-22)
cn700_vc52499446672\by.cpp (2007, 2005-05-22)
cn700_vc52499446672\by.dsp (3163, 2005-05-22)
cn700_vc52499446672\by.dsw (527, 2005-05-22)
cn700_vc52499446672\by.h (1280, 2005-05-22)
cn700_vc52499446672\by.rc (5871, 2005-05-22)
cn700_vc52499446672\byDlg.cpp (10113, 2005-05-22)
cn700_vc52499446672\byDlg.h (1702, 2005-05-22)
cn700_vc52499446672\input.txt (66, 2005-05-22)
cn700_vc52499446672\Link.cpp (3102, 2005-01-03)
cn700_vc52499446672\Link.h (1213, 2005-01-03)
cn700_vc52499446672\Resource.h (910, 2005-05-22)
cn700_vc52499446672\StdAfx.cpp (204, 2005-05-22)
cn700_vc52499446672\StdAfx.h (1054, 2005-05-22)
cn700_vc52499446672\词法分析器.exe (32768, 2005-05-22)
cn700_vc52499446672\Cn700.com.txt (2916, 2004-10-04)
cn700_vc52499446672 (0, 2005-05-24)

主要的代码如下(这里给出的是命令行代码,稍加修改就可以做成源码中国演示图片的界面了)   #include #include #include #include #define MAX 18 //分析表的最大容量 #define MAXBUF 255 char ch =' '; // 存放读入当前的输入字符 int lineno; struct reserve //关键字 { char lexptr[MAXBUF]; int token; }; struct reserve symtable[MAX]; char * str[]={"program","input","output","begin","end","var","integer","real","for","to","if","then","else","do","while","write","array","proceure" }; void init() //对符号表进行初始化 { for( int j=0; j<18; j++) { strcpy(symtable[j].lexptr,str[j]); symtable[j].token=j+3; } } int search(char *temp) { for(int i=0; i { if(!strcmp(symtable[i].lexptr ,temp)) { return symtable[i].token; } } return 0; } void analyse(FILE *fpin,FILE *fpout) //分析程序 { char arr[MAXBUF]; int i=0; int j=0; while((ch=fgetc(fpin))!=EOF) //读入字符判断,空格、字母、数字、界符 { if(ch==' '||ch=='\t') { } else if(ch=='\n') //如果是换行符,则行号加1 { lineno++; } else if(isdigit(ch)) //如果是数字 { while(isdigit(ch)) //判断和读取数字 { arr[j]=ch; j++; ch=fgetc(fpin); } arr[j]='\0'; j=0; fseek(fpin,-1L,SEEK_CUR); fprintf(fpout,"%s\t%d\n",arr,2) ; } else if (isalpha(ch)) //如果是字母 { while(isalpha(ch)||isdigit(ch)) { arr[j]=ch; j++; ch=fgetc(fpin); } fseek(fpin,-1L,SEEK_CUR); arr[j]='\0'; j=0; if (search(arr)) //如果是关键字 { fprintf(fpout,"%s\t%d\n",arr,search(arr)); } else fprintf(fpout,"%s\t%d\n",arr,1); //普通标志符 } else if(ch==':') { ch=fgetc(fpin); if(ch=='=') { fprintf(fpout,"%s\t%d\n",":=",29); //如果是 := } else { fprintf(fpout,"%s\t%d\n",":",30); //如果是 : fseek(fpin,-1L,SEEK_CUR); } } else if (ch=='>') { ch=fgetc(fpin); if(ch=='=') //如果是 >= { fprintf(fpout,"%s\t%d\n",">=",32); } else { fprintf(fpout,"%s\t%d\n",">",31); //如果是 > fseek(fpin,-1L,SEEK_CUR); } } else if(ch=='<') { ch=fgetc(fpin); if(ch=='>') { fprintf(fpout,"%s\t%d\n","<>",35); // 如果是 <> } else if(ch=='=') { fprintf(fpout,"%s\t%d\n","<=",34); //如果是 <= } else { fprintf(fpout,"%s\t%d\n","<",33); //如果是 < fseek(fpin,-1L,SEEK_CUR); } } else if(ch=='/') { ch=fgetc(fpin); if(ch=='*') { ch=fgetc(fpin); s: while(ch!='*') { ch=fgetc(fpin); } while(ch=='*') { ch=fgetc(fpin); while(ch!='/') { goto s; //如果是注释 /* */ } } } else if(ch=='/') { ch=fgetc(fpin); while(ch!='\n') { ch=fgetc(fpin); //如果是注释 // } } else { fprintf(fpout,"%s\t%d\n","/",24); fseek(fpin,-1L,SEEK_CUR); } } else if(ch=='+') { fprintf(fpout,"%s\t%d\n","+",21); } else if(ch=='-') { fprintf(fpout,"%s\t%d\n","-",22); } else if(ch=='*') { fprintf(fpout,"%s\t%d\n","*",23); } else if(ch=='(') { fprintf(fpout,"%s\t%d\n","(",25); } else if(ch==')') { fprintf(fpout,"%s\t%d\n",")",26); } else if(ch=='[') { fprintf(fpout,"%s\t%d\n","[",27); } else if(ch==']') { fprintf(fpout,"%s\t%d\n","]",28); } else if(ch=='.') { fprintf(fpout,"%s\t%d\n",".",39); } else if(ch==';') { fprintf(fpout,"%s\t%d\n",";",36); } else if(ch=='=') { fprintf(fpout,"%s\t%d\n","=",38); } else if(ch==',') { fprintf(fpout,"%s\t%d\n",",",40); } else fprintf(fpout,"无法识别的字符 %c\n",ch) ; } } void main() { printf("***************************词法分析器*************************\n\n\n"); printf("直接输入源代码请按1,从文件中读入源代码请按2 \n") ; char filenamein[10]; char filenameout[10]; printf("请输入源文件名:\n"); scanf("%s",filenamein); printf("请输入保存词法分析结果的文件名:\n"); scanf("%s",filenameout); FILE* fpin=fopen(filenamein,"r"); FILE* fpout=fopen(filenameout,"w"); init(); analyse(fpin,fpout); fclose(fpin); fclose(fpout); _getch(); }

近期下载者

相关文件


收藏者