#include<stdio.h>
#include<string.h>
using namespace std;
int isDigit(char ch)
{
if(ch >= '0'&& ch <= '9')
return 1;
else return 0;
}
int isCharacter(char ch)
{
if(ch >= 'a'&& ch <= 'z'||ch >= 'A'&& ch <= 'Z')
return 1;
else return 0;
}
int isOperator(char ch)
{
if(ch == '+'|| ch == '-'||ch == '*'|| ch == '/'||ch == '>'|| ch == '<'||ch == '!'|| ch == '=')
return 1;
else return 0;
}
int isKeyword(char tmp[])
{
if(!strcmp(tmp,"main")||!strcmp(tmp,"if")||!strcmp(tmp,"else")||!strcmp(tmp,"for")||!strcmp(tmp,"while")||!strcmp(tmp,"int"))
return 1;
else return 0;
}
int get()
{
char ch;
char tmp[20];
int i=0;
while(~scanf("%c",&ch))
{
if(ch == '\t'||ch == ' ')
continue;
else if (isDigit(ch))
{
while(isDigit(ch))
{
tmp[i++] = ch;
scanf("%c",&ch);
}
tmp[i] = '\0';
i=0;
printf("(integer,%s)\n",tmp);
ungetc(ch,stdin);
}
else if(ch == '{'||ch == '}'||ch == '('||ch ==')'||ch == ','||ch ==';')
printf("(boundary,%c)\n",ch);
else if (isCharacter(ch)||ch == '_')
{
while(isCharacter(ch)||ch == '_'||isDigit(ch))
{
tmp[i++] = ch;
scanf("%c",&ch);
}
tmp[i] = '\0';
i=0;
if(isKeyword(tmp))
printf("(keyword,%s)\n",tmp);
else
printf("(identifier,%s)\n",tmp);
ungetc(ch,stdin);
}
else if (isOperator(ch))
{
while(isOperator(ch))
{
tmp[i++] = ch;
scanf("%c",&ch);
}
tmp[i] = '\0';
i=0;
printf("(operator,%s)\n",tmp);
ungetc(ch,stdin);
}
}
}
int main()
{
get();
}
3666 小C语言--词法分析程序
最新推荐文章于 2024-09-06 09:36:30 发布