Как компиляторы C/C++ работают?

Я просто хочу привести другой способ сделать это, используя .NET String.Format :

$name = "Slim Shady"
Write-Host ([string]::Format("My name is {0}", $name))

33
задан fury.slay 24 January 2017 в 11:18
поделиться

10 ответов

Начните с книги дракона .... (уделите больше внимания оптимизации кода и генерации кода)

Продолжайте писать игрушечный компилятор для образовательного языка программирования, такого как Decaf или Cool .., вы можете использовать генераторы парсеров (lex и yacc) для своего внешнего интерфейса (чтобы упростить жизнь и сосредоточиться на большем количестве импов) ....

Затем прочтите книгу о внутренностях gcc вместе с просмотром исходного кода gcc.

28
ответ дан 27 November 2019 в 18:01
поделиться

Если вам нужна версия мертвого дерева, попробуйте The Art of Compiler Design: Theory and Practice .

9
ответ дан 27 November 2019 в 18:01
поделиться

Compiler Text are good, but they are a bit heavy for teaching yourself. Jack Crenshaw has a "Book" that was a series of articles you can download and read call "Lets Build a Compiler." It follows a "Learn By Doing" methodology that is great if you didn't get anything out of taking formal classes on the subject, or it's been WAY too many years since took it (that's my case). It holds your hand and leads you through writting a compiler instead of smacking you around with Lambda Calculus and deep theoretical issues that only academia cares about. It was a good way to stir up those brain cells that only had a fuzzy memory of writting something on the Vax (YEAH, that right a VAX!) many many moons ago at school. It's written very conversationally and easy to just sit down and read, unlike most text books which require several pots of coffee just to get past the first chapter. Once you have a basis for understanding then more traditional text such as the Dragon book are great references to expand on your understanding. (And personal I like the Dead Tree versions, I printed out Jack's, it's much easier to read in a comfortable position than on a laptop. And the Ebook readers are too expensive for something that doesn't actually feel like you're reading a real book yet.)

What some might call a "downside" is that it's written in Pascal, but I thought that just made me think about it more than if someone had given me a working C program to start with. Appart from that it was written with the 68000 in mind, which is only being used in embedded systems at this point time. Again for me this wasn't a problem, I knew 68000 asm and 68000 asm is easier to read than some other asm.

11
ответ дан 27 November 2019 в 18:01
поделиться

Как заметил Пит Эдди, учебник Джека Креншоу отлично подходит для новичков. Но если вы хотите увидеть , как работает настоящий производственный компилятор C - тот, который был разработан блестящими инженерами, а не создавался путем кидания кода в стену, пока что-то не застряло, - получите себя копия книги Фрейзера и Хэнсона Перенастраиваемый компилятор C: разработка и реализация , которая содержит исходный код очень чистого lcc компилятора. Пояснения по дизайну и реализации смешаны с кодом. Это не первая книга для новичка, но она окупится за внимательное изучение, и вы можете получить использованный экземпляр за 35 долларов.

Более длинную аннотацию о lcc см. Compile C Faster в Linux .

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

PS Извините, что вас обокрали в Uni.

4
ответ дан 27 November 2019 в 18:01
поделиться

В зависимости от того, что именно вы хотите знать, вам следует взглянуть на паттерны каналов и фильтров, потому что, насколько мне известно, это (или что-то подобное) используется во многих компиляторах в последнем лет.

Когда мои знания о компиляторе не слишком устарели, он работает следующим образом:

Разобрать исходный код в символическое представление

Очистить символьное представление, выполнить некоторую нормализацию

Оптимизация символического дерева на основе определенных правил

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

Конечно, также должны быть разрешены зависимости и т. Д.

И, конечно же, просмотр исходного кода gcc или javac может помочь в получении более подробного понимания.

2
ответ дан 27 November 2019 в 18:01
поделиться

Также может быть полезно взять и прочитать исходный код компилятору. Я сомневаюсь, что GCC - лучший выбор, так как он обременен полной совместимостью с более чем 20-летним развитием языка. Но я также уверен, что чтение его источника, руководствуясь одним из внутренних справочных руководств, было бы образовательным.

Я бы серьезно подумал о том, чтобы посмотреть на исходный текст языка сценариев, который внутренне компилируется в байт-код для виртуальная машина. Под это описание подходят несколько языков, но я бы начал с Lua . Язык небольшой, а виртуальная машина - новая.

1
ответ дан 27 November 2019 в 18:01
поделиться

взгляните на Калейдоскоп . Вы можете написать свой собственный компилятор всего за несколько дней с помощью LLVM.

0
ответ дан 27 November 2019 в 18:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: