KvanTTT / RecursiveFunctionDetector

Test task for Senior Developer to Static Analyzer Group (2015)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Потенциально рекурсивные функции

Дан входной файл на языке C:

int h(int x);
int d(int x);
int e(int x);
int g(int x);

int f(int x)
{
    if (x % 2)
    {
        return 1;
    }

    return g(x * 3);
}

int g(int x)
{
    if (e(x))
    {
        int s = 0;
        for (int i = 0; i < x; i++)
        {
            s += h(i * e(i));
        }

        return s;
    }
    else
    {
        return x + 1;
    }
}

int e(int x)
{
    return x ? d(x / 2) : 0;
}

int d(int x)
{
    return x * x;
}

int h(int x)
{
    return f(e(d(x)));
}

Напишите программу на C#, которая анализирует этот пример и определяет, какие из функций являются потенциально рекурсивными.

Правильный ответ: f, g, h – рекурсивные, d, e – нет.

Можно (и нужно) использовать сторонние компоненты помогающие в решении задачи. Вы можете взять парсер С-кода, например ANTLR, clang (libclang.dll, входит в Windows Installer http://llvm.org/builds/) и использовать ее через interop, или воспользоваться готовой оберткой (https://github.com/mjsabby/ClangSharp) или любой другой.

Код должен быть написан в ООП-стиле, быть хорошо читаемым, легко расширяемым. Если Вы используете библиотеки с C-like API, скройте это API за своими классами.

Если у Вас возникнут какие-либо вопросы по ходу написания задания – смело задавайте. На выполнение задания отводится неделя.

About

Test task for Senior Developer to Static Analyzer Group (2015)


Languages

Language:C# 87.2%Language:C 12.8%