算符优先分析程序.cpp

来自「词法分析器,本程序是C语言的一个子集的词法分析程序,只能识别整型数字和部分关键字」· C++ 代码 · 共 71 行

CPP
71
字号
#include "stack.h"
#include<string.h>
#include<stdlib.h>
const int maxsize=100;
void main()
{
	char  str[maxsize];
	  stack  s;
	    int  len;
	    cout<<"请输入一个句型,以#结束!"<<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<<"你的输入有错误!"<<endl;
				     cout<<"错误为第 "<<t+1<<"个字符 :"<<str[t]<<endl;
				      exit(0);
			   }
			   else
			   {
				   cout<<"读入 :"<<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 + =
减小字号Ctrl + -
显示快捷键?