ID

,

real A, B­, C IDLIST

real

real A, B­, C IDLIS

real

и последующим считыванием еще двух символов

,

real A, B, ­ C IDLIST

real

С

,

real A, B, C­ IDLIST

real

Последние три действия – это приведение с использованием правил 4), 2) и 1).

ID

,

real A, B, C­ IDLIST

real

real A, B, C­ IDLIST

real

real A, B, C­ S

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

Синтаксический анализатор, работающий по принципу «снизу вверх», выполняет действия двух типов:

1)  сдвиг, во время которого считывается и помещается в стек символ. Это соответствует движению на один пункт вдоль какого-нибудь правила грамматики;

2)  приведение, во время которого множество элементов в верхней части стека замещаются каким-либо нетерминалом грамматики с помощью одного из порождающих правил этой грамматики.

5.2.  LR(1) - таблица разбора

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

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

НЕ нашли? Не то? Что вы ищете?

1)  S ® real IDLIST

2)  IDLIST ® IDLIST, ID

3)  IDLIST ® ID

4)  ID ® A | B | C |D

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

1)  Элементы сдвига. Эти элементы имеют вид S7 и означают: поместить в стек символ, соответствующий столбцу; поместить в стек состояний 7 и перейти к состоянию 7; если входной символ – терминал, принять его.

2)  Элемент приведения. Он имеет вид R4 и означает: выполнить приведение с помощью правила 4), т. е., допустив, что n есть число символов в правой части правила 4), удалить n элементов из стека символов и n элементов из стека состояний и перейти к состоянию, указанному в верхней части стека состояний. Нетерминал в левой части правила (4) нужно считать следующим входным символом.

3)  Элемент ошибок. Эти элементы являются пробелами в таблице и соответствуют синтаксическим ошибкам.

4)  Элемент остановки. Им завершается разбор.

Таблица 5.1.

Состояние

S

IDLIST

ID

real

«,»

A

B

C

D

^

1

2

3

4

5

6

7

HALT

S5

S4

S2

R4

R3

S6

R2

S3

S3

R4

R3

R1

R2

Рассмотрим, как с помощью вышеописанной таблицы разбирается строка:

real A, B, C ^

Стек

символов

Стек

состояний

­real A, B, C ^

1

входной символ realиз элемента таблицы (1, real), сдвиг в состояние 2;

real­ A, B, C ^

real

2

1

входной символ А – сдвиг в состояние 3;

real A­, B, C ^

А

real

3

2

1

входной символ – «,», приведение по правилу (4);

real A­, B, C ^

real

2

1

входной символ – ID, сдвиг в состояние 4;

real A­, B, C ^

ID

real

4

2

1

входной символ – «,», приведение по правилу (3);

real A­, B, C ^

real

2

1

входной символ – IDLIST, сдвиг в состояние 5;

real A­, B, C ^

IDLIST

real

5

2

1

входной символ – «,», сдвиг в состояние 6;

real A­, B, C ^

,

IDLIST

real

6

5

2

1

входной символ – В, сдвиг в состояние 3;

real A, B­, C ^

В

,

IDLIST

real

3

6

5

2

1

входной символ – «,», приведение по правилу (4);

real A, B­, C ^

,

IDLIST

real

6

5

2

1

входной символ – ID, сдвиг в состояние 7;

real A, B­, C ^

ID

,

IDLIST

real

7

6

5

2

1

входной символ – «,», приведение по правилу (2);

real A, B­, C ^

real

2

1

входной символ – IDLIST, сдвиг в состояние 5;

real A, B­, C ^

IDLIST

real

5

2

1

входной символ – «,», сдвиг в состояние 6;

real A, B, ­C ^

,

IDLIST

real

6

5

2

1

входной символ – С, сдвиг в состояние 3;

real A, B, C­ ^

С

,

IDLIST

real

3

6

5

2

1

входной символ – «^», приведение по правилу (4);

real A, B, C­ ^

,

IDLIST

real

6

5

2

1

входной символ – ID, сдвиг в состояние 7;

real A, B, C­ ^

ID

,

IDLIST

real

7

6

5

2

1

входной символ – «^», приведение по правилу (2);

real A, B, C­ ^

real

2

1

входной символ – IDLIST, сдвиг в состояние 5;

real A, B, C­ ^

IDLIST

real

5

2

1

входной символ – «^», приведение по правилу (1);

real A, B, C­ ^

1

входной символ – S, поэтому HALT (ОСТАНОВ).

Разбор завершен успешно.

Заметим, что после сдвига входным символом является следующий символ, а после приведения – символ, к которому только что привело действие.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47