Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методика выполнения курсовика и задания.doc
Скачиваний:
9
Добавлен:
22.03.2016
Размер:
163.33 Кб
Скачать

2.3. Описание этапа синтаксического анализа

На этапе синтаксического анализа выполняется проверка синтаксической корректности исходной программы, представленной в виде потока токенов и совокупности таблиц, и преобразование ее в некоторую внутреннюю форму, удобную в дальнейшем для генерации объектного кода.

Опишем порядок действий, выполняемых при разработке синтаксического анализатора.

2.3.1. Построение кс-грамматики входного языка

Для построения КС-грамматики входного языка необходимо:

  1. Заменить металингвистические переменные БНФ обозначениями нетерминальных символов, используя короткие имена;

  2. В качестве терминальных символов использовать токены;

  3. Металингвистический символ «::=» заменить символом «»;

  4. Заменить одну металингвистическую формулу с nальтернативами наnправил грамматики с одинаковым символом в левой части правила вывода;

  5. Исключить металингвистические символы [ ]и{ }, включив в правила грамматики-правила и рекурсивные правила.

      1. Определение класса КС-грамматики входного языка

Построенная КС-грамматика входного языка должна входить в определенный в задании на курсовую работу класс грамматик. Определение класса КС-грамматики рекомендуется выполнять с помощью лабораторного практикума [2]. Если грамматика не принадлежит заданному классу, то необходимо ее преобразовать. Для преобразования можно использовать алгоритмы и рекомендации, приведенные в [3] – [6].

      1. Разбиение грамматики на подграмматики

Если преобразование КС-грамматики не приведет к нужному результату, то рекомендуется найти правила грамматики, в которых нарушаются требования, предъявляемые к грамматикам заданного класса, после чего выполнить одно или несколько действий из приведенного списка:

  1. Изменить (пополнить) список токенов так, чтобы терминальные символы грамматики, приводящие к конфликту, были разбиты на непересекающиеся подмножества.

  2. Выделить из исходной грамматики подграмматики таким образом, чтобы каждая из полученных грамматик принадлежала заданному классу.

Введение новых токенов приводит к необходимости модификации лексического анализатора. При выполнении этой работы особое внимание нужно уделить решению проблем учета контекста при локализации лексемы и сохранения детерминированности конечного преобразователя, лежащего в основе лексического анализатора.

Разбиение грамматики на подграмматики позволит использовать заданный метод синтаксического анализа, но усложнит описание и реализацию этого перевода, поскольку после разбиения перевод будет описываться с помощью нескольких взаимосвязанных атрибутных транслирующих грамматик.

При разбиении грамматики на подграмматики нужно учитывать следующее.

  1. Совокупности выделенных из грамматики взаимосвязанных правил должна представлять собой КС-грамматику.

  2. Основной символ подграмматики становится (специальным) терминальным символом исходной грамматики.

  3. Если множества нетерминальных символов подграмматики и модифицированной исходной грамматики не пересекаются, то синтаксический анализ для каждой из них может быть реализован при помощи отдельного процессора с магазинной памятью (ДМП-процессора).

      1. Описание промежуточного языка

Тип промежуточного языка, используемого для представления программы после синтаксического анализа, определен в задании на курсовую работу. Описание различных типов промежуточных языков приводится в [1].

В данном разделе пояснительной записки необходимо описать процесс выбора операторов промежуточного языка, используемых для описания перевода, и описать их семантику.

Фрагмент описания промежуточного языка приводится в табл. 2.4.

          1. Таблица 2.4

Описание тетрады

Синтаксис

Семантика

Коп

Оп1

Оп2

Рез

BRL

Label

Безусловный переход на метку Label

BF

Label

R

Переход на метку Label, если R = False

DEFL

Label

Определение метки Label

      1. Неформальное описание перевода

При описании перевода конструкций входного языка в промежуточный язык следует руководствоваться методикой, изложенной в [1]. Рекомендуемая форма описания перевода приведена на рис. 2.3. Для возможности построения ссылок на описание в его заголовке указывается номер первого правила грамматики, описывающего конструкцию. Формы конструкции и тетрады, входящие в ее перевод, нумеруются. Например (j).1.5 – ссылка на тетраду определения метки перевода полной формы условного оператораIF.

( i )Перевод условного оператора IF

  1. Полная форма

Входная конструкция:

Последовательность тетрад:

IF

<Выражение>

1

Перевод выражения (R – результат)

              1. THEN

                  1. 2

                  1. BF

Lelse

R

<Операторы>

3

Перевод операторов

ELSE

                  1. 4

                  1. BRL

Lend

                  1. 5

                  1. DEFL

Lelse

<Операторы>

6

Перевод операторов

END

                  1. 7

                  1. DEFL

Lend

  1. Сокращенная форма:

Входная конструкция:

Последовательность тетрад:

IF

<Выражение>

1

Перевод выражения (R - результат)

THEN

2

BF

Lend

R

<Операторы>

3

Перевод операторов

END

4

DEFL

Lend

Рис. 2.3