Я делаю стимуляцию удаления мертвого кода очень простым способом.
Для этого моя идея состоит в том, чтобы
Шаг 1: Считать входную C-программу построчно и сохранить ее в дважды связанном списке или массиве. (Так как удаление и вставка будет проще, чем в файловых операциях).
Сомнение: мой подход правильный?Если это так, как минимизировать обход связанного списка каждый раз.
Шаг 2: Анализ считанных строк будет выполняться параллельно, и создаются таблицы для поддержки переменныхимена и их подробности, функции и их вызовы и т. д.,
Шаг 3: Будет выполнен поиск для каждой записи в таблице переменных, и переменные будут заменены на ее значения того временизначение (как оно есть).(Например,
i=0;
if(i==3) will be replaced by if(0==3).
Но в такой ситуации, как ..
get(a);
i=a;
if(i){}
здесь, 'i' не будет заменено, поскольку оно зависит от другой переменной.'a' не будет заменено, так как это зависит от ввода пользователя.
Сомнение: если ввод пользователя, если (5 * 5 + 6) {print hello;}, это, безусловно, будет ненужной проверкой,Как я могу решить это выражение, чтобы упростить код как {print hello;}
Шаг 4: Будут искать строки if (0), while (0) и т. Д., И используя стек, блок действия удаляется.if (0) {// это будет удалено * /}
Шаг 5: (Например) функция foo () {/ ** /} ... if (0) foo();..., После того, как все мертвые коды удалены, запись foo () в таблице функций проверяется, чтобы получить no.times, на которые она ссылается в коде.Если оно равно 0, эту функцию необходимо удалить с помощью того же метода стека.
Шаг 6: В остальных функциях строки под операторами возврата (если они есть) удаляются, кроме'}'.Это удаление выполняется до конца функции.Конец функции определяется с помощью стека.
Шаг 7: И я буду считать, что мой код без мертвых точек уже готов.Сохраните связанный список или массив в выходном файле.
Мои вопросы .. 1.Что будет иметь смысл моя идея?или это будет осуществимо?Как я могу улучшить этот алгоритм?
2. Пока я пытаюсь реализовать эту идею, мне нужно больше разбираться со строковыми манипуляциями, а не удалять мертвые коды.Есть ли способ уменьшить манипуляции со строками в этом алгоритме.