首页 > 代码库 > 私人定制-词法分析
私人定制-词法分析
私人定制词法分析,能够在输入一整段句子时准确地进行词法分析,并提供种别码表。
通过定义数组循环不断读入与分析单词。
先判断单词是否为数字,如是标志符再进一步判断是关键字、界符还是标识符。
每次读完单词执行一次getchar()后重复循环,当输出##时退出循环。
图片、源代码如下:
#include<stdio.h>#include<string.h>#define Max 100int JdujeNumber(char Words[],int i,int N);int JdujeKeywords(char Words[]);char *table[Max][1]={"#","begin","if","then","while","do","end","l(l|d)*","dd*","+","-","*","/",":",":=","<","<=","<>",">",">=","=",";","(",")"};char Words[Max];main(){ int j,i=0,key; printf("\n各种单词符号对应的种别码\n"); for(j=0;j<23;j++) { printf("%s\t%d\t\t",table[j][0],j); if(j%2==0) printf("\n"); } printf("请输入:(输入##代表结束)"); do { scanf("%s",Words); if(strcmp(Words,"##")==0) break; j=JdugeNumber(Words,i,strlen(Words)); if(j==1) printf("%s\t是数字\n",Words); else if(j==0) { key=JdujeKeywords(Words); if(key>=0&&key<=7) { printf("%s\t是关键字\n",Words); } else if(key>7&&key<=22) { printf("%s\t是界符\n",Words); } else { printf("%s\t是标识符\n",Words); } } getchar(); }while(1); printf("程序结束!");}int JdugeNumber(char Words[],int i,int N){ if(i==N) return 1; if(Words[i]>47&&Words[i]<58) { JdugeNumber(Words,i+1,N); } else return 0;}int JdujeKeywords(char Words[]){ int i; for(i=0;i<23;i++) { if(strcmp(Words,table[i][1])==0) return i; } return -1;}
私人定制-词法分析
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。