Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
учебные пособия / ТЯПиМТ / новая курсовая работа.doc
Скачиваний:
63
Добавлен:
02.04.2015
Размер:
501.25 Кб
Скачать

Тестовый пример

Вход (программа на языке иллюстраций):

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, возможное применение которых описано в следующем разделе.

Построение грамматики свойств, а точнее – ее четырех последних компонент, следует начать с определения списка семантических ошибок, которые планируется обнаруживать. Опираясь на такой список, затем можно зафиксировать множествосвойств, приобретаемых анализируемым объектом (идентификатором), и множество допустимых свойств, т.е. таких, которыми может обладать анализируемый объект по окончании восходящего разбора.

Следует заметить, что аппарат атрибутной грамматики не всесилен даже в решении частной задачи анализа семантики идентификаторов. Так с помощью грамматики свойств невозможно проследить соответствие формальных и фактических параметров процедур и функций в общем случае и нельзя полностью проконтролировать описания типа «структура» или «класс». Тестовые примеры, приведенные в приложении, тем не менее, предлагают проведение такого контроля. Для его реализации придется связывать с идентификаторами данные более сложной структуры, чем просто номер свойства. По-видимому, это должны быть данные о взаимосвязях идентификаторов (например, имен классов или структур и имен их компонент). Объявление переменных типа «структура» или «класс» можно считать объявлениями составных идентификаторов (составленных из имен компонент структуры или класса с префиксом – именем переменной), для которых также необходимо формировать таблицы свойств с целью анализа корректности их использования. Что же касается имен процедур и функций, такими дополнительным данными могут быть, например, связанные с этими именами списки типов параметров. Впрочем, в учебной задаче допустимо ограничить сложность анализируемых конструкций (например, зафиксировав длину списка параметров).

Соседние файлы в папке ТЯПиМТ