The pig is in the
The pig is in the pen. (Свинья в загоне.)
The ink is in the pen. (Чернила в ручке.)
Нужно обладать достаточно обширными общими знаниями, не имеющими никакого отношения к построению английских фраз, чтобы знать, что «реп» имеет разные значения в этих двух предложениях («загон» и «ручка»).
Формализованная нотация семантики языков программирования выходит за рамки этой книги. Мы только кратко изложим основную идею. В любой точке выполнения программы мы можем описать ее состояние, определяемое: (1) указателем на следующую команду, которая будет выполнена, и (2) содержимым памяти программы. Семантика команды задается описанием изменения состояния, вызванного выполнением команды. Например, выполнение:
а:=25
заменит состояние s на новое состояние s', которое отличается от s только тем, что ячейка памяти а теперь содержит 25.
Что касается управляющих операторов, то для описания вычисления используется математическая логика. Предположим, что мы уже знаем смыслы двух операторов S1 и S2 в произвольном состоянии s. Обозначим это с помощью формул р (S1, s) и р (S2, s) соответственно. Тогда смысл if-оператора:
if С then S1 elseS2
задается формулой:
(C(s)=>p(S1,s))&((-C(s)=>p(S2,s))
Если вычисление С в состоянии s дает результат истина, то смысл if-оператора такой же, как смысл S1; в противном случае вычисление С дает результат не истина и смысл if-оператора такой же, как у S2.
Как вы можете себе представить, определение семантики операторов цикла и вызовов процедур с параметрами может быть очень сложным. Здесь мы удовлетворимся неформальными объяснениями семантики этих конструкций языка, как их обычно описывают в справочных руководствах:
Проверяется условие после if; если результат — истина, выполняется следующий после then оператор, иначе выполняется оператор, следующий за else.
Формализация семантики языков программирования дает дополнительное