fdvmDDr (1158419)
Текст из файла
35
Институт прикладной математики им. М.В.Келдыша
Российская Академия наук
Компилятор Fortran DVM
Детальный проект
Март, 2000
Оглавление
1 Назначение компилятора 3
2 Формат командной строки 3
3 Общая схема компилятора 4
3.1 Синтаксический анализ 4
3.2 Преобразование дерева разбора 5
3.3 Генерация кода на языке Фортран 77 5
3.4 Генерация кода на языке HPF 5
4 Основные структуры данных 6
4.1 Дерево разбора 6
4.2 Таблица символов и Таблица типов 6
5 Детальное описание модулей компилятора 8
5.1 Трансляция конструкций языка Fortran DVM (модуль dvm.cpp) 8
5.1.1 Создание распределенного массива и его перераспределение 14
5.1.2 Ссылки на распределенные массивы 18
5.1.3 Параллельный цикл 20
5.2 Трансляция операторов ввода-вывода (модуль io.cpp) 24
5.3 Реструктурирование дерева разбора (модуль stmt.cpp) 26
5.4 Трансляция конструкций языка HPF-DVM (модуль hpf.cpp) 31
5.4.1 Обработка ссылок на распределенные массивы в HPF-DVM 31
5.4.2 Цикл INDEPENDENT 32
В отчете приводится подробное описание реализации компилятора Fortran-DVM (FDVM). Рассматриваются структуры данных, схема управления и функции модулей компилятора.
1Назначение компилятора
Язык Fortran DVM (FDVM) является расширением языка Фортран 77 для параллельного программирования. Расширение оформлено в виде специальных комментариев (директив DVM), которые аннотируют последовательную программу на языке Фортран 77.
На вход компилятору подается исходный код на языке Fortran DVM или HPF‑DVM. Компилятор производит следующие выходные программы.
-
Параллельная программа на языке Фортран 77 с вызовами функций системы поддержки параллельного выполнения (Lib-DVM).
-
Последовательная программа на языке Фортран 77 с вызовами функций сбора информации для отладки и оценки производительности
-
Программа на языке HPF.
2Формат командной строки
Формат команды вызова компилятора FDVM представлен ниже:
dvm fdv [ <options> ] <file-name>
Исходная программа размещается во входном файле <file-name>.fdv или <file-name>.hpf.
<options> - это указания о режимах компиляции:
| -o file | Поместить выходную программу в файл file; |
| -s | Генерировать последовательную выходную программу; |
| -p | Генерировать параллельную выходную программу; |
| -hpf1 | Генерировать выходную программу на языке HPF1; |
| -hpf2 | Генерировать выходную программу на языке HPF2; |
| -v | Выдать сообщения о вызовах фаз компилятора, а также номер версии компилятора; |
| -w | Выдать все предупреждающие сообщения; |
| -Idir | Добавить директорию dir в список директорий, где осуществляется поиск include файлов. |
| -bindk | Задает соответствие типов данных в компиляторах с языков Фортран и Си, k – целое, обозначающее номер таблицы соответствия типов; |
| -dleveld[:fr-list] | Генерировать дополнительный код для отладки программы; leveld указывает уровень функциональной отладки, fr-list – список номеров фрагментов; |
| -elevele[:fr-list] | Генерировать дополнительный код для анализа производительности программы; . levele указывает уровень отладки производительности. |
3Общая схема компилятора
В качестве инструментального средства разработки компилятора FDVM используется система Sage ++.
Sage ++ представляет собой объектно-ориентированную инструментальную систему для построения систем преобразования программ на языках Фортран, Си и Си++. Она является открытой библиотекой классов Си++, которая предоставляет пользователю набор синтаксических анализаторов, дерево разбора, таблицы символов и типов. Ядро системы составляет набор функций для реструктурирования дерева разбора и механизм (называемый unparsing) для генерации нового кода по реструктурированному внутреннему представлению.
Компилятор FDVM состоит из четырех компонент:
-
Синтаксический анализ
-
Преобразование дерева разбора
-
Генерация кода на языке Фортран 77
-
Генерация кода на языке HPF
3.1Синтаксический анализ
Синтаксический анализатор системы Sage++ для Фортрана, который базируется на GNU Bison версии языка YACC, расширен средствами обработки директив DVM. Он состоит из следующих модулей:
| ftn.gram | - грамматические правила для языка Фортран |
| fdvm.gram | - грамматические правила для директив Fortran DVM |
| lexfdvm.c | - лексический анализатор |
| tag | - список тэгов-признаков |
| tokens | - список лексем |
| gram1.tab.c | - синтаксический анализатор, генерируемый системой Bison |
| cftn.c | - главная программа (вызывает синтаксический анализатор, |
| init.c | - подпрограммы инициализации |
| stat.c | - подпрограммы создания внутреннего представления |
| errors.c | - печать сообщений об ошибках |
| sym.c | - подпрограммы работы с Таблицей символов |
| types.c | - подпрограммы обработки описаний переменных |
| lists.c | - подпрограммы построения списков |
| misc.c | - вспомогательные подпрограммы |
| hash.c | - подпрограммы работы с Кэш-таблицей |
Синтаксический анализатор читает исходный файл, проверяет синтаксис, строит дерево разбора и записывает его внутреннее представление в файл с расширением .dep.
3.2Преобразование дерева разбора
Вторая фаза компиляции включает анализ и реструктурирование внутреннего представления FDVM-программы. Директивы DVM заменяются последовательностями вызовов функций системы поддержки Lib‑DVM. Затем новый код генерируется по модифицированному внутреннему представлению.
Программа «back-end» написана на языке C++ с использованием библиотеки классов Sage++.
Библиотека Sage++ организуется как иерархия классов, которая обеспечивает доступ к дереву разбора, Таблице символов и Таблице типов каждого файла из прикладного проекта. В библиотеке имеется пять основных семейств классов: Project и Files, Statements, Expressions, Symbols, Types.
Project и Files соответствуют исходным файлам. Statements соответствуют операторам языка Фортран и директивам DVM. Expressions – это выражения, содержащиеся в операторах. Symbols являются объявленными пользователем идентификаторами. Types представляют типы, которые ассоциируются с каждым идентификатором и выражением.
Описания всех классов содержатся в файле libSage++.h.
Семь модулей составляют транслятор:
| dvm.cpp | - анализ и трансляция конструкций языка FDVM |
| funcall.cpp | - генерация вызовов функций библиотеки Lib-DVM |
| stmt.cpp | - реструктурирование дерева разбора |
| io.cpp | - трансляция операторов ввода-вывода |
| debug.cpp | - поддержка отладочного режима |
| help.cpp | - вспомогательные подпрограммы |
| hpf.cpp | - трансляция конструкций языка HPF-DVM |
3.3Генерация кода на языке Фортран 77
Генерация нового кода на языке Фортран 77 по модифицированному внутреннему представлению осуществляется посредством функции unparse( ) класса File из библиотеки классов Sage++.
3.4Генерация кода на языке HPF
Когда исходная FDVM-программа конвертируется в программу на языке HPF, следующие подпрограммы и таблицы используются:
| unparse_hpf.c | - подпрограммы генерации кода на языке HPF |
| low_hpf.c | - подпрограммы нижнего уровня, используемые для генерации |
| unparse.hpf | - таблица, управляющая генерацией кода на языке HPF2 |
| unparse1.hpf | - таблица, управляющая генерацией кода на языке HPF1 |
4Основные структуры данных
Описания структур данных внутреннего представления программы содержатся в файлах:
-
bif.h (вершина дерева разбора для оператора)
-
ll.h (вершина дерева разбора для выражения)
-
symb.h (элементы Таблицы символов и Таблицы типов)
4.1Дерево разбора
На рис.4.1 представлена структура вершины дерева разбора для оператора, а на рис.4.2 - для выражения. Рис.4.4 демонстрирует фрагмент дерева разбора.
4.2Таблица символов и Таблица типов
Элементы Таблицы символов и Таблицы типов показаны на рис.4.3.
| признак |
| идентификационный номер |
| индекс |
| глобальный номер строки |
| локальный номер строки |
| спецификатор |
| указатель на метку |
| указатель на следующий оператор |
| указатель на имя файла |
| указатель на родителя по управлению |
| список свойств |
| список вершин(список процедур) |
| указатель на комментарий |
| указатель на Таблицу символов |
| L-дерево выражения |
| R-дерево выражения |
| запасное поле для выражения |
| do-метка (используется для do) |
| список-по-управлению-1 |
| список-по-управлению-2 (для if) |
| запасное поле |
| запасное поле |
| запасное поле |
Рис. 4.1. Вершина дерева разбора, представляющая оператор (bif node).
| признак |
| идентификационный номер |
| указатель на следующую вершину |
| указатель на элемент Таблицы типов |
| значение костанты |
| указатель на элемент Таблицы символов |
| L-дерево выражения |
| R-дерево выражения |
Рис. 4.2. Вершина дерева разбора, представляющая выражение (ll -node).
| признак | признак | |
| идентификационный номер | идентификационный номер | |
| длина | идентификатор | |
| запасное поле | ссылка на Хэш-таблицу | |
| запасное поле | специальный список | |
| список использование-определение | специальный список | |
| ссылка на базовый тип(для массива) | специальный список | |
| границы измерений(для массива) | ссылка на следующий символ | |
| ссылка на Таблицу типов | ||
| область действия | ||
| список использование-определение | ||
| атрибуты (маска) | ||
| флаг do-переменной | ||
| используется синт.анализатором | ||
| ссылка на значение(для констант) | ||
| специальные поля |
Рис.4.3. Элементы Таблицы типов и Таблицы символов
Дерево разбора
| следующий | родитель по управлению | ||||||||||||
| | . . . | • | • | . . . | • | • | |||||||
| | ... | • | • | • | + | ... | • | • | • | |||||||
| | ||||||||||||||||
| | ... | • | • | • | VAR_REF | ... | • | • | • | |||||||
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.
VAR_REF
VAR_REF














