программирования
Описание любого языка (и не только языка программирования) всегда начинается с определения его синтаксиса и семантики.
Синтаксис - это правила записи конструкций языка, а также последовательности расположения этих конструкций. Синтаксические правила ничего не говорят о смысловом содержании конструкций, определяя только их форму. Чем строже и формальнее язык, тем меньшим количеством синтаксических правил он описывается. Чем больше свободы вкладывают разработчики языка в его основу, чем больше они предусматривают вариантов организации одних и тех же конструкций, тем сложнее описывается язык.
В этом смысле ТП занимает "золотую середину" среди языков программирования. Он достаточно строг, чтобы отслеживать элементарное незнание конструкций и большой набор типовых ошибок, но в то же время достаточно свободен, чтобы создавать на нем профессиональные и высокоэффективные программные продукты.
Семантика - смысл, вкладываемый в каждую конструкцию или последовательность конструкций языка.
И синтаксис и семантику любого языка можно описать неформально, приводя варианты всех видов конструкций и примеры их использования в различных ситуациях. Однако для описания синтаксиса существуют формальные методы, применение которых значительно сокращает объем описаний. Формальные методы для описания семантики также существует, однако они достаточно сложны, громоздки и используются, в основном, для доказательства свойств программ.
В дальнейшем, для описания семантики языка мы будем пользоваться неформальными методами, а для описания синтаксиса – одним из вариантов нормальных форм Бэкуса-Наура (БНФ). БНФ служат для определения синтаксиса алгоритмических языков и состоят из некоторого количества правил продукций, с помощью которых синтаксические конструкции определяются через другие синтаксические конструкции и лексемы, где под лексемами понимаются минимальные неделимые смысловые единицы языка.
Правила продукций БНФ:
1) Имя определяемой синтаксической конструкции размещается слева, а ее определение - справа. Имя конструкции и ее определение разделены символом '::='. Друг от друга синтаксические конструкции и лексемы отделяются пробелами.
2) Синтаксические конструкции никак не выделяются, лексемы выделяются с помощью кавычек (либо, если это возможно, жирным шрифтом).
3) Для обозначения возможного выбора из нескольких вариантов используется знак ¦.
4) Для обозначения повторов используются знаки a{}b.
Если a отсутствует, то считается, что a=0
Если b отсутствует, то считается, что b=∞
5) Для обозначения факультативных возможностей используются знаки [].
6) Для группирования используются знаки ().
7) Точка показывает конец определения.
Пример 1:
В качестве примера рассмотрим определение рационального десятичного числа с использованием БНФ.
Ниже показаны несколько рациональных десятичных чисел с плавающей точкой:
1 2.04331 -12 +32.00 -2
Объединим все варианты в одной форме:
РДЧ ::= Целое_число ["." Натуральное_число].
Целое _число::=["+"|"-"] Натуральное_число.
Натуральное_число::= 1{Цифра}.
Цифра::="0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9".
Таким образом, кроме определения рационального десятичного числа с плавающей десятичной точкой мы определили еще 3 синтаксических конструкций, благодаря которым сократили размер определения, и которыми можно будет воспользоваться в дальнейшем для определения, например, РДЧ с фиксированной точкой.