80
Синтаксический подход поддерживает новую своеобразную парадигму прог-
раммирования. В соответствие с ней, когда вы пишете правило грамматики, то
определяете некоторую программную конструкцию. При этом считается, что
любая конструкция продолжает вычислительный процесс, уже выполненный
составляющими ее подконструкциями, и данной конструкции требуется лишь
надлежащим образом использовать результаты ее подконструкций для выра-
ботки своего собственного результата. Поэтому при написании правила грам-
матики, описывающего некоторую конструкцию, достаточно определить, какие
действия над результатами ее подконструкций должна совершить данная кон-
струкция. Благодаря такой концептуальной модульности, воплощаемой в пра-
вилах грамматики, при которой проектирование процесса обработки данных
естественно структурируется иерархическим образом, разработка программы
значительно облегчается.
Синтаксический подход открывает возможность диагностировать ошибоч-
ные ситуации
55
, возникающие во время вычислений, в терминах той предмет-
ной области, к которой относится задача. Для этого достаточно в качестве
нетерминалов или вспомогательных понятий грамматики, а также резольвер-
ных символов, использовать термины соответствующей предметной области.
2.3. ИНФОРМАЦИОННОЕ ВЗАИМОДЕЙСТВИЕ
МЕЖДУ КОНСТРУКЦИЯМИ
При использовании грамматик для описания управляющей структуры про-
грамм полезно пронаблюдать аналогию между нетерминалами грамматики и
замкнутыми подпрограммами, а также между вспомогательными понятиями и
открытыми подпрограммами в обычном программировании.
Для каждого нетерминала существует определяющее его правило грамма-
тики. Это правило (совместно с другими) порождает множество всевозможных
конкретных реализаций соответствующей программной конструкции. В общем
случае программная конструкция может состоять из других конструкций, назы-
ваемых ее подконструкциями, которые в правиле, определяющем эту конст-
рукцию, представляются как нетерминалы или вспомогательные понятия пра-
вой части данного правила. При этом возможны, и зачастую желательны, ре-
курсивные определения.
Грамматика определяет только возможные потоки управления в программе.
Но операторы, входящие в этот поток и по большей части представленные (в
конечном итоге) вызовами методов объектов, воплощают какие-то действия
над данными, которые представляются, главным образом, полями объектов.
Таким образом, с каждым нетерминалом (программной конструкцией) ассо-
циируется некоторый тип объекта. Его поля представляют локальные данные
конструкции, а методы реализуют возможные манипуляции над этими даны-
ми.
55
Обнаруживаемые автоматически ошибки в этом случае все являются контекстными.