码迷,mamicode.com
首页 > 其他好文 > 详细

0917 实验一词法分析程序

时间:2015-09-22 21:42:08      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

#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];
	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");
	gets(a);
	while(a[i]!=‘\0‘)
	{
		j=0;
		if((isalpha(a[i]))||(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‘))
			{
			    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 ‘+‘:
				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++;
	}
}
			
		   

  

0917 实验一词法分析程序

标签:

原文地址:http://www.cnblogs.com/57rongjielong/p/4830384.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!