Операционная семантика
Итак, операционная семантика описывает смысл программы путем выполнения ее операторов на простой машине-автомате. Изменения, происходящие в состоянии машины при выполнении данного оператора, определяют смысл этого оператора.
С одной стороны, машина-автомат способна воспринимать задания, представляемые лишь на простом языке моделирования.
С другой стороны, современный компьютер может служить универсальным интерпретатором такого языка. Подобный интерпретатор может быть реализован программой, которая становится виртуальной машиной для языка моделирования.Таким образом, в операционной семантике требуются:
? транслятор, преобразующий операторы исходного языка программирования L в команды низкоуровневого языка моделирования;
? виртуальная машина (ВМ) для языка моделирования.
Например, язык моделирования может представляться набором простых команд, записанных в табл. 7.4.
Таблица 7.4. Язык моделирования виртуальной машины
Команды виртуальной машины_________________________________________
ident := van ident := ident + 1 ident := ident - 1 goto label
if van relop var goto label ident := var bin_op var ident := un_op var
Здесь приняты следующие обозначения: van — переменная, ident — имя переменной, goto label — команда безусловного перехода на символический адрес label, |
Аксиоматическая семантика |
189 |
relop — обозначение одной из операций сравнения (, =, ), bin_op — операция над двумя аргументами, un_op — операция над одним аргументом. Условимся, что символический адрес команды (метку) будем отделять от команды двоеточием. Положим, что нам нужно выяснить смысл оператора for для языка программирования С. Мы представляем этот оператор с помощью некоторой программы для виртуальной машины, приведенной в табл. 7.5. |
Таблица 7.5. Программа для виртуальной машины |
После этого запускаем нашу виртуальную машину. Смысл оператора определяют изменения в состоянии виртуальной машины, происходящие при выполнении команд — результата трансляции ^г-оператора. Подобные программы могут составляться и для последовательности операторов. Главное, чтобы имеющийся транслятор был способен обрабатывать каждый из используемых операторов. ПРИМЕЧАНИЕ --------------------------------------------------------------------------------------------------- Человек, читающий программы для виртуальной машины, тоже может считать себя виртуальным компьютером, то есть полагают, что он может правильно выполнять «команды» и распознает эффекты «выполнения». |
В 1972 году была разработана операционная модель языка под названием Vienna Definition Language (VDL) — это метаязык, предназначенный для описания других языков. В ее состав входили транслятор и виртуальная машина. С помощью данной модели был описан язык программирования PL/1. |