Важная информация
Показано с 1 по 5 из 5

Тема: Стек.

  1. #1 Стек. 
    Профи Аватар для Dispetcher14
    Регистрация
    12.12.2010
    Адрес
    Раменское
    Сообщений
    597
    Сказал(а) спасибо
    35
    Поблагодарили 68 раз(а) в 56 сообщениях
    Записей в блоге
    13
    Вобщем ребят понял я одну важную весчь.
    И весчь эта заключается в том, что я не понмаю толком, как происходит работа со стеком. Т.е. в каком порядке туда входят данные, что в итоге оказывается в вершине(и где она находится), и так далее.

    Не могли бы вы написать здесь что-нибудь по этому поводу?
    "Спокойно, Маша, я Дубровский" (с) Дубровский, "Дубровский".
    Ответить с цитированием  
     

  2. #2  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    В СТЕПЛЕРЕ вообще есть несколько стеков. Стек ОПЗ - основной и базовый, который используется чуть-ли не в каждой строчке языка. Есть стек параметров, и стек локальных переменных.
    Вероятно, речь идет именно о стеке ОПЗ. Вот тебе пример:
    $(3)(24^7^5-+)
    У нас по ходу исполнения программы будет вычисляться левая и правая часть этого выражения. Левая часть вычисляется первой. Данные входят в стек в порядке слева-направо.
    Сначала вычисляется левая часть выражения: любое упоминание числа в выражении служит как оператор заталкивания этого числа в стек ОПЗ. То-есть, у нас тройка сразу попадет в стек. Больше, операторов в выражении нет - поэтому, тройка запоминается интерпретатором (в зависимости от интерпретатора - TOTOP или LINT - это происходит по разному). После того, как результат запомнен - стек ОПЗ очищается, и выполняется второе выражение - (24^7^5-+)
    В стек заталкивается значение 24, потом индекс стека оператором ^ увеличивается на 1 - теперь на верхушке стека лежит 0, а под ней - число 24. Потом на верхушку вместо нуля ложится число 7, и вершина снова устанавливается в 0, а 7 уходит на под вершину. А под 7 лежит число 24. Наконец, тоже самое происходит с числом 5. Итого, после выполнения куска 24^7^5 у нас стек будет таким: 24,7,5 где пятерка - вершина стека. Затем, оператор минус берет два числа с верхушки стека - 7 и 5 (при этом, эти два числа удаляются со стека), и вычитает из семи пять. Результат - два, и он ложится на верхушку стека. Итого, после вычитания стек у нас такой: 24,2 где двойка - вершина стека. Затем оператор + складывает эти два числа, и ложит результат на вершину стека. Итого, на стеке у нас только 26 - и это вершина стека. Получается так $(3)(26). Оператор присваивания работает так, что просто ложит число на вершине стека в переменную, с номером, который получился в первом выражении - то-есть, в третью переменную поедет число 26. Такие дела.
    А вообще, механизм работы всех стеков очень подобно разобран в книге по степлеру: [Ссылки могут видеть только зарегистрированные пользователи. ]
    Последний раз редактировалось Абадябер; 11.07.2012 в 19:48.
    Дружба-магия-радость!
    Ответить с цитированием  
     

  3. Пользователь сказал cпасибо:

    Kakos_nonos (11.07.2012)

  4. #3  
    Профи Аватар для Dispetcher14
    Регистрация
    12.12.2010
    Адрес
    Раменское
    Сообщений
    597
    Сказал(а) спасибо
    35
    Поблагодарили 68 раз(а) в 56 сообщениях
    Записей в блоге
    13
    А, всё я теперь понял то, что я не мог понять!
    Вершина находится справа.
    Операторы считываются слева-направо но вносятся как бы справа налево.
    Между нечислами зна ^ не требуется.
    "Спокойно, Маша, я Дубровский" (с) Дубровский, "Дубровский".
    Ответить с цитированием  
     

  5. #4  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Вершина находится справа.
    Операторы считываются слева-направо но вносятся как бы справа налево.
    "Вершина справа", "вносятся как бы справа налево" - это все абстракции, если можно так сказать. Стек в степлере - по сути просто массив переменных типа Integer, и у него есть индекс - указатель - такая переменная, которая показывает, с какой именно ячейкой массива стека работать на данный момент.
    Тебе очень поможет просмотр исходников интерпретаторов степлера - они лежат всегда вместе с самим интерпретаторами.
    Дружба-магия-радость!
    Ответить с цитированием  
     

  6. #5  
    Профи Аватар для Dispetcher14
    Регистрация
    12.12.2010
    Адрес
    Раменское
    Сообщений
    597
    Сказал(а) спасибо
    35
    Поблагодарили 68 раз(а) в 56 сообщениях
    Записей в блоге
    13
    Ну да, абстракци, но ведь верные, по сути?
    И так действительно удобно представлять стек при работе.
    А то что это массив - это и ежё понятно
    "Спокойно, Маша, я Дубровский" (с) Дубровский, "Дубровский".
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •