Tidy up
This commit is contained in:
103 files changed
+3663
-3779
No files matched your search
@@ -1,6 +1,6 @@
|
||||
# Compiling Variables
|
||||
|
||||
A variable is identified by a alphanumeric string. We can store this as a list of pairs, with the variables identifier and its value.
|
||||
A variable is identified by an alphanumeric string. We can store this as a list of pairs, with the variable's identifier and its value.
|
||||
|
||||
Variable Environment or VarEnv - `[(Identifier, Stack Address)]`
|
||||
|
||||
@@ -8,7 +8,7 @@ A stack address is an integer value that specifies where in the stack that varia
|
||||
|
||||
The bottom of the stack is indexed `0`.
|
||||
|
||||
Lets say our environment consists of 3 variables named x,y,z. It would look like:
|
||||
Let's say our environment consists of 3 variables named x, y, z. It would look like:
|
||||
|
||||
`[("z",2), ("y",1), ("x",0)]`
|
||||
|
||||
@@ -18,13 +18,13 @@ Lets say our environment consists of 3 variables named x,y,z. It would look like
|
||||
| y | 2 | 1 |
|
||||
| z | 9 | 2 |
|
||||
|
||||
To get the value of a variable from the stackk, TAM uses the instruction `LOADL a` where `a` is a stack address. `LOADL` will get the value and copy the value to the top of the stack.
|
||||
To get the value of a variable from the stack, TAM uses the instruction `LOADL a` where `a` is a stack address. `LOADL` will get the value and copy the value to the top of the stack.
|
||||
|
||||
`LOAD a` - copy address a to top of stack
|
||||
|
||||
`STORE a` - pop top of stack to address a
|
||||
|
||||
For example if `LOADL 2` is called, it will effect the stack in the following way:
|
||||
For example, if `LOADL 2` is called, it will affect the stack in the following way:
|
||||
|
||||
| Variables | Stack (Values) | Index |
|
||||
| :-------: | :------------: | :---: |
|
||||
@@ -38,7 +38,7 @@ For example if `LOADL 2` is called, it will effect the stack in the following wa
|
||||
expCode :: VarEnv -> Expr -> [TAMInst]
|
||||
```
|
||||
|
||||
Before we just called the abstract syntax tree `AST` however with the extended grammar now we will have multiple ASTs, one for programs, one for commands, expressions. The AST for expressions we call `Expr`.
|
||||
Before, we just called the abstract syntax tree `AST`; however, with the extended grammar, we will now have multiple ASTs: one for programs, one for commands and one for expressions. The AST for expressions we call `Expr`.
|
||||
|
||||
Remember in our compiler, the stack is represented and stored as a list, with the top of the stack being the head of the list.
|
||||
|
||||
@@ -87,10 +87,10 @@ $$
|
||||
Example: $s_n$ could be your bank balance and $a_n$ could be the purchase history.
|
||||
|
||||
- In our case:
|
||||
- States are VarEnv & next free address space for next variable
|
||||
- Outputs are TAM instructions
|
||||
- States are VarEnv & next free address space for next variable
|
||||
- Outputs are TAM instructions
|
||||
|
||||
We to define a type that models a state transform, while at the same time producing a result. This is where a state monad comes in.
|
||||
We need to define a type that models a state transform, while at the same time producing a result. This is where a state monad comes in.
|
||||
|
||||
```haskell
|
||||
newtype ST st a = S (\st -> (a, st))
|
||||
|
||||
Reference in new issue
Block a user