#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define m 500
struct KEYWORD
{
char keyword[20];
};
typedef struct KEYWORD keyword;
int main()
{
keyword key[6];
int i=0,j=0;
char a[m],b[m];
strcpy(key[0].keyword,"begin");
strcpy(key[1].keyword,"if");
strcpy(key[2].keyword,"then");
strcpy(key[3].keyword,"while");
strcpy(key[4].keyword,"do");
strcpy(key[5].keyword,"end");
printf("Please input the code and end with‘#‘:");
gets(a);
while(a[i]!=‘\0‘)
{
j=0;
if(isalpha(a[i]))
{
while((a[i]!=‘ ‘)&&(a[i]!=‘\0‘))
{
if(isalpha(a[i]))
{
b[j]=a[i];
j++;
i++;
}
else
break;
}
if((a[i]==‘ ‘)||(a[i]==‘\0‘))
{
b[j]=‘\0‘;
if(strcmp(b,key[0].keyword)==0)
printf("(1,\"begin\")\n");
else if(strcmp(b,key[1].keyword)==0)
printf("(2,\"if\")\n");
else if(strcmp(b,key[2].keyword)==0)
printf("(3,\"then\")\n");
else if(strcmp(b,key[3].keyword)==0)
printf("(4,\"while\")\n");
else if(strcmp(b,key[4].keyword)==0)
printf("(5,\"do\")\n");
else if(strcmp(b,key[5].keyword)==0)
printf("(6,\"end\")\n");
else
printf("(10,\"%s\")\n",b);
}
else
{
b[j]=‘\0‘;
printf("(10,\"%s\")\n",b);
i--;
}
}
else if(isdigit(a[i]))
{
while(isdigit(a[i]))
{
b[j]=a[i];
j++;
i++;
}
b[j]=‘\0‘;
printf("(11,\"%s\")\n",b);
i--;
}
else
{
switch(a[i])
{
case ‘+‘:
printf("(13,\"%c\")\n",a[i]);break;
case ‘-‘:
printf("(14,\"%c\")\n",a[i]);break;
case ‘*‘:
printf("(15,\"%\")\n",a[i]);break;
case ‘/‘:
printf("(16,\"%c\")\n",a[i]);break;
case ‘:‘:
if(a[i+1]==‘=‘)
{
printf("(18,\":=\")\n");i++;break;
}
else
printf("(17,\"%c\")\n",a[i]);break;
case ‘<‘:
if(a[i+1]==‘=‘)
{
printf("(21,\"<=\")\n");i++;break;
}
else if(a[i+1]==‘>‘)
{
printf("(22,\"<>\")\n");i++;break;
}
else
printf("(20,\"%c\")\n",a[i]);break;
case ‘>‘:
if(a[i+1]==‘=‘)
{
printf("(24,\">=\")\n");i++;break;
}
else
printf("(23,\"%c\")\n",a[i]);break;
case ‘=‘:
printf("(25,\"%c\")\n",a[i]);break;
case ‘;‘:
printf("(26,\"%c\")\n",a[i]);break;
case ‘(‘:
printf("(27,\"%c\")\n",a[i]);break;
case ‘)‘:
printf("(28\",%c\")\n",a[i]);break;
case ‘#‘:
printf("(0,\"%c\")\n",a[i]);break;
default:
printf("%c\t语法错误!\n",a[i]);break;
}
}
i++;
}
}
原文:http://www.cnblogs.com/zou779596337/p/4876143.html