Конструирование таблицы предсказывающего анализатора
Для конструирования таблицы предсказывающего анализатора по грамматике G может быть использован алгоритм, основанный на следующей идее. Предположим, что A
- правило вывода грамматики и a FIRST(). Тогда анализатор делает развертку A по , если входным символом является a. Трудностьвозникает, когда
= e или *e. В этом случае нужно развернуть A в , если текущий входной символ принадлежит FOLLOW(A) или если достигнут $ и $ FOLLOW(A).Алгоритм 4.6. Построение таблицы предсказывающего анализатора.
Вход. КС-грамматика G = (N, T, P, S).
Выход. Таблица M[A, a] предсказывающего анализатора, A
N, a T {$}.Метод. Для каждого правила вывода A
грамматики выполнить шаги 1 и 2. После этого выполнить шаг 3.
- Для каждого терминала a из FIRST() добавить A к M[A, a].
- Если e FIRST(), добавить A к M[A, b] для каждого
терминала b из FOLLOW(A). Кроме того, если e
FIRST() и $ FOLLOW(A), добавить A к M[A, $]. - Положить все неопределенные входы равными «ошибка».
Пример 4.5. Применим алгоритм 4.6 к грамматике из примера 4.3. Поскольку FIRST(TE') = FIRST(T) = {(, id }, в соответствии с правилом вывода E
TE' входы M[E, ( ] и M[E, id ] становятся равными E TE'.В соответствии с правилом вывода E'
+TE' значение M[E', +] равно E' +TE'. В соответствии с правилом вывода E' e значения M[E', )] и M[E', $] равны E' e, поскольку FOLLOW(E') = { ), $}.Таблица анализа, построенная алгоритмом 4.6 для этой грамматики, приведена на рис. 4.3.