I return to you once again with continued improvements and changes to the Calc programming language compiler. In the intervening months (almost a year!) since I completed the last series I have been busy with many other projects. However, I keep coming back to the compiler and in the last few months have been busy tinkering away.
I have taken a different route in this next iteration of the series and you could consider it a partial rewrite of the previous one. There are several knobbly sections in series two that I wasn't particularly happy with and in this third series I hope to address most, if not all, of them.
I also intend to make this third, and any potential future series, much shorter and narrower in scope. Please feel free to ask me questions as I will be glossing over some of the finer points.
So what has changed?
Well, the language itself changed almost not at all. The only additional language feature is the addition of the boolean type. So, nothing too exciting there.
What did change was the entire back-end.
In series two, the code generator operated directly on the AST. It proved to be cumbersome and error prone. The compiler now uses an intermediate representation for the code generator that reduced the LOC from 544 to 255. Less than half the LOC while producing better, more easily optimized code.
That does not even include the removal of the runtime library!
Yes, the entire runtime has been removed which included many hundreds of lines of code being deleted. The Calc language went on a diet!
The net gain is a much better compiler and I want to share those efforts with you all.
Series 1 - Novice Compiler Design
Series 2 - Apprentice Compiler Design