Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
Топ:
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Интересное:
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Дисциплины:
2020-12-27 | 71 |
5.00
из
|
Заказать работу |
|
|
Мы уже говорили о том, что внутренняя форма - это промежуточная форма представления исходной программы, пригодная (1) для простой машинной обработки (операторы располагаются в том же порядке, в котором они и будут исполняться); (2) для интерпретации. Рассмотрим, как представимы во внутренней форме некоторые наиболее употребительные операторы. Начнем с польской формы.
ПОЛЬСКАЯ ФОРМА
Вернемся к вопросу вычисления польской формы записи. При этом модифицируем первоначальный алгоритм так, чтобы операнды выбирались не из входного потока непосредственно, а из специально отведенного для этого стека. Как и раньше, будем хранить в R текущий считываемый символ.
Если R является идентификатором или константой, то его значение заносится в стек и осуществляется считывание следующего символа (правило "<операнд>::=идентификатор").
Если R - бинарный оператор, то он применяется к двум верхним операндам в стеке, и затем они меняются на полученный результат (правило "<операнд>::=<операнд><операнд><оператор>").
Если R - унарный оператор, то он применяется к верхнему символу в стеке, который затем заменяется на полученный результат (правило "<операнд>::=<операнд><оператор>").
Упрощенно алгоритм вычисления польской формы (ПФ) выглядит так:
R:= getchar
while R!= # do
case R of
'идентификатор': push(R)
'бин.оператор': pop(B), pop(A), Tmp:= R(A,B), push(Tmp)
'унарн.оператор': pop(A), Tmp:= R(A), push(Tmp)
endcase
R:= getchar
endwhile
Обычно, при выполнении оператора присваивания в стек мы ничего не заносим (это справедливо для "алголоподобных" языков, к которым, в частности, относится и Паскаль).
|
Польскую форму легко расширять. Рассмотрим включение в ПФ других, отличных от арифметических, операторов и конструкций. Символом $ мы будем предварять имена операторов, чтобы не спутать их с аргументами.
Безусловные переходы
Безусловный переход на метку (аналог GOTO L)
L $BRL (Branch to label)
L - имя в таблице символов. Значение его - адрес перехода. Основная проблема при реализации этого оператора – определение адреса перехода. Возможным решением является введение фиктивного оператора, соответствующего метке, на которую будет осуществлен переход с последующим поиском его в массиве польской формы.
Безусловный переход на символ
C $BR
Под символом здесь понимается номер позиции (индекс) в массиве, содержащем польскую форму.
Условные переходы
<операнд1> <операнд2> $BR xZ|$BRM|$BRP|$BRMZ|$BRPZ|
<операнд1> - значение арифметического выражения,
<операнд2> - номер или место символа в польской цепочке (адрес).
$BRx – код оператора. При этом можно ввести самые разнообразные условия перехода. Например:
$BRZ - переход по значению 0,
$BRM - переход по значению <0,
$BRP - переход по значению >0,
$BRMZ - переход по значению <=0,
$BRPZ - переход по значению >=0,
и т.п.
При выполнении условия перехода в качестве следующего символа берется тот символ, адрес которого определяется вторым операндом. В противном случае работа продолжается как обычно.
Условные конструкции
IF <выражение> THEN <инстр1> ELSE <инстр2>
В ПФ мы имеем:
<выражение> <c1> $BRZ <инстр1> <c2> $BR <инстр2>
Предполагается, что для любого выражения 0 означает "ложь", а неравенство нулю - "истина". Здесь
<c1> - номер символа, с которого начинается <инстр2>,
<c2> - номер символа, следующего за <инстр2>,
$BR - оператор безусловного перехода на символ,
$BRZ - оператор перехода на символ c1, если значение <выражение> равно нулю).
Обратите внимание на то, что при выполнении операторов перехода из стека лишь извлекается необходимое количество символов, а обратно ничего не возвращается.
|
Понятно, что применение ПФ для условной конструкции в виде
<выр> <инстр1> <инстр2> $IF
неприемлемо, ибо к моменту выполнения оператора $IF все три операнда должны быть уже вычислены или выполнены, что, разумеется, неверно.
Описание массивов
Пусть дано описание массива
ARRAY A[L1..U1,...,Lk..Uk]
в ПФ оно представляется в виде
L1 U1... Lk Uk A $ADEC,
где $ADEC - оператор объявления массива. Оператор $ADEC имеет переменное количество аргументов, зависящее от числа индексов. Операнд A - адрес в таблице символов. При вычислении $ADEC из этого элемента таблицы извлекается информация о размерности массива A и, следовательно, о количестве операндов $ADEC. Отсюда понятно, почему операнд A должен располагаться непосредственно перед оператором $ADEC.
|
|
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!