Линейное генетическое программирование: алгоритм удаления интрона - PullRequest
0 голосов
/ 16 ноября 2018
  1. Пусть set R_eff всегда содержит все регистры, которые действуют в текущей позиции программы. R_eff: = {r | r - выходной регистр}. Начните с последней инструкции программы и двигайтесь назад.
  2. Отметить следующую предыдущую операцию в программе: регистр назначения r_dest element-of R_eff. Если такая инструкция не найдена, перейдите к 5.
  3. . Если операция следует непосредственно за ветвью или последовательностью ветвей, отметьте и эти инструкции. В противном случае удалите r_dest от R_eff.
  4. Вставить каждый регистр источника (операнда) r_op вновь отмеченных инструкции в R_eff, если они еще не содержатся. Перейти к 2.
  5. Stop. Все неотмеченные инструкции являются интронами.

Это алгоритм, который я дал, я знаю, что вопрос задавался ранее, но я не совсем уверен в некоторых вещах (и оказывается, что не так много онлайн-материалов, помогающих с этим материалом). В основном мне нужно знать, что мы сравниваем. У вас есть программа, а внутри программы есть инструкции в виде:

r0 = r1 + r2

Просто в качестве примера. Итак, я понимаю, что мы начинаем с последней инструкции и возвращаемся назад для наших сравнений. Но на шаге 2, когда говорится, что нужно двигаться назад, мы возвращаемся к непосредственно предыдущим инструкциям или же мы возвращаемся назад к инструкции с общим регистром? Для примера, который я привел, буду ли я искать в обратном направлении, пока не найду другой r0, или я пойду назад, пока не найду r1 или r2?

Я довольно смущен этой простой вещью и был бы признателен за любую помощь, которую я могу получить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...