diff options
| Commit | 9d13ee0b6ab191c3394962a0b0edaaa629921085 (patch) | |
|---|---|---|
| Author | 2023-04-17 09:56:25 +0300 | |
| Committer | 2023-04-17 09:56:25 +0300 | |
| Files | 9878ed57ddac630ca3626e971328a3e019fbd234 | |
| syndamia.com-9d13ee0b6ab191c3394962a0b0edaaa629921085.tar syndamia.com-9d13ee0b6ab191c3394962a0b0edaaa629921085.tar.gz syndamia.com-9d13ee0b6ab191c3394962a0b0edaaa629921085.zip | ||
| Parent | f53f28c22e58844a90cdf00700cec325cfb7be53 (diff) | |
[blog/seoc] Added an appendix
1 files changed, 9 insertions, 4 deletions
| -rw-r--r-- | src/blog/sane-explanation-of-compilers/part-1.md | 13 |
diff --git a/src/blog/sane-explanation-of-compilers/part-1.md b/src/blog/sane-explanation-of-compilers/part-1.md index e847bc3..3fa79c8 100644 --- a/src/blog/sane-explanation-of-compilers/part-1.md +++ b/src/blog/sane-explanation-of-compilers/part-1.md @@ -20,15 +20,12 @@ 1. [lex](#lex) 2. [yacc](#yacc) 3. [Using them together](#using-them-together) +3. [Appendinx](#appendix) Recently I signed up for a small university course about compilers. As I found out, most materials on the topic are either so surface level you barely learn anything, or so specific you need to already know the subject. My goal is to try and fill that void, explaning everything in a detailed way that is understandable for beginners. -Originally I planned to put everything in one blogpost, but only this main component took me 2 weeks (slightly inconsistently) to write. -Additionally, while doing research, I found out we actually skiped over a lot of important topics. -Future parts will be linked right below the title at the very top, but it will probably be quite a while until I write them. - ## Preface Processors work with numbers, every action (instruction) a processor can do is defined by numbers. @@ -884,6 +881,14 @@ however rather than definitions you have settings, and the rules are in a comple Let's now make our own "proper" front-end. The lexer will need to return (emit) it's token to the +## Appendix + +Originally I planned to put everything in one blogpost, but writing the front-end (this part) alone took me 2 and a half weeks of (inconsistent, I was suddenly hit with multiple exams and homeworks in uni) writing. +Additionally, while doing research, I found out the course actually skipped over a lot of important topics, which I'll first need to research. +Future parts will be linked right below the title at the very top, but it will probably be quite a while until I write them. + +I want to thank [Dimitar Tagarev](https://github.com/dtagarev) for his review and feedback on drafts of this post. + [^how-did-we-get-here]: Though it's obvious, I would like to point out that modern compilers are most often written in languages that are themselves compiled. You might ask yourself "where did the first compiler come from?" The answer is simple: it was written with "numbers", with direct instructions to the processor, from the time when computers were simple enough that *all* programming was done with CPU instructions. [^terminals-and-nonterminals]: Formally, we call the rule "names" nonterminals, the idea being that all normal characters, that could appear in our string, are called terminals, since they would terminate replacement and string generation. For the purposes of this post, I won't use the formal names, with the hope that using less terminology will increase understandability. |