Системное программное обеспечение: Основы трансляции. Карпушин А.Н - 35 стр.

UptoLike

37
Это можно сделать в виде таблицы, строки которой помечены нетерми-
нальными символами грамматики, столбцытерминальными. Значение каждо-
го элемента таблицыэто нетерминальный символ, к которому можно свер-
нуть пару «нетерминал-терминал», которыми помечены соответствующие
строка и столбец.
Например, для грамматики G = ({a, b, }, {S, A, B, C}, P, S), где:
P: S C
C Ab | Ba
A a | Ca
B b | Cb
такая таблица будет выглядеть следующим образом:
a b
C
A B S
A
- C -
B
C - -
S
- - -
Прочерк ставится в том случае, если для пары «терминал-нетерминал»
«свертки» нет.
Чаще информацию о возможных свертках представляют в виде диаграммы
состояний (ДС) неупорядоченного ориентированного помеченного графа, ко-
торый строится следующим образом:
1. строят вершины графа, помеченные нетерминалами грамматики (для каж-
дого нетерминалаодну вершину), и еще одну вершину, помеченную
символом, отличным от нетерминальных (например, H). Эти вершины бу-
дем называть состояниями. H будет начальным состоянием.
2. соединяем эти состояния дугами по следующим правилам:
a) для каждого правила грамматики вида W t соединяем дугой состоя-
ния H и W (от H к W) и помечаем дугу символом t;
б) для каждого правила вида W Vt соединяем дугой состояния V и W
(от V к W) и помечаем дугу символом t;
Диаграмма состояний для грамматики G:
a
a
b
b
b
a
S
C
A
B
H
Алгоритм разбора по диаграмме состояний
1. объявляем текущим состояние H;
2. затем многократно (до тех пор, пока не считаем признак конца цепочки)
выполняем следующие шаги: считываем очередной символ исходной