Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Yacc.docx
Скачиваний:
13
Добавлен:
20.03.2016
Размер:
121.86 Кб
Скачать

9. Структура информационного входного файла y.Output

Основную часть данного файла составляет описание состо-

яний построенного грамматического анализатора. Информация о

каждом состоянии приводится в следующем порядке:

- Перечень соответствующих данному состоянию конфигураций

грамматики (конфигурация характеризуется определенным

грамматическим правилом и позицией в его правой части,

достигнутой к данному моменту разбора). Каждая конфигу-

рация представляется правилом с отмеченной с помощью

символа подчеркивания "_" распознанной частью (позицией

конфигурации). Например, конфигурация:

expr: expr +_expr

- 27 -

соответствует распознанной при разборе строки по ука-

занному правилу последовательности символов expr+.

- Действия анализатора при вводе в качестве очередного

просматриваемого символа каждой из лексем. Различные

виды действий указываются следующим образом:

<лексема> сдвиг <номер_состояния> -

сдвиг при вводе данной лексемы в состояние с указанным

номером;

<лексема> свертка <номер_правила> -

свертка при вводе лексемы по правилу с указанным номе-

ром;

<лексема> error -

выдача сообщения об ошибке во входных данных ("синтак-

сическая ошибка") и возврат из процедуры грамматичес-

кого анализа с кодом 1 (дальнейший разбор невозможен);

<лексема> accept -

возврат из процедуры грамматического анализа с кодом 0

(успешное завершение разбора). Последняя из строк,

описывающих действия анализатора, содержит вместо ука-

зания лексемы символ "." и сообщает действие, выполняе-

мое анализатором для всех лексем, не перечисленных в

данном состоянии. Часто эта строка имеет вид:

. error

и указывает, что все перечисленные лексемы в данном

состоянии являются недопустимыми.

- Перечень переходов для данного состояния. Каждый пере-

ход задается строкой

<имя_терминала> переход <номер_состояния>

сообщающей, в какое состояние перейдет анализатор после

свертки указанного нетерминала, если его распознавание

было начато из данного состояния.

Кроме того, описанию состояния может предшествовать

информация о конфликтах обнаруженных yacc для этого состоя-

ния и разрешенных по принципу умолчания. Информация о конф-

ликте содержит тип конфликта (св/св или сдв/св), конкурирую-

щие действия анализатора (при этом для сдвига указывается

номер состояния, для свертки - номер правила) и лексему, при

появлении которой возникает данный конфликт. Узнать, какое

- 28 -

из возможных действий будет выполнено анализатором, можно из

описания самого состояния.

Пример описания состояния:

8:Конфликт сдв/св (сдвиг 5,свертка 2) при +

Состояние 8

a:a_+a

a:a+a_ (2)

+ сдвиг 5

. свертка 2

Состоянию 8 здесь соответствуют две различные позиции, дос-

тигнутые при разборе по правилу

a: a '+' a

Kонфликт между сверткой по этому правилу и сдвигом в состоя-

ние 5 при вводе лексемы "+" разрешен в пользу сдвига. Ввод

остальных лексем вызывает свертку.

После описания состояния возможен ряд сообщений о нес-

вернутых правилах (с указанием этих правил), т.е. о прави-

лах, свертка по которым не будет произведена ни в одном из

состояний. Наличие таких правил с большой вероятностью сви-

детельствует о некорректности грамматики.

В конце файла приводится информация статистического

характера о реальном и предельном количестве терминальных и

нетерминальных символов, грамматических правил и состояний.

Фиксируется число конфликтов каждого типа, число различных

действий грамматического анализатора, занимаемый им объем

памяти, приводятся данные об использовании внутренних струк-

тур данных (множеств).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]