[HN Gopher] Let's write a compiler, part 1: Introduction, select...
___________________________________________________________________
Let's write a compiler, part 1: Introduction, selecting a language,
and planning
Author : ingve
Score : 65 points
Date : 2021-08-14 18:53 UTC (4 hours ago)
(HTM) web link (briancallahan.net)
(TXT) w3m dump (briancallahan.net)
| waynesonfire wrote:
| part 1 isn't parser / lexer???? nice job. "On the next episode: A
| lexer" oh, it is.
| turminal wrote:
| Well, it's the first thing in the pipeline, so why not?
| lisper wrote:
| > Outputting to C is a well-recognized compilation strategy.
|
| That's true, but it's not a good choice for _teaching_ how to
| write a compiler because the C compiler does too much of the
| heavy lifting for you while at the same time imposing unnecessary
| constraints. Compiling to C allows you to entirely side-step the
| question of how to compile arithmetic and function calls, which
| is like 90% of the battle. Also, if you want your source language
| to, for example, be able to do non-local transfers of control or
| have automatic memory management then you will have to do extra
| work that you would not have to do if you were compiling to
| assembler or an abstract RTL.
|
| Finally, compiling to C gives the student the impression that
| there is something holy and immutable about C, that C is The Way
| and the Truth and the Light and no man comes to the lambda nature
| but through C. It's not true, and, to paraphrase Dykstra, the
| psychological damage caused by indoctrinating people into this
| worldview is hard to undo.
| lebuffon wrote:
| Everybody knows that CPU stands for: 'C'
| Processing Unit
|
| ;-)
| lebuffon wrote:
| Krenshaw's classic version is available in C.
|
| https://github.com/lotabout/Let-s-build-a-compiler
| reeealloc wrote:
| Wrote a compiler with .NET last year. Used F# for the
| Lexing/Parsing to an AST and C# for LLVM IR code gen. Interop was
| so easy, but the docs for the C# LLVM bindings were not so great,
| so it's a little incomplete. I only got it to effectively
| interpret, never actually executed a whole outputted object file.
| tester756 wrote:
| When I've been messing with this stuff, then I decided to
| manually write LLVM IR instead of using C#'s LLVM Bindings
| risk wrote:
| The author of this is part of the binary grand prix and made my
| favorite submission to the contest. Very cool content thanks for
| posting it.
___________________________________________________________________
(page generated 2021-08-14 23:00 UTC)