1. Бек Л. Введение в системное программирование.: Пер. с англ. – М.: Мир, 1998.
2. Грис Д. Конструирование компиляторов для цифровых вычислительных машин. – М.: Мир, 1975.
3. Карпов В.Э. Классическая теория компиляторов. – http://itlab.net.ru/ materials/compiler/compiler.html
4. Конспект лекций по теме "Трансляторы". – http://www.kulichki.net/ kit/library/transl.zip
5. Креншоу Д. Давайте создадим компилятор! – http://kit.kulichki.net/ crenshaw/crenshaw.html
6. Лабораторные работы по курсу Системное ПО. – http://www.fi.ru/~mill/ LabFl-97.htm
7. Основы компиляции. http://structur.h1.ru/compil.htm
8. Романов Е.Л. Основы построения трансляторов. – http://www.kulichki. net/kit/library/nstu_trans.zip.
9. Пратт Т. Языки программирования. Разработка и реализация.: Пер. с англ. – М.: Мир, 1979.
10. Типовые нормы времени на программирование задач для ЭВМ. – М.: Экономика, 1989.
11. Типовые нормы времени на разработку конструкторской документации. – М.: Экономика, 1991.
12. Фаронов В.В. Турбо Паскаль. Книга1. Основы Турбо Паскаля. – М.: Учебно-инженерный центр «МВТУ-ФЕСТО ДИДАКТИК», 1992.
13. Шаньгин В. Ф., Илюшечкин В. М., Тимофеев П. А. Программирование микропроцессорных систем. / Под ред. В. Ф. Шаньгина. – М.: Высш. шк., 1990.
Приложение А
Пример выполнения задания по работе со сканером LEXAN
Дана следующая грамматика языка:
1. <prog> ::= PROGRAM <prog-name> VAR <dec-list> BEGIN <stmt-list> END.
2. <prog-name> ::= id
3. <dec-list> ::= <dec> | <dec-list> ; <dec>
4. <dec> ::= <id-list> : <type>
5. <type> ::= INTEGER
6. <id-list> ::= id | <id-list> , id
7. <stmt-list> ::= <stmt> | <stmt-list> ; <stmt>
8. <stmt> ::= <assign> | <for>
9. <assign> ::= id := <exp>
10. <exp> ::= <term> | <exp> + <term> | <exp> - <term>
11. <term> ::= id | int | ( <exp> )
12. <for> ::= FOR <index-exp> DO <body>
13. <index-exp> ::= id := <exp> TO <exp>
14. <body> ::= <stmt> | BEGIN <begin-list> END
Используя программу LEXAN произвести следующие действия:
1. Выбрать элементы из таблицы терминальных символов, при желании можно изменить названия ключевых слов (таблица 1);
2. Написать исходный текст на учебном языке с использованием заданной грамматики;
3. Заполнить таблицы: – символьных имен (таблица 2);
– литералов (таблица 3);
– лексического анализа (выходных символов);
4. Проверить правильность заполнения таблиц встроенным анализатором;
5. При наличии ошибок, исправить имеющиеся, и повторно обработать программой LEXAN;
6. Получить листинг полученных результатов.
7. Сохранить результат в файл.
Сначала производится анализ, какие терминальные символы входят в грамматику: ”PROGRAM”, ”VAR”, ”BEGIN”, ”END”, ”.”, ”INTEGER”, ”;”, ”:=”, ”+”, ”-”, ”FOR”, ”DO”, ”TO”.
Исходная программа, написанная с использованием терминов исходной грамматики:
program prog1;
var
i, x:integer;
begin
x:=0;
for i:=1 to 10 do
x:=x+i;
end.
Далее выбираются терминальные символы, использованные в программе, заполняется таблица выбранных терминальных символов. Примерное представление таблицы выбранных терминальных символов показано в таблице 19.
Таблица 19
№ стр. | Терминальный символ | Комментарий (обозначение) | Код |
1 | PROGRAM | 1 | |
2 | ; | 27 | |
3 | VAR | 2 | |
4 | , | 29 |
Продолжение таблицы 19
№ стр. | Терминальный символ | Комментарий (обозначение) | Код |
5 | : | 31 | |
6 | INTEGER | 5 | |
7 | BEGIN | 3 | |
8 | := | 28 | |
9 | FOR | 8 | |
10 | TO | 9 | |
11 | DO | 10 | |
12 | + | 32 | |
13 | END | 4 | |
14 | . | 30 |
Определяются символические имена, встречающиеся в программе, и заполняется таблица 20 в порядке их появления в тексте
Таблица 20
Специф | Идентификатор | Тип | Размер, занимаемый в памяти, байт | Относительный адрес в памяти |
1 | prog1 | |||
2 | i | |||
3 | x |
В тексте определяются литералы и заносятся в таблицу 21 в порядке их появления.
Таблица 21
Специф | Литерал | Тип | Размер, занимаемый в памяти, байт |
1 | 0 | Integer | 2 |
2 | 1 | Integer | 2 |
3 | 10 | Integer | 2 |
Во время заполнения этих трех таблиц заполняется четвертая – таблица 22 (таблица выходных кодов лексем): в поле «Таблица» подставляются номера таблиц (таблица терминальных символов – №1, таблица символических имен – №2, таблица литералов – №3), в поле строка – код элемента (из таблицы 1), спецификаторы (из таблицы 2 и 3). Поле «№п.п.» заполняется автоматически.
Таблица 22
№ п.п. | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
Таблица | 1 | 2 | 1 | 1 | 2 | 1 | 2 | 1 | 1 | 1 | 1 | 2 | 1 | 3 | 1 |
Строка | 1 | 1 | 27 | 2 | 2 | 29 | 3 | 31 | 5 | 27 | 3 | 3 | 28 | 1 | 27 |
№ п.п. | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
Таблица | 1 | 2 | 1 | 3 | 1 | 3 | 1 | 2 | 1 | 2 | 1 | 2 | 1 | 1 | 1 |
Строка | 8 | 2 | 28 | 2 | 9 | 3 | 10 | 3 | 28 | 3 | 32 | 2 | 27 | 4 | 30 |
Дата: 2019-05-29, просмотров: 178.