Объектно-ориентированное программирование на C++. Андрианова А.А - 165 стр.

UptoLike

Объектно-ориентированное программирование на С++
while(c != '(')
{
q.PushElement((int)c);
if(!s.IsEmpty())
c = (char)s.PopElement();
else
{
f = false;
break;
}
}
}
else
{
// если текущая операция '*' или
// '/',из стека в очередь
// перемещаются все знаки операций
// либо до достижения пустоты стека,
// либо до достижения
// символов '(', '+' или '-'
while(c == '*' || c == '/')
{
q.PushElement((int)c);
if(!s.IsEmpty())
c = (char)s.PopElement();
else
{
f = false;
break;
}
}
}
// последний извлеченный символ
// помещается в стек, если выход из
// предыдущих циклов осуществился не по
// достижению конца стека
if(f)
s.PushElement((int)c);
// в стек помещается текущая операция
s.PushElement((int)str[i]);
}
break;
// если текущий символ '(', он записывается в стек
case '(':
s.PushElement((int)str[i]);
break;
// если текущий символ ')', из стека извлекаются
// все знаки операций до ближайшей '(',
165
                  Объектно-ориентированное программирование на С++
             while(c != '(')
                  {
                      q.PushElement((int)c);
                      if(!s.IsEmpty())
                    c = (char)s.PopElement();
                      else
                {
                  f = false;
                  break;
                }
                  }
         }
     else
     {
         // если текущая операция '*' или
         // '/',из стека в очередь
         // перемещаются все знаки операций
         // либо до достижения пустоты стека,
         // либо до достижения
         // символов '(', '+' или '-'
         while(c == '*' || c == '/')
         {
            q.PushElement((int)c);
            if(!s.IsEmpty())
              c = (char)s.PopElement();
            else
            {
               f = false;
               break;
            }
         }
       }
       // последний извлеченный символ
       // помещается в стек, если выход из
     // предыдущих циклов осуществился не по
     // достижению конца стека
     if(f)
         s.PushElement((int)c);
     // в стек помещается текущая операция
     s.PushElement((int)str[i]);
    }
    break;
 // если текущий символ '(', он записывается в стек
case '(':
      s.PushElement((int)str[i]);
      break;
 // если текущий символ ')', из стека извлекаются
 // все знаки операций до ближайшей '(',

                                                              165