Ok I did this before. This is actually quite simple and straightforward, so without sugar coating it, you should have three main parts:
Introduction and Conclusion: The reader should be able to go only through your introduction and conclusion chapters, and see what is going on. I'm hoping you know what chapter numbers they are by now!
Background and Related Work: After introduction you should have a solid background and related work chapter(s). Don't introduce something that you don't use and don't hide some background read here.
Ok ok, the last two parts you didn't ask for but I wrote it to be a complete reference for others. Ok now to your questions:
'I'm a qualified PhD' chapters!: Now two to four chapters should be explicitly cover your own work. So:
3.1 Separate theory from practice: I don't want to see some theory stuff and then suddenly a pipeline to a compiler. It has many advantages in terms of defending it and then correcting it later on if necessary. Also the examiners will see that you are well rounded computer scientist; therefore you know your practice as well as theory and vice versa. So basically, you don't want to have an impression on examiners that you just injected theory/practice because you are weak in practice/theory.
3.2 Unify Your approaches: Can you find a common ground between all the techniques you used? For example, you could have a chapter on code generation techniques, and then group all your work into one chapter. The pitfall here is to repeat the same approach over and over for different models.
3.3 Solid Evaluation: You need a solid evaluation, now that you used different techniques try to honestly evaluate them. Also, more importantly try to write a comparison between all of the techniques used and highlight each individual positive and/or negative outcomes.
3.4 Appendices: Moreover don't just drop boilerplate code in your own chapters, try to use number of appendix for different parts of your code.