L |
R |
E |
id |
= |
* |
|
|
0 |
G(1) |
G(3) |
G(2) |
S(5) |
S(4) |
||
1 |
Stop |
||||||
2 |
S(6) |
R(1,1) |
|||||
3 |
R(1,0) |
||||||
4 |
G(7) |
G(8) |
S(5) |
S(4) |
|||
5 |
R(1,2) |
R(1,2) |
|||||
6 |
G(9) |
G(10) |
S(12) |
S(11) |
|||
7 |
R(2,2) |
R(2,2) |
|||||
8 |
R(1,1) |
R(1,1) |
|||||
9 |
R(3,0) |
||||||
10 |
R(1,1) |
||||||
11 |
G(13) |
G(10) |
S(12) |
S(11) |
|||
12 |
R(1,2) |
||||||
13 |
R(2,2) |
Для сравнения:
L |
R |
E |
i |
= |
* |
|
|
0 |
G(1) |
G(3) |
G(2) |
S(5) |
S(4) |
||
1 |
Stop |
||||||
2 |
S(6) |
R(1,1) |
|||||
3 |
R(1,0) |
||||||
4 |
G(7) |
G(8) |
S(5) |
S(4) |
|||
5 |
R(1,2) |
R(1,2) |
|||||
6 |
G(9) |
G(8) |
S(5) |
S(4) |
|||
7 |
R(2,2) |
R(2,2) |
|||||
8 |
R(1,1) |
R(1,1) |
|||||
9 |
R(3,0) |
Использование канонических расширенных конфигураций позволило построить управляющую таблицу так называемого LR(1) – анализатора, при этом все конфликты оказались предупреждены, но возросло количество состояний автомата (для рассмотренного очень простого примера – с 10 до 14).
Существует очень важный промежуточный (между SLR(1) и LR(1)) класс грамматик и, соответственно, метод построения управляющей таблицы восходящего синтаксического анализатора – LALR(1).
LALR(1)- грамматики и автоматы.
Для построения таблицы конфигураций используются расширенные, но не канонические, конфигурации. Ожидаемый правый контекст расширенных конфигураций может включать более чем один терминальный символ.
Строить таблицу расширенных конфигураций можно двумя способами:
1. Построить таблицу канонических конфигураций, потом:
– в каждом состоянии объединить в одну конфигурации с одинаковым маркированным правилом (см. состояние 4, из конфигураций E : * ▼ R ,{=} и E : * ▼ R ,{ } получится E : * ▼ R ,{= };
– объединить в одно каждые 2 таких состояния, у которых базовые подмножества конфигураций совпадают по маркированным правилам (например, состояния 8 и 10 можно объединить, останется 8, удаляется 10); после объединения нужно:
a. все переходы в удаленное состояние заменить переходами в оставленное состояние;
b. перенумеровать все состояния, номера которых больше номера удаленного состояния и соответственно изменить все переходы на такие состояния;
c. и главное – пересчитать ОПК всех дочерних конфигураций (в том числе у всех дочерних состояний) если у оставленного состояния в результате объединения изменился ОПК хотя бы одной базовой конфигурации.
2. Строить сразу таблицу расширенных конфигураций, выполняя объединение ОПК базовых конфигураций и пересчеты ОПК дочерних конфигураций и дочерних состояний по ходу построения.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.