- •Лабораторная работа № 3 Построение простейшего дерева вывода
- •Краткие теоретические сведения
- •Распознавание цепочек кс-языков
- •Грамматики предшествования
- •Алгоритм “сдвиг-свертка” для грамматик простого и операторного предшествования
- •Общий алгоритм работы синтаксического анализатора
- •Порядок выполнения работы
- •Требования к оформлению отчета
- •Основные контрольные вопросы
- •Варианты исходных грамматик
- •Варианты заданий
- •Рекомендуемая литература
Варианты исходных грамматик
Ниже приведены варианты грамматик. Во всех вариантах символ S является начальным символом грамматики; S, F, T и E обозначают нетерминальные символы. Терминальные символы выделены жирным шрифтом. Вместо символаaдолжны подставляться лексемы.
1. S ® a := F; 2. S ® a := F;
F ® F+T | T F ® F or T | F xor T | T T ® T*E | T/E | E T ® T and E | E E ® (F) | -(F) | a E ® (F) | not (F) | a
3. S ® F; 4. S ® F;
F ® if E then T else F | if E then F | a := a F ® for T do F | a := a
T ® if E then T else T | a := a T ® (F; E; F) | (; E; F) | (F; E;) | (; E;)
E ® a<a | a>a | a=a E ® a<a | a>a | a=a
Варианты заданий
№ варианта |
№ варианта грамматики |
Допустимые лексемы входного языка |
1 |
1 |
Идентификаторы, десятичные числа с плавающей точкой |
2 |
2 |
Идентификаторы, константы trueиfalse |
3 |
3 |
Идентификаторы, десятичные числа с плавающей точкой |
4 |
4 |
Идентификаторы, десятичные числа с плавающей точкой |
5 |
1 |
Идентификаторы, римские числа |
6 |
2 |
Идентификаторы, константы 0и1 |
7 |
3 |
Идентификаторы, римские числа |
8 |
4 |
Идентификаторы, римские числа |
9 |
1 |
Идентификаторы, шестнадцатеричные числа |
10 |
2 |
Идентификаторы, шестнадцатеричные числа |
11 |
3 |
Идентификаторы, шестнадцатеричные числа |
12 |
4 |
Идентификаторы, шестнадцатеричные числа |
13 |
1 |
Идентификаторы, символьные константы (в одинарных кавычках) |
14 |
2 |
Идентификаторы, символьные константы ‘T’ и ‘F’ |
15 |
3 |
Идентификаторы, строковые константы (в двойных кавычках) |
16 |
4 |
Идентификаторы, строковые константы (в двойных кавычках) |
Примечание:
римскими числами считать последовательности больших латинских букв X,VиI;
шестнадцатеричными числами считать последовательность цифр и символов ‘a’, ‘b’, ‘c’,’d’, ’e’ и ‘f’, начинающуюся с цифры (например: 89, 45ac9, 0abc4);
для выполнения работы рекомендуется использовать лексический анализатор, построенный в ходе выполнения лабораторной работы №2.
Рекомендуемая литература
1. Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение – СПб.: Питер, 2001 (2002, 2003) - 736 с.
2. Коровинский В.В., Жаков В.И., Фильчаков В.В. Синтаксический анализ и генерация кода – СПб.: ГААП, 1993.
3. Бржезовский А.В., Корсакова Н.В., Фильчаков В.В. Лексический и синтаксический анализ. Формальные языки и грамматики - Л.: ЛИАП, 1990.
4. Льюис Ф. и др. Теоретические основы построения компиляторов - М.: Мир, 1979.
5. Ахо А., Ульман Дж. Теория синтаксического анализа, перевода и компиляции - М.: Мир, 1978, т.1.
6. Грис Д. Конструирование компиляторов для цифровых вычислительных машин - М.: Мир, 1975.