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

📄 cifafenxi.cpp

📁 词法分析和语法分析,基于算术优先文法分析的汇编课设
💻 CPP
字号:
#include <math.h>
#include <iostream.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()
{
	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);
	do{
		scaner();
		switch(syn){
		case -1:
			  cout<<"error";
		      break;
		case 11:
			cout<<"("<<syn<<","<<sum<<")"<<endl;
			break;
		default:
		   cout<<"("<<syn<<","<<token<<")"<<endl;
		}
	}while(syn!=0);
}


		

⌨️ 快捷键说明

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