Главная страница Случайная лекция Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика Мы поможем в написании ваших работ! |
Вычисление ОПС для присваиваний и арифметических выражений с индексами
Присваивание можно определить как операцию, у которой первый операнд должен быть переменной, а второй – арифметическим выражением. При этом значение переменной хранится в некоторой области памяти (например, в таблице переменных), а результатом операции должно быть изменение этого значения. В отличие от других операций, после вычисления операции присваивания результат операции не должен сохраняться в магазине, т.е. магазин будет пустым. Чтобы интерпретатор правильно вычислял как арифметические операции, так и операцию присваивания, для каждой ячейки магазина требуется хранить признак, указывающий, что в ней хранится – переменная или значение. Если на вход интерпретатора поступает операнд-константа, то должно записываться значение, а если переменная – то ссылка на ее размещение (например, на таблицу переменных). При поступлении на вход интерпретатора этот признак должен учитываться, и значения для операции должны либо извлекаться из магазина, либо по ссылке из таблицы переменных.
Пример 12. Дано присваивание x := a*(c + d). ОПС для него: x a c d + *:= В табл. 15 приведены шаги алгоритма вычисления ОПС. Табл. 15
Конец примера.
Выражения с индексами необходимы для доступа к элементам массивов. Для одномерного массива операция индексирования вычисляется следующим образом. Первый операнд такой операции – ссылка на таблицу переменных, где находится описание (паспорт) массива. В паспорте, в свою очередь, есть ссылка на расположение начального элемента массива с индексом 0, количество элементов, длина или тип каждого элемента. Второй операнд операции индексирования – значение индекса. Результатом операции является ссылка на индексируемый элемент массива. При этом вычисление ведется по формуле: M + d*i, где M – ссылка на элемент массива с индексом 0, d – длина элемента массива, i – значение индекса. Для двумерного массива операция индексирования требует трех операндов: 1) ссылка на паспорт массива, 2) значение индекса по первому измерению, 3) значение индекса по второму измерению. При этом вычисление ведется по формуле: M + d*(i*m + j), где M – ссылка на элемент массива с индексом 0, d – длина элемента массива, m – количество элементов в массиве по второму измерению, i , j – значения индексов по первому и второму измерению соответственно. По аналогичным формулам проводится вычисление в операции индексирования по трем и более индексам. Далее в примерах операцию индексирования по одному индексу будем обозначать <i>, а индексирование по двум индексам – <i2>. При выполнении операции индексирования перед вычислением ссылки на индексируемый элемент массива можно выполнить проверку корректности индексов, и при выходе их за пределы массива останавливать вычисления с сигнализацией ошибки.
Пример 13. Дано присваивание с индексацией M[i] := a*L[i, j + d]. ОПС для него: M i <i> a L i j d + <i2> * := В табл. 16 приведены шаги алгоритма вычисления ОПС. Для сокращения таблицы шаги 5 – 8 в ней пропущены. Табл. 16
Конец примера.
Дата добавления: 2015-07-26; просмотров: 130; Нарушение авторских прав Мы поможем в написании ваших работ! |