Хорошие API для анализаторов области

Я работаю над некоторыми инструментами генерации кода, и большая сложность связана с проведением анализа области видимости. Я часто чувствую, что хочу знать такие вещи, как

  1. Каковы свободные переменные функции или блока?
  2. Где объявлен этот символ?
  3. Что маскирует это объявление?
  4. Возможно ли такое использование символа перед инициализацией?
  5. Эта переменная потенциально экранирует?

и я думаю, что пришло время переосмыслить мою область видимости.

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

С какими инструментами, подобными этим, люди знакомы, и что они делали правильно и неправильно в своих API?

1 ответ

Решение

Я немного удивлен этим вопросом, так как я выполнил тонны генерации кода, и редко возникает вопрос об области видимости (за исключением случая с желанием генерировать уникальные имена).

Чтобы ответить на ваши вопросы, приведенные в качестве примера, требуется серьезный анализ программы, выходящий далеко за рамки объема. Анализ побега сам по себе нетривиален. Использование перед инициализацией может быть тривиальным или нетривиальным в зависимости от целевого языка.

По моему опыту, API-интерфейсы для анализа программ сложны для разработки и часто зависят от языка. Если вы ориентируетесь на язык низкого уровня, вы можете извлечь что-то полезное из API Machine SUIF.

На вашем месте я бы соблазнил украсть чужие рамки для анализа программ. Джордж Некула и его ученики создали CIL, который, по-видимому, является текущим стандартом для анализа кода на языке Си. Группа Лори Хендрена создала несколько хороших инструментов для анализа Java.

Если бы мне приходилось работать самостоятельно, я бы меньше беспокоился об API и больше о действительно хорошем представлении деревьев абстрактного синтаксиса.

В очень ограниченной области анализа потоков данных (которая включает вопрос о неинициализированных переменных), Жоао Диас и я адаптировали несколько хороших работ Сорина Лернера, Дэвида Гроува и Крейга Чамберса. Только наши предварительные результаты публикуются.

Наконец, если вы хотите сгенерировать код на нескольких языках, это полная червь. Я сделал это плохо несколько раз. Если вы создаете что-то, что вам нравится, опубликуйте это!

Другие вопросы по тегам