update for ruby layer

This commit is contained in:
Torsten Ruger
2018-07-25 12:10:08 +03:00
parent 07fcbc0a72
commit 4982710ac1
3 changed files with 71 additions and 44 deletions

View File

@ -24,7 +24,7 @@ Concrete Tree</panel_attributes>
</coordinates>
<panel_attributes>&lt;Ruby&gt;
--
Abstract Tree</panel_attributes>
Concrete Tree</panel_attributes>
<additional_attributes/>
</element>
<element>
@ -37,8 +37,7 @@ Abstract Tree</panel_attributes>
</coordinates>
<panel_attributes>&lt;Mom&gt;
--
Concrete Tree
+ Linked List</panel_attributes>
Linked List</panel_attributes>
<additional_attributes/>
</element>
<element>
@ -47,7 +46,7 @@ Concrete Tree
<x>60</x>
<y>250</y>
<w>120</w>
<h>50</h>
<h>60</h>
</coordinates>
<panel_attributes>&lt;Risc&gt;
--
@ -58,7 +57,7 @@ Linked List</panel_attributes>
<id>UMLClass</id>
<coordinates>
<x>60</x>
<y>300</y>
<y>310</y>
<w>120</w>
<h>50</h>
</coordinates>
@ -71,13 +70,13 @@ Linked List</panel_attributes>
<id>UMLClass</id>
<coordinates>
<x>60</x>
<y>350</y>
<y>360</y>
<w>120</w>
<h>50</h>
<h>60</h>
</coordinates>
<panel_attributes>&lt;Elf&gt;
--
Binary / Array</panel_attributes>
Parfait + Binary </panel_attributes>
<additional_attributes/>
</element>
<element>
@ -85,11 +84,11 @@ Binary / Array</panel_attributes>
<coordinates>
<x>220</x>
<y>70</y>
<w>670</w>
<w>730</w>
<h>60</h>
</coordinates>
<panel_attributes>Ruby is parsed into and abstract syntax tree. "Abstract" means all nodes are
represented by one class. Compiling to Vool happens by visitor pattern.</panel_attributes>
<panel_attributes>A Ruby layer modelled after the ast. This layer transforms ruby into the lower Vool
layer, to simplify the input.</panel_attributes>
<additional_attributes/>
</element>
<element>
@ -97,12 +96,12 @@ represented by one class. Compiling to Vool happens by visitor pattern.</panel_a
<coordinates>
<x>220</x>
<y>130</y>
<w>670</w>
<w>730</w>
<h>60</h>
</coordinates>
<panel_attributes>Vool (Virtual object oriented Language) is ruby without the fluff. Just simple oo.
Vool uses a concrete syntax tree, meaning one class per kind of statement.
Code to compile to Mom is in the statement classes.
Vool also uses a concrete syntax tree, meaning one class per kind of statement.
Vool is tranforms into Mom Instructions.
</panel_attributes>
<additional_attributes/>
</element>
@ -111,12 +110,12 @@ Code to compile to Mom is in the statement classes.
<coordinates>
<x>220</x>
<y>190</y>
<w>670</w>
<w>730</w>
<h>60</h>
</coordinates>
<panel_attributes>Mom (Minimal object machine) is a very simple object oriented machine. It only deals in objects,
incuding the calling convention. A first pass still uses a tree structure to represent control.
The final representation is a list of instructions.</panel_attributes>
<panel_attributes>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.</panel_attributes>
<additional_attributes/>
</element>
<element>
@ -124,19 +123,20 @@ The final representation is a list of instructions.</panel_attributes>
<coordinates>
<x>220</x>
<y>250</y>
<w>670</w>
<h>50</h>
<w>730</w>
<h>60</h>
</coordinates>
<panel_attributes>The Risc (reduced intruction set computer) layer is an (sane) subset of ARM. It models only those
instructions needed to implement Mom, about 20. It deals in memory, logic and jumps.</panel_attributes>
<panel_attributes>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.</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>220</x>
<y>300</y>
<w>670</w>
<y>310</y>
<w>730</w>
<h>50</h>
</coordinates>
<panel_attributes>The arm chip is the most sold/used in the world, so it is our first "target". Arm has a simple
@ -147,12 +147,38 @@ instruction set and we only use the part to implement what is used in Risc.</pan
<id>UMLClass</id>
<coordinates>
<x>220</x>
<y>350</y>
<w>670</w>
<h>50</h>
<y>360</y>
<w>730</w>
<h>60</h>
</coordinates>
<panel_attributes>The lowest level, achieved by assembling arm instructions, is binary code that a cpu can execute.
Elf is used to wrap it into a file so Linux can start it. Elf includes debug info too.</panel_attributes>
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.</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>60</x>
<y>10</y>
<w>120</w>
<h>60</h>
</coordinates>
<panel_attributes>&lt;Parser&gt;
--
Abstract Tree</panel_attributes>
<additional_attributes/>
</element>
<element>
<id>UMLClass</id>
<coordinates>
<x>220</x>
<y>10</y>
<w>730</w>
<h>60</h>
</coordinates>
<panel_attributes>Ruby is parsed into and abstract syntax tree. "Abstract" means all nodes are
represented by one class. This is implemented by the parser gem.</panel_attributes>
<additional_attributes/>
</element>
</diagram>