Я работаю над очень простым декомпилятором для архитектуры MIPS, и по мере продвижения я должен определить множество правил для анализа кода, например, «если этот код операции равен lui , а следующий код операции - addiu затем возвращает var = value"или", если этот код операции bne и он ссылается на адрес перед текущим - создайте определение loop в дереве синтаксического анализа " , Проблема в том, что существует множество таких правил, и я не могу найти хороший способ их определить. Я пробовал писать отдельные функции для каждого правила, определяя классы базовой ООП-логики и расширяя их для создания правил, даже пробовал регулярные выражения в дизассемблированном коде (к моему удивлению, это работает лучше, чем ожидалось), но независимо от того, что я пытался мой код вскоре стал большим и трудным для чтения, независимо от того, насколько хорошо я пытаюсь документировать и структурировать его.
Это подводит меня к выводу, что я пытаюсь решить эту задачу, используя неправильные инструменты (не говоря уже о том, что слишком глуп для такой сложной задачи :)), но у меня нет реальной идеи, что мне следует попробовать. В настоящее время у меня есть две непроверенные идеи: одна использует какой-то DSL (у меня нет абсолютно никакого опыта в этом, так что я могу быть совершенно неправым), а другая пишет какие-то бинарные регулярные выражения для сопоставления кода операции.
Я надеюсь, что кто-то может указать мне правильное направление, спасибо.