[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