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

📄 02.cpp

📁 掌握词法分析的基本思想
💻 CPP
字号:
//stack.h   
  #include<iostream.h>  
  #include<stdlib.h>   
    
  const   int   MaxStackSize=50;   
    
  template<class   T>   
  class   Stack   
  {   
  private:   
  T   stacklist[MaxStackSize];   
  int   top;   
  public:   
  Stack();   
  T   Peek()   const;   
  void   Push(const   T&   item);   
  T   Pop();   
  void   ClearStack();   
  int   StackEmpty()   const;   
  int   StackFull()   const;   
  };   
    
  template<class   T>   
  Stack<T>::Stack():top(-1)     {     }   
    
  template<class   T>   
  void   Stack<T>::Push(const   T&   item)   
  {   
  if(top==MaxStackSize-1)   
  {   
  cerr<<"Stack   overflow!"<<endl;   
  exit(1);   
  }   
  top++;   
  stacklist[top]=item;   
  };   
    
  template<class   T>   
  T   Stack<T>::Pop()   
  {   
  T   temp;   
  if(top==-1)   
  {   
  cerr<<"Attempt   to   pop   an   empty   stack!"<<endl;   
  exit(1);   
  }   
  temp=stacklist[top];   
  top--;   
  return   temp;   
  };   
    
  template<class   T>   
  T   Stack<T>::Peek()   const   
  {   
  if(top==-1)   
  {   
  cerr<<"Attempt   to   peek   an   empty   stack!"<<endl;   
  exit(1);   
  }   
  return   stacklist[top];   
  }   
    
  template<class   T>   
  int   Stack<T>::StackEmpty()   const   
  {   
  return   top==-1;   
  };   
    
  template<class   T>   
  int   Stack<T>::StackFull()   const     
  {   
  return   top==MaxStackSize-1;   
  };   
    
  template<class   T>   
  void   Stack<T>::ClearStack()   
  {   
  top=-1;   
  };   
  //main.cpp   
  #include"Stack.h"   
  void   f()   
  {   
    
  Stack<char>   s;   
  char   op;   
  char   op1;   
  cin>>op;   
  int   n;   
  while(op!='=')   
  {   
  switch(op)   
  {   
  case   '(': f();   
  break;   
  case   ')': goto   sto;   
  case   '+':   
  case   '-': if(s.StackEmpty()==0)   
  {   
  if   (s.Peek()=='+'||s.Peek()=='-')   {   
  op1=s.Pop();   
  cout<<op1;   
  s.Push(op);}   
  }   else   {   
  s.Push(op);}   
                    break;   
  case   '*':   
  case   '/': if(s.StackEmpty()==0)   
  {   
  if   (s.Peek()=='*'||s.Peek()=='/')   {   
  op1=s.Pop();   
  cout<<op1;   
  s.Push(op);   
                                        }else   {s.Push(op);}   
  }else   {   
  s.Push(op);}   
  break;   
  default:         cin.putback(op);   
  cin>>n;   
  cout<<n<<'   ';   
  if   (s.StackEmpty()==0)     
  if   (s.Peek()=='*'||s.Peek()=='/')   {   
  op1=s.Pop();   
  cout<<op1;}   
  }//end   switch   
                  cin>>op;   
  }//end   while   
  sto:         while(s.StackEmpty()!=1)   
  {op1=s.Pop();   
  cout<<op1;}   
  };   
    
  void   main()   
  {   
  f();   
  }   

⌨️ 快捷键说明

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