
- •Задание на курсовую работу: «синтаксически управляемый анализ семантики идентификаторов в текстах программ»
- •Некоторые теоретические сведения о семантическом анализе с использованием грамматики свойств
- •Пример формального описания синтаксиса и семантики языка Неформальное описание языка
- •Список семантических ошибок, подлежащих обнаружению
- •Описание грамматики свойств
- •Тестовый пример
- •Комментарии к тестовому примеру
- •Некоторые практические рекомендации Общие рекомендации
- •Рекомендации по использованию Flex-Bison в курсовом проектировании
- •Содержание пояснительной записки
- •Библиографический список
- •Приложение 1 Синтаксический анализ с использованием детерминированного автомата с магазинной памятью
- •Lr(1)-реализация алгоритма «сдвиг-приведение»
- •Восходящий разбор с использованием грамматики простого предшествования
- •Приложение 2 Примеры тестов для вариантов задания на курсовую работу
- •Приложение 3 График выполнения курсовой работы
- •Содержание
Восходящий разбор с использованием грамматики простого предшествования
Управляющая таблица автоматного распознавателя, построенного по грамматике простого предшествования, представляет собой квадратную матрицу отношений простого предшествования для всех терминальных и нетерминальных символов грамматики. Отношения предшествования определяются для пар символов грамматики, которые могут оказаться соседними в какой-либо сентенциальной форме. Конкретные значения отношений ( < , > , =) указывают на возможное положение двух соседних символов относительно основы. Основой называется правая часть правила, которая в текущей сентенциальной форме подлежит замене левой частью правила на очередном шаге восходящего разбора. Другими словами, основа – это такая подстрока текущей сентенциальной формы, по отношению к которой на очередном шаге алгоритма типа «сдвиг-приведение» следует выполнить операцию «приведение».
Отношение <предполагает, что первый из пары соседних символов находится непосредственно слева от основы, а второй принадлежит ей и является ее первым символом. Отношение>предполагает, что первый из пары соседних символов принадлежит основе и является ее последним символом, а второй находится непосредственно справа от основы. Отношение=предполагает, что оба соседних символа находятся внутри основы. Таким образом, если рассматривать символы отношения предшествования в качестве команд управляющей таблицы автоматного распознавателя, реализующего алгоритм типа «сдвиг-приведение», символы<и=должны считаться обозначением команды «сдвиг», а символ>- команды «приведение». Клетки таблицы с такими координатами-символами, для которых отношение предшествования не определено, должны считаться содержащими команду «ошибка», поскольку неопределенность отношения предшествования для пары символов грамматики означает, что такая пара символов не может появиться ни в какой сентенциальной форме.
Во фрагменте грамматики с правилами i) – iii)отношения простого предшествования не для всех пар символов оказываются единственными. Преобразуем грамматику к виду:
<описания>::=вещественное<А>
<список имен>::=<список имен>,идентификатор
<список имен>::=идентификатор
<А>::=<список имен>
Для символов грамматики с правилами i) – iv)имеют место отношения простого предшествования, зафиксированные в матрице:
|
<описания> |
<список имен> |
<А> |
вещественное |
, |
идентификатор |
маркер правого конца |
<описания> |
|
|
|
|
|
|
> |
<список имен> |
|
|
|
|
= |
|
> |
<А> |
|
|
|
|
|
|
> |
вещественное |
|
< |
= |
|
|
< |
|
, |
|
|
|
|
|
= |
|
идентификатор |
|
|
|
|
> |
|
> |
маркер левого конца |
< |
|
|
< |
|
|
|
Выполним еще раз разбор строки вещественное а,втеперь уже с учетом отношений предшествования. Возможность использования матрицы отношений предшествования в качестве управляющей таблицы в автоматном распознавателе со структурой, изображенной на рис. 3, можно сказать, обусловлена следующим утверждением [5].
Единственной основой любой сентенциальной формы грамматики простого предшествования является такая самая левая подстрока si … sjэтой формы, для символов которой определены отношения простого предшествования:
si-1<si=si+1=…=sj-1 =sj>sj+1.
Воспользуемся этой удобной формой для иллюстрации процесса восходящего разбора без явного изображения стека. Маркеры левого и правого концов строки обозначим символом $.
$ < вещественное < а > ,в$→ приведение по правилуiii
$ < вещественное < <список имен> = , = в > $→ приведение по правилуii
$ < вещественное < <список имен> > $→ приведение по правилу iv
$ < вещественное = <А> > $→ приведение по правилу i
$ < <описания> > $→ успешное завершение разбора.
В заключение раздела прокомментируем процесс заполнения матрицы отношений простого предшествования. Эти отношения определяются в результате анализа правил грамматики.
Если символы AиBстоят рядом в правой части какого-либо правила грамматики, то для них определено отношение простого предшествования = :A=B. Например: <список имен> = ,.
Если символы AиWстоят рядом в правой части какого-либо правила грамматики и символWявляется нетерминальным, тоA<Bдля всех символовB, с которых могут начинаться строки, выводимые изW. Например:
вещественное < <список имен> ивещественное < идентификатор, поскольку есть правило с правой частьювещественное<А>, а строки, выводимые из <А>, могут начинаться с символа <список имен> и символаидентификатор.
Если символы WиBстоят рядом в правой части какого-либо правила грамматики и символWявляется нетерминальным, а символB– терминальным, тоA>Bдля всех символовA, на которые могут заканчиваться строки, выводимые изW. Например:идентификатор > ,,поскольку есть правило с фрагментом правой части
<список имен> ,и все строки, выводимые из нетерминала <список имен>, заканчиваются символомидентификатор.