annotate doc/compiler.rst @ 300:158068af716c

yafm
author Windel Bouwman
date Tue, 03 Dec 2013 18:00:22 +0100
parents 674789d9ff37
children 6753763d3bec
rev   line source
273
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
1
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
2
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
3 Compiler
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
4 ========
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
5
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
6 This chapter describes the design of the compiler.
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
7 The compiler consists a frontend, mid-end and back-end. The frontend deals with
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
8 source file parsing and semantics checking. The mid-end performs optimizations.
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
9 This is optional. The back-end generates machine code. The front-end produces
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
10 intermediate code. This is a simple representation of the source. The back-end
300
Windel Bouwman
parents: 299
diff changeset
11 can accept this kind of representation.
273
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
12
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
13 .. graphviz::
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
14
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
15 digraph x {
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
16 rankdir="LR"
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
17 1 [label="c3 source file"]
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
18 10 [label="c3 front end" ]
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
19 11 [label="language X front end" ]
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
20 20 [label="mid end" ]
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
21 30 [label="back end for X86" ]
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
22 31 [label="back end for ARM" ]
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
23 40 [label="object file"]
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
24 1 -> 10
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
25 10 -> 20 [label="IR-code"]
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
26 11 -> 20 [label="IR-code"]
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
27 20 -> 30 [label="IR-code"]
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
28 20 -> 31 [label="IR-code"]
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
29 30 -> 40
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
30 }
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
31
299
674789d9ff37 Added a doc
Windel Bouwman
parents: 297
diff changeset
32
273
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
33 IR-code
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
34 -------
300
Windel Bouwman
parents: 299
diff changeset
35
299
674789d9ff37 Added a doc
Windel Bouwman
parents: 297
diff changeset
36 The intermediate representation (IR) of a program de-couples the front end
674789d9ff37 Added a doc
Windel Bouwman
parents: 297
diff changeset
37 from the backend of the compiler.
273
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
38
299
674789d9ff37 Added a doc
Windel Bouwman
parents: 297
diff changeset
39 See ir for details about all the available instructions.
273
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
40
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
41
274
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
42 C3 Front-end
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
43 ------------
273
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
44
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
45 For the front-end a recursive descent parser is created for the c3 language.
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
46 This is a subset of the C language with some additional features.
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
47
274
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
48 .. graphviz::
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
49
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
50 digraph c3 {
300
Windel Bouwman
parents: 299
diff changeset
51 rankdir="LR"
274
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
52 1 [label="source text"]
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
53 10 [label="lexer" ]
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
54 20 [label="parser" ]
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
55 30 [label="semantic checks" ]
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
56 40 [label="code generation"]
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
57 99 [label="IR-code object"]
299
674789d9ff37 Added a doc
Windel Bouwman
parents: 297
diff changeset
58 1 -> 10
674789d9ff37 Added a doc
Windel Bouwman
parents: 297
diff changeset
59 10 -> 20
274
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
60 20 -> 30
299
674789d9ff37 Added a doc
Windel Bouwman
parents: 297
diff changeset
61 30 -> 40 [label="AST tree"]
274
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
62 40 -> 99
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
63 }
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
64
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
65 .. autoclass:: c3.Builder
273
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
66
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
67 .. autoclass:: c3.Parser
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
68
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
69 .. autoclass:: c3.CodeGenerator
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
70
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
71 Back-end
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
72 --------
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
73
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
74 The back-end is more complicated. There are several steps to be taken here.
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
75
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
76 1. Instruction selection
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
77 2. register allocation
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
78 3. Peep hole optimization?
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
79 4. real code generation
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
80
297
a6f61e9a9d5c Added docs requirements
Windel Bouwman
parents: 274
diff changeset
81 .. automodule:: codegen
273
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
82 :members:
6b3a874edd6e Added some docs
Windel Bouwman
parents:
diff changeset
83
274
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
84 Instruction selection
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
85 ~~~~~~~~~~~~~~~~~~~~~
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
86
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
87 The instruction selection phase takes care of scheduling and instruction
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
88 selection. The output of this phase is a one frame per function with a flat
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
89 list of abstract machine instructions.
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
90
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
91 .. autoclass:: irmach.Frame
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
92
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
93 .. autoclass:: irmach.AbstractInstruction
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
94
ea93e0a7a31e Move docs
Windel Bouwman
parents: 273
diff changeset
95