normDDr (1158429)
Текст из файла
82
Компилятор Норма
Детальный проект
Институт прикладной математики им.М.В.Келдыша
Российская Академия Наук
1999
Содержание
1. Предварительные сведения 4
2. Общая схема компилятора Норма 5
3. Основные структуры данных компилятора Норма. 7
3.1 Таблица имен (Symbol table) 7
3.2 Таблица констант (Constant table) 8
3.3 Список Норма-предложений (List of Norma statements) 8
3.4 Список итераций (List of iterations) 9
3.5 Таблица структуры итераций (Table of iterations structure) 11
3.6 Таблица соответствия предложения-строки (Statements-lines table) 13
3.7 Таблица последовательных групп (Table of ordered groups). 13
3.8 Список ошибок (List of errors) 14
3.9 Таблица областей (Table of domains) 14
3.9.1 Таблица диапазонов (Table of ranges) 15
3.9.2 Таблица условий (Table of conditions) 16
3.9.3 Таблица условных областей (Table of conditional domains) 16
3.9.4 Таблица диагоналей (Table of diagonals) 17
3.10 Таблица упорядоченных индексов (Table of ordered indexes) 18
3.11 Таблица индексов распределения (Table of distribution indexes) 18
3.12 Таблица функциональных зависимостей (Table of functional dependencies) 19
3.12.1 Таблица ‘Что-вычисляется’ (What-compute table) 22
3.12.2 Таблица ‘Где-вычисляется’ (Where-compute table) 22
3.13 Таблица тел операторов (Table of operators body) 22
3.14 Таблица форматов ввода-вывода (Table of input-output formats) 23
3.15 Граф информационных зависимостей (Data dependencies graph (DDG)) 23
3.16 Редуцированныйграф информационных зависимостей (Reduced data dependencies graph
(RDDG)) 24
3.17 Список максимальных сильно связных подграфов (List of MSCS) 25
3.18 Список для представления параллельной ярусной схемы (List for parallel layer scheme
representation) 25
3.19 Таблица распределенных переменных (Table of distributed variables) 26
3.20 Таблица теневых переменных (Table of shadow variables) 26
3.21 Таблица удаленных переменных (Table of remote variables) 27
3.22 Промежуточное представление Fortran-DVM программы (Intermediate representation of
Fortran DVM programs) 27
3.23 Очередь входных переменных (Input variables queue) 30
4. Глобальная инициализация (Global initialization). 30
4.1 Инициализация глобальных счетчиков (функция count0) 30
4.2 Анализ опций трансляции (функция zaparg) 31
5. Компилятор Норма-раздела (Norma part unit compilation). 32
5.1 Локальная инициализация (Local initialization). 32
5.1.1 Инициализация локальных счетчиков (функция count) 32
5.1.2 Инициализация Таблицы имен(Функция tableid) 33
5.1.3 Инициализация Таблицы констант (функция tablecon). 34
5.2 Лексический анализ Норма-раздела (Part unit scanner). 34
5.2.1 Начало агализа (Функция beginlex) 34
5.2.2 Чтение исходного файла(Функция nextline) 35
5.2.3 Анализ заголовка Норма-раздела(Функция begin_part) 35
5.2.4 Выделение Норма-предложения(Функция line) 35
5.2.5 Перевод в токены(Функция pkd) 36
5.2.6 Определение типа предложения(Функция statement) 36
5.2.7 Обработка заголовка Норма-раздела(Функция head_of_part) 36
5.2.8 Обработка Норма-итерации(Функция lexitex) 37
5.2.9 Обработка Норма-предложения(Функция kbaht) 42
5.2.10 Остановка компиляции(Функция StopCompile) 43
5.2.11 Завершение лексического анализа(Функция EndLex) 43
5.3 Синтаксический анализ Норма-раздела (Part unit parser). 44
5.3.1 Обработка предложений группы а(Функция kvpar1) 44
5.3.2 Обработка предложений групп b,c,d(Функция kvop1) 45
5.3.3 Обработка предложений группы e (Функция kbbxo) 52
5.3.4 Обработка предложений группы f (Функция kbbyx) 55
5.3.5 Обработка предложений группы g (Функция kvopr1) 56
5.3.6 Обработка итерации (Функция kbiter) 63
5.4 Построение графа информационных зависимостей (Data dependencies graph builder). 67
5.4.1 Построение DDG 67
5.4.2 Построение RDDG 70
5.5 Анализ графа информационных зависимостей (Data dependencies graph analyser). 72
5.6 Генерация внутреннего представления Fortran DVM программы (Fortran DVM intermediate
representation generator). 74
5.6.1 Реализация simple node(function begkf) 74
5.6.2 Реализация iteration node(function gen_iter) 77
5.6.3 Реализация MSCS node(function ms) 79
5.6.4 Реализация ordered group node(function mssv) 79
5.7 Генерация кода Fortran DVM программы (Fortran DVM code generator). 80
5.8 Анализ файлов ввода данных (Input files analyser). 81
5.9 Генерация листинга (Listing generator). 84
5.10 Завершение компиляции Норма-раздела (Exit part unit compilation). 86
6. Завершение компиляции (Exit from compilation) 87
1.Предварительные сведения
Рабочий проект компилятора Норма представляет собой детализацию эскизного проекта (документ “Компилятор Норма. Эскизный проект”). Приводится подробное описание структур данных компилятора и управляющей структуры компилятора и основных блоков компилятора, определенных в документе “Компилятор Норма. Эскизный проект”. В данном описании используются понятия из документа “Норма. Описание языка”.
Компилятор Норма транслирует Норма-программу из <исходного файла> в Fortran DVM программу, размещаемую в <выходном файле>. Компилятор Норма реализуется для кластера рабочих станций и функционирует под управлением ОС Unix.
Запуск компилятора осуществляется командой norma, которая имеет следующий формат: norma <опции> <исходный файл>
Компилятор Норма состоит из следующих блоков:
-
Глобальная инициализация.
-
Компилятор Норма-раздела.
а) Локальная инициализация.
-
Лексический анализ Норма-раздела.
-
Синтаксический анализ Норма-раздела.
-
Построение графа информационных зависимостей.
-
Анализ графа информационных зависимостей.
-
Генерация внутреннего представления Fortran DVM программы.
-
Генерация кода Fortran DVM программы.
-
Анализ файлов ввода данных.
-
Генерация листинга.
-
Завершение компиляции Норма-раздела.
-
Завершение компиляции.
Ниже приводится общая схема компилятора Норма, описание основных структур данных компилятора (определенных в документе “Компилятор Норма. Эскизный проект”), подробное описание отдельных блоков компилятора (основные функции, структуры данных и интерфейсы).
Описание структур данных, функций и интерфейсов проводится на уровне логической организации и не зависит от языка реализации компилятора Норма.
2.Общая схема компилятора Норма
Структура управления компилятора Норма приведена на Рис. 1.
|
|
Нет
|
|
Да
|
|
|
|
|
|
| Построение графа информационных зависимостей |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис.1. Структура управления компилятора Норма
3.Основные структуры данных компилятора Норма.
В описании данного проекта используются следующие понятия, которым должно соответствовать понятие уникального номера: <statement number>, <iteration number>, <MSCS number>, <ordered-group-number>, <token code>.
Будем считать, что
| a1< statement number< a2 | b1 < identifier-token code < b2 |
| a3< MSCS number < a4 | b3 < identifier-token code < b4 |
| a5< ordered-group-number < a6 | |
| a7< iteration number < a8 |
и при этом a1<a2<a3<a4<a5<a6<a7<a8, b1<b2<b3<b4. Из этого условия следует свойство уникальности. Значения параметров ai, bj определяются при реализации, в данном проекте для определенности будем считать, что a1=1, a2=499, a3=500, a4=549, a5=550, a6=599, a7=600, a8=650, b1=185, b2=9999, b3=10000.
3.1Таблица имен (Symbol table)
Таблица имен (Symbol table) предназначена для хранения идентификаторов Норма-программы и информации об этих идентификаторах. Идентификаторы Норма-программы заносятся в таблицу имен на этапе лексичексого анализа, информация об их свойствах - на этапе синтаксического анализа.
Строка Таблицы имен (Symbol table) имеет вид:
| identifier | info | token-code |
<info>::=
| X | - PART name, MAIN PART name |
| AR | - FUNCTION name, REAL |
| AI | - FUNCTION name, INTEGER |
| AD | - FUNCTION name, DOUBLE |
| P<integer> | - DOMAIN PARAMETERS identifier =<integer> |
| M<indexes number><list indexes> | - domain |
| I | - domain index |
| II | - iteration index |
| VI<token-code> | - VARIABLE DEFINED ON domain |
| <token-code>, INTEGER | |
| VR<token-code> | - VARIABLE DEFINED ON domain |
| <token-code>, REAL | |
| VD<token-code> | - VARIABLE DEFINED ON domain |
| <token-code>, DOUBLE | |
| SR | - VARIABLE, INTEGER |
| SI | - VARIABLE, REAL |
| SD | - VARIABLE, DOUBLE |
| ER | - EXTERNAL FUNCTION, REAL |
| EI | - EXTERNAL FUNCTION, INTEGER |
| ED | - EXTERNAL FUNCTION, DOUBLE |
| R | - EXTERNAL PART |
| F | - Standart Norma function |
<token-code>::=<integer>
3.2Таблица констант (Constant table)
Таблицы констант (Constant table) предназначена для хранения констант Норма-программы и информации об этих константах. Константы и информация об их свойствах заносятся в таблицу констант на этапе лексичексого анализа.
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.
Глобальная инициализация
Есть еще Норма-раздел?
Локальная инициализация
Лексический анализ Норма-раздела
Анализ графа информационных зависимостей
Генерация внутреннего представления Fortran DVM программы
Генерация кода Fortran DVM программы
Анализ файлов ввода данных
Завершение компиляции Норма-раздела
Завершение компиляции
Генерация листинга














