Непейвода Н.Н. Программирование. Раздел 3

Непейвода Н.Н. Программирование. Страница 275

В результате активным окажется как раз тот контекст, который должен про­должать свои действия после выполнения завершения, причем именно с теми ветвями дерева абстрактного синтаксиса, которые должны обрабаты­ваться после только что выполненной ветви. Вычислитель даже может не знать, каким образом окончилось вычисление этой ветви: принудительно или естественно. Таким образом, за счет вынесения на стек информации о состоянии контекстов вычислителя, которые были приостановлены до тех пор, пока не будут обработаны вложенные в них конструкции, появилась возможность очистить вычисления от инородных проверок.

При реализации языков высокого уровня на современных системах про­граммирования практически всегда создается структура контекстов, и ча­ще всего именно она используется для реализации структурных переходов. Структура контекстов воплощена даже на аппаратном уровне, в частности, в системах команд машин серий Barroughsи Эльбрус. Такие машины назы­ваются машинами со стековой архитектурой. Часто стековая архитектура и тегирование (см. рис. 1.7) совмещаются.

В языках, разрабатывавшихся для машин со стековой архитектурой, практически всегда имеется самая общая конструкция завершения: заверши­тель с меткой уровня. В частности, в языке Эль76 (см. [25]: язык высокого уровня, который одновременно мог рассматриваться как машинноориенти­рованный язык для машин серии Эльбрус) метки могут ставиться только к завершенным структурным конструкциям (блокам) программы и переход на метку означает завершение соответствующего блока.

Пожалуй, только в языках ЯРМО и LISPконцепция структурных перехо­дов корректно соединена с концепцией вырабатываемых значений. Практи­чески каждый оператор в ЯРМО может иметь часть иначе, в которой про­изводится вычисление значения выражения после его неявного завершения. При явном завершении (например, при применении структурного перехо­да) программист должен позаботиться о том, чтобы последнее исполняемое предложение давало значение нужного типа, семантически подходящее для того, чтобы стать значением завершаемого блока. Насчет языка LISPсмот­рите главу о функциональном программировании.

Новости

  • 1
  • 2
Prev Next

Ракета "Ангара-А5В" в ближайшее десятилетие не полетит

24.01.2016

Ракета "Ангара-А5В" в ближайшее десятилетие не полетит

Роскосмос не планирует в течение ближайшего десятилетия осуществлять пуск тяжёлой ракеты-носителя А...

Ученые РФ опровергли выводы исследований о вреде ГМО

24.01.2016

Ученые РФ опровергли выводы исследований о вреде ГМО

Исследователи из Института проблем передачи информации (ИППИ РАН) проанализировали несколько самых п...

Летающие "Крокодилы"

24.01.2016

Летающие "Крокодилы"

20 удивительных фактов о боевом вертолете Ми-24.Этот вертолет стал таким же узнаваемым символом сове...

В Аргентине описали новый вид динозавра-гиганта

24.01.2016

О ранее неизвестном виде динозавра, относящемуся к инфраотряду зауроподов, рассказали аргентинские п...

Реклама