ВУЗ:
Составители:
96
программными генераторами) для операций с равным приоритетом является
одной из типичных ошибок.
Рассмотрим теперь макет алгоритма для преобразования строки,
представленной в инфиксной форме и не содержащей скобок, в постфиксную
строку. Поскольку мы считаем, что во входной строке скобки отсутствуют,
единственным признаком порядка выполнения операций является их
приоритет.
1. (Установить в постфиксную
строку " ");
2. (Очистить стек с именем opstk);
3. while (на входе еще имеются символы) {
4. read(symb);
5. if(isOperand(symb) == TRUE) {//символ есть операнд
6. (добавить символ к постфиксной строке);
7. } else { //символ есть операция
8. while(empty(stack) == FALSE) &&
(precedence(stacktop(opstk), symb) == TRUE)) {
9. smbtp = pop(opstk);
/* smbtp имеет приоритет больший, чем symb, поэтому она
может быть добавлена к постфиксной строке. */
10. (добавить smbtp к постфиксной строке);
11. } // end while
/* в этой точке либо opstk пуст, либо symb имеет
приоритет над stacktop(opstk). Нельзя поместить symb в
постфиксную строку до тех пор, пока не считана
следующая операция, которая может иметь более высокий
приоритет. Следовательно, необходимо сохранить symb. */
12. push(opstk, symb);
13. } // end if
14. } // end while
96 программными генераторами) для операций с равным приоритетом является одной из типичных ошибок. Рассмотрим теперь макет алгоритма для преобразования строки, представленной в инфиксной форме и не содержащей скобок, в постфиксную строку. Поскольку мы считаем, что во входной строке скобки отсутствуют, единственным признаком порядка выполнения операций является их приоритет. 1. (Установить в постфиксную строку " "); 2. (Очистить стек с именем opstk); 3. while (на входе еще имеются символы) { 4. read(symb); 5. if(isOperand(symb) == TRUE) {//символ есть операнд 6. (добавить символ к постфиксной строке); 7. } else { //символ есть операция 8. while(empty(stack) == FALSE) && (precedence(stacktop(opstk), symb) == TRUE)) { 9. smbtp = pop(opstk); /* smbtp имеет приоритет больший, чем symb, поэтому она может быть добавлена к постфиксной строке. */ 10. (добавить smbtp к постфиксной строке); 11. } // end while /* в этой точке либо opstk пуст, либо symb имеет приоритет над stacktop(opstk). Нельзя поместить symb в постфиксную строку до тех пор, пока не считана следующая операция, которая может иметь более высокий приоритет. Следовательно, необходимо сохранить symb. */ 12. push(opstk, symb); 13. } // end if 14. } // end while
Страницы
- « первая
- ‹ предыдущая
- …
- 94
- 95
- 96
- 97
- 98
- …
- следующая ›
- последняя »