首页 > 代码库 > 词法分析
词法分析
词法分析
#include<stdio.h> #include<string.h> void main() { int i=0,j,k=0,state=1,f=0,linenum=1; char a[11][10]={"const","var","call","begin","if","while","do","odd","end","then","procedure"}; char b,d[40]={"\0"}; freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); b=getchar(); while(b!=EOF)/*判断所输入字符是否为结束符*/ { if(b==‘ ‘||b==‘\n‘||b==‘\t‘)/*滤过空格、换行等分隔符号*/ { if(b=‘\n‘) linenum++; b=getchar(); } else if((b>=‘a‘&&b<=‘z‘)||(b>=‘A‘&&b<=‘Z‘))/*识别标识符以及保留字*/ { d[i++]=b; b=getchar(); while((b>=‘a‘&&b<=‘z‘)||(b>=‘A‘&&b<=‘Z‘)||(b>=‘0‘&&b<=‘9‘)) { d[i++]=b; b=getchar(); } for(j=0;j<11;j++)/*查询保留字表确定该单词是否是保留字*/ { if(strcmp(d,a[j])==0) { printf("1,%s\n",d); k=1; break; } } if(k==0)/*在保留字表中没有查到该单词,是标识符*/ printf("3,%s\n",d); for(j=0;j<=i;j++) d[j]=‘\0‘; i=0; k=0; } else if(b>=‘0‘&&b<=‘9‘)/*识别常数*/ { d[i++]=b; b=getchar(); while(f!=1){ switch (state) case 1: if(b>=‘0‘&&b<=‘9‘) { state=1; d[i++]=b; b=getchar(); } else if(b==‘.‘) { state=2;d[i++]=b;b=getchar();} else if(b==‘E‘) { state=4;d[i++]=b;b=getchar();} else state=7; break; case 2: if(b>=‘0‘&&b<=‘9‘) { state=3; d[i++]=b; b=getchar();} else state=8; break; } } }
词法分析
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。