[ssa] [Итоги недели]
Vladislav Ivanishin
vlad at ispras.ru
Mon Apr 16 13:18:41 MSK 2018
Добрый день, Максим,
Максим Иванов <bipsqwake42 at gmail.com> writes:
> Так, что у нас есть на текущий момент?
>
> В репозитории есть код на плюсах, который (вероятнее всего), выполняет
> проверку эквивалентности двух сса форм, одна из которых заведомо верная,
> следующим образом: проверка не заведомл верной на то, что каждое имя в ней
> определено один раз, проверка эквивалентности программ(количество блоков,
> количество инструкций в каждом блоке, сами инструкции, переменна, в которую
> уходит результат, тип её, переменные/константы - аргументы) и проверка на
> соответствие переменных с разными именама. Затем проверка на
> эквивалентность сса форм, а именно проверка совпадения кол-ва и качества
> фи-функций. По сути, если правильно впихнуть это в ежуж, то должно
> заработать.
Есть небольшое замечание по этому патчу.
> int main (int argc, char** argv) {
> FILE* originalFile = fopen(argv[1], "r");
> FILE* compareFile = fopen(argv[2], "r");
> + cout << argc << endl;
> + if (argc >= 4 && !strcmp("-v", argv[3])) {
> + DEBUG = true;
> + } else {
> + DEBUG = false;
> + }
> parse(originalFile, "<original>", readdat, readOriginal);
> parse(compareFile, "<to compare>", readdat, readToCompare);
> - if (eqSsa(original, compare)) {
> - cout << "equals" << endl;
> + map<string, string> origToComp;
> + map<string, string> compToOrig;
> + if (progEq(original, compare, compToOrig, origToComp)) {
> + cout << "prog equals" << endl;
> + } else {
> + cout << "prog not equals " << endl << error << endl;
> + return 0;
Лучше возвращать 0 в случае, если SSA формы совпали. Это будет
вписываться в стандартный интерфейс программ в UNIX: возвращаемый код 0
соответствует успеху. Утилита diff следует этой конвенции.
Кроме того, в случае успеха лучше ничего не выводить на стандартный
поток вывода.
> + }
> + if (eqSsa(original, compare, compToOrig)) {
> + cout << "ssa equals" << endl;
> return 1;
Аналогично.
> } else {
> - cout << "not equals " << error << endl;
> + cout << "ssa not equals" << endl;
> + return 0;
Аналогично.
> }
> freeall();
> }
> Ну и в ежуж это всё пихать - та ещё головная боль
Не уверен, что мы раскочегарим ejudge на сервере с git'ом (поскольку
осталось мало времени) -- а изначальный план был таков, если что -- но
если подойдёте к этапу, когда уже будете готовы "пихать в ежуж",
сигнализируйте.
--
Влад
More information about the ssa
mailing list