Хорошие API для анализаторов области - PullRequest
0 голосов
/ 20 декабря 2008

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

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

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

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

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

1 Ответ

2 голосов
/ 20 декабря 2008

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

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

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

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

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

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

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

...