Если мы увидим фразу: "Стол съел карандаш", то без дополнительных комментариев она для нас бессмысленна, так как объекты реального мира, обозначаемые словом стол, не могут ничего и никого съесть. Таким образом, конструкции языка могут быть корректны синтаксически, а семантически - нет.
Итак, семантика - это отображение, соответствие между конструкциями языка и объектами из некоторого множества объектов, называемого миром или Universum. Так, в примере со столом, когда фраза, пусть даже синтаксически правильная, описывала ситуацию, не согласующуюся со здравым смыслом (столы не могут никого/ничего есть), мы рассматривали эту фразу как бессмысленную, т.е. семантически не корректную. Что же это означает применительно к языкам программирования?
Вспомним, что всякому алгоритму соответствует множество вычислительных процессов. Всякий вычислительный процесс - это цепочка состояний множества всех переменных этого алгоритма, а действие или шаг алгоритма определяет переход из состояния в состояние.
Поскольку программа - суть алгоритм, оформленный должным образом, то все вышесказанное справедливо и по отношению к программе. Вернемся к нашему примеру 9.1 и рассмотрим выполнение этой программы для n=5.
После выполнения строки 4 переменная n примет значение 5, а значения переменных s и i будут неопределенными. Обозначим это состояние так - (5, ", "). После строки 5 мы получим состояние (5, ", 0), затем (5, 1, 0). Вся последовательность состояний приведена на рис 9.3.
N строки | n | s | i |
" | " | " | |
4 | |||
5 | " | " | |
5 | |||
5 | 1 | " | |
6 | |||
5 | 1 | 1 | |
7 | |||
5 | 1 | 2 | |
8 | |||
5 | 1+1/2 | 2 | |
7 | |||
5 | 1+1/2 | 3 | |
8 | |||
5 | 1+1/2+1/3 | 3 | |
7 | |||
5 | 1+1/2+1/3 | 4 | |
8 | |||
5 | 1+1/2+1/3+1/4 | 4 | |
7 | |||
5 | 1+1/2+1/3+1/4 | 5 | |
8 | |||
5 | 1+1/2+1/3+1/4+1/5 | 5 | |
9 | |||
Стоп |
Рис. 9.3.
Поскольку всякой программе соответствует множество вычислительных процессов, то всякий оператор определяет переход из множества состояний в множество состояний. Особенности, специфика этого перехода и составляет смысл, семантику этого оператора.