#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
char key[6][10]={"int","main","for","if","else","while"};
void check(char p[])
{
int i=0;
int j=0;
if(p[0]>='0'&&p[0]<='9')
{
printf("(integer,%s)\n",p);
j=1;
}
else
{
for(i=0;i<6;i++)
{
if(strcmp(p,key[i])==0)
{
printf("(keyword,%s)\n",key[i]);
j=1;
break;
}
}
}
if(!j) printf("(identifier,%s)\n",p);
}
int main()
{
char p[2005];
while(gets(p))
{
int i =0;
char f[2005];
int j=0;
for(i=0;p[i]!='\0';i++)
{
if(p[i]==' '||p[i]=='\t'||p[i]=='\n')
{
if(j!=0)
{
f[j]='\0';
check(f);
j=0;
}
}
else if(p[i]=='+'||p[i]=='-'||p[i]=='*'||p[i]=='/')
{
if(j!=0)
{
f[j]='\0';
check(f);
j=0;
}
printf("(operator,%c)\n",p[i]);
}
else if(p[i]=='='&&p[i+1]=='='||p[i]=='<'&&p[i+1]=='='||p[i]=='>'&&p[i+1]=='='||p[i]=='!'&&p[i+1]=='=')
{
if(j!=0)
{
f[j]='\0';
check(f);
j=0;
}
printf("(operator,%c%c)\n",p[i],p[i+1]);
i++;
}
else if(p[i]=='='||p[i]=='<'||p[i]=='>')
{
if(j!=0)
{
f[j]='\0';
check(f);
j=0;
}
printf("(operator,%c)\n",p[i]);
}
else if(p[i]=='{'||p[i]=='}'||p[i]=='('||p[i]==')'||p[i]==','||p[i]==';')
{
if(j!=0)
{
f[j]='\0';
check(f);
j=0;
}
printf("(boundary,%c)\n",p[i]);
}
else
{
f[j++]=p[i];
}
}
}
return 0;
}
小C语言--词法分析程序
最新推荐文章于 2024-09-06 09:36:30 发布