Языки программирования и методы трансляции Лекция 10. Алгоритмы синтаксического разбора
Алгоритм разбора для LL(1)грамматик Входная очередь стек w a x X α ┴ Vp – алфавит магазинных символов (без ┴) X – верхний символ магазина ┴ – маркер дна – цепочка номеров правил M - управляющая таблица: M Выходная очередь Алгоритм состоит из тактов, определяемых на множестве конфигураций.
Такт алгоритма разбора Пусть FIRST(x)={a} – множество терминальных символов, которыми начинаются цепочки, выводимые из x. Тогда: 1. (x, X , )├ (x, , ), если M(X, a)=( , i): верхний символ стека заменяется на цепочку , в выходную очередь дописывается i. 2. (ax, a , )├ (x, , ), если M(a, a)=ВЫБРОС (входная головка сдвигается на один символ вправо, верхний символ выбрасывается из магазина). 3. Если алгоритм достигает конфигурации ( , ┴, ) и M(┴ , )=ДОПУСК, то алгоритм останавливается, и - левый разбор входной цепочки. 4. Если алгоритм достигает конфигурации (x, X , ) и M(X, a)=ОШИБКА, то алгоритм останавливается и выдается сообщение об ошибке.
Пример: управляющая таблица 1 предсказывающего алгоритма i E ( TE’, 1 T , 3 i, 8 i , 6 * , 3 PT’, 4 T’ P +TE’, 2 , 6 PT’, 4 + TE’, 1 E’ ) *PT’, 5 , 6 ВЫБРОС ( ) + * ┴ (E), 7 ВЫБРОС ДОПУСК
Пример: работа 1 -предсказывающего алгоритма
Построение управляющей таблицы Вход: LL(1)-грамматика G=(N, Σ, P, S). Таблица М определяется на множестве правилами:
Пример построения управляющей таблицы i E ( TE’, 1 T , 3 i, 8 i , 6 * , 3 PT’, 4 T’ P +TE’, 2 , 6 PT’, 4 + TE’, 1 E’ ) *PT’, 5 , 6 ВЫБРОС ( ) + * ┴ (E), 7 ВЫБРОС ДОПУСК
LL(k)-грамматики FIRSTk( ) – множество терминальных цепочек длины k, которыми начинаются цепочки, выводимые из . КС-грамматика называется LL(k)-грамматикой, если из существования двух левых выводов для которых FIRSTk (x)=FIRSTk(y), следует .