
- •Задание на курсовую работу: «синтаксически управляемый анализ семантики идентификаторов в текстах программ»
- •Некоторые теоретические сведения о семантическом анализе с использованием грамматики свойств
- •Пример формального описания синтаксиса и семантики языка Неформальное описание языка
- •Список семантических ошибок, подлежащих обнаружению
- •Описание грамматики свойств
- •Тестовый пример
- •Комментарии к тестовому примеру
- •Некоторые практические рекомендации Общие рекомендации
- •Рекомендации по использованию Flex-Bison в курсовом проектировании
- •Содержание пояснительной записки
- •Библиографический список
- •Приложение 1 Синтаксический анализ с использованием детерминированного автомата с магазинной памятью
- •Lr(1)-реализация алгоритма «сдвиг-приведение»
- •Восходящий разбор с использованием грамматики простого предшествования
- •Приложение 2 Примеры тестов для вариантов задания на курсовую работу
- •Приложение 3 График выполнения курсовой работы
- •Содержание
Тестовый пример
Вход (программа на языке иллюстраций):
declaration
string A,B;
boolean C,D;
implementation
A=”string1”;
B=”string2”;
C=A conc “2” eq B conc “1”;
D=A conc B.
Выход (результат анализа с помощью грамматики саойств):
Семантическая ошибка: использование переменной Dне в соответствии с объявлением.
Комментарии к тестовому примеру
При разборе текста из вышеприведенного
тестового примера в соответствии с
правилами 5 и 3, с нетерминалом <объявления>
будет связана таблица [A:2,B:2,C:3,D:3].
(Будем упоминать в таблицах только
идентификаторы со свойствами, отличными
от нейтрального). В результате приведения
по правилу 10 с нетерминалом <оператор>
левой части этого правила будет связана
следующая таблица свойств: [D:4,A:4,B:4].
С таким же свойством идентификаторDпопадет в таблицу, связываемую с
нетерминалом <исполнения> в результате
операции приведения по правилу 8. Таким
образом, для определения функции
(1,ℓ),
относящейся к идентификаторуD,
будет получена строка свойств:ℓ=03040,
отсутствующая в таблице, что и означает
наличие семантической ошибки в разобранном
тексте.
Некоторые практические рекомендации Общие рекомендации
Схема «сдвиг-приведение» может найти конкретное воплощение, например, в виде LR(1)-разбора или разбора с использованием отношений предшествования, предполагающих построение модели синтаксического анализатора в виде детерминированного автомата с магазинной памятью [1]. Краткие сведения о построении и функционировании этих моделей приведены в приложении. Программная реализация какой-либо из них в курсовой работе может быть выполнена самостоятельно или с помощью каких-либо средств автоматизации построения синтаксических анализаторов. К таким средствам относятся, в частности, утилитыFlexиBison, возможное применение которых описано в следующем разделе.
Построение грамматики свойств, а точнее
– ее четырех последних компонент,
следует начать с определения списка
семантических ошибок, которые планируется
обнаруживать. Опираясь на такой список,
затем можно зафиксировать множествосвойств, приобретаемых анализируемым
объектом (идентификатором), и множество
допустимых свойств, т.е. таких, которыми
может обладать анализируемый объект
по окончании восходящего разбора.
Следует заметить, что аппарат атрибутной грамматики не всесилен даже в решении частной задачи анализа семантики идентификаторов. Так с помощью грамматики свойств невозможно проследить соответствие формальных и фактических параметров процедур и функций в общем случае и нельзя полностью проконтролировать описания типа «структура» или «класс». Тестовые примеры, приведенные в приложении, тем не менее, предлагают проведение такого контроля. Для его реализации придется связывать с идентификаторами данные более сложной структуры, чем просто номер свойства. По-видимому, это должны быть данные о взаимосвязях идентификаторов (например, имен классов или структур и имен их компонент). Объявление переменных типа «структура» или «класс» можно считать объявлениями составных идентификаторов (составленных из имен компонент структуры или класса с префиксом – именем переменной), для которых также необходимо формировать таблицы свойств с целью анализа корректности их использования. Что же касается имен процедур и функций, такими дополнительным данными могут быть, например, связанные с этими именами списки типов параметров. Впрочем, в учебной задаче допустимо ограничить сложность анализируемых конструкций (например, зафиксировав длину списка параметров).