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
+
+