Формулировка задания
Построить управляющую таблицу и промоделировать работу LL(1)-анализатора для КС-грамматики G = < T, N, S, R >. Задание 5.2.3. ^ ^ Решение 1. , 2. , 3. , 4. .
Определим множества FIRST и FOLLOW для всех нетерминальных символов
Построим управляющую таблицу для грамматики G.
Контрольный пример – разбор цепочки “(a^a)^a”, порождаемой этим алгоритмом.
((a^a)^a, S┴ , ) -> M((S)R,2) ((a^a)^a,(S)R┴ ,2) ->ВЫБРОС (а^а)^а, S)R┴ ,2) -> M(aR,1) (a^a)^a, aR)R┴ , 21) ->ВЫБРОС (^a)^a, R)R┴ , 21) -> M(^aR, 3) (^a)^a, ^aR)R┴ , 213) ->ВЫБРОС (a)^a, aR)R┴ , 213) ->ВЫБРОС ()^a, R)R┴ , 213) -> M( ,4) ()^a, )R┴ , 2134) ->ВЫБРОС (^a, R┴ , 2134) -> M(^aR, 3) (^a, ^aR┴ , 21343) ->ВЫБРОС (a, aR┴ , 21343) ->ВЫБРОС ( , R┴, 21343) ->M( ,4) ( ,┴ , 213434) ->ДОПУСК
Построить управляющую таблицу и промоделировать работу LL(1)-анализатора для КС-грамматики G = < T, N, S, R > T = { a, b, c, d, e }, N = { S, A, B }, R = { S ® aAB, S ® bBS, S ® e, A ® cBS, A ® e, B ® dB, B ® e };
1. S ® aAB, 2. S ® bBS, 3. S ® e, 4.A ® cBS, 5.A ® e, 6.B ® dB, 7.B ® e
S® β FIRST(β)={a,b,e} A® β FIRST(β)={c, e} B® β FIRST(β) = {d, e}
Контрольный пример – разбор цепочки, порождаемой этим алгоритмом acdbd
(acdbd,S┴, e)-> (acdbd,aAB┴,1)-> (cdbd,AB┴,1)-> (cdbd,cBSB┴,14)-> (dbd,BSB┴,14)-> (dbd,dBSB┴,146)-> (bd,BSB┴,146)-> (bd,SB┴,1467)-> (bd,bBSB┴,14672)-> (d,BSB┴,14672)-> (d,dBSB┴,146726)-> (e,BSB┴,146726)-> (e,SB┴,1467267)-> (e,B┴,14672673)-> (e,┴,146726737) M(S,a)=(aAB,1) ВЫБРОС M(A,c)=(cBS,4) ВЫБРОС M(B,d)=(dB,6) ВЫБРОС M(B,b)=(e,7) M(S,b)=(bBS,2) ВЫБРОС M(B,d)=(dB,6) ВЫБРОС M(B, e)=(e,7) M(S, e)=(e,3) M(B, e)=(e,7) ДОПУСК
Построить управляющую таблицу и промоделировать работу LL(1)-анализатора для КС-грамматики G = < T, N, S, R > Формулировка задания: Построить управляющую таблицу и промоделировать работу LL(1)-анализатора для КС-грамматики G = < T, N, S, R >. T = { a, b, c, d, e }, N = { S, A, B }, R = { S ® aAB, S ® bBS, S ® e, A ® cBS, A ® e, B ® dB, B ® e };
1. S ® aAB, 2. S ® bBS, 3. S ® e, 4.A ® cBS, 5.A ® e, 6.B ® dB, 7.B ® e
S® β FIRST(β)={a,b,e} A® β FIRST(β)={c, e} B® β FIRST(β) = {d, e}
Контрольный пример – разбор цепочки, порождаемой этим алгоритмом acdbd
(acdbd,S┴, e)-> (acdbd,aAB┴,1)-> (cdbd,AB┴,1)-> (cdbd,cBSB┴,14)-> (dbd,BSB┴,14)-> (dbd,dBSB┴,146)-> (bd,BSB┴,146)-> (bd,SB┴,1467)-> (bd,bBSB┴,14672)-> (d,BSB┴,14672)-> (d,dBSB┴,146726)-> (e,BSB┴,146726)-> (e,SB┴,1467267)-> (e,B┴,14672673)-> (e,┴,146726737) M(S,a)=(aAB,1) ВЫБРОС M(A,c)=(cBS,4) ВЫБРОС M(B,d)=(dB,6) ВЫБРОС M(B,b)=(e,7) M(S,b)=(bBS,2) ВЫБРОС M(B,d)=(dB,6) ВЫБРОС M(B, e)=(e,7) M(S, e)=(e,3) M(B, e)=(e,7) ДОПУСК Построить управляющую таблицу и промоделировать работу LR(0)- анализатора для КС-грамматики G = < T, N, S, R >. Пусть Хiи Zi – грамматические вхождения символов Х и Z в правую часть i-го правила, a Yj – грамматическое вхождение символа Yв правую часть j-го правила. Определим множество OFIRST (Yi) (входит первым), в которое включим Yjи все грамматические вхождения, которыми могут начинаться цепочки, выводимые из Y. OFIRST(Yi) = {Yj } È {Xi | Y Þ* Ab Þ Xab и Xi – самое левое грамматическое вхождение в правую часть правила A à X}. Замечание Если в грамматике есть правила с пустой правой частью, то на последнем шаге вывода они не применяются. Используя множества OFIRST, определим отношение OBLOW (входит под) следующим образом: 9. Xi OBLOW Yj – это множество {(Xi, Yj) | A à aXiZib Î P и Yj OFIRST (Zi) }. ^ OBLOW Yj – это множество {(^,Yj) | Yj OFIRST (S0) }, где S0 – начальное вхождение. Отношение Xi OBLOW Yj определяет множество Qграмматических вхождений Xi, для которых представляющиеих магазинные символы могут встретиться в магазине непосредственно под символом, представляющим Yj. Отношение OBLOW будем задавать с помощью матрицы, содержащей n столбцов и n+1 строк, где n – число грамматических вхождений пополненной грамматикиG¢. Первые n строк и столбцы матрицы отмечены грамматическими вхождениями, а последняя строка – маркером дна магазина. Если Xi OBLOW Yj, то элемент матрицы, расположенный в строке Xi и столбце Yj, равен 1. Построим матрицу отношения OBLOW для грамматикис правилами:
Непосредственно из правил вывода грамматики (1) и (4) получим: A1 OBLOW b1 и B4 OBLOW b4. Из определения отношения OBLOW следует, что ^ OBLOW Yj тогда и только тогда, когда Yj Î OFIRST(S0). Из S можно вывести цепочки S Þ a1A1b1 и S Þ c2. Следовательно, OFIRST(S0) = {a1, c2, S0} и ^ OBLOW а1, ^ OBLOW c2 и ^ OBLOW S0. Рассмотрим правило грамматики с номером (1). Из определения отношения OBLOW следует, что a1 OBLOW Yj для всех Yj Î OFIRST(A1). Из А можно вывести цепочки: A Þ b3S3, A Þ B4b4 Þ c6b4, A Þ B4b4 Þ a5A5b4. Следовательно, OFIRST(А1) = {a5, b3, c6, A1, B4} и a1 OBLOW a5, a1 OBLOW b3, a1 OBLOW c6, a1 OBLOW A1, a1 OBLOW B4. Поступая подобным образом для правил (3) и (6), получим матрицу отношения OBLOW:
Опишем алгоритм построения управляющей таблицы T LR(0)-анализатора (множества LR(0)-таблиц) для LR(0)-грамматики, не содержащей правил с пустой правой частью. Этот алгоритм можно также использовать для проверки принадлежности КС-грамматики классу LR(0). Алгоритм 8.2.Построение множества LR(0)-таблиц. Вход. LR(0)-грамматика G = (N, S, Р, S), не содержащая e-правил. Выход. Множество T LR(0)-таблиц для грамматики G или сообщение о том, что грамматикаGне является LR(0)-грамматикой. ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|