Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Доки / T_ALG / 1 / FOMICHEV / Section5 / part521

.html
Скачиваний:
6
Добавлен:
17.04.2013
Размер:
12.61 Кб
Скачать

s76 Пред.Страница След.Страница Раздел Содержание   5.2. Cинтаксический анализ, с использованием АТ-грамматики   5.2.1. Процесс синтаксического анализа Допустим, что задачей синтаксического анализа такой цепочки является выделение каждой переменной элемента памяти в виде строки ТЗ и занесение указателя этой строки в ТП. Исходными данными для выполнения этих действий является указатель на первый свободный элемент ТЗ. После завершения обработки описаний этот указатель должен изменить значение. Новое значение должно определять первый свободный элемент ТЗ после выделения памяти для переменных.

Синтаксис цепочек рассматриваемого вида может быть задан следующей грамматикой с начальным символом <D>. <D> ® int V <R>

<R> ® , V <R>

<R> ® $ Начальному символу <D> придадим два атрибута: наследуемый атрибут /b, начальное значение которого зададим в виде указателя на первый свободный элемент ТЗ, и синтезируемый атрибут %a, значением которого должен быть указатель на новый свободный элемент ТЗ после выделения памяти для переменных.

Нетерминальному символу <R>, обозначающему продолжение списка также припишем два атрибута. Один атрибут /g должен быть наследуемым. Он должен передавать значение указателя на ТЗ следующему правилу при выводе. Другой атрибут %f- синтезированный. Он должен использоваться для передачи на выход указателя на первый свободный элемент после выделения памяти переменным. Для каждой переменной в описании нужно указатель на свободный элемент ТЗ записать в соответствующее поле ТП. Допустим, что эти действия выполняет символ действия ФОРМирование Указателя (ФОРМУ), который имеет два наследуемых атрибута, первый из которых определяет положение переменной в ТП, а второй является указателем на первый свободный элемент ТЗ.

    В простейшем случае указатель на элемент ТЗ для следующей переменной может быть получен путем прибавления единицы к предыдущему значению. В общем случае это может быть не так, поэтому примем, что новое значение указателя ТЗ определяется специальной функцией без аргументов СЛЕДующий УКазатель (СЛЕДУК), Учитывая сказанное выше, грамматику, задающую перевод описаний значения таблицы ТП, можно записать так:

  Г 5. 1 : D%a/b Ю int V/c{ФОРМУ}/d/eR%f/g !! d := C; e := b; a := f; g := СЛЕДУК; R%h/k Ю , V/l{ФОРМУ}/m/nR%j/p !! m := l; n := k; h := j; p := СЛЕДУК; R%q/r Ю $ !! q := r;     Построим с помощью правил этой грамматики совмещенный вывод цепочки

int V/10,V/12,V/14, записывая, справа от выводимой цепочки, отложенные вычисления, а под цепочкой – получаемые значения атрибутов. В качестве начального значения наследуемого атрибута b возьмем значение 44. Результаты вывода                                                   Отложенные вычисления 1. D%a/44

2. int V/10{ФОРМУ}/10/44R%f/45

                         d := 10; e := 44; g := 45                            a := f

3. int V/10,{ФОРМУ}/10/44/,V/12{ФОРМУ}

                /12/45R%j/46

                    m := 12, n = 45, p = 46;                                a := f; f := j;

4. int V/10,{ФОРМУ}/10/44,V/12,{ФОРМУ}

                    /12/45,V/14{ФОРМУ}/14/46R%j'/47,

                    m' = 14, n' = 46; p' = 47                               a := f; f := j; j := j'

5. int V/10,{ФОРМУ}/10/44,V/12,{ФОРМУ}

                 /12/45,V/14{ФОРМУ}/14/46                         a := f; f := j; j := j'; j' := 47; a = 47     В каждой строке приведенного примера показаны результаты очередного шага вывода, которые могут содержать символы действия с найденными значениями атрибутов. Учитывая, что атрибуты правой части каждого правила являются независимыми величинами, при повторном применении второго правила грамматики для обозначения атрибутов были использованы переменные с апострофами. Приведенные примеры показывают, что результатом вывода с помощью правил атрибутивной грамматики является цепочка, состоящая из символов действия и входных символов, каждому из которых приписаны значения атрибутов. Если из заданной АТ-грамматики Г удалить все атрибуты, то получим транслирующую грамматику Г', а из каждой цепочки, выведенной в грамматике Г после удаления всех атрибутов, может быть получена цепочка, выводимая в грамматике Г'. Основываясь на этом соответствии, назовем множество пар, состоящих из цепочки входных символов, снабженных атрибутами, и цепочки выходных символов, имеющих атрибуты, атрибутным переводом, определяемым заданной атрибутной грамматикой. Пред.Страница След.Страница Раздел Содержание

 

Соседние файлы в папке Section5