1022-词法分析
2015-10-22 19:00 09张鑫相 阅读(224) 评论(1) 编辑 收藏 举报
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define M 1000
struct key
{
char g[20];
};
typedef struct key KEY;
int main()
{
KEY k[6];
int i=0,j=0;
char a[M],b[M],ch;
strcpy(k[0].g,"begin");
strcpy(k[1].g,"if");
strcpy(k[2].g,"then");
strcpy(k[3].g,"while");
strcpy(k[4].g,"do");
strcpy(k[5].g,"end");
printf("请输入源程序:\n");
do{
scanf("%c",&ch);
a[i]=ch;
i++;
}
while(a[i-1]!='#');
a[i]='\0';
i=0;
while(a[i]!='\0')
{
j=0;
if(isalpha(a[i]))
{
while((a[i]!=' ')&&(a[i]!='\0'))
{
if((isalpha(a[i]))||(isdigit(a[i])))
{
b[j]=a[i];
j++;
i++;
}
else
break;
}
if((a[i]==' ')||(a[i]=='\0')||(a[i]=='\n'))
{
b[j]='\0';
if(strcmp(b,k[0].g)==0)
printf("begin\t种别码 1\n");
else if(strcmp(b,k[1].g)==0)
printf("if \t种别码 2\n");
else if(strcmp(b,k[2].g)==0)
printf("then \t种别码 3\n");
else if(strcmp(b,k[3].g)==0)
printf("while\t种别码 4\n");
else if(strcmp(b,k[4].g)==0)
printf("do \t种别码 5\n");
else if(strcmp(b,k[5].g)==0)
printf("end \t种别码 6\n");
else
printf("%s \t种别码 10\n",b);
}
else
{
b[j]='\0';
printf("%s \t种别码 10\n",b);
i--;
}
}
else if(isdigit(a[i]))
{
j=0;
while(isdigit(a[i]))
{
b[j]=a[i];
j++;
i++;
}
b[j]='\0';
printf("%s \t种别码 11\n",b);
i--;
}
else
{
switch(a[i])
{
case' ': break;
case'\n': break;
case '+':
printf("%c \t种别码 13\n",a[i]);break;
case '-':
printf("%c \t种别码 14\n",a[i]);break;
case '*':
printf("%c \t种别码 15\n",a[i]);break;
case '/':
printf("%c \t种别码 16\n",a[i]);break;
case ':':
if(a[i+1]=='=')
{
printf(":= \t种别码 18\n");i++;break;
}
else
{ printf("%c \t种别码 17\n",a[i]);break;}
case '<':
if(a[i+1]=='=')
{
printf("<= \t种别码 21\n");i++;break;}
if(a[i+1]=='>')
{ printf("<> \t种别码 22\n");i++;break;}
else
printf("%c \t种别码 20\n",a[i]);break;
case '>':
if(a[i+1]=='=')
{ printf(">= \t种别码 24\n");i++;break;}
else
printf("%c \t种别码 23\n",a[i]);break;
case '=':
printf("= \t种别码 25\n");break;
case ';':
printf("; \t种别码 26\n");break;
case '(':
printf("( \t种别码 27\n");break;
case ')':
printf(") \t种别码 28\n");break;
case '#':
printf("# \t种别码 0\n");break;
default:
printf("%c \t语法错误!\n",a[i]);break;
}
}
i++;
}
}
不小心删掉,补交的。