Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Синтаксический анализ для LR(1)-грамматики ⇐ ПредыдущаяСтр 2 из 2
Алгоритм синтаксического анализа на основе LR(k)-грамматики относится к классу алгоритмов восходящего разбора. Строкам управляющей таблицы М (LR-таблицы разбора) /2/ ставятся в соответствие состояния, в которых может находиться анализатор, столбцам - элементы множества VUTU$. Каждая запись рабочего стека представляет собой пару: (символ, номер состояния). Перед началом работы алгоритма в рабочий стек заносится пара ($,1). Возможные значения элементов таблицы и их интерпретация алгоритмом разбора приведены в таблице 5.1.
Таблица 5.1
Для построения управляющей таблицы М может быть выполнена разметка порождающих правил грамматики номерами состояний анализатора. Номера состояний устанавливаются в правой части каждого правила: перед первым символом, между любыми двумя символами и после последнего символа. При этом номер состояния, непосредственно справа от которого находится нетерминал, следует распространить на позиции перед первыми символами всех правых частей правил для данного нетерминала (и т. д. рекурсивно). А если непосредственно слева от одного и того же символа в каких-либо правилах установлены одинаковые множества меток, то и непосредственно справа от этого символа в этих правилах следует поставить одну и ту же метку. После разметки грамматики выполняется построение таблицы М по следующему алгоритму /2/. 1. Если символ А в правой части правила имеет непосредственно слева от себя метку k, а непосредственно справа от себя - метку j, то M(k,A) = ("сдвиг",j). 2. Если метка j размещается за последним символом правой части правила номер i (если правая часть правила - "lambda", j совпадает с меткой состояния, непосредственно справа от которого находится нетерминал левой части правила i), то определяется множество Q символов, которые в какой-либо сентенциальной форме могут следовать за нетерминалом левой части правила номер i, и M(j,q)=i для всех q, принадлежащих Q. 3. M(1,<S>)="допуск". 4. Оставшиеся незаполненными элементы таблицы M получают значение "ошибка".
Пример Разметим грамматику G(V,T,P,S): 1) <S>::=<E> 1 2 2) <E>::=<T> + <E> 1,4 3 4 5 3) <E>::=<T> 1,43 4) <T>::= <F> * <T> 1,4,7 6 7 8 5) <T>::= <F> 1,4,7 6 6) <F>::= i 1,4,7 9
Управляющая таблица М будет представлена таблицей 5.2.
Таблица 5.2
Незаполненные элементы таблицы имеют значение "ошибка".
Проанализируем входную цепочку i*i c помощью алгоритма LR(1) - анализатора. Последовательность изменения состояний стека представлена таблицей 5.3.
Таблица 5.3
В результате анализа получено синтаксическое дерево разбора (рис.5.1).
Рис.5.1 Синтаксическое дерево разбора
В выходном стеке это дерево представляется таблицей 5.4.
Таблица 5.4
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2018-05-31; просмотров: 184. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |