ВУЗ:
Составители:
97
/* к этому моменту строка оказывается просмотренной
целиком. Необходимо поместить оставшиеся в стеке
операции в постфиксную строку. */
15. while(empty(opstk) == FALSE) {
16. smbtp=pop(opstk);
17. (добавить smbtp к постфиксной строке);
18. } // end while
Для обеспечения возможности работы со скобками после считывания
открывающейся скобки она записывается в стек. Это может быть выполнено
путем установки правила precedence(op, "(") = FALSE для любого
символа операции, отличного
от символа правой (закрывающей) скобки.
Также определим precedence("(", op) = FALSE для того, чтобы
символ операции, появляющийся после левой скобки, записывался в стек.
После считывания закрывающей скобки все операции вплоть до первой
открывающей скобки должны быть прочитаны из стека и помещены в
постфиксную строку. Это может быть сделано путем установки
precedence(op, ")") = TRUE для всех операций
op, отличных от
левой скобки. После считывания этих операций из стека и закрытия
открывающей скобки необходимо выполнить следующую операцию.
Открывающая скобка должна быть удалена из стека и отброшена вместе с
закрывающей скобкой. Обе скобки не помещаются затем ни в постфиксную
строку, ни в стек. Установим функцию precedence("(", ")") равной
FALSE. Это
гарантирует нам то, что при достижении закрывающей скобки
цикл, начинающийся в строке 8, будет пропущен, а открывающая скобка не
будет помещена в постфиксную строку.
Выполнение продолжится со строки 12. Однако, поскольку
закрывающая скобка не должна помещаться в стек, строка 12 заменяется
оператором
if((empty(opstk) == TRUE) || (symb <> ")"))
push(opstk, symb);
97 /* к этому моменту строка оказывается просмотренной целиком. Необходимо поместить оставшиеся в стеке операции в постфиксную строку. */ 15. while(empty(opstk) == FALSE) { 16. smbtp=pop(opstk); 17. (добавить smbtp к постфиксной строке); 18. } // end while Для обеспечения возможности работы со скобками после считывания открывающейся скобки она записывается в стек. Это может быть выполнено путем установки правила precedence(op, "(") = FALSE для любого символа операции, отличного от символа правой (закрывающей) скобки. Также определим precedence("(", op) = FALSE для того, чтобы символ операции, появляющийся после левой скобки, записывался в стек. После считывания закрывающей скобки все операции вплоть до первой открывающей скобки должны быть прочитаны из стека и помещены в постфиксную строку. Это может быть сделано путем установки precedence(op, ")") = TRUE для всех операций op, отличных от левой скобки. После считывания этих операций из стека и закрытия открывающей скобки необходимо выполнить следующую операцию. Открывающая скобка должна быть удалена из стека и отброшена вместе с закрывающей скобкой. Обе скобки не помещаются затем ни в постфиксную строку, ни в стек. Установим функцию precedence("(", ")") равной FALSE. Это гарантирует нам то, что при достижении закрывающей скобки цикл, начинающийся в строке 8, будет пропущен, а открывающая скобка не будет помещена в постфиксную строку. Выполнение продолжится со строки 12. Однако, поскольку закрывающая скобка не должна помещаться в стек, строка 12 заменяется оператором if((empty(opstk) == TRUE) || (symb <> ")")) push(opstk, symb);
Страницы
- « первая
- ‹ предыдущая
- …
- 95
- 96
- 97
- 98
- 99
- …
- следующая ›
- последняя »