Как сам C размещает себя? - PullRequest
1 голос
/ 05 марта 2011

Кто-нибудь знает полную цепочку операций от .c исходного кода до, наконец, исполняемого файла .exe?

Я скачал источник gcc и обнаружил, что его c-parser.y также написано на c:

extdef:
    fndef
    | datadef
    | ASM_KEYWORD '(' expr ')' ';'
        { STRIP_NOPS ($3);
          if ((TREE_CODE ($3) == ADDR_EXPR
               && TREE_CODE (TREE_OPERAND ($3, 0)) == STRING_CST)
              || TREE_CODE ($3) == STRING_CST)
            assemble_asm ($3);
          else
            error ("argument of `asm' is not a constant string"); }
    | extension extdef
        { pedantic = $<itype>1; }
    ;

Значит, кто-нибудь знает полную историю самостоятельного хостинга c?

UPDATE

Я знаю, как написаны некоторые компиляторы для сценариев, большинство из которых зависит от компиляторов c.

Итак, я сейчас спрашиваю, как работает компилятор c.

Ответы [ 2 ]

6 голосов
/ 05 марта 2011

GCC имеет многоэтапный процесс, но начинается с работающего компилятора C (который может быть или не быть другой версией GCC).

  1. Используйте другой компилятор C для создания первой версии GCC - компилятор GNU C.
    • Это дает вам рабочую копию новой версии GCC (при условии, что старый компилятор исправен).
    • Однако это не то же самое, что компилятор, который (новая версия) GCC создаст, за исключением неправдоподобной случайности.
  2. Используйте первую версию GCC для создания второй версии GCC.
    • Вторая версия GCC - это (очевидно) код, который GCC будет генерировать. Это эталонная версия.
    • Однако пока еще не показано, что это стабильно.
  3. Используйте вторую версию GCC для создания третьей версии GCC.
    • Вторая версия GCC должна выдавать тот же вывод для третьей версии GCC.
  4. Убедитесь, что вторая и третья версии GCC совпадают.
    • На некоторых платформах объектные файлы содержат время компиляции; ясно, что время компиляции должно учитывать разницу во времени компиляции.
    • Если предположить, что вторая и третья версии «одинаковы», то мы знаем, что GCC может создавать себя из собственного исходного кода.
    • Теперь безопасно использовать новую версию GCC для создания различных библиотек времени выполнения и других компиляторов в семействе.
  5. Создайте другие части коллекции компиляторов GNU с помощью нового компилятора Си.
    • Большинство людей не ограничивают коллекцию компиляторов GNU только компилятором C.
    • Как правило, они также создают компиляторы C ++ и Java (и обычно Objective C).
    • И вам нужна также поддержка стандартной библиотеки C ++.
    • Обычно компилятор C использует библиотеку C, предоставляемую платформой.
1 голос
/ 05 марта 2011

Вы удивлены тем, что компилятор C написан на C?Какой другой язык использовал бы эксперт C при написании своего компилятора?

Кажущаяся проблема курицы и яйца возникала только один раз, давным-давно, когда вообще не было доступных компиляторов ,Затем кто-то должен был написать один в ассемблере (после того, как кто-то еще написал первый ассемблер в машинном коде: -)

...