From 7d611248cfae67571925eaf3975ce0b1257f892d Mon Sep 17 00:00:00 2001 From: Alexander_KS Date: Fri, 22 Sep 2023 18:14:04 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=205.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BD=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D1=85=D0=BE=D0=B4=D0=B0=20=D0=B2=20SAPFOR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...-%D0%BF%D1%80%D0%BE%D1%85%D0%BE%D0%B4%D0%B0-%D0%B2-SAPFOR.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/5.-%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE-%D0%BF%D1%80%D0%BE%D1%85%D0%BE%D0%B4%D0%B0-%D0%B2-SAPFOR.md b/5.-%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE-%D0%BF%D1%80%D0%BE%D1%85%D0%BE%D0%B4%D0%B0-%D0%B2-SAPFOR.md index 6761726..1b5baa6 100644 --- a/5.-%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE-%D0%BF%D1%80%D0%BE%D1%85%D0%BE%D0%B4%D0%B0-%D0%B2-SAPFOR.md +++ b/5.-%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE-%D0%BF%D1%80%D0%BE%D1%85%D0%BE%D0%B4%D0%B0-%D0%B2-SAPFOR.md @@ -1,7 +1,7 @@ В данном разделе описан алгоритм создания прохода (фазы анализа). [По данной ссылке](https://docs.google.com/document/d/1QQfpq7Xic5PDhFt5ESUUIcl_7jn1TFIGY5zznsvmbis/) можно изучить текущее описание некоторых идей и алгоритмов SAPFOR. Для добавления нового прохода, необходимо его объявить, добавить данному проходу зависимости и описать его в основном цикле запуска проходов. - Для объявления прохода, необходимо добавить в файл `Sapfor.h` в конец **enum passes** (и до **EMPTY_PASS**) название данного прохода, а также добавить строку его описания в `const char *passNames`. -- Зависимости проходов содержатся в файле `PassManager.h`. Зависимости задаются в функции `InitPassesDependencies()`. Если проход не имеет зависимости от других проходов, то данный пункт можно пропустить. Например, `Pass(А) <= Pass(B)` означает, что проход B зависит от прохода A, то есть проход B автоматически запустит проход А перед своим выполнением. `List <= Pass` означает, что проход зависит от всех проходов из списка. `Pass (А) <= List` означает, что каждый проход из списка зависит от прохода А. `List (A) << List (B)` (TODO: поменять на <=) означает, что каждый проход из списка B зависит от всех проходов из списка А. +- Зависимости проходов содержатся в файле `PassManager.h`. Зависимости задаются в функции `InitPassesDependencies()`. Если проход не имеет зависимости от других проходов, то данный пункт можно пропустить. Например, `Pass(А) <= Pass(B)` означает, что проход B зависит от прохода A, то есть проход B автоматически запустит проход А перед своим выполнением. `List <= Pass` означает, что проход зависит от всех проходов из списка. `Pass (А) <= List` означает, что каждый проход из списка зависит от прохода А. `List (A) <= List (B)` означает, что каждый проход из списка B зависит от всех проходов из списка А. - Далее необходимо создать функцию для прохода и вставить его в функции запуска проходов. Для запуска проходов используются функции **runPass** и **runAnalysis**. - Первая функция позволяет описать сложное поведение прохода, которое отличается от **default** запуска в **switch**. Пример такого прохода - FILL_PAR_REGIONS_LINES: после выполнения данного прохода необходимо выполнить какие-то дополнительные действия. - Вторая функция запускает анализ в два этапа. Проход не обязательно может иметь два этапа обработки, может присутствовать только первый, либо только второй.