Отладка формальной грамматики




Отладка грамматики – это процесс преобразования грамматики к виду, удовлетворяющему используемый метод синтаксического анализа.

В исходной грамматике 42 конфликта. Среди них встречаются конфликты трех типов:

Конфликты типа =<

 

 
 

 

  uslovie
( =<

 

Рис. 13. Конфликт типа =<

 

Для того, чтобы показать как отладить этот конфликт, рассмотрим его на примере:

Из рисунка 3.13 видно, что между терминальным символом «(» и нетерминальным uslovie конфликт типа =<. Чтобы его отладить необходимо опустить нетерминал uslovie вниз по дереву.

Таким образом, между символами «(» и uslovie осталось только отношение <.

Все остальные конфликты этого типа разрешаются аналогично.

Конфликт типа =>

Чтобы показать как разрешаются конфликты этого типа, разрешим конфликт между символами Вody и Еnd. Этот конфликт изображен на рисунке 15.

 

  End
Вody =>

Рис. 15. Конфликт типа =>

 

Синтаксический анализ

В процессе синтаксического анализа требуется для нескольких предложений входного языка построить синтаксическое дерево, провести синтаксический разбор методом простого предшествования.

Задачи синтаксического анализатора:

1) выделение синтаксических единиц;

2) определение всех синтаксических ошибок (если они есть);

3) преобразование таблицы стандартных символов (ТСС) в некоторую внутреннюю форму представления программы(ВФПП).

Схема программы синтаксического анализатора

Схема программы синтаксического анализа методом простого предшествования приведена в графическом приложении (лист1).

Принятые обозначения:

X – массив символов анализируемой цепочки;

MP – матрица простого предшествованя;

P – множество правил грамматики, которые описывают язык;

ST – стек для определения хвоста основы;

ST1 – стек для определения головы основы;

TL – текущая литера;

NTL – номер текущей литеры;

OSN – массив, в котором будет накапливаться основа;

NOSN – количество символов в массиве OSN (текущее количество символов в основе);

A->, где  – правая часть правила, которая совпадает с массивом OSN, A – левая часть правила, на которую заменяется основа;

REZ – результат.

Чтобы выделить основу необходимо сначала найти конец основы, а затем ее начало, после чего выделяется основа (блоки J2 – O8).

Если после выделения строки OSN находится правило, у которого правая часть правила совпадает с OSN то, переменной REZ присваивается 1, если такого правила нет – ошибка, синтаксический анализ может быть прекращен или нужно исправить ошибку (блок R8).

Операции выполняемые над строковыми переменными:

st.push(i) – поместить элемент i в стек;

st.pop() – удалить элемент из стека;

st.top() – получить доступ к вершине стека;

st.nst() – определить количество элементов в стеке.

Работа данного алгоритма представлена в таблице синтаксического анализа в графическом приложении (лист1).

 


Заключение

 

В процессе выполнения курсовой работы были разработаны синтаксический и лексический анализаторы, семантические процедуры для сканера, а также был разработан алгоритм, реализующий синтаксический анализ методом простого предшествования. В целом язык оправдал надежды, возложенные на него в начале работы, и получился довольно стройным и гибким.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-04-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: