Я немного удивлен этим вопросом, поскольку я выполнил тонны генерации кода, и редко возникает вопрос об области видимости (за исключением случая, когда возникает желание генерировать уникальные имена ).
Чтобы ответить на ваши примеры вопросов требуется серьезный программный анализ, выходящий далеко за рамки . Анализ побега сам по себе нетривиален. Использование перед инициализацией может быть тривиальным или нетривиальным в зависимости от целевого языка.
По моему опыту, API для анализа программ сложны для разработки и часто зависят от языка . Если вы ориентируетесь на язык низкого уровня, вы можете извлечь что-то полезное из API Machine SUIF .
На вашем месте я бы соблазнился украсть чужие рамки для анализа программ . Джордж Некула и его ученики создали CIL , который, кажется, является текущим стандартом для анализа кода на языке Си. Группа Лори Хендрена создала несколько хороших инструментов для анализа Java.
Если бы мне пришлось свернуть свои собственные , я бы меньше беспокоился об API и больше об действительно хорошем представлении деревьев абстрактного синтаксиса.
В очень ограниченной области анализа потоков данных (которая включает вопрос о неинициализированной переменной), Джо и Диас и я адаптировали некоторые замечательные работы Сорина Лернера, Дэвида Гроува и Крейга Чамберса . Опубликованы только наши предварительные результаты .
Наконец, если вы хотите генерировать код на нескольких языках , это полная банка червей . Я сделал это плохо несколько раз. Если вы создаете что-то, что вам нравится, опубликуйте это!