freeCodeCamp/guide/russian/computer-science/compilers/index.md

7.1 KiB
Raw Blame History

title localeTitle
Compilers Составители

Составители

программирование

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

Люди взаимодействуют с компьютерами с помощью программ . Программа представляет собой просто последовательность кодов операций, предоставляемых компьютеру, а также данные, необходимые для выполнения кодов операций.

Например,

ADD 10, 20  // ADD is the Opcode 
            // and 10, 20 are the two operands(data) 
            // needed for the ADD instruction to be executed successfully 

Люди разрабатывают программы для решения сложных проблем. Если посмотреть, как работают простые коды операций, если мы попытаемся разработать программы, используя только коды операций, это будет очень громоздко и трудно отлаживать. Для решения этой проблемы были разработаны языки высокого уровня, такие как C / C ++, Python, Java, Javascript и т. Д.

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

[ЧЕЛОВЕЧНИКИ] -> [Языковые программы на высоком уровне] -> [Переводчик] -> [Язык машины] -> [Компьютер]

Компилятор - это тип программы-переводчика, которая переводит языки высокого уровня в двоичный код, который составляет всего 1 с и 0. Когда вы запускаете исходный код, компилятор сначала переводит весь код, а затем выдает двоичный код. Затем компьютер берет двоичный код и запускает его.

Если в исходном коде имеются ошибки, компилятор обнаруживает и помещает их. Это останавливает процесс компиляции. После исправления всех ошибок компилятор преобразует код и генерирует исполняемую программу.

Части компилятора

Большинство компиляторов разбиваются на три основных этапа: анализ, преобразование и генерация кода

  1. Анализ делает исходный код и превращает его в более абстрактное представление кода.
  2. Трансформация принимает это абстрактное представление и манипулирует тем, что хочет компилятор.
  3. Генерация кода принимает преобразованное представление кода и превращает его в новый код.

анализ

Анализ обычно разбивается на две фазы: лексический анализ и синтаксический анализ .

Лексический анализ берет необработанный код и разделяет его на эти предметы, называемые токенами, под названием токенизатор (или лексер).

Tokens are an array of tiny little objects that describe an isolated piece of the syntax. 
 They could be numbers, labels, punctuation, operators, etc. 

Синтаксический анализ принимает маркеры и переформатирует их в представление, описывающее каждую часть синтаксиса и их отношение друг к другу. Это называется промежуточным представлением или абстрактным деревом синтаксиса.

An Abstract Syntax Tree, or AST for short, is a deeply nested object. 
 It represents code in a way that is both easy to work with and tells us a lot of information. 

преобразование

Следующим типом этапа для компилятора является преобразование. Опять же, это просто берет АСТ с последнего шага и вносит в него изменения. Он может управлять АСТ на одном языке или переводить его на совершенно новый язык.

Генерация кода

Последней фазой компилятора является генерация кода. Иногда компиляторы будут делать то, что накладывается на трансформацию, но по большей части генерация кода просто берет AST и преобразует ее в двоичный код.

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

Дополнительная информация:

Мэтт Адеаньяни «Более внимательное введение в программирование» охватывает компиляторы и интерпретаторы, а также другие базовые концепции программирования.