Дипломная работа: Автоматическое распараллеливание программ для распределенных систем. Статическое построение расширенного графа управления

- SgProgHedrStmt – заголовок программы (Fortran);

- SgProcHedrStmt – заголовок подпрограммы (Fortran);

- SgBlockDataStmt – оператор блока данных (Fortran).

Операторы объявления:

- SgVarDeclStmt – оператор объявления переменной;

- SgParameterStmt – оператор объявления констант (Fortran);

- SgImplicitStmt – оператор Implicit (Fortran).

Управляющие:

- SgForStmt – цикл FOR;

- SgIfStmt - операторветвления If-Then-Else (Fortran), if (C);

- SgLogIfStmt - оператор логического If (Fortran);

- SgArithIfStmt - оператор арифметического If (Fortran).

Исполняемые и другие:

- SgAssignStmt - оператор присваивания (Fortran);

- SgCallStmt - оператор Call (Fortran);

- SgContinueStmt - оператор Continue;

- SgControlEndStmt - обозначает конец одного из основных блоков (напр. ENDIF);

- SgReturnStmt - оператор Return;

- SgGotoStmt - оператор Goto.

Большинство операторов программы содержат некоторые выражения. Класс SgExpression является базовым для выражений всех видов:

int variant() - тэг вида выражения;

SgExpression *lhs() - левое поддерево выражения;

SgExpression *rhs() - правое поддерево выражения;

В отличие от иерархии классов, порождаемой SgStatement, не вводится подкласс для каждой операции, находящейся в корне дерева разбора выражения. Основные бинарные операции, такие, как стандартные арифметические, идентифицируются только тэгом. Листья дерева могут иметь собственные классы, например:

- SgValueExp - представляет значение одного из базовых типов;

- SgVarRefExp - ссылка на переменную или на массив;

- SgArrayRefExp - ссылка на элемент массива;

- SgFunctionCallExp - вызов функции.

Разработчиками Sage++ предлагается следующий алгоритм разбора исходной программы. Производится последовательный перебор файлов, входящих в проект. Начиная с указателя SgStatement* SgFile:: firstStatement() осуществляется обход операторов текущего файла. При этом анализируется оператор, входящие в него выражения, тело(а) – для операторов, содержащих таковое (например, управляющей группы). Переход на следующий оператор реализуется кодом cur_stmt=cur_stmt->lastNodeOfStmt()->lexNext() для операторов, не являющихся листом дерева разбора, и cur_stmt=cur_stmt->lexNext() для остальных (где cur_stmt – указатель на текущий оператор). Использование рекурсивного подхода к просмотру дерева представляется достаточно естественным.

2.2 Внутреннее представление программы высокого уровня

К-во Просмотров: 206
Бесплатно скачать Дипломная работа: Автоматическое распараллеливание программ для распределенных систем. Статическое построение расширенного графа управления