Начал читать книгу Сэджвик Р. Фундаментальные алгоритмы на С++.Алгоритмы на графах. Сразу возник вопрос о применении графов для анализа кода. И собственно вопрос по теме: как представить в виде графа, для примера, логику работы функции memchr ? Анализ её ассемблерного кода не нужен, так как из описания можно заключить что она сравнивает содержимое буфера побайтно с входным символом. Нужна модель. Что будет узлами что рёбрами, входом выходом и т.д. ? Вобщем чувствую голова взорвётся. Код (Text): char *memchr(buf,c,cnt); char *buf; Указатель на буфер int c; Копируемый символ unsigned cnt; Количество символов Описание. Функция memchr находит первые cnt байтов из buf с целью об- наружения первого появления символа c. Поиск продолжается до тех пор, пока не будет найден указанный символ или не будут проверены все cnt байтов. Возвращаемое значение. Функция memchr возвращает указатель на расположение символа c в buf. Если символ c не будет обнаружен в первых cnt байтах buf, возвращается NULL.
В голову приходит пока что представить работу функции в виде обычной блоксхемы с ромбиками и прямоугольниками. Только вот думаю что будет узлом а что ветвью - либо состояние переменной либо операции инкремента-декремента-сравнения. И цикл присутствует. Есть хоть какое-нибудь чтиво по такой теме ?
Charlief На кой фиг это вообще надо? Для анализа нет смысла детализировать вплоть до каждой функции. Достаточно построить граф data/control-flow, чтобы на графе была продемонстрирована алгоритмическая сложность. Нужность более детального расписывания на графах/схемах очень сомнительна.