Compiler Construction: The Art of Niklaus Wirth (2000) [pdf]
<i>Generate good code from the beginning; don&#x27;t generate bad code and optimize later</i><p>Unfortunately this is something that no compiler I know of does, as evidenced by their -O0 being far worse than even what a naive Asm programmer (human) could do, and it&#x27;s one of the things that irks me about compilers. Dataflow-directed, &quot;work backwards&quot; techniques might be the solution to this, but once again I don&#x27;t know of any compilers that do it.<p>On the other hand, his points about using recursive-descent parsing seem to agree with the majority of widely-used compilers. However, this is factually incorrect:<p><i>I even think that the availability of powerful
bottom-up parser generators such as Yacc are responsible for the cryptic syntax of C.</i><p>Dennis Ritchie&#x27;s first C compiler used recursive descent. Yacc itself was written in C, so it could not have come before. You can see the sources yourself here: <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=5748672" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=5748672</a>