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

📄 cpp1.cpp

📁 用C++实现词法分析器
💻 CPP
字号:
#include<stdio.h>
#include<string.h>
char prog[80],token[8];
void scaner();
char ch;
int syn,p,m,n,sum;
char *rwtab[6]={"begin","if","then","while","do","end"};
void main()
{
	p=0;
	printf("\nplease input string:\n");
	do{
		ch=getchar();
	    prog[p]=ch;
	    p++;
	}while(ch!='#');
	p=0;
	do
	{
		scaner();
		switch(syn)
		{
		case 11 :printf("%c%d%c%d%c",'(',syn,',',sum,')');break;
		case -1 :printf("error");break;
		default : printf("%c%d%c%s%c",'(',syn,',',token,')');
		}
	}while(syn!=0);
}
void scaner()
{ 
	m=0;
	for(n=0;n<8;n++)token[n]=NULL;
	ch=prog[p++];
	while(ch==' ')
	    ch=prog[p++];
	if(ch>='a'&&ch<='z')
	{
		while(ch>='a'&&ch<='z'||ch>='0'&&ch<='9')
		{	token[m++]=ch;
		    ch=prog[p++];
		}
	token[m++]='\0';p--;syn=10;
	for(n=0;n<6;n++)
		if(strcmp(token,rwtab[n])==0)
		{
		syn=n+1;
		}
	}
    else
    if(ch>='0'&&ch<='9')
	{
		while(ch>='0'&&ch<='9')
		{
			sum=ch-'0';
			ch=prog[p++];
		}
		p--;syn=11;
	}
	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'>' :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=18;
				token[m++]=ch;
			}
			else
			{
				syn=17;
				p--;
			}
			break;
		case'+' :syn=13;token[0]=ch;break;
		case'-' :syn=14;token[0]=ch;break;
		case'*' :syn=15;token[0]=ch;break;
		case'/' :syn=16;token[0]=ch;break;
	    case'=' :syn=25;token[0]=ch;break;
		case';' :syn=26;token[0]=ch;break;
		case'(' :syn=27;token[0]=ch;break;
		case')' :syn=28;token[0]=ch;break;
		case'#' :syn=0;token[0]=ch;break;
		default:syn=-1;
	}
}
		




⌨️ 快捷键说明

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