Формальные языки, грамматики и основы построения трансляторов. Кревский И.Г - 77 стр.

UptoLike

77
показана в таблице 13.2. Заметим, что поскольку грамматика (13.1) имеет два
правых порождения для данной входной строки, существует еще одна
последовательность переносов и сверток, которые может выполнить
анализатор.
Таблица 13.2. Конфигурации ПС-анализатора для входной строки id
1
+id
2
*id
3
Стек Вход Действие
(1) $ id
1
+id
2
*id
3
$ Перенос
(2) $id
1
+id
2
*id
3
$
Свертка по Е id
(3) $E +id
2
*id
3
$ Перенос
(4) $E + id
2
*id
3
$ Перенос
(5) $E + id
2
*id
3
$
Свертка по Е id
(6) $E + E *id
3
$ Перенос
(7) $E + E * id
3
$ Перенос
(8) $E + E * id
3
$
Свертка по Е id
(9) $E + E * E $
Свертка по Е E * E
(10) $E + E $
Свертка по Е E + E
(11) $E $ Допуск
Основными операциями синтаксического анализатора являются
перенос и свертка, но на самом деле ПС-анализатор может выполнять четыре
действия: (1) перенос
, (2) свертка, (3) допуск, (4) ошибка.
1. При переносе очередной входной символ переносится на вершину стека.
2. При свертке синтаксический анализатор распознает правый конец основы
на вершине стека, после чего он должен найти левый конец основы и принять
решение о том, каким нетерминалом заменить основу.
3. При допуске синтаксический анализатор сообщает об успешном разборе
входной строки.
4. При
ошибке синтаксический анализатор обнаруживает ошибку во входном
потоке и вызывает программу восстановления после ошибок.
                                                                            77
показана в таблице 13.2. Заметим, что поскольку грамматика (13.1) имеет два
правых порождения для данной входной строки, существует еще одна
последовательность переносов и сверток, которые может выполнить
анализатор.

Таблица 13.2. Конфигурации ПС-анализатора для входной строки id1+id2*id3
                         Стек       Вход           Действие
           (1)    $              id1+id2*id3$ Перенос
           (2)    $id1              +id2*id3$ Свертка по Е→ id
           (3)    $E                +id2*id3$ Перенос
           (4)    $E +               id2*id3$ Перенос
           (5)    $E + id2             *id3$ Свертка по Е→ id
           (6)    $E + E               *id3$ Перенос
           (7)    $E + E *              id3$ Перенос
           (8)    $E + E * id3             $ Свертка по Е→ id
           (9)    $E + E * E               $ Свертка по Е→ E * E
           (10) $E + E                     $ Свертка по Е→ E + E
           (11) $E                         $ Допуск


     Основными         операциями   синтаксического     анализатора   являются
перенос и свертка, но на самом деле ПС-анализатор может выполнять четыре
действия: (1) перенос, (2) свертка, (3) допуск, (4) ошибка.
1. При переносе очередной входной символ переносится на вершину стека.
2. При свертке синтаксический анализатор распознает правый конец основы
на вершине стека, после чего он должен найти левый конец основы и принять
решение о том, каким нетерминалом заменить основу.
3. При допуске синтаксический анализатор сообщает об успешном разборе
входной строки.
4. При ошибке синтаксический анализатор обнаруживает ошибку во входном
потоке и вызывает программу восстановления после ошибок.