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

词法分析

时间:2016-10-07 22:31:21      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

#include<stdio.h>
#include<string.h>
char ch,token[8],prog[80];
int syn,p,m,n,sum;
char *rwtab[6]={"begin","if","then","while","do","end"};
void scaner();
main()
{
	p=0;
	printf("请输入一个字符串(输入#表示结束):");
	do{
		scanf("%c",&ch);
		prog[p++]=ch;
	}while(ch!=#);
	p=0;
	do{
		scaner();
		switch(syn)
		{
		case 11:printf("%-10d%5d\n",sum,syn);
			break;
		case -1:printf("输入的字符串有误!\n");
			getch();
			exit(0);
		default:printf("%-10s%5d\n",token,syn);
			break;
		}
	}while(syn!=0);
	getch();
}
void scaner()
{
	sum=0;
	for(m=0;m<8;m++)
		token[m++]=NULL;
	ch=prog[p++];
	m=0;
    while((ch==‘ ‘)||(ch==‘\n‘))
		ch=prog[p++];
	if(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘)))
	{
		while(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘))||((ch>=‘0‘)&&(ch<=‘9‘)))
		{
			token[m++]=ch;
			ch=prog[p++];
		}
		p--;
		syn=10;
		for(n=0;n<6;n++)
			if(strcmp(token,rwtab[n])==0)
			{
				syn=n+1;
				break;
			}
	}
	else if((ch>=‘0‘)&&(ch<=‘9‘))
	{
		while((ch>=‘0‘)&&(ch<=‘9‘))
		{
			sum=sum*10+ch-‘0‘;
			ch=prog[p++];
		}
		p--;
		syn=11;
	}
	else switch(ch)
	{
		case ‘<‘:token[m++]=ch;
			ch=prog[p++];
			if(ch==‘=‘)
			{
				syn=22;
				token[m++]=ch;
			}
			else
			{
				syn=20;
				p--;
			}
			break;
		case ‘>‘:token[m++]=ch;
			ch=prog[p++];
			if(ch==‘=‘)
			{
				syn=24;
				token[m++]=ch;
			}
			else
			{
				syn=23;
				p--;
			}
			break;
		case ‘+‘: token[m++]=ch;
			ch=prog[p++];
			if(ch==‘+‘)
			{
				syn=17;
				token[m++]=ch;
			}
			else
			{
				syn=13;
				p--;
			}
			break;
		case ‘-‘:token[m++]=ch;
			ch=prog[p++];
			if(ch==‘-‘)
			{
				syn=29;
				token[m++]=ch;
			}
			else
			{
				syn=14;
				p--;
			}
			break;
		case ‘!‘:ch=prog[p++];
			ch=prog[p++];
			if(ch==‘=‘)
			{
				syn=21;
				token[m++]=ch;
			}
			else
			{
				syn=31;
				p--;
			}
			break;
		case ‘=‘:token[m++]=ch;
			ch=prog[p++];
			if(ch==‘=‘)
			{
				syn=25;
				token[m++]=ch;
			}
			else
			{
				syn=18;
				p--;
			}
			break;



	}
}

  

词法分析

标签:

原文地址:http://www.cnblogs.com/229zyx/p/5936575.html

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