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

📄 yuyifenxi.cpp

📁 词法分析和语法分析,基于算术优先文法分析的汇编课设
💻 CPP
字号:
#include <math.h>
#include <iostream.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"};
void lrparser();
void yucu();
void statement();
void expression();
void term();
void factor();
int scaner()
{
	for(n=0;n<8;n++)
		token[n]=0;
	m=0;
	ch=prog[p];
	while(ch==' ') ch=prog[p++];
	if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
	{   
		while((ch>='a'&&ch<='z')||(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)
			switch(n){
				case 0:
					   syn=1;
					   break;
				case 1:
					 syn=2;
					 break;
				case 2:
					syn=3;
					break;
				case 3:
					syn=4;
					break;
                case 4:
					syn=5;
					break;
				case 5:
					syn=6;
					break;
				default:break;
			}
		}
	

	else 
		if(ch>='0'&&ch<='9'){sum=0;
			while(ch>='0'&&ch<='9')
			{sum=sum*10+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'>':m=0;
			    token[m++]=ch;
			    ch=prog[p++];
				if(ch=='=')
				{syn=24;
				token[m++]=ch;}
				else{
					syn=23;
					p--;
				}
				break;
		case ':':m=0;
			     token[m++]=ch;
				 ch=prog[p++];
				 if(ch=='=')
				 {syn=18;
				  token[m++]=ch;
				 }
				 else{
					 syn=17;
					 p--;
				 }
				 break;
		case '=':syn=25;
			     token[0]=ch;
				 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 ';':token[0]=ch;
			    syn=26;
				break;
		case '(':token[0]=ch;
			syn=27;
			break;
		case ')':token[0]=ch;
			syn=28;
			break;
        case'#':syn=0;
			    token[0]=ch;
				break;
		default:syn=-1;
	}
	return syn;
}

void main(){
	p=0;
	cout<<"please input string:\n";
	cin.getline(prog,80);
	scaner();
	do{
		
		lrparser();
	
	}while(kk!=1);
}


		
void lrparser()
{ 
	if(syn==1)
	{scaner();
	yucu();
	if(syn==6)
	{scaner();
	if(syn==0&&kk==0){
		cout<<"success!";
		kk=1;}
	}
	else {
		if(kk!=1) cout<<"缺end,错误!";
		kk=1;}
	}
	else{cout<<"缺begin错误!";kk=1;}
}
void yucu(){
	statement();
	while(syn==26){
		scaner();
		statement();
	}
}
void statement(){
	if(syn==10){
		scaner();
		if(syn==18){
			scaner();
			expression();
		}
		else {
			cout<<"赋值号错误";
			kk=1;
		}
	}
	else {
		cout<<"语句错误!";
		kk=1;
	}
}
void expression(){
	term();
	while(syn==13||syn==14){
		scaner();
		term();
	}
}
void term(){
	factor();
	while(syn==15||syn==16){
		scaner();
		factor();
	}
}
void factor(){
	if(syn==10||syn==11)
		scaner();
	else if(syn==27){
		scaner();
		expression();
		if(syn==28)
			scaner();
		else{
			cout<<")error!";
			kk=1;
		}
	}
		else {
			cout<<"expession error!";
			kk=1;
		}
	}



	
	

⌨️ 快捷键说明

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