
- •Алгоритмы и преобразования.
- •Преобразования формальных грамматик
- •Удаление бесполезных символов
- •Удаление e-правил (пустых правил)
- •Удаление цепных правил
- •Удаление левой рекурсии
- •Алгоритмы над формальными грамматиками
- •Построение множества укорачивающих символов
- •Получение множества перв (First).
- •Получение множества посл (Last).
- •Получение множества След (Follow).
- •Определение принадлежности к классу лл1
- •Алгоритм разбора для лл1 грамматик
- •Построение управляющей таблицы для лл1-анализатора
- •Грамматики предшествования
- •Вычисление матрицы предшествования
- •Определение принадлежности грамматики к классу простого предшествования
- •Определение принадлежности грамматики к классу слабого предшествования
Вычисление матрицы предшествования
Матрица предшествования представляет собой таблицу следующего вида:
|
E |
E! |
P |
T |
T! |
( |
) |
* |
+ |
i |
e |
E |
|
|
|
|
|
|
= |
|
|
|
|
E! |
|
|
|
|
|
|
> |
|
|
|
> |
P |
|
|
|
|
= |
|
|
< |
|
|
|
T |
|
= |
|
|
|
|
|
|
< |
|
|
T! |
|
|
|
|
|
|
|
|
> |
|
|
( |
= |
|
< |
< |
|
< |
|
|
|
< |
|
) |
|
|
|
|
|
|
|
> |
|
|
|
* |
|
|
= |
|
|
< |
|
|
|
< |
|
+ |
|
|
< |
= |
|
< |
|
|
|
< |
|
i |
|
|
|
|
|
|
|
> |
|
|
|
^ |
< |
|
< |
< |
|
< |
|
|
|
< |
|
На пересечении столбцов и строк этой таблицы стоят соответствующие отношения предшествования. Фактически такая таблица служит двум целям: по ней можно определить принадлежность грамматики к классу грамматик предшествования и она управляет работой анализатора. Строится такая таблица с помощью тех правил вычисления отношений предшествования, которые были определены выше.
Класс makePrecedenceMatrix позволяет построить такую таблицу.
FormalGrammar::ptr a_fg = new FormalGrammar(a_fileName); cout<<"FG "<<a_fg->toString(); makePrecedenceMatrix a_mpm(); PrecedenceMatrix::ptr a_pm = a_mpm( a_fg ); cout<<"PrecedenceMatrix : \n"<<a_pm->toString()