2.1. СИНТАКСИС, СЕМАНТИКА
73
Если какая-то задача не решается целиком, надо пытаться выделить те ее
части, которые легче поддаются решению и позволяют хотя бы приблизиться
к поставленным общим целям. В данном случае оказывается, что синтаксис
описывается во всех разумных случаях намного легче семантики. А синтак-
сис можно разделить на две части: контекстно-свободную грамматику
3
(КС-
грамматика) языка, которая представляется достаточно обозримым образом
даже для таких монстров, как
C++
или
Ada
; и правила задания контекстных
зависимостей, дополняющие контекстно-свободное описание.
Содержательно можно охарактеризовать КС-грамматику языка как ту часть
его синтаксиса, которая игнорирует вопросы, связанные с зависимостью ин-
терпретации лексем от описаний имен в программе. На уровне КС-граммати-
ки можно также достаточно точно описать некоторые семантические аспекты
языка.
Контекстные зависимости сужают множество программ, формально до-
пустимых КС-грамматикой. Например, правило «все идентификаторы долж-
ны иметь свои описания в программе» указывает на то, что программа с не-
описанными именами не принадлежит данному языку (хотя она вполне мо-
жет быть допустимой с точки зрения контекстно-свободного синтаксиса).
Неоднократные попытки формально описывать контекстные зависимо-
сти при определении языков показали, что эта задача гораздо более сложная,
чем задание контекстно-свободного синтаксиса. Вдобавок ко всему, даже та-
кие естественные правила, как только что представленное, при формальном
описании становятся громоздкими и весьма трудно понимаемыми челове-
ком. По этой причине в руководствах редко прибегают к формализации опи-
саний контекстных зависимостей (одним из немногих исключений такого ро-
да является
Алгол 68
, за что разработчики языка были подвергнуты весьма
серьезной критике; позитивным результатом этой критики явилось создание
языка
Pascal
; см. стр. 28).
В практических описаниях языков и в курсах программирования обычно
довольствуются неформальным, но достаточно точным описанием контекст-
3
Понятие контекстно-свободной грамматики стало первым строгим понятием в описаниях
практических алгоритмических языков. Что это такое, в базовом курсе программирования
определять нет смысла, поскольку за понятием КС-грамматики, при внешней его простоте,
стоит достаточно серьезная теория. Эта грамматика представляется во многих формах (син-
таксические диаграммы, металингвистические формулы Бэкуса-Наура либо расширенные
металингвистические формулы), и, как правило, сопровождает любое систематизированное
изложение конкретного языка. Любое такое конкретное представление КС-грамматики до-
статочно понимаемо.