Системы счисления

Интересные факты

Трансляция и компоновка

Генерация кода. Из промежуточного представления порождается код на целевом языке.

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

Синтаксический (грамматический) анализ. Последовательность лексем преобразуется в дерево разбора.

Лексический анализ. На этом этапе последовательность символов исходного файла преобразуется в последовательность лексем.

Структура компилятора

Процесс компиляции состоит из следующих этапов:

Семантический анализ. Дерево разбора обрабатывается с целью установления его семантики (смысла) — например, привязка идентификаторов к их декларациям, типам, проверка совместимости, определение типов выражений и т. д. Результат обычно называется «промежуточным представлением/кодом», и может быть дополненным деревом разбора, новым деревом, абстрактным набором команд или чем-то ещё, удобным для дальнейшей обработки.

В конкретных реализациях компиляторов эти этапы могут быть раздельны или совмещены в том или ином виде.

Важной исторической особенностью компилятора, отражённой в его названии (англ. compile — собирать вместе, составлять), являлось то, что он мог производить и компоновку (то есть содержал две части — транслятор и компоновщик). Это связано с тем, что раздельная компиляция и компоновка как отдельная стадия сборки выделились значительно позже появления компиляторов. В связи с этим, вместо термина «компилятор» иногда используют термин «транслятор» как его синоним: либо в старой литературе, либо когда хотят подчеркнуть его способность переводить программу в машинный код (и наоборот, используют термин «компилятор» для подчёркивания способности собирать из многих файлов один).

На заре развития компьютеров первые компиляторы (трансляторы) называли «программирующими программами» (так как в тот момент программой считался только машинный код, а «программирующая программа» была способна из человеческого текста сделать машинный код, то есть запрограммировать ЭВМ).

Уна́рная систе́ма счисле́ния (единичная (разная) система счисления) — не-позиционная (не-поместная), положительная суммарная целочисленная система счисления с основанием равным 1.

Может рассматриваться и как вырожденная позиционная (поместная) положительная целочисленная система счисления с основанием равным 1.

В качестве единственной «цифры» используется зарубка или чёрточка (|).

Особенностью такой системы является то, что если приписать к числу одну «цифру» (единицу), то число увеличивается лишь на эту единицу.
(Для сравнения: если в обычной десятичной системе счисления к натуральному числу приписать справа 1, число увеличивается сразу в 10 раз — и плюс 1).

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

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

0:

5: