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

📄 算符优先分析程序.cpp

📁 关于编译原理课程设计--基于算符优先分析的表达式语法分析器
💻 CPP
字号:
#include "stack.h"
#include<string.h>
#include<stdlib.h>
const int maxsize=100;
void main()
{
	char  str[maxsize];
	  stack  s;
	    int  len;
	    cout<<"Input a char,ending with #!"<<endl;
		  cin>>str;
		    len=int(strlen(str)); 
		s.push('#');
	  int k=s.getsize()-1,t=0,j;
	   char a=str[0];
	    while(a!='#')
		{
			a=str[t];
			 if(isvt(s.peek(k))) 
				 j=k;
			   else
				   j=k-1;     
			   while(isvt(a)&&getrank(s.peek(j),a)==1)
			   {    
				   int h=j,low=j-1;
				     if(!isvt(s.peek(low)))
						 low--;
					   while(getrank(s.peek(low),s.peek(h))!=-1)
					   {
						   h=low;
						   low--;
						    if(!isvt(s.peek(low)))
								low--;
					   }
					   h=s.getsize()-1;
					    low++;
						 int len=h-low+1;
					    char  ch[10];
						 for(int p=0;p<10;p++)
							 ch[p]='\0';
						  s.pop(ch,len);
						   char c=guiyue(ch);
								s.push(c);
                                cout<<ch<<" 规约为 "<<guiyue(ch)<<endl;
							s.peekall();
						    j=s.getsize()-1;
							  if(!isvt(s.peek(j)))
								  j--;
			   }
			   if(!(a>='A'&&a<='Z')&&getrank(s.peek(j),a)==2)
			   {
				  cout<<"Your input is wrong!"<<endl;
				     cout<<"The mistake is at "<<t+1<<" char:"<<str[t]<<endl;
				      exit(0);
			   }
			   else
			   {
				   cout<<"Read :"<<a<<endl;
				   s.push(a);s.peekall();
				    t++;
					 k=s.getsize()-1;
			   }
		}
   char temp[10];
    s.pop(temp,3);
	 if(s.getsize()==0)
		 cout<<"yes!"<<endl;
	   else
		   cout<<"no!"<<endl;
	     cin>>k;
}

⌨️ 快捷键说明

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