Страница 1 из 1

Анализ кода

СообщениеДобавлено: 26.12.2007 18:45:08
VaSys
Здравствуйте, инетересует вопрос: какой анализ и какие методы
анализа исходного кода реализованы в компиляторе FPC?
Ведутся ли в этом направлении какие-либо работы?

Спасибо!

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

СообщениеДобавлено: 22.06.2008 20:33:40
ev
неужели никто не в курсе? ;)

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

СообщениеДобавлено: 22.06.2008 22:06:47
Sergei I. Gorelkin
Хех... В целях решения боевой задачи компилятор осуществляет синтаксический и семантический анализ исходного кода, причем до последнего бита.
Более развернутый ответ дать не могу в силу врожденного недостатка телепатических способностей...

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

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

вот "какие либо работы" - это загадка
возможно имелось ввиду работы по оптимизации?

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

СообщениеДобавлено: 22.06.2008 23:28:58
Sergei I. Gorelkin
ev писал(а):- как именно работает синтаксический анализатор (какая именно рекурсия используется)

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

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

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

Что касается оптимизаций, то большая их часть (peephole, regvars, DFA, CSE) делается на уровне готового ассемблерного кода, что дает разницу в качестве кода на разных процессорах. На уровне промежуточного кода делается только вычисление константных выражений, хотя есть и экспериментальные реализации DFA и CSE.

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

СообщениеДобавлено: 21.01.2015 09:20:34
iN0k
а может имелось в виду: "статический анализ кода", по типу PVS-Studio, CppCat.