主页 > 程序语言 > 编译原理词法分析器

编译原理词法分析器

2023-12-13 02:09来源:m.sf1369.com作者:宇宇

用C++语言 #include #include #include #include #include #include #define NULL 0 FILE *fp; char ch; char *keyword[34]={auto,break,case,char,const,continue,default,do,double, else,enum,extern,float,for,goto,if,int,long,register, return,short,signed,sizeof,static,struct,switch,typedef, printf, union,unsigned,void,volatile,while,main}; char *operatornum[6]={+,-,*,/,++,--}; char *comparison[8]={<,<=,=,>,>=,<>,==,!=}; char *interpunction[8]={,,;,:=,.,(,),{,}}; char *biaoshifu[6]={%,$,^,&,_,#};//特殊标识符 char *zhushifu[3]={//,/*,*/};//注释符 char *luoji[3]={&&,||,!};//逻辑运算符 ////////////////////////////////////////////////////////////////////////////////////////// bool search(char searchstr[],int wordtype) { int i; switch (wordtype) { case 1:for(i=0;i<=33;i++) { if(strcmp(keyword[i],searchstr)==0) return(true); } case 2:{ for(i=0;i<=5;i++) { if(strcmp(operatornum[i],searchstr)==0) return(true); } break; } case 3: { for(i=0;i<=7;i++) { if(strcmp(comparison[i],searchstr)==0) return(true); } break; } case 4: for(i=0;i<=7;i++) { if(strcmp(interpunction[i],searchstr)==0) return(true); } break; case 5: for(i=0;i<=5;i++) { if(strcmp(biaoshifu[i],searchstr)==0) return(true); }break; case 6: for(i=0;i<=2;i++) { if(strcmp(zhushifu[i],searchstr)==0) return(true); }break; case 7: for(i=0;i<=2;i++) { if(strcmp(luoji[i],searchstr)==0) return(true); }break; } return(false); } /////////////////////////////////////////////////////////////////////////////////////////// char letterprocess (char ch)//字母处理函数 { int i=-1; char letter[20]; while (isalnum(ch)!=0) { letter[++i]=ch; ch=fgetc(fp); }; letter[i+1]='\0'; if (search(letter,1)) { printf(<%s,关键字>\n,letter); //strcat(letter,\n); //fputs('<' letter '>\n',outp); } else { printf(<%s,自定义变量>\n,letter); //strcat(letter,\n); //fputs(letter,outp); } return(ch); } /////////////////////////////////////////////////////////////////////////////////////////// char numberprocess(char ch)//数字处理程序 { int i=-1; char num[20]; while (isdigit(ch)!=0) { num[++i]=ch; ch=fgetc(fp); } if(isalpha(ch)!=0) { while(isspace(ch)==0) { num[++i]=ch; ch=fgetc(fp); } num[i+1]='\0'; printf(错误!非法标识符:%s\n,num); goto u; } num[i+1]='\0'; printf(<%s,数字>\n,num); //strcat(num,\n); //fputs(num,outp); u: return(ch); } ////////////////////////////////////////////////////////////////////////////////////////////// char otherprocess(char ch) { int i=-1; char other[20]; if (isspace(ch)!=0) { ch=fgetc(fp); goto u; } while ((isspace(ch)==0)&&(isalnum(ch)==0)) { other[++i]=ch; ch=fgetc(fp); } other[i+1]='\0'; if (search(other,2)) printf(<%s,算数运算符>\n,other); else if (search(other,3)) printf(<%s,关系运算符号>\n,other); else if (search(other,4)) printf(<%s,分隔符号>\n,other); else if (search(other,5)) printf(<%s,特殊标识符号>\n,other); else if (search(other,6)) printf(<%s,注释符号>\n,other); else if (search(other,7)) printf(<%s,逻辑运算符号>\n,other); else printf(错误!非法字符:%s\n,other); u: return (ch); } ///////////////////////////////////////////////////////////////////////////////////////////// void main () { char str,c; printf(**********************************词法分析器************************************\n); //outp=fopen(二元式表.txt,w); if ((fp=fopen(源程序.txt,r))==NULL) printf(源程序无法打开!\n); else { str =fgetc(fp); while (str!=EOF) { if (isalpha(str)!=0) str=letterprocess(str); else { if (isdigit(str)!=0) str=numberprocess(str); else str=otherprocess(str); } }; printf(词法分析结束,谢谢使用!\n); printf(点任意键退出!\n); } c=getch(); }

相关推荐

哪些编程语言是函数式的

程序语言 2024-01-14

VB编程的函数详解

程序语言 2024-01-02

c语言扑克牌问题

程序语言 2023-12-28

iphone语言与地区有什么用?

程序语言 2023-12-19

C语言程序,怎么使用,

程序语言 2023-12-17

把word嵌入到C#程序中

程序语言 2023-11-26

HTML是不是编程语言?

程序语言 2023-11-17