Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
FALGOL.doc
Скачиваний:
17
Добавлен:
28.06.2014
Размер:
814.59 Кб
Скачать

Правила вывода.

П1. .

П2. .

П3. для всех возможных контекстов .

Правила 1-5 формализуют термы вида , которые играют роль операторов присваивания в языках программирования. Правило 6 является аналогом правила замены операторной переменной (-правила в -исчислении). Правило 7 оправдывает имя константы («распроцедуривание»). Правила 8 и 9 формализуют некоторые свойства блоков. Правило 10 – аналог -правила в -исчислении, а правило 11 (правило подстановки) – аналог правила -редукции в -исчислении. Правило 12 – правило рекурсивной подстановки. Правила 13 и 14 позволяют расширить возможности применения большинства других правил за счет внесения в тело блока внешних элементов. Правило 15 конкретизирует начальную инициализацию операторных переменных блоков. Наконец, правило 16 позволяет формализовать преобразование, известное в языках программирования как «сборка мусора». Правило вывода П1 устанавливает рефлексивность, а правило вывода П2 – транзитивность отношения редукции термов. Правило вывода П3 позволяет применять правила редукции к подтермам.

  1. Связь с -исчислением. Рассмотрим подмножество языка Falgol, из числа элементов которого исключены символы присваивания, блоки и рекурсивные процедуры, т.е. атомами являются только константа и символы вызова значений переменных, а в качестве элементов термов, помимо атомов, используются только функции и процедуры. Исчисление редукций термов этого языка назовем -исчислением:

Правила редукции:

;

;

;

;

.

Правила вывода.

П1. .

П2. .

П3. для всех возможных контекстов .

Напомним синтаксис и формулировку основного исчисления редукций -термов:

  1. символ переменной -терм;

  2. если -термы, то -терм;

  3. если -терм, то -терм;

  4. других -термов нет.

Правила редукции:

;

.

Правила вывода.

П1. .

П2. .

П3. для всех возможных контекстов .

Определим теперь трансляцию -термов в язык -исчисления с правилами редукции , и нижеследующим образом (-терм будем называть -образом -терма ):

,

,

.

Очевидно, что . Правило замены операторной переменной имеет место и в том, и в другом исчислении. Рассмотрим правило :

Следовательно, имеет место диаграмма

.

Очевидно и то, что если -терм находится в -нормальной форме, то -терм также находится в -нормальной форме. Таким образом, подмножество -образов -термов с -правилами образуют систему, изоморфную -исчислению, со всеми вытекающими отсюда следствиями.

  1. Некоторые практически важные расширения языка Falgol. Во-первых, рассмотрим пополнение множества атомов языка Falgol символами констант. Пусть – множество элементарных констант расширения, для которого определена функция , задающая арность констант. Если , константу назовем объектной (множество элементарных объектных констант обозначим как ), в противном случае – функциональной. Примем соглашение, что две любые различные объектные константы – содержательно несравнимы, т.е. , в результате чего отношение содержательной несравнимости будем определять так:

,

где – подмножество всех термов, построенных с применением только объектных констант из в качестве атомов.

Для введенных констант определим новые правила редукции:

  1. ;

  2. .

Кроме того, можно вводить любые правила (с попарно различными левыми частями!) следующего вида

, где и – терм-константа.

Такие правила формализуют аппликативные свойства функциональных констант по отношению к объектным константам.

Описанным способом можно так расширить язык Falgol, что он приблизится к реальным языкам программирования высокого уровня по своим изобразительным возможностям описания обработки базовых типов данных, а, во многом, и превзойти их, так как в языке становится возможным изменять программу средствами высокого уровня в процессе ее выполнения.

Хотя вычислительная универсальность языка Falgol не вызывает сомнений, не все в нем может быть реализовано непосредственно. Так, например, невозможно ввести по определению предикат, распознающий терм среди всевозможных термов вида , т.е. построить терм , такой, что и для , где – функции выбора, , (очевидно, что и ). При этом распознавание термов и для любых конкретных () не вызывает затруднений. Действительно, пусть , и

.

Тогда

Однако можно без нарушения метасемантики ввести как новый атом с новыми правилами редукции:

,

для .

Для обоснования корректности такого расширения определим взаимно-однозначное отображение , где

Нетрудно убедиться, что из следует, что .

Рассмотрим терм . Теперь мы можем построить терм , такой, что и для .

Для доказательства положим, что .

Большинство других полезных с практической точки зрения расширений может быть введено «по определению». Например, если , , , то , а , т.е. играет роль ссылки на переменную , а и – операций вызова и присваивания значения переменной по ссылке. Оператор присваивания языка Си удобно реализовать с использованием новых атомов , и т.д.

Заключение. Очевидно, что представление в Falgol’е основных программных объектов известных языков программирования общего назначения, в том числе и основных структур данных, не вызывает каких-либо теоретических проблем. К сожалению, за рамками этой статьи остались многие вопросы, рассмотрение которых необходимо для того, чтобы оценить Falgol как основу построения реального процессора смешанных вычислений с внутренним языком высокого уровня. Такая работа, в основном, уже проделана: разработан машинный язык и архитектура процессора, базирующегося на оригинальном обобщенном теговом машинном представлении всех программных объектов, предложен и технически обоснован принцип ассоциативного управления работой процессора. В настоящее время работа над проектом Falgol-процессора ведется на уровне компьютерного моделирования. В частности, исследуется вопрос об аппаратной и программной поддержке построения и выполнения Falgol-программ, разработанных с применением некоторого обобщения стиля объектно-ориентированного программирования. Предполагается , что все полученные результаты будет представлены в последующих публикациях.