私人定制-词法分析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了私人定制-词法分析相关的知识,希望对你有一定的参考价值。
私人定制词法分析,能够在输入一整段句子时准确地进行词法分析,并提供种别码表。
通过定义数组循环不断读入与分析单词。
先判断单词是否为数字,如是标志符再进一步判断是关键字、界符还是标识符。
每次读完单词执行一次getchar()后重复循环,当输出##时退出循环。
图片、源代码如下:
#include<stdio.h> #include<string.h> #define Max 100 int 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; }
以上是关于私人定制-词法分析的主要内容,如果未能解决你的问题,请参考以下文章