Что происходит, когда я компилирую? - PullRequest
10 голосов
/ 14 сентября 2009

Интересно, что компилируется, что происходит, когда вы компилируете? Я имею в виду, да, вы нажимаете «compile» или вводите текст в консоли, но что он делает в «фоне»?

Ответы [ 5 ]

30 голосов
/ 14 сентября 2009
  1. Во-первых, компилятор "лекс" исходный код. Это означает, что он преобразует источник в последовательность «токенов». Токены - это последовательности букв, цифр и символов, которые имеют значение для компилятора.

  2. Далее компилятор "разбирает" последовательность токенов с первого шага. Это означает, что компилятор проверяет, чтобы источник соответствовал правилам ( грамматика ) языка программирования.

  3. Затем компилятор выполняет синтаксический анализ , чтобы создать представление источника для определения семантического значения источника. На этом этапе компилятор создает синтаксическое дерево .

  4. Наконец, компилятор сгенерирует вывод , который фиксирует семантическое значение источника в целевом представлении (будь то машинный код, промежуточный язык, такой как CIL от Microsoft или другой язык программирования).

Краткие сведения см. Википедия . Подробные сведения см. В книге драконов (эту книгу должен изучать каждый изучающий информатику).

10 голосов
/ 14 сентября 2009

См. это

По сути, магические эльфы и феи превращают читаемый человеком код в машинный код.

3 голосов
/ 14 сентября 2009

или это .

The Dragon Book, оригинальный источник для построения компиляторов.

3 голосов
/ 14 сентября 2009

Очень краткий обзор - компилятор анализирует ваш код на наличие ошибок и затем преобразует его в байт или машинный код.

Для лучшего обзора я прочитал бы статью в Википедии о компиляторах:

http://en.wikipedia.org/wiki/Compiler

1 голос
/ 14 сентября 2009

Компиляция переводит исходный код в машинный код. Обычно компилятор (или интерпретатор) генерирует промежуточный код, иногда называемый байтовым кодом, который выполняется на виртуальной машине (так компилируется Java). Байт-код преобразуется виртуальной машиной в машинно-специфичный код, который работает на конкретной архитектуре, на которую вы ориентируетесь. Весь этот процесс можно считать «компиляцией»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...