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

📄 cpp1.cpp

📁 词法分析 分析如下形式的语句 begin a:=3 end #
💻 CPP
字号:
#include<stdio.h>
#include<string.h>
char prog[80],token[8];char ch;
int syn,p,m,n,sum;
char *rwtab[6]={"begin", "if", "then", "while", "do", "end"};
int scaner();
void main()
{
	p=0;
	printf("\n请输入字符串:\n");
	do
	{
		scanf("%c",&ch);
		prog[p]=ch;
		p=p++;
	}
	while(ch!='#');
		p=0;
		do{
		scaner();
			switch(syn)
				{
					case 11:
						printf("%c%d%c%d%c",'(',syn,',',sum,')');break;
					case -1:printf("\nerror\n");break;
					default:printf("%c%d%c%s%c",'(',syn,',',token,')');
				}
			}
	while(syn!=0);
}

int 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=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=ch-'0';
			ch=prog[p++];

			}
				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=p--;
							}
						break;
			case '>':token[m++]=ch;
					 ch=prog[p++];
						if(ch=='=')
						{
							syn=24;
							token[m++]=ch;}
						else
						{
							syn=23;
						    p=p--;
						}
						break;
			case ':':token[m++]=ch;
                     ch=prog[p++];
						if(ch=='=')
							{
							syn=18;
							token[m++]=ch;
						}
						else
						{
							syn=17;
							p=p--;
						}
						break;
			case '+':syn=13;token[m++]=ch;break;
			case '-':syn=14;token[m++]=ch;break;
			case '*':syn=15;token[m++]=ch;break;
			case '/':syn=16;token[m++]=ch;break;
			case ';':syn=26;token[m++]=ch;break;
			case '(':syn=27;token[m++]=ch;break;
			case ')':syn=28;token[m++]=ch;break;
			case '#':syn=0;token[m++]=ch;break;
			default:syn=-1;
}
		return syn;
}

⌨️ 快捷键说明

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