10 UMLClass 60 130 120 60 <Vool> -- Concrete Tree UMLClass 60 70 120 60 <Ruby> -- Concrete Tree UMLClass 60 190 120 60 <Mom> -- Linked List UMLClass 60 250 120 60 <Risc> -- Linked List UMLClass 60 310 120 50 <Arm> -- Linked List UMLClass 60 360 120 60 <Elf> -- Parfait + Binary UMLClass 220 70 730 60 A Ruby layer modelled after the ast. This layer transforms ruby into the lower Vool layer, to simplify the input. UMLClass 220 130 730 60 Vool (Virtual object oriented Language) is ruby without the fluff. Just simple oo. Vool also uses a concrete syntax tree, meaning one class per kind of statement. Vool is tranforms into Mom Instructions. UMLClass 220 190 730 60 Mom (Minimal object machine) is a very simple object oriented machine. This means it has Instructions that get executed, and form a Linked List. It only deals in objects, incuding the calling convention. It transforms into Risc in a simple 1 to n manner. UMLClass 220 250 730 60 The Risc (reduced intruction set computer) layer is a (sane) subset of ARM. It models only those instructions needed to implement Mom, about 20. It deals in memory, logic and jumps, and has registers. Transformation into ARM is mostly one to one. UMLClass 220 310 730 50 The arm chip is the most sold/used in the world, so it is our first "target". Arm has a simple instruction set and we only use the part to implement what is used in Risc. UMLClass 220 360 730 60 The lowest level, achieved by assembling arm instructions, is binary code that a cpu can execute. The Binary is stored as Parfait objects that are then wrapped into Elf. A simple (non-c) Elf file is created so Linux can start it. UMLClass 60 10 120 60 <Parser> -- Abstract Tree UMLClass 220 10 730 60 Ruby is parsed into and abstract syntax tree. "Abstract" means all nodes are represented by one class. This is implemented by the parser gem.