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

📄 cpp2.cpp

📁 简单的语法分析程序
💻 CPP
字号:
#include<stdio.h>
#include<string.h>
#include<iostream.h>
char prog[80],token[8];
char ch;
void scaner();
void lrparser();
void yucu();
void statement();
void expression();
void term();
void factor();
int syn,p,m,n,sum;int kk=0;
char *rwtab[6]={"begin","if","then","while","do","end"};
void main()
{
	p=0;
	printf("\n please input string:\n");
	do{
		ch=getchar();
	    prog[p]=ch;
	    p++;
	}while(ch!='#');
	p=0;
	
		scaner();
		lrparser();
	
}
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;
	}
}
void lrparser()
{
	if(syn==1)
	{
		scaner();
		yucu();
		if(syn==6)
		{
			scaner();
			if((syn==0)&&(kk==0))
				printf("success");
		}
		else{if(kk!=1)cout<<"no end;error";kk=1;}
	}
	else{printf("no begin;error");kk=1;}
	return;
}
void yucu()
{
	statement();
	while(syn==26)
	{
		scaner();
		statement();
	}
	return;
}
void statement()
{
	if(syn==10)
	{
		scaner();
		if(syn==18)
		{
			scaner();
			expression();
		}
		else{printf("赋值号错误");kk=1;}
	
	}
	else{printf("输出语句错误");kk=1;}
	return;
}
void expression()
{
	term();
	while(syn==13||syn==14)
	{
		scaner();
		term();
	}
	return;
}
void term()
{
	factor();
	while(syn==15||syn==16)
	{
		scaner();
		factor();
	}
	return;
}
void factor()
{
	if(syn==10||syn==11)
		scaner();
	else if(syn=27)
	{
		scaner();
		expression();
		if(syn==28)
		   scaner();
		else{printf("')'错误");kk=1;}
	}
	else{printf("表达式错误");kk=1;}
	return;
}
               

⌨️ 快捷键说明

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