From 225fb0b028c67f53bc4dcce26f3cc9e83a15713f Mon Sep 17 00:00:00 2001
From: Christian Dietrich <christian.dietrich@informatik.uni-erlangen.de>
Date: Wed, 18 Mar 2015 10:57:50 +0100
Subject: [PATCH] generator: big refactoring

Rename all parts in a more logical way. The generator is now divided
into three main parts:
  - analysis: Generate GCFG and State Transition graph
  - transform: Generate Assertions, CFG Regions, FSMs
  - coder: bring the information collected in the previous steps down to
           the code.

Change-Id: I5cfd48f6a8d195c30b16b425eda010d9b0405dcd
---
 app/bcc1/alarm1/verify_a.py                   |  2 +-
 app/bcc1/alarm1/verify_b.py                   |  2 +-
 app/bcc1/alarm1/verify_c.py                   |  2 +-
 app/bcc1/alarm1/verify_d.py                   |  2 +-
 app/bcc1/alarm1/verify_e.py                   |  2 +-
 app/bcc1/alarm3/verify_a.py                   |  2 +-
 app/bcc1/alarm3/verify_b.py                   |  2 +-
 app/bcc1/alarm3/verify_c.py                   |  2 +-
 app/bcc1/alarm3/verify_d.py                   |  2 +-
 app/bcc1/alarm3/verify_e.py                   |  2 +-
 app/bcc1/complex1/verify_a.py                 |  2 +-
 app/bcc1/complex1/verify_b.py                 |  2 +-
 app/bcc1/complex1/verify_c.py                 |  2 +-
 app/bcc1/complex2/verify_a.py                 |  2 +-
 app/bcc1/isr2/verify_a.py                     |  2 +-
 app/bcc1/isr2/verify_b.py                     |  2 +-
 app/bcc1/isr2/verify_c.py                     |  2 +-
 app/bcc1/isr2/verify_d.py                     |  2 +-
 app/bcc1/isr2/verify_e.py                     |  2 +-
 app/bcc1/resource1/verify_a.py                |  2 +-
 app/bcc1/resource1/verify_b.py                |  2 +-
 app/bcc1/resource1/verify_d.py                |  2 +-
 app/bcc1/resource1/verify_e.py                |  2 +-
 app/bcc1/resource1/verify_f.py                |  2 +-
 app/bcc1/resource1/verify_g.py                |  2 +-
 app/bcc1/resource1/verify_h.py                |  2 +-
 app/bcc1/resource1/verify_k.py                |  2 +-
 app/bcc1/resource2/verify_a.py                |  2 +-
 app/bcc1/resource2/verify_b.py                |  2 +-
 app/bcc1/sse1/verify_a.py                     |  2 +-
 app/bcc1/sse1/verify_b.py                     |  2 +-
 app/bcc1/sse1/verify_c.py                     |  2 +-
 app/bcc1/task1/verify_a.py                    |  2 +-
 app/bcc1/task1/verify_b.py                    |  2 +-
 app/bcc1/task1/verify_c.py                    |  2 +-
 app/bcc1/task1/verify_d.py                    |  2 +-
 app/bcc1/task1/verify_e.py                    |  2 +-
 app/bcc1/task1/verify_f.py                    |  2 +-
 app/bcc1/task1/verify_g.py                    |  2 +-
 app/bcc1/task2/verify_a.py                    |  2 +-
 app/bcc1/task2/verify_b.py                    |  2 +-
 app/ecc1/event1/verify_a.py                   |  2 +-
 app/ecc1/event1/verify_b.py                   |  2 +-
 app/ecc1/event1/verify_c.py                   |  2 +-
 app/ecc1/event1/verify_d.py                   |  2 +-
 app/ecc1/event1/verify_e.py                   |  2 +-
 app/ecc1/eventisr1/verify_a.py                |  2 +-
 app/ecc1/eventisr1/verify_b.py                |  2 +-
 app/ecc1/eventisr1/verify_c.py                |  2 +-
 app/ecc1/eventisr1/verify_d.py                |  2 +-
 app/sysmodel/1alarm/verify_a.py               |  2 +-
 app/sysmodel/1alarm/verify_aa.py              |  2 +-
 generator/CMakeLists.txt                      |  2 +-
 generator/Generator.py                        | 10 +--
 generator/LLVMPYAnalysis.py                   |  4 +-
 generator/{graph => analysis}/ABBMergePass.py |  6 +-
 .../{graph => analysis}/AddFunctionCalls.py   |  6 +-
 generator/{graph => analysis}/Analysis.py     |  4 +-
 .../{graph => analysis}/AtomicBasicBlock.py   | 10 +--
 .../{graph => analysis}/ConstructGlobalCFG.py |  8 +--
 .../{graph => analysis}/DominanceAnalysis.py  |  8 +--
 .../DynamicPriorityAnalysis.py                |  8 +--
 generator/{graph => analysis}/Event.py        |  0
 generator/{graph => analysis}/Function.py     |  4 +-
 .../{graph => analysis}/GlobalAbbInfo.py      |  0
 .../GlobalControlFlowMetric.py                |  4 +-
 .../InterruptControlAnalysis.py               |  4 +-
 generator/{graph => analysis}/PassManager.py  |  4 +-
 .../{graph => analysis}/PreciseSystemState.py | 10 +--
 .../PrioritySpreadingPass.py                  |  4 +-
 generator/{graph => analysis}/Resource.py     |  0
 generator/{graph => analysis}/Sporadic.py     |  0
 generator/{graph => analysis}/Subtask.py      |  6 +-
 .../SymbolicSystemExecution.py                | 10 +--
 generator/{graph => analysis}/SystemGraph.py  | 18 ++---
 generator/{graph => analysis}/SystemObject.py |  0
 .../{graph => analysis}/SystemSemantic.py     | 10 +--
 generator/{graph => analysis}/SystemState.py  | 10 +--
 .../{graph => analysis}/SystemStateFlow.py    | 16 ++---
 generator/{graph => analysis}/Task.py         |  2 +-
 generator/analysis/__init__.py                | 28 ++++++++
 generator/{graph => analysis}/common.py       |  0
 generator/{graph => analysis}/types.py        |  2 +-
 .../{graph => analysis}/verifier_tools.py     |  8 +--
 generator/coder/__init__.py                   | 14 ++++
 generator/{rules/arm.py => coder/arch_arm.py} | 15 ++---
 generator/coder/arch_generic.py               | 62 +++++++++++++++++
 .../{rules/posix.py => coder/arch_posix.py}   | 12 ++--
 generator/{rules/x86.py => coder/arch_x86.py} | 15 ++---
 generator/{rules => coder}/base.py            |  7 +-
 .../{ => coder}/elements/DataObjectManager.py |  2 +-
 .../{ => coder}/elements/FunctionManager.py   |  2 +-
 .../{ => coder}/elements/IncludeManager.py    |  2 +-
 .../{ => coder}/elements/SourceElement.py     |  0
 generator/{ => coder}/elements/SourceFile.py  |  6 +-
 generator/coder/elements/__init__.py          |  9 +++
 generator/{ => coder}/elements/template.py    |  0
 generator/{rules => coder}/implementations.py |  0
 .../{rules/encoded.py => coder/os_encoded.py} | 12 ++--
 .../{rules/simple.py => coder/os_generic.py}  | 66 ++-----------------
 .../unencoded.py => coder/os_unencoded.py}    | 20 +++---
 .../syscalls_fsm.py => coder/syscall_fsm.py}  | 10 +--
 .../syscall_full.py}                          | 18 +++--
 .../syscall_specialized.py}                   | 10 +--
 generator/elements/__init__.py                |  9 ---
 generator/graph/__init__.py                   | 31 ---------
 generator/main.py                             | 11 ++--
 generator/rules/__init__.py                   | 12 ----
 generator/rules/fsm_kernel.py                 | 10 ---
 generator/{graph => transform}/CFGRegions.py  |  6 +-
 .../FiniteStateMachineBuilder.py              |  5 +-
 .../GenerateAssertions.py                     |  5 +-
 generator/transform/__init__.py               |  5 ++
 .../sage_finite_state_machine.py              |  0
 114 files changed, 335 insertions(+), 351 deletions(-)
 rename generator/{graph => analysis}/ABBMergePass.py (98%)
 rename generator/{graph => analysis}/AddFunctionCalls.py (94%)
 rename generator/{graph => analysis}/Analysis.py (99%)
 rename generator/{graph => analysis}/AtomicBasicBlock.py (95%)
 rename generator/{graph => analysis}/ConstructGlobalCFG.py (98%)
 rename generator/{graph => analysis}/DominanceAnalysis.py (97%)
 rename generator/{graph => analysis}/DynamicPriorityAnalysis.py (96%)
 rename generator/{graph => analysis}/Event.py (100%)
 rename generator/{graph => analysis}/Function.py (94%)
 rename generator/{graph => analysis}/GlobalAbbInfo.py (100%)
 rename generator/{graph => analysis}/GlobalControlFlowMetric.py (94%)
 rename generator/{graph => analysis}/InterruptControlAnalysis.py (96%)
 rename generator/{graph => analysis}/PassManager.py (98%)
 rename generator/{graph => analysis}/PreciseSystemState.py (97%)
 rename generator/{graph => analysis}/PrioritySpreadingPass.py (93%)
 rename generator/{graph => analysis}/Resource.py (100%)
 rename generator/{graph => analysis}/Sporadic.py (100%)
 rename generator/{graph => analysis}/Subtask.py (92%)
 rename generator/{graph => analysis}/SymbolicSystemExecution.py (98%)
 rename generator/{graph => analysis}/SystemGraph.py (97%)
 rename generator/{graph => analysis}/SystemObject.py (100%)
 rename generator/{graph => analysis}/SystemSemantic.py (98%)
 rename generator/{graph => analysis}/SystemState.py (98%)
 rename generator/{graph => analysis}/SystemStateFlow.py (97%)
 rename generator/{graph => analysis}/Task.py (97%)
 create mode 100644 generator/analysis/__init__.py
 rename generator/{graph => analysis}/common.py (100%)
 rename generator/{graph => analysis}/types.py (97%)
 rename generator/{graph => analysis}/verifier_tools.py (96%)
 create mode 100644 generator/coder/__init__.py
 rename generator/{rules/arm.py => coder/arch_arm.py} (95%)
 create mode 100644 generator/coder/arch_generic.py
 rename generator/{rules/posix.py => coder/arch_posix.py} (92%)
 rename generator/{rules/x86.py => coder/arch_x86.py} (94%)
 rename generator/{rules => coder}/base.py (95%)
 rename generator/{ => coder}/elements/DataObjectManager.py (98%)
 rename generator/{ => coder}/elements/FunctionManager.py (98%)
 rename generator/{ => coder}/elements/IncludeManager.py (94%)
 rename generator/{ => coder}/elements/SourceElement.py (100%)
 rename generator/{ => coder}/elements/SourceFile.py (84%)
 create mode 100644 generator/coder/elements/__init__.py
 rename generator/{ => coder}/elements/template.py (100%)
 rename generator/{rules => coder}/implementations.py (100%)
 rename generator/{rules/encoded.py => coder/os_encoded.py} (96%)
 rename generator/{rules/simple.py => coder/os_generic.py} (77%)
 rename generator/{rules/unencoded.py => coder/os_unencoded.py} (92%)
 rename generator/{rules/syscalls_fsm.py => coder/syscall_fsm.py} (96%)
 rename generator/{rules/syscalls_full.py => coder/syscall_full.py} (97%)
 rename generator/{rules/syscalls_specialized.py => coder/syscall_specialized.py} (97%)
 delete mode 100644 generator/elements/__init__.py
 delete mode 100644 generator/graph/__init__.py
 delete mode 100644 generator/rules/__init__.py
 delete mode 100644 generator/rules/fsm_kernel.py
 rename generator/{graph => transform}/CFGRegions.py (97%)
 rename generator/{graph => transform}/FiniteStateMachineBuilder.py (99%)
 rename generator/{graph => transform}/GenerateAssertions.py (98%)
 create mode 100644 generator/transform/__init__.py
 rename generator/{graph => transform}/sage_finite_state_machine.py (100%)

diff --git a/app/bcc1/alarm1/verify_a.py b/app/bcc1/alarm1/verify_a.py
index 510d02f..4a2069a 100644
--- a/app/bcc1/alarm1/verify_a.py
+++ b/app/bcc1/alarm1/verify_a.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/alarm1/verify_b.py b/app/bcc1/alarm1/verify_b.py
index 072fa65..31e40f4 100644
--- a/app/bcc1/alarm1/verify_b.py
+++ b/app/bcc1/alarm1/verify_b.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/alarm1/verify_c.py b/app/bcc1/alarm1/verify_c.py
index e93204d..680974b 100644
--- a/app/bcc1/alarm1/verify_c.py
+++ b/app/bcc1/alarm1/verify_c.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/alarm1/verify_d.py b/app/bcc1/alarm1/verify_d.py
index 006e9f2..be909e1 100644
--- a/app/bcc1/alarm1/verify_d.py
+++ b/app/bcc1/alarm1/verify_d.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/alarm1/verify_e.py b/app/bcc1/alarm1/verify_e.py
index 994365a..1d36396 100644
--- a/app/bcc1/alarm1/verify_e.py
+++ b/app/bcc1/alarm1/verify_e.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/alarm3/verify_a.py b/app/bcc1/alarm3/verify_a.py
index e47cc29..5e1c4dc 100644
--- a/app/bcc1/alarm3/verify_a.py
+++ b/app/bcc1/alarm3/verify_a.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def computation_blocks(analysis, function):
     provider = analysis.global_abb_information_provider()
diff --git a/app/bcc1/alarm3/verify_b.py b/app/bcc1/alarm3/verify_b.py
index 2a6ab5c..bfe905e 100644
--- a/app/bcc1/alarm3/verify_b.py
+++ b/app/bcc1/alarm3/verify_b.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 from verify_a import *
 
 def after_ConstructGlobalCFG(analysis):
diff --git a/app/bcc1/alarm3/verify_c.py b/app/bcc1/alarm3/verify_c.py
index 110b65f..069aa2d 100644
--- a/app/bcc1/alarm3/verify_c.py
+++ b/app/bcc1/alarm3/verify_c.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 from verify_a import *
 
 def after_ConstructGlobalCFG(analysis):
diff --git a/app/bcc1/alarm3/verify_d.py b/app/bcc1/alarm3/verify_d.py
index 3e2e1ad..c8b8568 100644
--- a/app/bcc1/alarm3/verify_d.py
+++ b/app/bcc1/alarm3/verify_d.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 from verify_a import *
 
 def after_ConstructGlobalCFG(analysis):
diff --git a/app/bcc1/alarm3/verify_e.py b/app/bcc1/alarm3/verify_e.py
index 99e919e..6c490ff 100644
--- a/app/bcc1/alarm3/verify_e.py
+++ b/app/bcc1/alarm3/verify_e.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 from verify_a import *
 
 def after_ConstructGlobalCFG(analysis):
diff --git a/app/bcc1/complex1/verify_a.py b/app/bcc1/complex1/verify_a.py
index 05bee15..da4a228 100644
--- a/app/bcc1/complex1/verify_a.py
+++ b/app/bcc1/complex1/verify_a.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/complex1/verify_b.py b/app/bcc1/complex1/verify_b.py
index cbb196b..d927881 100644
--- a/app/bcc1/complex1/verify_b.py
+++ b/app/bcc1/complex1/verify_b.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/complex1/verify_c.py b/app/bcc1/complex1/verify_c.py
index 1f9f011..3c59404 100644
--- a/app/bcc1/complex1/verify_c.py
+++ b/app/bcc1/complex1/verify_c.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/complex2/verify_a.py b/app/bcc1/complex2/verify_a.py
index ee9debb..f78c37c 100644
--- a/app/bcc1/complex2/verify_a.py
+++ b/app/bcc1/complex2/verify_a.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_ConstructGlobalCFG(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/isr2/verify_a.py b/app/bcc1/isr2/verify_a.py
index 3529648..78b5167 100644
--- a/app/bcc1/isr2/verify_a.py
+++ b/app/bcc1/isr2/verify_a.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/isr2/verify_b.py b/app/bcc1/isr2/verify_b.py
index 4abb4e9..73acbc9 100644
--- a/app/bcc1/isr2/verify_b.py
+++ b/app/bcc1/isr2/verify_b.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/isr2/verify_c.py b/app/bcc1/isr2/verify_c.py
index 6473891..9ffd846 100644
--- a/app/bcc1/isr2/verify_c.py
+++ b/app/bcc1/isr2/verify_c.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/isr2/verify_d.py b/app/bcc1/isr2/verify_d.py
index ba92724..6fcfbd6 100644
--- a/app/bcc1/isr2/verify_d.py
+++ b/app/bcc1/isr2/verify_d.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/isr2/verify_e.py b/app/bcc1/isr2/verify_e.py
index 022073d..1280c07 100644
--- a/app/bcc1/isr2/verify_e.py
+++ b/app/bcc1/isr2/verify_e.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/resource1/verify_a.py b/app/bcc1/resource1/verify_a.py
index 2a4d520..757d99c 100644
--- a/app/bcc1/resource1/verify_a.py
+++ b/app/bcc1/resource1/verify_a.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/resource1/verify_b.py b/app/bcc1/resource1/verify_b.py
index a79be35..38193e4 100644
--- a/app/bcc1/resource1/verify_b.py
+++ b/app/bcc1/resource1/verify_b.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/resource1/verify_d.py b/app/bcc1/resource1/verify_d.py
index acd06ab..b801be5 100644
--- a/app/bcc1/resource1/verify_d.py
+++ b/app/bcc1/resource1/verify_d.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/resource1/verify_e.py b/app/bcc1/resource1/verify_e.py
index 0e405b8..35af3d7 100644
--- a/app/bcc1/resource1/verify_e.py
+++ b/app/bcc1/resource1/verify_e.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/resource1/verify_f.py b/app/bcc1/resource1/verify_f.py
index 7eb2959..b98baa8 100644
--- a/app/bcc1/resource1/verify_f.py
+++ b/app/bcc1/resource1/verify_f.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/resource1/verify_g.py b/app/bcc1/resource1/verify_g.py
index 86f1145..d7e8538 100644
--- a/app/bcc1/resource1/verify_g.py
+++ b/app/bcc1/resource1/verify_g.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/resource1/verify_h.py b/app/bcc1/resource1/verify_h.py
index 469900e..80e48e4 100644
--- a/app/bcc1/resource1/verify_h.py
+++ b/app/bcc1/resource1/verify_h.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/resource1/verify_k.py b/app/bcc1/resource1/verify_k.py
index f323e8a..1b7f8e3 100644
--- a/app/bcc1/resource1/verify_k.py
+++ b/app/bcc1/resource1/verify_k.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/resource2/verify_a.py b/app/bcc1/resource2/verify_a.py
index ba23dbd..6494783 100644
--- a/app/bcc1/resource2/verify_a.py
+++ b/app/bcc1/resource2/verify_a.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/resource2/verify_b.py b/app/bcc1/resource2/verify_b.py
index 346257b..2b782f2 100644
--- a/app/bcc1/resource2/verify_b.py
+++ b/app/bcc1/resource2/verify_b.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/sse1/verify_a.py b/app/bcc1/sse1/verify_a.py
index bbf7c47..c901856 100644
--- a/app/bcc1/sse1/verify_a.py
+++ b/app/bcc1/sse1/verify_a.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/sse1/verify_b.py b/app/bcc1/sse1/verify_b.py
index 3cdfc22..cf37df7 100644
--- a/app/bcc1/sse1/verify_b.py
+++ b/app/bcc1/sse1/verify_b.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/sse1/verify_c.py b/app/bcc1/sse1/verify_c.py
index 4e96488..5c134ab 100644
--- a/app/bcc1/sse1/verify_c.py
+++ b/app/bcc1/sse1/verify_c.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/task1/verify_a.py b/app/bcc1/task1/verify_a.py
index 588a21e..5dfed77 100644
--- a/app/bcc1/task1/verify_a.py
+++ b/app/bcc1/task1/verify_a.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/task1/verify_b.py b/app/bcc1/task1/verify_b.py
index 4b4488b..3f98dc6 100644
--- a/app/bcc1/task1/verify_b.py
+++ b/app/bcc1/task1/verify_b.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_CurrentRunningSubtask(analysis):
     (Handler11,  bar) = \
diff --git a/app/bcc1/task1/verify_c.py b/app/bcc1/task1/verify_c.py
index fc626b4..b2f9d9c 100644
--- a/app/bcc1/task1/verify_c.py
+++ b/app/bcc1/task1/verify_c.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_CurrentRunningSubtask(analysis):
     (Handler11,  bar) = \
diff --git a/app/bcc1/task1/verify_d.py b/app/bcc1/task1/verify_d.py
index 6f8a6b0..2c8c2d1 100644
--- a/app/bcc1/task1/verify_d.py
+++ b/app/bcc1/task1/verify_d.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_CurrentRunningSubtask(analysis):
     (Handler11,  bar) = \
diff --git a/app/bcc1/task1/verify_e.py b/app/bcc1/task1/verify_e.py
index 52f57ac..7ae2686 100644
--- a/app/bcc1/task1/verify_e.py
+++ b/app/bcc1/task1/verify_e.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/task1/verify_f.py b/app/bcc1/task1/verify_f.py
index 2a11f38..5429420 100644
--- a/app/bcc1/task1/verify_f.py
+++ b/app/bcc1/task1/verify_f.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/task1/verify_g.py b/app/bcc1/task1/verify_g.py
index d48d67d..b088f59 100644
--- a/app/bcc1/task1/verify_g.py
+++ b/app/bcc1/task1/verify_g.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/task2/verify_a.py b/app/bcc1/task2/verify_a.py
index 018851d..ca68146 100644
--- a/app/bcc1/task2/verify_a.py
+++ b/app/bcc1/task2/verify_a.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/bcc1/task2/verify_b.py b/app/bcc1/task2/verify_b.py
index 93bcbfb..0a37afd 100644
--- a/app/bcc1/task2/verify_b.py
+++ b/app/bcc1/task2/verify_b.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_SystemStateFlow(analysis):
     # Find all three systemcall handlers
diff --git a/app/ecc1/event1/verify_a.py b/app/ecc1/event1/verify_a.py
index 2a328ab..a59ae3c 100644
--- a/app/ecc1/event1/verify_a.py
+++ b/app/ecc1/event1/verify_a.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_ConstructGlobalCFG(analysis):
     # Find all three systemcall handlers
diff --git a/app/ecc1/event1/verify_b.py b/app/ecc1/event1/verify_b.py
index 7b68613..d843789 100644
--- a/app/ecc1/event1/verify_b.py
+++ b/app/ecc1/event1/verify_b.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_ConstructGlobalCFG(analysis):
     # Find all three systemcall handlers
diff --git a/app/ecc1/event1/verify_c.py b/app/ecc1/event1/verify_c.py
index 63b684e..bb908a4 100644
--- a/app/ecc1/event1/verify_c.py
+++ b/app/ecc1/event1/verify_c.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_ConstructGlobalCFG(analysis):
     # Find all three systemcall handlers
diff --git a/app/ecc1/event1/verify_d.py b/app/ecc1/event1/verify_d.py
index 2a643e4..3bc72fe 100644
--- a/app/ecc1/event1/verify_d.py
+++ b/app/ecc1/event1/verify_d.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_ConstructGlobalCFG(analysis):
     # Find all three systemcall handlers
diff --git a/app/ecc1/event1/verify_e.py b/app/ecc1/event1/verify_e.py
index aba3bc3..9973dd0 100644
--- a/app/ecc1/event1/verify_e.py
+++ b/app/ecc1/event1/verify_e.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_ConstructGlobalCFG(analysis):
     # Find all three systemcall handlers
diff --git a/app/ecc1/eventisr1/verify_a.py b/app/ecc1/eventisr1/verify_a.py
index 107489e..1690cc3 100644
--- a/app/ecc1/eventisr1/verify_a.py
+++ b/app/ecc1/eventisr1/verify_a.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_ConstructGlobalCFG(analysis):
     # Find all three systemcall handlers
diff --git a/app/ecc1/eventisr1/verify_b.py b/app/ecc1/eventisr1/verify_b.py
index 752a00b..a396464 100644
--- a/app/ecc1/eventisr1/verify_b.py
+++ b/app/ecc1/eventisr1/verify_b.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_ConstructGlobalCFG(analysis):
     # Find all three systemcall handlers
diff --git a/app/ecc1/eventisr1/verify_c.py b/app/ecc1/eventisr1/verify_c.py
index b200caa..29e90d5 100644
--- a/app/ecc1/eventisr1/verify_c.py
+++ b/app/ecc1/eventisr1/verify_c.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_ConstructGlobalCFG(analysis):
     # Find all three systemcall handlers
diff --git a/app/ecc1/eventisr1/verify_d.py b/app/ecc1/eventisr1/verify_d.py
index 9cd36e8..eee5e9d 100644
--- a/app/ecc1/eventisr1/verify_d.py
+++ b/app/ecc1/eventisr1/verify_d.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_ConstructGlobalCFG(analysis):
     # Find all three systemcall handlers
diff --git a/app/sysmodel/1alarm/verify_a.py b/app/sysmodel/1alarm/verify_a.py
index 0b0ad4d..80461af 100644
--- a/app/sysmodel/1alarm/verify_a.py
+++ b/app/sysmodel/1alarm/verify_a.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_ConstructGlobalCFG(analysis):
     # Find all three systemcall handlers
diff --git a/app/sysmodel/1alarm/verify_aa.py b/app/sysmodel/1alarm/verify_aa.py
index 23b1003..df9095e 100644
--- a/app/sysmodel/1alarm/verify_aa.py
+++ b/app/sysmodel/1alarm/verify_aa.py
@@ -1,4 +1,4 @@
-from generator.graph.verifier_tools import *
+from generator.analysis.verifier_tools import *
 
 def after_ConstructGlobalCFG(analysis):
     # Find all three systemcall handlers
diff --git a/generator/CMakeLists.txt b/generator/CMakeLists.txt
index e7b96ef..bfe1469 100644
--- a/generator/CMakeLists.txt
+++ b/generator/CMakeLists.txt
@@ -1,6 +1,6 @@
 
 set(PYTHON_MODULES_TEST
-    elements/template
+    coder/elements/template
 )
 
 foreach(module ${PYTHON_MODULES_TEST})
diff --git a/generator/Generator.py b/generator/Generator.py
index cef1529..0d9f6da 100644
--- a/generator/Generator.py
+++ b/generator/Generator.py
@@ -1,8 +1,8 @@
-from generator.elements import *
-from generator.graph.Function import Function as GraphFunction
-from generator.graph.types import S
-from .rules.implementations import *
-from .rules import SignatureGenerator
+from .coder.elements import *
+from .analysis.Function import Function as GraphFunction
+from .analysis.types import S
+from .coder.implementations import *
+from .coder import SignatureGenerator
 
 import logging
 
diff --git a/generator/LLVMPYAnalysis.py b/generator/LLVMPYAnalysis.py
index df5ff02..69c656b 100644
--- a/generator/LLVMPYAnalysis.py
+++ b/generator/LLVMPYAnalysis.py
@@ -4,8 +4,8 @@ import sys
 from functools import reduce
 from llvmpy import api
 from collections import defaultdict, namedtuple
-from generator.graph.AtomicBasicBlock import S, E, ControlFlowEdge
-from generator.graph.common import Node, Edge, EdgeType, NodeType
+from generator.analysis.AtomicBasicBlock import S, E, ControlFlowEdge
+from generator.analysis.common import Node, Edge, EdgeType, NodeType
 
 
 
diff --git a/generator/graph/ABBMergePass.py b/generator/analysis/ABBMergePass.py
similarity index 98%
rename from generator/graph/ABBMergePass.py
rename to generator/analysis/ABBMergePass.py
index 0607265..973bf64 100644
--- a/generator/graph/ABBMergePass.py
+++ b/generator/analysis/ABBMergePass.py
@@ -1,7 +1,7 @@
 import logging
-from generator.graph.Analysis import Analysis, FixpointIteration
-from generator.graph.AtomicBasicBlock import E, S
-from generator.graph.Function import Function
+from .Analysis import Analysis, FixpointIteration
+from .AtomicBasicBlock import E, S
+from .Function import Function
 from .DominanceAnalysis import DominanceAnalysis
 from generator.tools import panic, stack
 from collections import namedtuple
diff --git a/generator/graph/AddFunctionCalls.py b/generator/analysis/AddFunctionCalls.py
similarity index 94%
rename from generator/graph/AddFunctionCalls.py
rename to generator/analysis/AddFunctionCalls.py
index 528ba0a..68095a8 100644
--- a/generator/graph/AddFunctionCalls.py
+++ b/generator/analysis/AddFunctionCalls.py
@@ -1,6 +1,6 @@
-from generator.graph.Analysis import Analysis
-from generator.graph.AtomicBasicBlock import E, S
-from generator.graph.Function import Function
+from .Analysis import Analysis
+from .AtomicBasicBlock import E, S
+from .Function import Function
 import logging
 
 class AddFunctionCalls(Analysis):
diff --git a/generator/graph/Analysis.py b/generator/analysis/Analysis.py
similarity index 99%
rename from generator/graph/Analysis.py
rename to generator/analysis/Analysis.py
index 8f491dc..9b7ab58 100644
--- a/generator/graph/Analysis.py
+++ b/generator/analysis/Analysis.py
@@ -1,7 +1,7 @@
 import logging
 import sys
-from generator.graph.common import *
-from generator.graph.AtomicBasicBlock import E, S
+from .common import *
+from .AtomicBasicBlock import E, S
 from collections import defaultdict
 from .Event import Event
 import copy
diff --git a/generator/graph/AtomicBasicBlock.py b/generator/analysis/AtomicBasicBlock.py
similarity index 95%
rename from generator/graph/AtomicBasicBlock.py
rename to generator/analysis/AtomicBasicBlock.py
index aab55b8..92d0133 100644
--- a/generator/graph/AtomicBasicBlock.py
+++ b/generator/analysis/AtomicBasicBlock.py
@@ -1,9 +1,9 @@
-from generator.graph.common import Node, Edge, EdgeType, NodeType
+from .common import Node, Edge, EdgeType, NodeType
 import collections
-from generator.graph.types import S, E, ControlFlowEdge, SyscallType
-from generator.graph.Sporadic import Counter, Alarm, ISR
-from generator.graph.Resource import Resource
-from generator.graph.Subtask import Subtask
+from .types import S, E, ControlFlowEdge, SyscallType
+from .Sporadic import Counter, Alarm, ISR
+from .Resource import Resource
+from .Subtask import Subtask
 
 
 
diff --git a/generator/graph/ConstructGlobalCFG.py b/generator/analysis/ConstructGlobalCFG.py
similarity index 98%
rename from generator/graph/ConstructGlobalCFG.py
rename to generator/analysis/ConstructGlobalCFG.py
index 3bff99f..998bf80 100644
--- a/generator/graph/ConstructGlobalCFG.py
+++ b/generator/analysis/ConstructGlobalCFG.py
@@ -1,8 +1,8 @@
-from generator.graph.Analysis import Analysis
-from generator.graph.AtomicBasicBlock import E, S
+from .Analysis import Analysis
+from .AtomicBasicBlock import E, S
 from generator.tools import panic, stack
-from generator.graph.common import Edge
-from generator.graph.SymbolicSystemExecution import StateTransition, SavedStateTransition
+from .common import Edge
+from .SymbolicSystemExecution import StateTransition, SavedStateTransition
 import logging
 import hashlib
 
diff --git a/generator/graph/DominanceAnalysis.py b/generator/analysis/DominanceAnalysis.py
similarity index 97%
rename from generator/graph/DominanceAnalysis.py
rename to generator/analysis/DominanceAnalysis.py
index 09f9b57..9b1cca1 100644
--- a/generator/graph/DominanceAnalysis.py
+++ b/generator/analysis/DominanceAnalysis.py
@@ -1,8 +1,8 @@
-from generator.graph.Analysis           import Analysis
-from generator.graph.common             import dfs, GraphObject, Edge, GraphObjectContainer
+from .Analysis           import Analysis
+from .common             import dfs, GraphObject, Edge, GraphObjectContainer
 from generator.tools                    import stack
-from generator.graph.AtomicBasicBlock   import E,S
-from generator.graph.Function           import Function
+from .AtomicBasicBlock   import E,S
+from .Function           import Function
 import logging
 from functools import reduce
 
diff --git a/generator/graph/DynamicPriorityAnalysis.py b/generator/analysis/DynamicPriorityAnalysis.py
similarity index 96%
rename from generator/graph/DynamicPriorityAnalysis.py
rename to generator/analysis/DynamicPriorityAnalysis.py
index 1a34b09..ca7dd32 100644
--- a/generator/graph/DynamicPriorityAnalysis.py
+++ b/generator/analysis/DynamicPriorityAnalysis.py
@@ -1,7 +1,7 @@
-from generator.graph.Analysis import Analysis, FixpointIteration
-from generator.graph.AtomicBasicBlock import E, S
-from generator.graph.Resource import Resource
-from generator.graph.Function import Function
+from .Analysis import Analysis, FixpointIteration
+from .AtomicBasicBlock import E, S
+from .Resource import Resource
+from .Function import Function
 from collections import namedtuple
 
 class DynamicPriorityAnalysis(Analysis):
diff --git a/generator/graph/Event.py b/generator/analysis/Event.py
similarity index 100%
rename from generator/graph/Event.py
rename to generator/analysis/Event.py
diff --git a/generator/graph/Function.py b/generator/analysis/Function.py
similarity index 94%
rename from generator/graph/Function.py
rename to generator/analysis/Function.py
index 77c1a6a..470a65d 100644
--- a/generator/graph/Function.py
+++ b/generator/analysis/Function.py
@@ -1,5 +1,5 @@
-from generator.graph.common import GraphObject, Edge
-from generator.graph.AtomicBasicBlock import S, E
+from .common import GraphObject, Edge
+from .AtomicBasicBlock import S, E
 
 class Function(GraphObject):
     def __init__(self, functionname):
diff --git a/generator/graph/GlobalAbbInfo.py b/generator/analysis/GlobalAbbInfo.py
similarity index 100%
rename from generator/graph/GlobalAbbInfo.py
rename to generator/analysis/GlobalAbbInfo.py
diff --git a/generator/graph/GlobalControlFlowMetric.py b/generator/analysis/GlobalControlFlowMetric.py
similarity index 94%
rename from generator/graph/GlobalControlFlowMetric.py
rename to generator/analysis/GlobalControlFlowMetric.py
index c6a3d22..c9baa6a 100644
--- a/generator/graph/GlobalControlFlowMetric.py
+++ b/generator/analysis/GlobalControlFlowMetric.py
@@ -1,5 +1,5 @@
-from generator.graph.Analysis import Analysis
-from generator.graph.AtomicBasicBlock import E
+from .Analysis import Analysis
+from .AtomicBasicBlock import E
 
 class GlobalControlFlowMetric(Analysis):
     def __init__(self, filename):
diff --git a/generator/graph/InterruptControlAnalysis.py b/generator/analysis/InterruptControlAnalysis.py
similarity index 96%
rename from generator/graph/InterruptControlAnalysis.py
rename to generator/analysis/InterruptControlAnalysis.py
index fb4338a..7999651 100644
--- a/generator/graph/InterruptControlAnalysis.py
+++ b/generator/analysis/InterruptControlAnalysis.py
@@ -1,5 +1,5 @@
-from generator.graph.Analysis import Analysis, FixpointIteration
-from generator.graph.AtomicBasicBlock import E, S
+from .Analysis import Analysis, FixpointIteration
+from .AtomicBasicBlock import E, S
 from generator.tools import panic
 
 from collections import namedtuple
diff --git a/generator/graph/PassManager.py b/generator/analysis/PassManager.py
similarity index 98%
rename from generator/graph/PassManager.py
rename to generator/analysis/PassManager.py
index 2172420..96c9a09 100644
--- a/generator/graph/PassManager.py
+++ b/generator/analysis/PassManager.py
@@ -2,8 +2,8 @@ import logging
 import os
 import sys
 import time
-from generator.graph.AtomicBasicBlock import AtomicBasicBlock
-from generator.graph.common import *
+from .AtomicBasicBlock import AtomicBasicBlock
+from .common import *
 from generator.tools import stack
 
 class PassManager:
diff --git a/generator/graph/PreciseSystemState.py b/generator/analysis/PreciseSystemState.py
similarity index 97%
rename from generator/graph/PreciseSystemState.py
rename to generator/analysis/PreciseSystemState.py
index b62fd4e..54344fc 100644
--- a/generator/graph/PreciseSystemState.py
+++ b/generator/analysis/PreciseSystemState.py
@@ -1,9 +1,9 @@
 from generator.tools import stack, unwrap_seq, panic
-from generator.graph.AtomicBasicBlock import E, S
-from generator.graph.Sporadic import Alarm
-from generator.graph.Subtask import Subtask
-from generator.graph.Event import Event
-from generator.graph.common import Node, Edge, EdgeType, NodeType
+from .AtomicBasicBlock import E, S
+from .Sporadic import Alarm
+from .Subtask import Subtask
+from .Event import Event
+from .common import Node, Edge, EdgeType, NodeType
 from .SystemState import SystemState
 
 class PreciseSystemState(SystemState):
diff --git a/generator/graph/PrioritySpreadingPass.py b/generator/analysis/PrioritySpreadingPass.py
similarity index 93%
rename from generator/graph/PrioritySpreadingPass.py
rename to generator/analysis/PrioritySpreadingPass.py
index 3693183..2fa937c 100644
--- a/generator/graph/PrioritySpreadingPass.py
+++ b/generator/analysis/PrioritySpreadingPass.py
@@ -1,5 +1,5 @@
-from generator.graph.Analysis import Analysis
-from generator.graph.Subtask  import Subtask
+from .Analysis import Analysis
+from .Subtask  import Subtask
 
 class PrioritySpreadingPass(Analysis):
     """This pass reallocated the priorities in the way, that every
diff --git a/generator/graph/Resource.py b/generator/analysis/Resource.py
similarity index 100%
rename from generator/graph/Resource.py
rename to generator/analysis/Resource.py
diff --git a/generator/graph/Sporadic.py b/generator/analysis/Sporadic.py
similarity index 100%
rename from generator/graph/Sporadic.py
rename to generator/analysis/Sporadic.py
diff --git a/generator/graph/Subtask.py b/generator/analysis/Subtask.py
similarity index 92%
rename from generator/graph/Subtask.py
rename to generator/analysis/Subtask.py
index 6f11ce8..b1c0284 100644
--- a/generator/graph/Subtask.py
+++ b/generator/analysis/Subtask.py
@@ -1,6 +1,6 @@
-from generator.graph.Function import Function
-from generator.graph.SystemObject import SystemObject
-from generator.graph.Event import Event
+from .Function import Function
+from .SystemObject import SystemObject
+from .Event import Event
 
 
 class Subtask(Function, SystemObject):
diff --git a/generator/graph/SymbolicSystemExecution.py b/generator/analysis/SymbolicSystemExecution.py
similarity index 98%
rename from generator/graph/SymbolicSystemExecution.py
rename to generator/analysis/SymbolicSystemExecution.py
index 09467a5..c7b9ad3 100644
--- a/generator/graph/SymbolicSystemExecution.py
+++ b/generator/analysis/SymbolicSystemExecution.py
@@ -1,8 +1,8 @@
-from generator.graph.common import *
-from generator.graph.Analysis import *
-from generator.graph.GlobalAbbInfo import GlobalAbbInfo
-from generator.graph.SystemSemantic import *
-from generator.graph.Function import Function
+from .common import *
+from .Analysis import *
+from .GlobalAbbInfo import GlobalAbbInfo
+from .SystemSemantic import *
+from .Function import Function
 from generator.tools import stack, unwrap_seq, group_by, IntEnum
 
 @unique
diff --git a/generator/graph/SystemGraph.py b/generator/analysis/SystemGraph.py
similarity index 97%
rename from generator/graph/SystemGraph.py
rename to generator/analysis/SystemGraph.py
index e23040a..148a419 100644
--- a/generator/graph/SystemGraph.py
+++ b/generator/analysis/SystemGraph.py
@@ -1,13 +1,13 @@
 import logging
-from generator.graph.Task import Task
-from generator.graph.Subtask import Subtask
-from generator.graph.AtomicBasicBlock import AtomicBasicBlock, E, S
-from generator.graph.Function import Function
-from generator.graph.PassManager import PassManager
-from generator.graph.Sporadic import Counter, Alarm, ISR, AlarmSubtask
-from generator.graph.Resource import Resource
-from generator.graph.Event import Event
-from generator.graph.common import GraphObject
+from .Task import Task
+from .Subtask import Subtask
+from .AtomicBasicBlock import AtomicBasicBlock, E, S
+from .Function import Function
+from .PassManager import PassManager
+from .Sporadic import Counter, Alarm, ISR, AlarmSubtask
+from .Resource import Resource
+from .Event import Event
+from .common import GraphObject
 from generator.statistics import Statistics
 from generator.tools import panic
 from collections import namedtuple
diff --git a/generator/graph/SystemObject.py b/generator/analysis/SystemObject.py
similarity index 100%
rename from generator/graph/SystemObject.py
rename to generator/analysis/SystemObject.py
diff --git a/generator/graph/SystemSemantic.py b/generator/analysis/SystemSemantic.py
similarity index 98%
rename from generator/graph/SystemSemantic.py
rename to generator/analysis/SystemSemantic.py
index a0eedc2..d8a12c1 100644
--- a/generator/graph/SystemSemantic.py
+++ b/generator/analysis/SystemSemantic.py
@@ -1,9 +1,9 @@
 from generator.tools import stack, unwrap_seq, panic
-from generator.graph.AtomicBasicBlock import E, S
-from generator.graph.Sporadic import Alarm
-from generator.graph.Subtask import Subtask
-from generator.graph.Event import Event
-from generator.graph.common import Node, Edge, EdgeType, NodeType
+from .AtomicBasicBlock import E, S
+from .Sporadic import Alarm
+from .Subtask import Subtask
+from .Event import Event
+from .common import Node, Edge, EdgeType, NodeType
 from .SystemState import SystemState
 from .PreciseSystemState import PreciseSystemState
 
diff --git a/generator/graph/SystemState.py b/generator/analysis/SystemState.py
similarity index 98%
rename from generator/graph/SystemState.py
rename to generator/analysis/SystemState.py
index f11c2af..2ea3b08 100644
--- a/generator/graph/SystemState.py
+++ b/generator/analysis/SystemState.py
@@ -1,9 +1,9 @@
 from generator.tools import stack, unwrap_seq, panic
-from generator.graph.AtomicBasicBlock import E, S
-from generator.graph.Sporadic import Alarm
-from generator.graph.Subtask import Subtask
-from generator.graph.Event import Event
-from generator.graph.common import Node, Edge, EdgeType, NodeType
+from .AtomicBasicBlock import E, S
+from .Sporadic import Alarm
+from .Subtask import Subtask
+from .Event import Event
+from .common import Node, Edge, EdgeType, NodeType
 
 class SystemState(Node):
     """Normal system states capture the state at a specific point in the
diff --git a/generator/graph/SystemStateFlow.py b/generator/analysis/SystemStateFlow.py
similarity index 97%
rename from generator/graph/SystemStateFlow.py
rename to generator/analysis/SystemStateFlow.py
index 50edc4a..10f6e52 100644
--- a/generator/graph/SystemStateFlow.py
+++ b/generator/analysis/SystemStateFlow.py
@@ -1,12 +1,12 @@
 from collections import defaultdict
-from generator.graph.common import *
-from generator.graph.Analysis import *
-from generator.graph.DynamicPriorityAnalysis import DynamicPriorityAnalysis
-from generator.graph.Sporadic import SporadicEvent
-from generator.graph.Function import Function
-from generator.graph.GlobalAbbInfo import GlobalAbbInfo
-from generator.graph.SystemSemantic import *
-from generator.graph.AtomicBasicBlock import E
+from .common import *
+from .Analysis import *
+from .DynamicPriorityAnalysis import DynamicPriorityAnalysis
+from .Sporadic import SporadicEvent
+from .Function import Function
+from .GlobalAbbInfo import GlobalAbbInfo
+from .SystemSemantic import *
+from .AtomicBasicBlock import E
 
 
 class SystemStateFlow(Analysis):
diff --git a/generator/graph/Task.py b/generator/analysis/Task.py
similarity index 97%
rename from generator/graph/Task.py
rename to generator/analysis/Task.py
index f9d6bd6..d1763a0 100644
--- a/generator/graph/Task.py
+++ b/generator/analysis/Task.py
@@ -1,4 +1,4 @@
-from generator.graph.common import GraphObject
+from .common import GraphObject
 
 class Task(GraphObject):
     """A Task represents a whole set of SubTasks. All subtasks belong logically together"""
diff --git a/generator/analysis/__init__.py b/generator/analysis/__init__.py
new file mode 100644
index 0000000..5124569
--- /dev/null
+++ b/generator/analysis/__init__.py
@@ -0,0 +1,28 @@
+__doc__ = """The graph module abstracts from all kind of Tasks, SubTasks,
+AtomicBasicBlocks and BasicBlocks, that make up an System."""
+
+assert __name__ == 'generator.analysis'
+
+
+from .AddFunctionCalls import AddFunctionCalls
+from .Analysis import *
+from .AtomicBasicBlock import AtomicBasicBlock
+from .ABBMergePass import ABBMergePass
+from .ConstructGlobalCFG import ConstructGlobalCFG
+from .DynamicPriorityAnalysis import DynamicPriorityAnalysis
+from .Function import Function
+from .GlobalControlFlowMetric import GlobalControlFlowMetric
+from .InterruptControlAnalysis import InterruptControlAnalysis
+from .PrioritySpreadingPass import PrioritySpreadingPass
+from .Resource import Resource
+from .Sporadic import Alarm
+from .Subtask import Subtask
+from .SymbolicSystemExecution import SymbolicSystemExecution, StateTransition, SavedStateTransition
+from .SystemGraph import SystemGraph
+from .SystemSemantic import *
+from .SystemStateFlow import *
+from .DominanceAnalysis import *
+
+
+from .Task import Task
+from .common import GraphObject
diff --git a/generator/graph/common.py b/generator/analysis/common.py
similarity index 100%
rename from generator/graph/common.py
rename to generator/analysis/common.py
diff --git a/generator/graph/types.py b/generator/analysis/types.py
similarity index 97%
rename from generator/graph/types.py
rename to generator/analysis/types.py
index a0d2103..470e735 100644
--- a/generator/graph/types.py
+++ b/generator/analysis/types.py
@@ -1,4 +1,4 @@
-from generator.graph.common import Node, Edge, EdgeType, NodeType
+from .common import Node, Edge, EdgeType, NodeType
 from generator.tools import IntEnum, unique
 
 @unique
diff --git a/generator/graph/verifier_tools.py b/generator/analysis/verifier_tools.py
similarity index 96%
rename from generator/graph/verifier_tools.py
rename to generator/analysis/verifier_tools.py
index ce2bbd6..5e84ed7 100644
--- a/generator/graph/verifier_tools.py
+++ b/generator/analysis/verifier_tools.py
@@ -1,7 +1,7 @@
-from generator.graph.AtomicBasicBlock import E,S
-from generator.graph.SystemStateFlow import SystemStateFlow
-from generator.graph.SymbolicSystemExecution import SymbolicSystemExecution
-from generator.graph.Resource import Resource
+from .AtomicBasicBlock import E,S
+from .SystemStateFlow import SystemStateFlow
+from .SymbolicSystemExecution import SymbolicSystemExecution
+from .Resource import Resource
 
 
 global E
diff --git a/generator/coder/__init__.py b/generator/coder/__init__.py
new file mode 100644
index 0000000..9e87b5b
--- /dev/null
+++ b/generator/coder/__init__.py
@@ -0,0 +1,14 @@
+assert __name__ == "generator.coder"
+
+from .arch_generic import GenericArch
+from .arch_x86 import X86Arch
+from .arch_arm import ARMArch
+from .arch_posix import PosixArch
+
+from .os_generic import GenericOS
+from .os_encoded import EncodedOS, SignatureGenerator
+from .os_unencoded import UnencodedOS
+
+from .syscall_full import FullSystemCalls
+from .syscall_specialized import SpecializedSystemCalls
+from .syscall_fsm import FSMSystemCalls
diff --git a/generator/rules/arm.py b/generator/coder/arch_arm.py
similarity index 95%
rename from generator/rules/arm.py
rename to generator/coder/arch_arm.py
index b242bbf..8b5dfef 100644
--- a/generator/rules/arm.py
+++ b/generator/coder/arch_arm.py
@@ -1,12 +1,10 @@
-from generator.rules.simple import SimpleArch
-from generator.elements import CodeTemplate, FunctionDefinitionBlock, \
-    Include, FunctionDeclaration, Comment, Function, DataObject, \
-    DataObjectArray, Hook, Block, VariableDefinition, Statement
-from generator.graph.Subtask import Subtask
+from .arch_generic import GenericArch
+from .elements import *
+from generator.analysis.Subtask import Subtask
 
-class ARMArch(SimpleArch):
+class ARMArch(GenericArch):
     def __init__(self):
-        SimpleArch.__init__(self)
+        super(ARMArch, self).__init__()
 
     def generate_linkerscript(self):
         linker_script = LinkerScriptTemplate(self)
@@ -192,8 +190,7 @@ class LinkerScriptTemplate(CodeTemplate):
         CodeTemplate.__init__(self, ARM.generator, "arch/arm/linker.ld.in")
         self.ARM = ARM
         self.system_graph    = self.ARM.system_graph
-        # Reference to the objects object of our rule system
-        self.objects = self.ARM.objects
+
         # Link the foreach_subtask method from the rules
         self.foreach_subtask = self.ARM.foreach_subtask
 
diff --git a/generator/coder/arch_generic.py b/generator/coder/arch_generic.py
new file mode 100644
index 0000000..5b21b8a
--- /dev/null
+++ b/generator/coder/arch_generic.py
@@ -0,0 +1,62 @@
+from .elements import *
+from .base import BaseCoder
+from generator.analysis.Function import Function as GraphFunction
+from .implementations import *
+import logging
+
+from collections import namedtuple
+
+class GenericArch(BaseCoder):
+    def __init__(self):
+        super(GenericArch, self).__init__()
+
+    def generate_dataobjects_task_stacks(self):
+        """Generate the stacks for the tasks, including the task pointers"""
+        # Ignore the Idle thread and ISR subtasks
+        for subtask in self.system_graph.real_subtasks:
+            stacksize = subtask.get_stack_size()
+            stack = DataObjectArray("uint8_t", subtask.name + "_stack", stacksize,
+                                    extern_c = True)
+            self.generator.source_file.data_manager.add(stack)
+
+            stackptr = DataObject("void *", "OS_" + subtask.name + "_stackptr")
+            self.generator.source_file.data_manager.add(stackptr, namespace = ("arch",))
+
+
+            subtask.impl.stack = stack
+            subtask.impl.stackptr = stackptr
+            subtask.impl.stacksize = stacksize
+
+
+    def generate_dataobjects_task_entries(self):
+        for subtask in self.system_graph.subtasks:
+            # Ignore the Idle thread
+            if not subtask.is_real_thread():
+                continue
+            entry_function = FunctionDeclaration(subtask.function_name, "void", [],
+                                                                 extern_c = True)
+            self.generator.source_file.function_manager.add(entry_function)
+            subtask.impl.entry_function = entry_function
+
+    KernelSpace = namedtuple("KernelSpace", ["pre_hook", "system", "post_hook"])
+    def generate_kernelspace(self, userspace, abb, arguments):
+        """returns a KernelSpace object"""
+        raise NotImplementedError()
+
+    def asm_marker(self, block, label):
+        self.call_function(block, "asm_label", "void",
+                           ['"%s"' % label])
+
+    def kickoff(self, abb, block):
+        self.call_function(block, "Machine::enable_interrupts",
+                           "void", [])
+
+    def enable_irq(self, block):
+        self.call_function(block,
+                           "Machine::enable_interrupts",
+                           "void", [])
+
+    def disable_irq(self, block):
+        self.call_function(block,
+                           "Machine::disable_interrupts",
+                           "void", [])
diff --git a/generator/rules/posix.py b/generator/coder/arch_posix.py
similarity index 92%
rename from generator/rules/posix.py
rename to generator/coder/arch_posix.py
index 26dd547..c2a2ff8 100644
--- a/generator/rules/posix.py
+++ b/generator/coder/arch_posix.py
@@ -1,13 +1,11 @@
-from generator.elements import Include, FunctionDeclaration, Comment, \
-                               DataObject, Block, Hook, VariableDefinition, Function
+from .arch_generic import GenericArch
+from .elements import *
+from generator.analysis.Subtask import Subtask
 
-from generator.graph.Subtask import Subtask
-from generator.rules.simple import SimpleArch
 
-
-class PosixArch(SimpleArch):
+class PosixArch(GenericArch):
     def __init__(self):
-        SimpleArch.__init__(self)
+        super(PosixArch, self).__init__()
 
     def generate_linkerscript(self):
         """Posix does not require a linker script"""
diff --git a/generator/rules/x86.py b/generator/coder/arch_x86.py
similarity index 94%
rename from generator/rules/x86.py
rename to generator/coder/arch_x86.py
index a265301..d25ac21 100644
--- a/generator/rules/x86.py
+++ b/generator/coder/arch_x86.py
@@ -1,12 +1,10 @@
-from generator.rules.simple import SimpleArch
-from generator.elements import CodeTemplate, FunctionDefinitionBlock, \
-    Include, FunctionDeclaration, Comment, Function, DataObject, \
-    DataObjectArray, Hook, Block, VariableDefinition, Statement
-from generator.graph.Subtask import Subtask
+from .arch_generic import GenericArch
+from .elements import *
+from generator.analysis.Subtask import Subtask
 
-class X86Arch(SimpleArch):
+class X86Arch(GenericArch):
     def __init__(self):
-        SimpleArch.__init__(self)
+        super(X86Arch, self).__init__()
 
     def generate_linkerscript(self):
         linker_script = LinkerScriptTemplate(self)
@@ -131,8 +129,7 @@ class LinkerScriptTemplate(CodeTemplate):
         CodeTemplate.__init__(self, x86.generator, "arch/i386/linker.ld.in")
         self.x86 = x86
         self.system_graph    = self.x86.system_graph
-        # Reference to the objects object of our rule system
-        self.objects = self.x86.objects
+
         # Link the foreach_subtask method from the rules
         self.foreach_subtask = self.x86.foreach_subtask
 
diff --git a/generator/rules/base.py b/generator/coder/base.py
similarity index 95%
rename from generator/rules/base.py
rename to generator/coder/base.py
index 048944f..ae0aa66 100755
--- a/generator/rules/base.py
+++ b/generator/coder/base.py
@@ -1,15 +1,16 @@
 #!/usr/bin/python
 
-from generator.elements import *
+from .elements import *
 
-class BaseRules:
+class BaseCoder:
     def __init__(self):
         self.generator     = None
         self.system_graph  = None
-        self.objects       = None
+
         self.arch_rules    = None
         self.os_rules      = None
         self.syscall_rules = None
+
         self.stats         = None
 
     def set_generator(self, generator):
diff --git a/generator/elements/DataObjectManager.py b/generator/coder/elements/DataObjectManager.py
similarity index 98%
rename from generator/elements/DataObjectManager.py
rename to generator/coder/elements/DataObjectManager.py
index f47a416..b37fd0a 100755
--- a/generator/elements/DataObjectManager.py
+++ b/generator/coder/elements/DataObjectManager.py
@@ -12,7 +12,7 @@
     @ingroup generator
     @brief Data object cook.
 """
-from generator.elements.SourceElement import Block, Statement, ForRange
+from .SourceElement import Block, Statement, ForRange
 
 class DataObject:
     """Manages a variable"""
diff --git a/generator/elements/FunctionManager.py b/generator/coder/elements/FunctionManager.py
similarity index 98%
rename from generator/elements/FunctionManager.py
rename to generator/coder/elements/FunctionManager.py
index bda2763..c2f8eef 100755
--- a/generator/elements/FunctionManager.py
+++ b/generator/coder/elements/FunctionManager.py
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 
-from generator.elements.SourceElement import Block, Statement
+from .SourceElement import Block, Statement
 from collections import namedtuple
 
 class Function:
diff --git a/generator/elements/IncludeManager.py b/generator/coder/elements/IncludeManager.py
similarity index 94%
rename from generator/elements/IncludeManager.py
rename to generator/coder/elements/IncludeManager.py
index 9e91f6d..a3e8f00 100644
--- a/generator/elements/IncludeManager.py
+++ b/generator/coder/elements/IncludeManager.py
@@ -5,7 +5,7 @@
     @ingroup primitives
     @brief Building include statements
 """
-from generator.elements.SourceElement import CPPStatement, Comment
+from .SourceElement import CPPStatement, Comment
 
 class Include:
     def __init__(self, filename, system_include=False, comment = None):
diff --git a/generator/elements/SourceElement.py b/generator/coder/elements/SourceElement.py
similarity index 100%
rename from generator/elements/SourceElement.py
rename to generator/coder/elements/SourceElement.py
diff --git a/generator/elements/SourceFile.py b/generator/coder/elements/SourceFile.py
similarity index 84%
rename from generator/elements/SourceFile.py
rename to generator/coder/elements/SourceFile.py
index 94852d6..ccee519 100644
--- a/generator/elements/SourceFile.py
+++ b/generator/coder/elements/SourceFile.py
@@ -7,9 +7,9 @@
 """
 
 
-from generator.elements.IncludeManager import IncludeManager
-from generator.elements.DataObjectManager import DataObjectManager
-from generator.elements.FunctionManager import FunctionManager
+from .IncludeManager import IncludeManager
+from .DataObjectManager import DataObjectManager
+from .FunctionManager import FunctionManager
 from generator import tools
 
 class SourceFile:
diff --git a/generator/coder/elements/__init__.py b/generator/coder/elements/__init__.py
new file mode 100644
index 0000000..9111bf0
--- /dev/null
+++ b/generator/coder/elements/__init__.py
@@ -0,0 +1,9 @@
+from .SourceFile import SourceFile
+from .FunctionManager import Function, FunctionManager, FunctionDeclaration, \
+    FunctionDefinitionBlock
+from .IncludeManager import Include, IncludeManager
+from .DataObjectManager import DataObject, DataObjectArray, ExternalDataObject
+from .SourceElement import *
+from .template import CodeTemplate
+
+assert __name__ == "generator.coder.elements"
diff --git a/generator/elements/template.py b/generator/coder/elements/template.py
similarity index 100%
rename from generator/elements/template.py
rename to generator/coder/elements/template.py
diff --git a/generator/rules/implementations.py b/generator/coder/implementations.py
similarity index 100%
rename from generator/rules/implementations.py
rename to generator/coder/implementations.py
diff --git a/generator/rules/encoded.py b/generator/coder/os_encoded.py
similarity index 96%
rename from generator/rules/encoded.py
rename to generator/coder/os_encoded.py
index 285afd4..ec9ee9f 100644
--- a/generator/rules/encoded.py
+++ b/generator/coder/os_encoded.py
@@ -1,7 +1,7 @@
-from generator.rules.unencoded import UnencodedSystem, TaskListTemplate, \
+from .os_unencoded import UnencodedOS, TaskListTemplate, \
     SchedulerTemplate
-from generator.elements import *
-from generator.graph.Resource import Resource
+from .elements import *
+from generator.analysis.Resource import Resource
 from .implementations import *
 
 class SignatureGenerator:
@@ -47,9 +47,9 @@ class SignatureGenerator:
         return x
 
 
-class EncodedSystem(UnencodedSystem):
+class EncodedOS(UnencodedOS):
     def __init__(self):
-        UnencodedSystem.__init__(self)
+        super(EncodedOS, self).__init__()
         self.task_list = EncodedTaskListTemplate
         self.scheduler = EncodedSchedulerTemplate
         self.counter_signatures = {}
@@ -65,7 +65,7 @@ class EncodedSystem(UnencodedSystem):
         impl.current_prio_sig = self.sigs.current_prio
         impl.current_task_sig = self.sigs.current_task
 
-        UnencodedSystem.generate_system_code(self)
+        super(EncodedOS, self).generate_system_code()
 
     def convert_argument(self, block, argument):
         b = self.generator.signature_generator.new()
diff --git a/generator/rules/simple.py b/generator/coder/os_generic.py
similarity index 77%
rename from generator/rules/simple.py
rename to generator/coder/os_generic.py
index dbf56e6..7ddb24e 100644
--- a/generator/rules/simple.py
+++ b/generator/coder/os_generic.py
@@ -1,16 +1,14 @@
-from generator.elements import *
-from generator.elements.DataObjectManager import ExternalDataObject
-from generator.rules.base import BaseRules
-from generator.graph.Function import Function as GraphFunction
+from .elements import *
+from .base import BaseCoder
+from generator.analysis.Function import Function as GraphFunction
 from .implementations import *
 import logging
 
 from collections import namedtuple
 
-class SimpleSystem(BaseRules):
+class GenericOS(BaseCoder):
     def __init__(self):
-        BaseRules.__init__(self)
-
+        super(GenericOS, self).__init__()
 
     def return_statement(self, block, expression):
         block.add(Statement("return %s" % expression))
@@ -196,57 +194,3 @@ class SimpleSystem(BaseRules):
         self.generator.source_file.function_manager.add(multiplexer, "dep")
 
 
-class SimpleArch(BaseRules):
-    def __init__(self):
-        BaseRules.__init__(self)
-
-    def generate_dataobjects_task_stacks(self):
-        """Generate the stacks for the tasks, including the task pointers"""
-        # Ignore the Idle thread and ISR subtasks
-        for subtask in self.system_graph.real_subtasks:
-            stacksize = subtask.get_stack_size()
-            stack = DataObjectArray("uint8_t", subtask.name + "_stack", stacksize,
-                                    extern_c = True)
-            self.generator.source_file.data_manager.add(stack)
-
-            stackptr = DataObject("void *", "OS_" + subtask.name + "_stackptr")
-            self.generator.source_file.data_manager.add(stackptr, namespace = ("arch",))
-
-
-            subtask.impl.stack = stack
-            subtask.impl.stackptr = stackptr
-            subtask.impl.stacksize = stacksize
-
-
-    def generate_dataobjects_task_entries(self):
-        for subtask in self.system_graph.subtasks:
-            # Ignore the Idle thread
-            if not subtask.is_real_thread():
-                continue
-            entry_function = FunctionDeclaration(subtask.function_name, "void", [],
-                                                                 extern_c = True)
-            self.generator.source_file.function_manager.add(entry_function)
-            subtask.impl.entry_function = entry_function
-
-    KernelSpace = namedtuple("KernelSpace", ["pre_hook", "system", "post_hook"])
-    def generate_kernelspace(self, userspace, abb, arguments):
-        """returns a KernelSpace object"""
-        raise NotImplementedError()
-
-    def asm_marker(self, block, label):
-        self.call_function(block, "asm_label", "void",
-                           ['"%s"' % label])
-
-    def kickoff(self, abb, block):
-        self.call_function(block, "Machine::enable_interrupts",
-                           "void", [])
-
-    def enable_irq(self, block):
-        self.call_function(block,
-                           "Machine::enable_interrupts",
-                           "void", [])
-
-    def disable_irq(self, block):
-        self.call_function(block,
-                           "Machine::disable_interrupts",
-                           "void", [])
diff --git a/generator/rules/unencoded.py b/generator/coder/os_unencoded.py
similarity index 92%
rename from generator/rules/unencoded.py
rename to generator/coder/os_unencoded.py
index 81d0535..821ae60 100644
--- a/generator/rules/unencoded.py
+++ b/generator/coder/os_unencoded.py
@@ -1,15 +1,15 @@
-from generator.rules.simple import SimpleSystem
-from generator.elements import CodeTemplate, Include, VariableDefinition, \
+from .os_generic import GenericOS
+from .elements import CodeTemplate, Include, VariableDefinition, \
     Block, Statement, Comment, Function, Hook, DataObject
-from generator.graph.AtomicBasicBlock import S, AtomicBasicBlock
-from generator.graph.Resource import Resource
-from generator.graph.Subtask import Subtask
-from generator.graph.Function import Function
+from generator.analysis.AtomicBasicBlock import S, AtomicBasicBlock
+from generator.analysis.Resource import Resource
+from generator.analysis.Subtask import Subtask
+from generator.analysis.Function import Function
 
 
-class UnencodedSystem(SimpleSystem):
+class UnencodedOS(GenericOS):
     def __init__(self):
-        SimpleSystem.__init__(self)
+        super(UnencodedOS, self).__init__()
         # These template slots are used by the system call layer
         self.task_list = TaskListTemplate
         self.scheduler = SchedulerTemplate
@@ -152,8 +152,6 @@ class TaskListTemplate(CodeTemplate):
         CodeTemplate.__init__(self, rules.generator, self.template_file())
         self.rules = rules
         self.system_graph = self.generator.system_graph
-        # Reference to the objects object of our rule system
-        self.objects = self.rules.objects
         self.idle = self.system_graph.find(Function, "Idle")
 
     def template_file(self):
@@ -192,8 +190,6 @@ class SchedulerTemplate(CodeTemplate):
         CodeTemplate.__init__(self, rules.generator, self.template_file())
         self.rules = rules
         self.system_graph = self.generator.system_graph
-        # Reference to the objects object of our rule system
-        self.objects = self.rules.objects
 
     def template_file(self):
         return "os/scheduler/scheduler-unencoded.h.in"
diff --git a/generator/rules/syscalls_fsm.py b/generator/coder/syscall_fsm.py
similarity index 96%
rename from generator/rules/syscalls_fsm.py
rename to generator/coder/syscall_fsm.py
index 95bb6f6..e51c83b 100644
--- a/generator/rules/syscalls_fsm.py
+++ b/generator/coder/syscall_fsm.py
@@ -1,10 +1,10 @@
-from generator.rules.syscalls_full import FullSystemCalls, AlarmTemplate
-from generator.elements import Statement, Comment
-from generator.elements import CodeTemplate, Include, VariableDefinition, \
+from .syscall_full import FullSystemCalls, AlarmTemplate
+from .elements import Statement, Comment
+from .elements import CodeTemplate, Include, VariableDefinition, \
     Block, Statement, Comment, Function, Hook, DataObject, DataObjectArray
 from generator.tools import unwrap_seq
-from generator.graph.AtomicBasicBlock import E,S
-from generator.graph.SystemSemantic import SystemState
+from generator.analysis.AtomicBasicBlock import E,S
+from generator.analysis.SystemSemantic import SystemState
 import logging
 
 
diff --git a/generator/rules/syscalls_full.py b/generator/coder/syscall_full.py
similarity index 97%
rename from generator/rules/syscalls_full.py
rename to generator/coder/syscall_full.py
index 09af7b0..d34744d 100644
--- a/generator/rules/syscalls_full.py
+++ b/generator/coder/syscall_full.py
@@ -1,16 +1,16 @@
-from generator.rules.base import BaseRules
-from generator.graph.AtomicBasicBlock import E,S
-from generator.graph.Event import Event
-from generator.elements import Statement, Comment, Function, VariableDefinition, Block, Include, \
+from .base import BaseCoder
+from generator.analysis.AtomicBasicBlock import E,S
+from generator.analysis.Event import Event
+from .elements import Statement, Comment, Function, VariableDefinition, Block, Include, \
     CodeTemplate, FunctionDeclaration
-from generator.graph.GenerateAssertions import AssertionType
-from generator.graph.Function import Function as GraphFunction
+from generator.transform.GenerateAssertions import AssertionType
+from generator.analysis.Function import Function as GraphFunction
 from generator.tools import panic
 
 
-class FullSystemCalls(BaseRules):
+class FullSystemCalls(BaseCoder):
     def __init__(self):
-        BaseRules.__init__(self)
+        super(FullSystemCalls, self).__init__()
 
         self.alarms = AlarmTemplate
 
@@ -350,8 +350,6 @@ class AlarmTemplate(CodeTemplate):
         CodeTemplate.__init__(self, rules.generator, "os/alarm.h.in")
         self.rules = rules
         self.system_graph = self.generator.system_graph
-        # Reference to the objects object of our rule system
-        self.objects = self.rules.objects
 
         # Link the foreach_subtask method from the rules
         self.foreach_subtask = self.rules.foreach_subtask
diff --git a/generator/rules/syscalls_specialized.py b/generator/coder/syscall_specialized.py
similarity index 97%
rename from generator/rules/syscalls_specialized.py
rename to generator/coder/syscall_specialized.py
index 76b7558..5991c2c 100644
--- a/generator/rules/syscalls_specialized.py
+++ b/generator/coder/syscall_specialized.py
@@ -1,13 +1,13 @@
-from generator.rules.syscalls_full import FullSystemCalls
-from generator.elements import Statement, Comment
+from .syscall_full import FullSystemCalls
+from .elements import Statement, Comment
 from generator.tools import unwrap_seq
-from generator.graph.AtomicBasicBlock import E,S
-from generator.graph.SystemSemantic import SystemState
+from generator.analysis.AtomicBasicBlock import E,S
+from generator.analysis.SystemSemantic import SystemState
 
 
 class SpecializedSystemCalls(FullSystemCalls):
     def __init__(self, global_abb_info):
-        FullSystemCalls.__init__(self)
+        super(SpecializedSystemCalls).__init__(self)
         self.global_abb_info = global_abb_info
 
     def Comment(self, kernelspace, comment, *args):
diff --git a/generator/elements/__init__.py b/generator/elements/__init__.py
deleted file mode 100644
index 06a14ea..0000000
--- a/generator/elements/__init__.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from generator.elements.SourceFile import SourceFile
-from generator.elements.FunctionManager import Function, FunctionManager, FunctionDeclaration, \
-    FunctionDefinitionBlock
-from generator.elements.IncludeManager import Include, IncludeManager
-from generator.elements.DataObjectManager import DataObject, DataObjectArray
-from generator.elements.SourceElement import *
-from generator.elements.template import CodeTemplate
-
-assert __name__ == "generator.elements"
diff --git a/generator/graph/__init__.py b/generator/graph/__init__.py
deleted file mode 100644
index 908eb21..0000000
--- a/generator/graph/__init__.py
+++ /dev/null
@@ -1,31 +0,0 @@
-__doc__ = """The graph module abstracts from all kind of Tasks, SubTasks,
-AtomicBasicBlocks and BasicBlocks, that make up an System."""
-
-assert __name__ == 'generator.graph'
-
-
-from generator.graph.AddFunctionCalls import AddFunctionCalls
-from generator.graph.Analysis import *
-from generator.graph.AtomicBasicBlock import AtomicBasicBlock
-from generator.graph.ABBMergePass import ABBMergePass
-from generator.graph.ConstructGlobalCFG import ConstructGlobalCFG
-from generator.graph.DynamicPriorityAnalysis import DynamicPriorityAnalysis
-from generator.graph.Function import Function
-from generator.graph.GlobalControlFlowMetric import GlobalControlFlowMetric
-from generator.graph.InterruptControlAnalysis import InterruptControlAnalysis
-from generator.graph.PrioritySpreadingPass import PrioritySpreadingPass
-from generator.graph.Resource import Resource
-from generator.graph.Sporadic import Alarm
-from generator.graph.Subtask import Subtask
-from generator.graph.SymbolicSystemExecution import SymbolicSystemExecution, StateTransition, SavedStateTransition
-from generator.graph.SystemGraph import SystemGraph
-from generator.graph.SystemSemantic import *
-from generator.graph.SystemStateFlow import *
-from generator.graph.GenerateAssertions import *
-from generator.graph.DominanceAnalysis import *
-from generator.graph.FiniteStateMachineBuilder import *
-from generator.graph.CFGRegions import CFGRegions
-
-
-from generator.graph.Task import Task
-from generator.graph.common import GraphObject
diff --git a/generator/main.py b/generator/main.py
index f4209ed..8122dd5 100755
--- a/generator/main.py
+++ b/generator/main.py
@@ -44,8 +44,9 @@ if __name__ == "__main__":
     sys.path.insert(0, os.path.abspath(os.path.join(source_dir, "..")))
 
     from generator import LLVMPYAnalysis, Generator, OILSystemDescription
-    from generator.rules import *
-    from generator.graph import *
+    from generator.analysis import *
+    from generator.transform import *
+    from generator.coder import *
     from generator.tools import panic, wrap_typecheck_functions
 
     # Install the typechecking
@@ -186,12 +187,12 @@ if __name__ == "__main__":
         panic("Unknown --arch=%s", options.arch)
 
     if options.unencoded:
-        os_rules = UnencodedSystem()
+        os_rules = UnencodedOS()
     else:
-        os_rules = EncodedSystem()
+        os_rules = EncodedOS()
 
     assert options.systemcalls in ("full", "specialized", "fsm")
-        
+
     if options.systemcalls == "specialized":
         # Only when we want to specialize the system calls, run the
         # System-Level analyses
diff --git a/generator/rules/__init__.py b/generator/rules/__init__.py
deleted file mode 100644
index bbd0cfe..0000000
--- a/generator/rules/__init__.py
+++ /dev/null
@@ -1,12 +0,0 @@
-assert __name__ == "generator.rules"
-
-from generator.rules.base import BaseRules
-from generator.rules.simple import SimpleSystem
-from generator.rules.encoded import EncodedSystem, SignatureGenerator
-from generator.rules.unencoded import UnencodedSystem
-from generator.rules.syscalls_full import FullSystemCalls
-from generator.rules.syscalls_specialized import SpecializedSystemCalls
-from generator.rules.syscalls_fsm import FSMSystemCalls
-from generator.rules.x86 import X86Arch
-from generator.rules.arm import ARMArch
-from generator.rules.posix import PosixArch
diff --git a/generator/rules/fsm_kernel.py b/generator/rules/fsm_kernel.py
deleted file mode 100644
index d147e95..0000000
--- a/generator/rules/fsm_kernel.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from generator.rules.simple import SimpleSystem, AlarmTemplate
-from generator.elements import CodeTemplate, Include, VariableDefinition, \
-    Block, Statement, Comment, Function, Hook, DataObject
-from generator.graph.AtomicBasicBlock import S, AtomicBasicBlock
-from generator.graph.Resource import Resource
-from generator.graph.Subtask import Subtask
-from generator.graph.Function import Function
-
-
-class FSMSystem(SimpleSystem):
diff --git a/generator/graph/CFGRegions.py b/generator/transform/CFGRegions.py
similarity index 97%
rename from generator/graph/CFGRegions.py
rename to generator/transform/CFGRegions.py
index 46cebe9..408096f 100644
--- a/generator/graph/CFGRegions.py
+++ b/generator/transform/CFGRegions.py
@@ -1,6 +1,6 @@
-from generator.graph.Analysis import Analysis
-from generator.graph.AtomicBasicBlock import E, S
-from generator.elements import DataObject, Include
+from generator.analysis.Analysis import Analysis
+from generator.analysis.AtomicBasicBlock import E, S
+from generator.coder.elements import DataObject, Include
 import logging
 
 class CFGRegions(Analysis):
diff --git a/generator/graph/FiniteStateMachineBuilder.py b/generator/transform/FiniteStateMachineBuilder.py
similarity index 99%
rename from generator/graph/FiniteStateMachineBuilder.py
rename to generator/transform/FiniteStateMachineBuilder.py
index 5a8a34a..4577926 100644
--- a/generator/graph/FiniteStateMachineBuilder.py
+++ b/generator/transform/FiniteStateMachineBuilder.py
@@ -1,6 +1,5 @@
-from generator.graph.common import *
-from generator.graph.Analysis import *
-from generator.graph import SymbolicSystemExecution, SavedStateTransition
+from generator.analysis.common import *
+from generator.analysis import Analysis, SavedStateTransition, S, E
 from generator.tools import pairwise
 from types import SimpleNamespace
 from collections import namedtuple, defaultdict
diff --git a/generator/graph/GenerateAssertions.py b/generator/transform/GenerateAssertions.py
similarity index 98%
rename from generator/graph/GenerateAssertions.py
rename to generator/transform/GenerateAssertions.py
index 513be6b..f044721 100644
--- a/generator/graph/GenerateAssertions.py
+++ b/generator/transform/GenerateAssertions.py
@@ -1,5 +1,4 @@
-from generator.graph.Analysis import Analysis
-from generator.graph.AtomicBasicBlock import E
+from generator.analysis import Analysis, E
 from generator.tools import Enum
 import logging
 
@@ -11,7 +10,6 @@ class AssertionType(Enum):
 
     EventsCheck = 4
 
-
 class Assertion:
     def __init__(self, _type, _arguments, prio = 0):
         self.Type = _type
@@ -40,7 +38,6 @@ class Assertion:
         return self.arguments
 
 
-
 class GenerateAssertionsPass(Analysis):
     """This pass generates assertions that must hold before a system call
        and after a systemcall."""
diff --git a/generator/transform/__init__.py b/generator/transform/__init__.py
new file mode 100644
index 0000000..f9670d9
--- /dev/null
+++ b/generator/transform/__init__.py
@@ -0,0 +1,5 @@
+assert __name__ == "generator.transform"
+
+from .FiniteStateMachineBuilder import *
+from .CFGRegions import CFGRegions
+from .GenerateAssertions import *
diff --git a/generator/graph/sage_finite_state_machine.py b/generator/transform/sage_finite_state_machine.py
similarity index 100%
rename from generator/graph/sage_finite_state_machine.py
rename to generator/transform/sage_finite_state_machine.py
-- 
GitLab