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

Определение принадлежности грамматики к классу простого предшествования

Класс простого предшествования определяется очень просто: грамматика является грамматикой простого предшествования, если для любых двух символов полного словаря существует не более одного отношения предшествования. Неформально, это значит, что в каждой клетке матрицы предшествования должно находится не более одного отношения.

Проверку производит класс isPrecedence. Этот класс получает матрицу предшествования и по ней определяет является ли она грамматикой простого предшествования.

FormalGrammar::ptr a_fg = new FormalGrammar(a_fileName); cout<<"FG "<<a_fg->toString(); makePrecedenceMatrix a_mpm(); PrecedenceMatrix::ptr a_pm = a_mpm( a_fg ); isPrecedence a_ip; if( a_ip( m_pm ) )   cout<<"Grammar is precedence"; else   cout<<"Grammar is not precedence";

Определение принадлежности грамматики к классу слабого предшествования

Класс слабого предшествования определяется чуть сложнее: грамматика является грамматикой слабого предшествования, если отношение > не пересекается с объединением отношений < = и для A::=wXv и B::=v не выполняется ни X < B ни X = B. Неформально, это значит, что в каждой клетке матрицы предшествования могут находиться либо < и = либо только >.

Проверку производит класс isWeakPrecedence. Этот класс получает матрицу предшествования и по ней определяет является ли она грамматикой слабого предшествования.

FormalGrammar::ptr a_fg = new FormalGrammar(a_fileName); cout<<"FG "<<a_fg->toString(); makePrecedenceMatrix a_mpm(); PrecedenceMatrix::ptr a_pm = a_mpm( a_fg ); isWeakPrecedence a_iwp; if( a_iwp( m_pm ) )   cout<<"Grammar is weak precedence"; else   cout<<"Grammar is not weak precedence";