Скачиваний:
17
Добавлен:
01.05.2014
Размер:
571.39 Кб
Скачать

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ

ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Кафедра МО ЭВМ

Пояснительная записка к курсовой работе по дисциплине "Теория языков программирования"

Преподаватель: Самойленко В.П.

студенты гр. 0382: Черёмушкина О. А.

Шин Е.Д.

Санкт-Петербург

2005 Отчет по курсовой работе тяп.

Содержание

1 Описание входного языка 3

1.1 Задание 3

1.2 Синтаксис и семантика языка 3

1.2.1 Словарь и представление 3

1.2.2 Описания и области действия 3

1.2.3 Описания констант 4

1.2.4 Описания типов 4

1.2.5 Описания переменных 4

1.2.6 Выражения 4

1.2.6.1 Операнды 4

1.2.6.2 Операции 4

1.2.7 Операторы 5

2. Лексический анализ 6

2.1 Типы лекскем. 6

2.2 Диаграммы переходов 6

2.3 Структуры данных 9

2.4 Тестирование лексического анализатора 10

3 Синтаксический анализ и перевод во внутреннюю форму 11

3.1 КС-грамматика входного языка 11

3.1.1 Основная грамматика. 11

3.1.2 Грамматика описывающая составной оператор. 12

3.1.3 Грамматика описывающая выражение 13

3.2 Диаграмма переходов 14

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

3.4 Описание перевода 16

3.4.1 АТГ для программы 16

3.4.2 АТГ для оператора 17

3.4.3 АТГ для выражения 19

3.4.4 Описание конструкций языка при помощи триад 23

3.5 Алгоритм работы ДМП-процессора 24

3.6 Тестирование синтаксического анализатора 25

4 Генерация кода 31

5 Приложения

5.1 Приложение А: Синтаксис и семантика языка в БНФ

5.2 Приложение B: Управляющие таблицы грамматик

5.2.1 Управляющая таблица для основной грамматики

5.2.2 Управляющая таблица для грамматики оператора

5.2.3 Управляющая таблица для грамматики выражения

5.3 Приложение С: Спецификации программы.

1 Описание входного языка

1.1 Задание

Базовый язык – Паскаль.

Базовые типы: целый, булевский, ограниченный.

Структурированный тип – булевская матрица.

Операции над булевскими матрицами: определение размеров матрицы, конъюнкция и дизъюнкция матриц, инверсия матрицы.

Оператор цикла – с постусловием.

Перегрузка операций – не разрешается.

Эквивалентность типов – структурная.

Класс грамматик – SLR(1)-грамматики.

Промежуточный язык – триады.

1.2 Синтаксис и семантика языка

1.2.1 Словарь и представление

Для представления терминальных символов предусматривается использование набора знаков ASCII. Пробелы и концы строк не должны встречаться внутри слов (исключая комментарии и пробелы в символьных строках). Пробелы и концы строк игнорируются, если они не существенны для отделения двух последовательных слов. Заглавные и строчные буквы считаются одинаковыми.

  1. Буква - буквы латинского алфавита от A до Z и от a до z. и знак подчеркивания.

A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|

a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z | _

  1. Цифры - арабские цифры от 0 до 9.

0|1|2|3|4|5|6|7|8|9

Шестнадцатеричные цифры - арабские цифры от 0 до 9, буквы от A до F и буквы от a до f.

0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F|a|b|c|d|e|f

Целое без знака: для их записи используется обычная десятичная система записи.

3. Разделители - символ пробела (ASCII 32) и все управляющие символы кода ASCII (ASCII 0-31), включая символ конца строки или символ возврата (ASCII 13).

  1. Символы - символы могут быть как прописными, так и строчными буквами латинского и русского алфавита. Пробел так же является символом.

A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|

a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z | _

А|Б|В|Г|Д|Е|Ё|Ж|З|И|Й|К|Л|М|Н|О|П|Р|С|Т|У|Ф|Х|Ц|Ч|Ш|Щ|Ъ|Ы|Ь|Э|Ю|Я|

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

*, /, +, -, <, <=, >, >=, =, , :=, <>, (*, *), , , {, }, :, ; , . , ., ~, !, @, #, $, %, ^, &, *, (, ), _, +, =, -, ? , :, %, ;, №, », \, |, , ’,] ,[ ,> ,? ,: , ”, {, }

5. Специальные символы и зарезервированные слова представляют собой символы, имеющие одно или несколько фиксированных значений.

Специальными символами являются следующие одиночные символы:

+ - * / = < > [ ] . , ( ) : ; { }

Следующие пары символов также представляют собой специальные символы:

<= >= := .. (* *) (. .)

Зарезервированные слова языка.

and begin boolmatr const div else end goto if label mod

not or program repeat shl shr then type until var xor

6. Строки - последовательности символов, заключенные в одиночные (') или двойные (") кавычки. Открывающая кавычка должна быть такой же, что и закрывающая и не должна встречаться внутри строки. Число символов в строке называется ее длиной. Строка длины 1 может использоваться везде, где допустима символьная константа и наоборот.

7. Знаки операций: Операции, используемые при построении выражений, делятся на операции типа: сложения, умножения, отношения.

8. Комментарии могут быть вставлены между любыми двумя словами программы. Это произвольные последовательности символов, начинающиеся скобкой (* или { и оканчивающиеся *) или }. Комментарии могут быть вложенными. Они не влияют на смысл программы.