Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Грамматика АТ в2.doc
Скачиваний:
11
Добавлен:
16.05.2015
Размер:
946.18 Кб
Скачать

3. Описание и ввод грамматики

В комплект программы входит текстовый редактор, с помощью которого можно вводить грамматику. Для входа в редактор перейдите в папку программы и запустите файл SAG  ScilicetEditor  ScilicetEditor.exe. Этот редактор настроен на автоматический запуск анализатора SAG. Так же он подсвечивает синтаксис вводимых конструкций.

  1. Окно текстового редактора для ввода грамматики

Грамматика описывается при помощи нотации Бакуса-Наура. Терминальные символы заключаются в кавычки. Терминальные и нетерминальные символы могут состоять из нескольких литер. Внутри многолитерных символов не должны встречаться специальные символы, в том числе и пробелы. Правила грамматики записывается в виде

нетерминальный_символ = цепочка

Каждое определение нетерминального символа должно заканчиваться знаком точки с запятой (;).

Между символами =, а также между нетерминальными символами допускается любое число пробелов. Описание грамматики должно начинаться с правила, определяющего начальный символ (аксиому) грамматики. В тексте описания грамматики можно использовать комментарии. Комментарий начинается с двух слешей (//) и продолжается до конца строки.

В терминальных символах можно использовать следующие обозначения:

\r – перевод каретки (символ с кодом 10);

\n – возврат каретки (символ с кодом 13);

\t – знак табуляции;

\\ – знак обратного слеша;

\’ – одинарная кавычка;

\” – двойная кавычка.

Атрибутные правила записываются внутри фигурных скобок и разделяются точками с запятой (;). Внутри атрибутных правил обращения к атрибутам записываются в виде

нетерминальный_символ . название_атрибута

Сами атрибутные правила должны выглядеть так:

атрибут = выражение_с_атрибутами

В выражениях допустимо использовать математические операции «+», «–» , «*» , «/» и операцию объединения строк «&». Кроме того, ко всем успешно разобранным нетерминальным символам сразу после их разбора анализатор добавляет атрибут text, в который помещает ту часть исходной цепочки, которая соответствует рассматриваемому нетерминальному символу. Этот атрибут в дереве разбора скрыт (какая часть цепочки соответствуем нетерминальному символу легко узнать, выполнив щелчок левой кнопкой мыши по узлу дерева).

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

Пустые цепочки следует задавать предопределённым нетерминальным символом _EMPTY. Для упрощения задания непустых буквенно-цифровых последовательностей можно применять встроенный нетерминальный символ _TEXT.

Рассмотрим пример грамматики для распознавания объявлений переменных в стиле языка Си с сохранением типов данных для каждой переменной. Пример такой грамматики показан в листинге 1.

Листинг 1. Пример грамматики.

  1. VarBlock = VarRule VarBlock;

  2. VarBlock = _EMPTY;

  1. VarRule = Type { Var.type = Type.text; VarList.type = Type.text } ' ' Var VarList ';' SPACE;

  1. VarList = { Var.type = VarList.type; VarList2.type = VarList.type } ',' SPACE Var VarList2;

  2. VarList = _EMPTY;

  1. Type = _TEXT;

  2. Var = _TEXT;

  3. Number = _TEXT;

  1. SPACE = ' ';

  2. SPACE = '\n';

  3. SPACE = _EMPTY;

После того как грамматика набрана, она должна быть сохранена. Имя файла выбирается произвольно, расширение должно быть lat.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]