При поиске хорошего способа определить правила для декомпилятора, нуждайтесь в совете

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

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

Я надеюсь, что кто-то может указать на меня в корректном направлении, спасибо.

6
задан Zifre 28 July 2010 в 18:10
поделиться