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

66 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Compilers
localeTitle: Составители
---
## Составители
### программирование
В основе всего, компьютер с 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 и преобразует ее в двоичный код.
Все компиляторы должны выполнить эти действия. Большинство современных компиляторов также выполняют другие действия, такие как проверка ошибок типа и оптимизация полученного скомпилированного кода.
#### Дополнительная информация:
[Мэтт Адеаньяни «Более внимательное введение в программирование»](https://medium.freecodecamp.org/a-gentler-introduction-to-programming-707453a79ee8) охватывает компиляторы и интерпретаторы, а также другие базовые концепции программирования.