Механизмы анализа кода, как правило, требуют достаточно больших сложностей, помимо создания AST.
Чтобы выполнить любой серьезный анализ кода, вам нужно знать значение идентификаторов в коде и где / как они определены («таблицы символов»), и вам часто нужно знать, как информация перемещается по программе (контроль и данные). анализ потока). Вам нужен механизм для поддержки всего этого, а затем вам нужно привязать этот механизм к вашему собственному языку.
Я думаю о восхождении на Эверест в качестве аналогии. Получение ASTs походит на получение в 10 000-футовом базовом лагере. Любой ком может сделать это, просто поднявшись по склону, используя базовые технологии (походные ботинки). Восхождение на последние 17 000 футов требует совершенно другой технологии, преданности делу и плана, и большинство людей, пройдя первые 10000 футов, просто не готовы к остальной части поездки. (У меня есть некоторый опыт здесь, проверьте мою биографию).
Это все довольно подробные темы, и ваше отсутствие CS-опыта сделает ваш путь довольно трудным. (Однако все мы начинаем где-то, так что это действительно амбиции). Книга Дракона - отличный ресурс, который поможет вам понять, что делает этот механизм и зачем он вам нужен; существует много других хороших книг по компиляторам, которые, как правило, также будут полезны Но вы должны быть готовы к серьезному чтению.
Один из способов подняться по кривой - использовать инструмент, в котором большая часть этого механизма уже разработана и внедрена для вас группой компьютерных специалистов, имеющих опыт создания таких инструментов. Тогда ваша проблема значительно уменьшается: вам нужно только научиться использовать то, что они предоставили, а не пытаться выяснить, что вам нужно (большинство людей никогда не проходят этап AST) и внедрить все необходимые механизмы поддержки.
ANTLR (уже упоминавшийся, сделанный довольно хорошим профессором CS) является своего рода тем, что он предоставляет возможности синтаксического анализа, позволяет вам определить, как создаются AST, и как процедурно пролезать через получившиеся AST. Но это не дает многого другого, что вам нужно для вашей задачи.
Наш инструментарий реинжиниринга программного обеспечения DMS предоставляет все средства, которые я упомянул в первом абзаце, а затем и некоторые. Одно из первых отличий, которое вы заметите при работе с DMS, заключается в том, что вам нужно предоставить только грамматику; он будет создавать AST без дополнительной помощи от вас.
Вы можете получить представление о том, на что похожа работа с DMS, на этом примере DMS, примененном к алгебре и исчислению средней школы . В частности, он показывает, как легко определить простую грамматику для алгебры / исчисления, а затем можно манипулировать «программами» на этом языке. Это приложение, которое «преобразовывает» код, а не анализирует его, но основы те же.
«Настоящее» приложение DMS, которое проанализировало ваш проприетарный язык, будет значительно сложнее.