Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Топ:
Устройство и оснащение процедурного кабинета: Решающая роль в обеспечении правильного лечения пациентов отводится процедурной медсестре...
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Интересное:
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Дисциплины:
2020-12-27 | 65 |
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.
|
|
Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!