Mercurial > lcfOS
view python/doc/compiler.rst @ 273:6b3a874edd6e
Added some docs
author | Windel Bouwman |
---|---|
date | Mon, 02 Sep 2013 17:40:21 +0200 |
parents | |
children |
line wrap: on
line source
Compiler ======== This chapter describes the design of the compiler. Overview -------- The compiler consists a frontend, mid-end and back-end. The frontend deals with source file parsing and semantics checking. The mid-end performs optimizations. This is optional. The back-end generates machine code. The front-end produces intermediate code. This is a simple representation of the source. The back-end can accept this kind of representation. This way the compiler is portable and a front end can be constructed without having to do the rest. .. graphviz:: digraph x { rankdir="LR" 1 [label="c3 source file"] 10 [label="c3 front end" ] 11 [label="language X front end" ] 20 [label="mid end" ] 30 [label="back end for X86" ] 31 [label="back end for ARM" ] 40 [label="object file"] 1 -> 10 10 -> 20 [label="IR-code"] 11 -> 20 [label="IR-code"] 20 -> 30 [label="IR-code"] 20 -> 31 [label="IR-code"] 30 -> 40 } IR-code ------- The IR-code is implemented in the ir package. .. autoclass:: ir.Module :members: .. autoclass:: ir.Function :members: .. autoclass:: ir.Block :members: .. autoclass:: ir.Statement :members: .. autoclass:: ir.Expression :members: .. # .. inheritance-diagram:: ir.Statement Front-end --------- For the front-end a recursive descent parser is created for the c3 language. This is a subset of the C language with some additional features. .. automodule:: c3 :members: :undoc-members: .. autoclass:: c3.Parser :members: .. autoclass:: c3.Builder :members: .. autoclass:: c3.CodeGenerator :members: Back-end -------- The back-end is more complicated. There are several steps to be taken here. 1. Instruction selection 2. register allocation 3. Peep hole optimization? 4. real code generation .. automodule:: codegenarm :members: