Mercurial > lcfOS
diff doc/compiler.rst @ 274:ea93e0a7a31e
Move docs
author | Windel Bouwman |
---|---|
date | Wed, 04 Sep 2013 17:35:06 +0200 |
parents | python/doc/compiler.rst@6b3a874edd6e |
children | a6f61e9a9d5c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/compiler.rst Wed Sep 04 17:35:06 2013 +0200 @@ -0,0 +1,110 @@ + + +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 + +.. autoclass:: ir.Function + +.. autoclass:: ir.Block + +.. autoclass:: ir.Statement + +.. autoclass:: ir.Expression + +.. # .. inheritance-diagram:: ir.Statement + +C3 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. + +.. graphviz:: + + digraph c3 { + rankdir="LR" + 1 [label="source text"] + 10 [label="lexer" ] + 20 [label="parser" ] + 30 [label="semantic checks" ] + 40 [label="code generation"] + 99 [label="IR-code object"] + 1 -> 20 + 20 -> 30 + 30 -> 40 + 40 -> 99 + subgraph rel1 { + edge [dir=none] + 10 -> 20 + } + } + +.. autoclass:: c3.Builder + +.. autoclass:: c3.Parser + +.. autoclass:: c3.CodeGenerator + +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: + +Instruction selection +~~~~~~~~~~~~~~~~~~~~~ + +The instruction selection phase takes care of scheduling and instruction +selection. The output of this phase is a one frame per function with a flat +list of abstract machine instructions. + +.. autoclass:: irmach.Frame + +.. autoclass:: irmach.AbstractInstruction + +