Анализ кода

Проектирование и разработка идеального средства программирования.

Модератор: Модераторы

Анализ кода

Сообщение VaSys » 26.12.2007 18:45:08

Здравствуйте, инетересует вопрос: какой анализ и какие методы
анализа исходного кода реализованы в компиляторе FPC?
Ведутся ли в этом направлении какие-либо работы?

Спасибо!
VaSys
незнакомец
 
Сообщения: 2
Зарегистрирован: 26.12.2007 18:33:36

Re: Анализ кода

Сообщение ev » 22.06.2008 20:33:40

неужели никто не в курсе? ;)
ev
долгожитель
 
Сообщения: 1763
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Re: Анализ кода

Сообщение Sergei I. Gorelkin » 22.06.2008 22:06:47

Хех... В целях решения боевой задачи компилятор осуществляет синтаксический и семантический анализ исходного кода, причем до последнего бита.
Более развернутый ответ дать не могу в силу врожденного недостатка телепатических способностей...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1395
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Анализ кода

Сообщение ev » 22.06.2008 22:22:56

попробую себя в роли телепата
думаю что могло иметься в виду примерно следующее:
- как именно работает синтаксический анализатор (какая именно рекурсия используется)
- какая используется таблица символов/имен
- какой используется промежуточный код

вот "какие либо работы" - это загадка
возможно имелось ввиду работы по оптимизации?
ev
долгожитель
 
Сообщения: 1763
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Re: Анализ кода

Сообщение Sergei I. Gorelkin » 22.06.2008 23:28:58

ev писал(а):- как именно работает синтаксический анализатор (какая именно рекурсия используется)

Язык Паскаль, в моем понимании, является контекстно-независимым, что дает отсутствие рекурсии и быструю однопроходную компиляцию. Как формально называется то, что получилось в FPC в результате добавленной поддержки макро-определений режима MacPas и дженериков, сказать затрудняюсь.
ev писал(а):- какая используется таблица символов/имен

Она не одна. В каждом модуле есть глобальная таблица символов (определенных в interface) и локальная (определенных в implementation). Кроме того, каждый класс имеет свою таблицу имен. Впрочем, могу ошибаться, в тонкости не слишком вникал.
ev писал(а):- какой используется промежуточный код

Исходный код преобразуется в дерево "элементарных операций", которое, вместе с таблицами символов, сериализуется в .ppu файл. Формат этого файла (по сути, набор сохраняемых свойств) менялся уже примерно 90 раз. Кроме того, ассемблерный код модуля сохраняется в объектный файл COFF-формата (.o)

Что касается оптимизаций, то большая их часть (peephole, regvars, DFA, CSE) делается на уровне готового ассемблерного кода, что дает разницу в качестве кода на разных процессорах. На уровне промежуточного кода делается только вычисление константных выражений, хотя есть и экспериментальные реализации DFA и CSE.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1395
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Анализ кода

Сообщение iN0k » 21.01.2015 09:20:34

а может имелось в виду: "статический анализ кода", по типу PVS-Studio, CppCat.
iN0k
постоялец
 
Сообщения: 146
Зарегистрирован: 18.07.2012 14:09:50


Вернуться в Компилятор / язык программирования

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

Рейтинг@Mail.ru