6 ms·
Let's Build a Compiler (1995)
- pronoiac 7y agoOn mobile, to get to the other chapters, there's a hamburger menu at the top that's hidden until you tap near the top.
- system_panic 7y agoThanks!
- blattimwind 7y agoNo mention of Pratt parsing? :)
- peterhj 7y agoPratt parsing is great. Quoting from the original paper itself: > One may wonder why such an "obviously" utopian approach has not been generally adopted already. I suspect the root cause ... is our universal preoccupation with BNF grammars and their various offspring...
- marktangotango 7y agoThis needs attribution to Jack Crenshaw the author.
- markjenkinswpg 7y agohttps://compilers.iecc.com/crenshaw/ https://compilers.iecc.com/crenshaw/
- svat 7y ago[Edit: this comment is obsolete; author fixed both issues] The attribution is missing: As the README on the repository (https://github.com/xmonader/letsbuildacompiler-pretty https://github.com/xmonader/letsbuildacompiler-pretty) explains, this is a prettified version of the plain-text “Let's Build a Compiler” by Jack Crenshaw, published in serial form during 1988 to 1995 (https://compilers.iecc.com/crenshaw/ https://compilers.iecc.com/crenshaw/). This prettified version is nice; if nothing else the syntax highlighting in the code samples makes them easier to read. But comparing for example the first installment at the original (https://compilers.iecc.com/crenshaw/tutor1.txt https://compilers.iecc.com/crenshaw/tutor1.txt) and here (https://xmonader.github.io/letsbuildacompiler-pretty/tutor01_introduction.html https://xmonader.github.io/letsbuildacompiler-pretty/tutor01...), looks like the title, author name, copyright notice, and date have all been removed. Hopefully the maintainer of this repo finds a way to add them back. (Also, Part 9 seems to be empty? Reporting on the repo.) Edit: Reported on the repo and the author fixed promptly. Thanks!
- dang 7y agoThe interesting previous discussions appear to be: 2013: https://news.ycombinator.com/item?id=6641117 https://news.ycombinator.com/item?id=6641117 2010: https://news.ycombinator.com/item?id=1727004 https://news.ycombinator.com/item?id=1727004 2007: https://news.ycombinator.com/item?id=63004 https://news.ycombinator.com/item?id=63004
- smhenderson 7y agoHow reasonable is it to dive any to this and treat the Pascal as pseudocode so as to implement it in another language? Or would one be better off just using something like freepascal.org?
- garganzol 7y agoI was taught compiler construction by the books like that. In my opinion they do more damage than good. A proposed adhoc parser without an intermediate representation is a sure way to create an unnecessary mess in reader's head. Somewhat understandable given the technical limitations of those days, but still the authors could do a better job there. Dragon Book (Compilers: Principles, Techniques, and Tools) and "Compiler Construction" by Niklaus Wirth are much more sensible choices.
- lboasso 7y agoFor the excellent introductory book "Compiler Construction" by Niklaus Wirth, you could find compilers for the implementation language at http://oberon07.com/compilers.xhtml http://oberon07.com/compilers.xhtml. If you have a JVM installed, you could use oberonc[0]. I have a local branch where I test that each release of the compiler can compile and run the examples in that book. [0] https://github.com/lboasso/oberonc https://github.com/lboasso/oberonc
- AlexeyBrin 7y agoCan one use oberonc to compile the Oberon 0 language presented in http://www.ethoberon.ethz.ch/WirthPubl/CBEAll.pdf http://www.ethoberon.ethz.ch/WirthPubl/CBEAll.pdf ? I guess what I'm asking is if Oberon-0 is a subset of Oberon-7, which oberonc seems to implement. Do you think it is possible to implement Oberon-0 in itself ?
- lboasso 7y agoWith oberonc you can compile the source code at http://www-oldurls.inf.ethz.ch/personal/wirth/CompilerConstruction/index.html http://www-oldurls.inf.ethz.ch/personal/wirth/CompilerConstr... with minor changes to the I/O library calls. I can push the changes in a repo if you are interested. Oberon-0 is too limited to easily bootstrap itself. I wrote oberonc first in Java and then I rewrote it in Oberon-07 for the final bootstrap step. Oberon-0 is a toy subset of the full Oberon-07 language.