Построение управляющей таблицы
Дополним исходную грамматику правилом S’ ®S, тем самым получим пополненную грамматику G’ = <T, N’, S’, R’ >: T { a, (, ), , }, N’ = { S’, S, R}, R = { S’®S, S ® a, S ® (SR, R ® ,SR, R ® )}; Пронумеруем правила: 0. S’®S 1. S ® a 2. S ® (SR 3. R ® ,SR 4. R ® ) Рассмотрим правило с №2: (2OBLOWYjдля всех Yjϵ OFIRST(S2). Из Sможно вывести цепочки S®a; S® (SR. Следовательно, OFIRST(S2) = { a1, (2, S2} и(2OBLOW a1, (2OBLOW (2, (2OBLOW S2. Поступая подобным образом для правила 3, получим матрицу отношения OBLOW.
Определим функцию переходов g(X): используя отношение OBLOW, построим таблицу переходов конечного автомата.
Получившаяся таблица переходов соответствует детерминированному автомату, тогда множеству магазинных символов соответствует первый столбец таблицы. Определим функции действия f(a). Построим таблицу, содержащую по одной строке для каждого магазинного символа и по одному столбцу для каждого символа aϵ (T˅ {ε})
Контрольный пример –разбор цепочки «(а, а, а)» принадлежащей языку. (┴, (a,a,a) ,ε) (┴(2 , a,a,a),ε) (┴(2a1, ,a,a), ε) (┴(2S2, ,a,a), 1) (┴(2S2,3 , a,a), 1) (┴(2S2,3a1, , a), 1) (┴(2S2,3S3, ,a), 11) (┴(2S2,3S3,3 ,a), 11) (┴(2S2,3S3,3a1, ), 11) (┴(2S2,3S3,3S3, ), 111) (┴(2S2,3S3,3S3), ε, 111) (┴(2S2,3S3,3S3R3, ε, 1114) (┴(2S2,3S3R3, ε, 11143) (┴(2S2R2, ε, 111433) (┴S0, ε, 1114332) ДОПУСК.
Построить управляющую таблицу и промоделировать работу SLR(1)-анализатора для КС-грамматики G = < T, N, S, R > Усовершенствуем алгоритм 8.2 построения управляющей таблицы так, чтобы получить анализатор для некоторого класса грамматик, не принадлежащих классу LR(0)-грамматик. Этот класс грамматик является подклассом LR(1)-грамматик и получил название SLR(1)-грамматик без e-правил. Буква Sв названии грамматики является сокращением английского слова Simple (простой). Начнем с рассмотрения примера. Построим управляющую таблицу LR(0)-анализатора для грамматики G0, правила вывода которой после пополнения имеют вид:
В процессе построения анализатора получаем: q матрицу отношения OBLOW, определенную на множестве грамматических вхождений пополненной грамматики:
таблицу переходов недетерминированного конечного автомата:
q таблицу переходов детерминированного конечного автомата:
q таблицу кодирования магазинных символов:
q таблицу функций переходов g(X):
Выполняя шаг 4 алгоритма, обнаруживаем, чтоGo не принадлежит классу LR(0)-грамматик, так как множества грамматических вхождений, соответствующие магазинным символам Тx и Ty, содержат самые правые вхождения символа Т и не являются одноэлементными. Покажем, как, сделав некоторый дополнительный анализ, можно определить функции действия f(a) для данной грамматики. Анализ выполняется для каждого элемента отроки таблицы отдельно и использует текущий входной символ (k = 1). Рассмотрим, например, элемент управляющей таблицы для магазинного символа Тx, которому соответствует множество грамматических вхождений {Т2, Т3}. Наличие в Тx самого правого вхождения Т2 в правило вывода (2) говорит о том, что необходимо выполнить операцию (СВЕРТКА, 2), а тот факт, что в Тx содержится T3, свидетельствует в пользу операции ПЕРЕНОС. Допустим, что входным символом является символ «+». Для магазинного символа Тx функция g(+) = ОШИБКА, поэтому втолкнуть его в магазин невозможно, и, следовательно, для допустимых входных цепочек в строке Тx функции действий должно быть значение f(+) = (СВЕРТКА, 2). Для входного символа «*» функция переходов g(*) = *3, значит, при анализе допустимых входных цепочек перенос в магазин символа «*» будет правильным действием. Выполнение операции (СВЕРТКА, 2) в этом случае привело бы к тому, что в магазин был бы помещен магазинный символ, представляющий нетерминал Е. Так как входным символом при этом остается «*», то на следующем шаге был бы выработан сигнал об ошибке, поскольку символ «*» не может непосредственно следовать за Е («*» не принадлежит множеству Follow(Е)). Таким образом, операция (СВЕРТКА, 2) исключается, и в строке управляющей таблицы, помеченной Тx , f(*) = ПЕРЕНОС. Принципы, продемонстрированные при выполнении данного примера, позволяют на основе алгоритма 8.2 сформулировать алгоритм построения управляющей таблицы для SLR(1)-грамматик. Алгоритм 8.3.Построение множества SLR(1)-таблиц. Вход. SLR(1)-грамматика G = (N, S, Р, S), не содержащая e-правил. Выход. Множество T SLR(1)-таблиц для грамматики G или сообщение о том, что грамматикаGне является SLR(1)-грамматикой. ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|