Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы и преобразования.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
89.6 Кб
Скачать

Вычисление матрицы предшествования

Матрица предшествования представляет собой таблицу следующего вида:

 

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()