📄 算符优先分析程序.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 + -