⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 词法分析.c

📁 学习编译原理时很有用的词法分析器!可以帮助理解词法分析
💻 C
字号:
#include <stdio.h>
#include <string.h>
char prog[80],token[8];
char ch;
int syn,p,m,n,sum,kk;
char *rwtab[6]={"begin","if","then","while","do","end"};

main()
{
	p=0;
	printf("\n please input string:\n");
	do {
		scanf("%c",&ch);
        prog[p++]=ch;
		//输入源程序串,送到缓冲区prog[p++]中;
	}while(ch!='#');
	p=0;
	do
	{
		scaner();
		switch(syn)
		{
		case 11:;break;
		case -1:输出(错误);break;
		default:输出(其它单词二元组);
		}
	}while(syn!=0);
}

scaner()
{
	for(n=0;n<8;n++)
		token[n]=NULL;
       ch=proc[p++];//下一个字符;
	while(ch==' ') 
		ch=proc[p++];//读下一个字符;
	if((ch<'z'&&ch>'a')||(ch>'A'&&ch<'Z'))//()ch是字母字符
	{
		while((ch<'z'&&ch>'a')||(ch>'A'&&ch<'Z')||(ch>'0'&&ch<'9'))//ch为字母字符或数字字符
		{
			token[m++]=ch;//ch=>token;
			ch=proc[p++];//读下一个字符;
		}
		token[m++]='\0';
		for(n=0;n<6;n++)
			if(strcmp(token,rwtab[n])==0)
			{
				syn=n+1;
				break;
			}
	}
	else if (ch<'9'&&ch>'0')//ch是数字字符
	{
		while(ch<'9'&&ch>'0')//ch为数字字符
		{
			sum=sum*10+ch-'0';
			ch=proc[p++];
		}
	}
	else
		switch(ch)
		{
		case '<':m=0;token[m++]=ch;
			ch=prog[p++]//读下一个字符;
			if (ch=='>')
			{
				syn=21;
				token[m++]=ch;
			}
			else if(ch=='=')
			{
				syn=22;
				token[m++]=ch;
			}
			else
			{
				syn=20;
				p--; //回退一个字符;
			}
			break;
		case '>':
			m=0;token[m++]=ch;
			ch=prog[p++]//读下一个字符;
			if (ch=='=')
			{
				syn=24;
				token[m++]=ch;
			}
			else
			{
				syn=23;
				p--; //回退一个字符;
			}
			break;
		case':':    syn=26;break;
		case'+':    syn=13;break;
		case'-':	syn=14;break;
		case'*':	syn=15;break;
		case'/':	syn=16;break;
		case'#':	syn=0;break;
		default:	syn=-1;
		}

}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -