Здравствуйте, инетересует вопрос: какой анализ и какие методы
анализа исходного кода реализованы в компиляторе FPC?
Ведутся ли в этом направлении какие-либо работы?
Спасибо!
Анализ кода
Модератор: Модераторы
неужели никто не в курсе? 
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Хех... В целях решения боевой задачи компилятор осуществляет синтаксический и семантический анализ исходного кода, причем до последнего бита.
Более развернутый ответ дать не могу в силу врожденного недостатка телепатических способностей...
Более развернутый ответ дать не могу в силу врожденного недостатка телепатических способностей...
попробую себя в роли телепата
думаю что могло иметься в виду примерно следующее:
- как именно работает синтаксический анализатор (какая именно рекурсия используется)
- какая используется таблица символов/имен
- какой используется промежуточный код
вот "какие либо работы" - это загадка
возможно имелось ввиду работы по оптимизации?
думаю что могло иметься в виду примерно следующее:
- как именно работает синтаксический анализатор (какая именно рекурсия используется)
- какая используется таблица символов/имен
- какой используется промежуточный код
вот "какие либо работы" - это загадка
возможно имелось ввиду работы по оптимизации?
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
ev писал(а):- как именно работает синтаксический анализатор (какая именно рекурсия используется)
Язык Паскаль, в моем понимании, является контекстно-независимым, что дает отсутствие рекурсии и быструю однопроходную компиляцию. Как формально называется то, что получилось в FPC в результате добавленной поддержки макро-определений режима MacPas и дженериков, сказать затрудняюсь.
ev писал(а):- какая используется таблица символов/имен
Она не одна. В каждом модуле есть глобальная таблица символов (определенных в interface) и локальная (определенных в implementation). Кроме того, каждый класс имеет свою таблицу имен. Впрочем, могу ошибаться, в тонкости не слишком вникал.
ev писал(а):- какой используется промежуточный код
Исходный код преобразуется в дерево "элементарных операций", которое, вместе с таблицами символов, сериализуется в .ppu файл. Формат этого файла (по сути, набор сохраняемых свойств) менялся уже примерно 90 раз. Кроме того, ассемблерный код модуля сохраняется в объектный файл COFF-формата (.o)
Что касается оптимизаций, то большая их часть (peephole, regvars, DFA, CSE) делается на уровне готового ассемблерного кода, что дает разницу в качестве кода на разных процессорах. На уровне промежуточного кода делается только вычисление константных выражений, хотя есть и экспериментальные реализации DFA и CSE.
а может имелось в виду: "статический анализ кода", по типу PVS-Studio, CppCat.
