Перевод с Python на CIL (C Intermediate Language) - PullRequest
3 голосов
/ 24 апреля 2011

Недавно я работал над статическим анализом исходного кода Python. В нашей группе уже есть статический анализатор, написанный на Ocaml для CIL (C Intermediate Language). Мы хотим повторно использовать этот анализатор, поэтому наш идеальный подход - перевести Python на CIL.

В настоящее время я использую встроенный модуль Python ast для разбора Python на Python AST. А потом я перевожу Python AST, напечатанный ast.dump, на C AST. С учетом C AST to CIL API и статического анализатора все написано на Ocaml. Я выбираю Ocamllex & Ocamlyacc для разбора Python AST на C AST. Однако есть некоторые большие проблемы.

Трудно идентифицировать представление AST, напечатанное ast.dump. Это делает мой парсер непростым для реализации. С другой стороны, я не могу использовать Ocaml для доступа к внутренней структуре Python. Даже я мог бы, структура данных отличается от Ocaml.

Интересно, выберу ли я сначала неправильный подход к переводу кода Python в C AST? Существуют ли другие существующие инструменты или подходы, которые могут соответствовать моим требованиям?

Если я что-то упустил, просто укажите, что это мне очень поможет. Спасибо.

1 Ответ

3 голосов
/ 24 апреля 2011

Не думаю, что это сработает очень хорошо.CIL - это, по сути, только язык C.Чтобы ваш трюк сработал, вы должны полностью перевести Python на C ..., но языки имеют очень разные концепции.Как вы будете моделировать объекты Python?Продолжения?Динамическая нагрузка?Время выполнения набирает?Бесконечная точность арифметики?Я думаю, что ваши проблемы не АСТ;скорее они являются концептуальными.

Если бы вы могли перевести на CIL, у вас теперь возникла новая проблема.Анализаторы легче создавать, когда конструкции, которые им нужно найти, легко обнаруживаются.Как только вы переведете свое продолжение на C, рассуждать о взаимодействиях с продолжениями будет сложно, потому что их будет нелегко узнать.

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

...