diff --git a/HOME_EXAM.md b/HOME_EXAM.md
index c4fbae4ffcdeb568201e6bf7623954d79ecd65d0..a464103c07cd9190b9cac883bb3983cdaa2ae95f 100644
--- a/HOME_EXAM.md
+++ b/HOME_EXAM.md
@@ -49,7 +49,7 @@ LogOp
 ```ebnf
     : "&&"
     | "||"
-    | "!"
+    | "!" 
     ;
 ```
 CondOp
@@ -161,6 +161,10 @@ fn main() {
     test_bool(true);
 }
 ```
+The parser has been implemented using an LR(1) parser generator, [lalrpop](https://github.com/lalrpop/lalrpop). It's a strong tool that offers your code to be DRY and have a readeble grammar from the beginning. It also offers macros which have been used to make the the code less repetetive, more readeble and to implement precedence. 
+
+To write the parser the documention has been sufficient but examples from both the documentation and the lalrpop repo has been used.
+
 Above descirbed EBNF and showcase defines a minimal subset of Rust, including
 - Function declaration, with excplicit return type either void (NONE) or primitive type
 - Primitive types are i32 and boolean
@@ -186,31 +190,122 @@ For furture development
 - Compare your solution to the requirements (as stated in the README.md). What are your contributions to the implementation.
 
 Structural Operational Semantics (SOS)
-Symbolx: 
+
+Symbols: 
 - σ, state
 - σ', derived state
 - ⇓, evaluates
 - c, command
 - x, variable
 - e, expression
-- b, boolean expression
+
+An expression can be either a
+- b, boolean 
+- n, number 
+- f, function
+
+Function sequence
+
+$<f, σ>⇓σ'$
+
+```rust
+fn main() {
+    test();
+}
+```
+The function call moves the current state, $σ$ to the new derived state $σ'$ in the function, test()'s context.
 
 Command sequence
 
 $\frac{<c1,σ> ⇓ σ' <c2,σ'> ⇓ σ''}{<c1;c2,σ> ⇓ σ''}$
 
-Arithmetic
+```rust
+let x : i32 = 2;
+test();
+```
+A sequence is a composition of commands where the first command is first executed then the second command. Otherwise the intermediate step, $σ'$ would be lost.
+
+Operands for arithmetic expressions
+
+$\frac{<e1,σ> ⇓ n1 <e2, σ> ⇓ n2}{<e1 + e2, σ> ⇓ n1 \text{ } plus \text{ } n2}$
+
+plus is addition as implemented in the computer. Other arithmetic operands imlemented are
+- -, minus
+- *, multiplication
+- /, division
+- ">", greather than
+-  "<", less than
+- "==", equal
+- "!=", not equal
+
+Operands for boolean expressions
+
+$\frac{<e1,σ> ⇓ b1 <e2, σ> ⇓ b2}{<e1 == e2, σ> ⇓ b1 \text{ } equal \text{ } b2}$
+
+how equals is evaluated is up to the computer. Other boolean operands implemented are
+
+- ">", greather than
+-  "<", less than
+- "==", equal
+- "!=", not equal
+- "&&", and
+- "||", or
+
 
-$\frac{<e1,σ> ⇓ n1 <e2, σ> ⇓ n2}{<e1 + e2, σ> ⇓ n1 plus n2}$
 
 If true
 
-$\frac{<b, σ> ⇓ true <c1, σ> ⇓ σ'}{<if b then c1> ⇓ σ}$
+$\frac{<b, σ> ⇓ true <c1, σ> ⇓ σ'}{<if \text{ } b \text{ } then \text{ } c1> ⇓ σ}$
+
+then the state, $σ$ will change immediately to $σ'$.
 
 If false
 
-$\frac{<b, σ> ⇓ false <c1, σ> ⇓ σ'}{<if b then c1> ⇓ σ}$
+$\frac{<b, σ> ⇓ false <c1, σ> ⇓ σ''}{<if \text{ } b \text{ } then \text{ } c1> ⇓ σ}$
+
+the state, $σ'$ will be changed at the second command to $σ''$.
+
+While false
+
+$\frac{<b,σ> ⇓ false}{<while \text{ } b \text{ } do \text{ } c,σ> ⇓ σ}$
+
+While true
+
+$\frac{<b, σ> ⇓ true <c,σ> ⇓ σ' 0 <while \text{ } b \text{ } do \text{ } c, σ'> ⇓ σ''}{<while \text{ } b \text{ } do \text{ } c,σ> ⇓ σ''}$
+
+then $σ'$ is the result of the current state, $σ$ and the last state $σ''$ is the result of $σ'$.
+
+Let assignment expression
+
+$\frac{<x, σ>⇓<let \text{ } x:=e, σ>⇓σ'}{<let \text{ } x := e, σ> ⇓ σ[x := e]}$
+```rust
+let a : i32 = 1;
+let b : bool = true;
+let c : i32 = test(); // test() explicit return of type i32
+```
+For let commands,  if the variable is already declared the state $σ$ will be changed to the one of the second command, state $σ'$, the variable will be lost. Otherwise the variable will be assigned to the state, $σ$.
 
+Assignment expression
+
+$\frac{}{<x := e, σ> ⇓ σ[x := e]}$
+
+```rust
+x = 1;
+x = true;
+x = test();
+```
+For assignment, when the variable is assigned to a number, boolean or function the variable and corresponding rhs is moved to the same state.
+
+Return
+
+$\frac{<f, σ>⇓σ}{<return : e, σ> ⇓ σ[return : e]}$
+
+```rust
+fn main() -> i32 {
+    return 1 + 1;
+}
+```
+At explicit return the expression is moved to the state of the function.