Как я могу добавить язык на основе C в GCC - PullRequest
3 голосов
/ 01 мая 2009

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

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

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 01 мая 2009

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

  1. Руководство по внутренним компонентам GCC
  2. В GCC Wiki , в частности, на странице Getting Started содержится информация о многих вещах, включая деревья GCC.
2 голосов
/ 01 мая 2009

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

1 голос
/ 01 мая 2009

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

...