Вопрос

Если бы я хотел изменить или добавить свои собственные расширения в C и добавить их в компилятор GCC C, что бы мне нужно было сделать?Я не хочу предлагать изменения в языке, я хочу знать, как на самом деле работает компилятор C.

Я просмотрел исходный код GCC, и похоже, что Objective-C реализован как простой синтаксический анализатор, который генерирует код, который ссылается на модифицированную библиотеку времени выполнения, а затем для всего, что основано на C, он использует обычный компилятор C.Я не изучал это внимательно, так что, вероятно, я не на правильном пути.

Скажем, например, я хотел добавить свое собственное ключевое слово в Objective-C, просто для развлечения.Я хочу добавить что-то, что кажется простым в реализации, например, может быть @assert.Все, чего я хочу, это для @assert для вызова функции, которую я добавлю в среду выполнения Objective-C:

objc_runtime_assert (__FILE__, __LINE__, expression, "string version of expression");

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

Исходный код, который я просмотрел, последовательно ссылается на "деревья", и существует множество макросов, которые выполняют действия или получают информацию из этих деревьев.

Есть ли какая-либо документация, которая подробно объясняет подобные вещи?

Это было полезно?

Решение

Деревья , скорее всего, абстрактные синтаксические деревья (AST) и любая книга по компиляции научит этому. Книга о драконе это очень классический вариант, на занятиях, которые я посещал, мы использовали The essence of compilers автор: Робин Хантер, ISBN 0-13-727835-7.Вы также должны быть в состоянии найти тонны подборка материалов из разных колледжей и университетов с некоторыми хорошими поисковыми терминами (разработка компилятора, AST, лексический анализ, синтаксический анализ сверху вниз, синтаксический анализ снизу вверх, семантический анализ, LL, LR).

Другие советы

Это зависит от того, знакомы ли вы уже с компиляторами в целом или нет.Если нет, начните с Книга Дракона.Если да, то у GCC уже есть для вас некоторая документация:

  1. Руководство по внутренним функциям GCC
  2. Тот Самый Вики - сайт GCC, в частности, Приступая к работе страница содержит информацию о многих вещах, включая деревья GCC.

Это зависит от того, как вы это делаете, но вы могли бы захотеть поискать реализацию GCC языка программирования D. - НОД.Это незавершенная работа, но это полноценный язык, реализованный в рамках GCC framework без (пока) особого признания со стороны команды GCC, если оно вообще есть.Опыт НОД может оказаться полезным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top