#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语言--词法分析程序
最新推荐文章于 2022-03-09 22:14:45 发布
本文介绍了一个使用C++编写的简单源代码解析器,它能够读取输入的C++代码,并对其进行词法分析,识别出关键字、标识符、运算符和边界符号等基本元素。该解析器适用于初步理解C++代码结构。
3459

被折叠的 条评论
为什么被折叠?



