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

16

«УТВЕРЖДАЮ»

Ректор университета

____________ А.В. Лагерев

«___» ____________ 2007 г.

Теория языков программирования и методы трасляции

ПОСТРОЕНИЕ И АНАЛИЗ ГРАММАТИКИ

Методические указания

к выполнению лабораторной работы №1

для студентов очной формы обучения специальности 230105 «Программное обеспечение вычислительной техники

и автоматизированных систем»

Брянск 2007

УКД 629.42.02/.06(07)+621.313.2(07)

Теории языков программирования и методы трансляции. Построение и анализ грамматики: методические указания к выполнению лабораторной работы №1 для студентов очной формы обучения специальности 230105 «Программное обеспечение вычислительной техники и автоматизированных систем». – Брянск: БГТУ, 2007. – 16 с.

Разработали:

А.Н.Горбунов

доцент, канд. техн. наук,

А.О.Трубаков

ассистент

Рекомендовано кафедрой «Информатика и программное обеспечение» БГТУ (протокол №9 от 30.01.03)

1. Цель работы

Целью работы является получение практических навыков по составлению правил грамматики и проверка их правильности путем моделирования левого и правого выводов.

Продолжительность работы – 6 часов.

2. Основные понятия и термины

Алфавит – конечная совокупность неделимых символов. Символ этой совокупности называется цепочкой или словом в алфавите.

Формальная грамматика G определяется как четверка :

G = <VT, VN, I, R >, где

VT - терминальный алфавит (содержит символы, из которых строят цепочки языка);

VN - вспомогательный (нетерминальный) алфавит – содержит символы, которые используются только при построении цепочки, VT  VN = 0 ;

I - начальный символ (аксиома) грамматики, I  VN;

R - множество порождающих правил вида αβ, где цепочки α и β соответственно левая и правая части правила, α, β  (VT  VN). Если β = λ, где λ – пустая цепочка, то правило называется Е-правилом.

Грамматика называется контекстно-свободной (КС), если все правила грамматики имеют вид : X → α, где X  VN. В дальнейшем под грамматикой G будем подразумевать контекстно-свободную грамматику.

Язык, порождаемый грамматикой G, – это множество терминальных цепочек, выводимых из начального символа грамматики I. Правила грамматики используются для того, чтобы задавать способы подстановки или замены цепочек. Подстановка (вывод) осуществляется путем замены некоторого нетерминального символа (нетерминала) на правую часть правила, левой частью которого является этот нетерминал. Если при построении вывода цепочки при каждом применении правила заменяется самый левый нетерминальный символ промежуточной цепочки, то такой вывод называется левым. Если при выводе заменяется самый правый нетерминальный символ, то вывод называется правым.

Если из нетерминального символа Y можно вывести пустую цепочку λ, то такой символ называется аннулирующим. Если цепочка состоит из аннулирующих нетерминалов, то такая цепочка является аннулирующей. Правило Y → λ также называется аннулирующим.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рассмотрим пример грамматики для распознавания двух конструкций – цикл for и условие if. Причем грамматика должна распознавать текст, содержащий неограниченное количество таких конструкций. Пример такой грамматики показан в листинге 1.

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

  1. program ::= part_prog;

  1. part_prog ::= part '\r\n' part_prog;

  2. part_prog ::= part '\r\n';

  3. part_prog ::= part;

  1. part ::= for;

  2. part ::= if;

  1. for ::= 'for(' liter '=' number ';' liter logic number ';' liter '++)';

  1. if ::= 'if(' liter logic number ')';

  1. number ::= digit number;

  2. number ::= digit;

  1. logic ::= '>=';

  2. logic ::= '<=';

  3. logic ::= '>';

  4. logic ::= '<';

  5. logic ::= '==';

  6. logic ::= '!=';

  1. digit ::= '0';

  2. digit ::= '1';

  3. digit ::= '2';

  4. digit ::= '3';

  5. digit ::= '4';

  6. digit ::= '5';

  7. digit ::= '6';

  8. digit ::= '7';

  9. digit ::= '8';

  10. digit ::= '9';

  1. liter ::= 'q';

  2. liter ::= 'w';

  3. liter ::= 'e';

  4. liter ::= 'r';

  5. liter ::= 't';

  6. liter ::= 'y';

  7. liter ::= 'u';

  8. liter ::= 'i';

  9. liter ::= 'o';

  10. liter ::= 'p';

  11. liter ::= 'a';

  12. liter ::= 's';

  13. liter ::= 'd';

  14. liter ::= 'f';

  15. liter ::= 'g';

  16. liter ::= 'h';

  17. liter ::= 'j';

  18. liter ::= 'k';

  19. liter ::= 'l';

  20. liter ::= 'z';

  21. liter ::= 'x';

  22. liter ::= 'c';

  23. liter ::= 'v';

  24. liter ::= 'b';

  25. liter ::= 'n';

  26. liter ::= 'm';

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

ВНИМАНИЕ. Сохранение файла перед его трансляцией нужно проводить обязательно.