Русскоязычное программирование

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Многопроходная компиляция

Сообщений 1 страница 4 из 4

1

https://ru.wikipedia.org/wiki/Многопроходный_компилятор
https://en.wikipedia.org/wiki/Multi-pass_compiler

Многопроходные компиляторы имеют модульную структуру и, следовательно, их легче сделать аппаратно-независимыми, потому что генерация кода осуществляется отдельно в несколько этапов и адаптация меньшей части компилятора другому оборудованию (платформе).


Это просто словосочетание, которе в разных ситуациях будет иметь разные смыслы.

даже ассемблер не может быть однопроходным, потому что ему надо вычислать адреса для переходов вперёд по ходу выполнения программы, а значит на первом проходе он генерирует команды, а на втором - адреса переходов.
Хотяя, можно конечно извернуться и оставить второй проход линковщику.

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

Отредактировано Лис (2018-04-09 06:26:18)

0

2

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

Второй проход уже будет не по мнемоникам, а по внутренним таблицам. Можно считать это однопроходным вариантом. И чистый один проход в таком случае тоже возможен, если на каждом шаге отслеживать таблицу переходов. Поэтому Ваше утверждение не соответствует действительности. Многопроходность нужна для простоты организации системы компиляции. Практически нет случаев, когда нельзя сделать все в один проход. Просто это усложняет алгоритм.

Но в общем и целом - любой компилятор получается многопроходым

Ну конечно, сейчас наговорите тут. PowerBasic однопроходной компилятор. По-крайней мере по заверениям разработчиков. Си изначально проектировался под однопроходные компиляторы.
ALGOL 68-R изначально имел однопроходной компилятор.
NELIAC (компилятор Алгол-58) - однопроходной компилятор.
XPL (разновидность PL/I) - однопроходной компилятор.
GW-Basic - однопроходной компилятор.

Отредактировано utkin (2018-04-09 07:23:57)

0

3

У вас - проход это по всей видимости "операции чтения исходного файла". Но в случае "многопроходного" компилятора файл тоже не читается много раз. Вон на схеме википедии - синтаксический анализ, семантический анализ, кодогенерация считаются за разные проходы. Однако это всё структуры в памяти и исходный файл при этом не перечитывается.

И вообще, мы с магнитофонных лент уже не читаем, у SSD - равномерный доступ, у memory-mapped-файлов тоже...

0

4

У вас - проход это по всей видимости "операции чтения исходного файла".

Исходного кода или его структуры.
Ответ по-прежнему: однопроходные компиляторы:
а) теоретически возможны для большинства языков программирования, ну разве что могут быть сложности для какой-нибудь конструкции препроцессора С++. Но повторюсь в большинстве случаев возможны.
б) однопроходные компиляторы есть, существуют и примеры Вам представлены. Причины почему они там однопроходные (типа того же чтения с магнитной ленты) не имеют никакого значения.

0