logo search
Bolshakov_Poyasnitelnaya_zapiska

2.2.2.1.6 Семантический анализ пользовательской программы

Во время построения транслятора языка семантические правила были заложены на двух этапах:

- на этапе описания грамматики (правила линковки);

- на этапе валидации языка.

Семантические правила в грамматике являются правилами линковки: при описании правила вывода можно показать, что в качестве входной цепочки должна быть такая, которая неким образом описывает уже существующий элемент указанного типа. Например, добавив в одно из правил ссылку на описанную переменную через ее название, можно наложить семантическое ограничение на вводимый текст, не дав пользователю использовать в коде программы значения неописанных переменных. Так если пользователь попробует в коде использовать значение неописанной переменной, он увидит соответствующее сообщение об ошибке. Семантические правила, не поддающиеся описанию в грамматике, можно описать для валидатора как ограничения на язык. Под валидацией программы на языке понимается ее статический анализ на предмет корректности. Процесс валидации будет происходить при каждом изменении языка в текстовом редакторе пользователем. В процессе валидации разработчику предоставляется дерево разбора, поэтому здесь можно описать фактически любые семантические правила и ограничения.

В особую категорию правил стоит выделить семантические правила, касающиеся типизации параметров языка. Для упрощения данных правил при разработке транслятора была использован сторонний компонент TypeSystem [44], позволяющий задать набор типов для объектов дерева разбора, а также правила вывода соответствия этих типов. Система типов в общем смысле обычно состоит из следующих блоков:

- установка типа элементу языка;

- вычисления типа некоторого объекта в языке по известным типам его элементов;

- ограничения типа.

Внедрение в систему платформы для работы с системой типов позволяет повысить надежность и масштабируемость целевой системы. Наиболее наглядно возможности компонента TypeSystem представляет его программный интерфейс, используемый для задания системы типов (таблица 2.3).