文档详情

编译原理词法分析程序.doc

发布:2017-02-12约5.09千字共7页下载文档
文本预览下载声明
#include iostream #include ctype.h #include fstream #include string.h #include malloc.h using namespace std; ifstream fp(source.txt,ios::in); char cbuffer; char *key[13]={if,else,for,while,do,return,break,continue,int,void ,main,const,printf}; //关键字 char *border[7]={ , , ; , { , } , ( , ) ,//}; //分界符 char *arithmetic[6]={+ , - , * , / , ++ , --}; //运算符 char *relation[7]={ , = , = , , = , == ,!=}; //关系运算符 char *lableconst[80]; //标识符 int constnum=40; int lableconstnum=0; int linenum=1; //统计常数和标识符数量 int search(char searchchar[],int wordtype) { int i=0,t=0; switch (wordtype) { case 1: { for (i=0;i=12;i++) //关键字 { if (strcmp(key[i],searchchar)==0) return(i+1); } return(0);} case 2: { for (i=0;i=6;i++) //分界符 { if (strcmp(border[i],searchchar)==0) return(i+1); } return(0); } case 3: { for (i=0;i=5;i++) //运算符 { if (strcmp(arithmetic[i],searchchar)==0) return(i+1); } return(0); } case 4: { for (i=0;i=6;i++) //关系运算符 { if (strcmp(relation[i],searchchar)==0) return(i+1); } return(0); } case 5: { for (t=40;t=constnum;t++) //常数 { if (strcmp(searchchar,lableconst[t])==0)//判断该常数是否已出现过 return(t+1); } lableconst[t-1]=(char *)malloc(sizeof(searchchar));//为新的元素分配内存空间 strcpy(lableconst[t-1],searchchar);//为数组赋值lableconst指针数组名 constnum++; //常数个数自加 return(t); } case 6: { for (i=0;i=lableconstnum;i++) { if (strcmp(searchchar,lableconst[i])==0) //判断标识符是否已出现过 return(i+1); } lableconst[i-1]=(char *)malloc(sizeof(searchchar)); strcpy(lableconst[i-1],searchchar); lableconstnum++; //标识符个数自加 return(i); } default:cout错误!; } } char al
显示全部
相似文档