Add README.md
This commit is contained in:
parent
e30d95ca8b
commit
2c659f1f8c
1 changed files with 29 additions and 0 deletions
29
README.md
Normal file
29
README.md
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
# What is this project?
|
||||||
|
|
||||||
|
This project contains a compiler and runtime environment to calculate
|
||||||
|
simple arithmetic expressions (simple as in only `+-*/`).
|
||||||
|
The compiler is written in Haskell and the the runtimesystem
|
||||||
|
is written in C.
|
||||||
|
|
||||||
|
# How does it work?
|
||||||
|
|
||||||
|
The compiler restructures the arithmetic expression into an abstract
|
||||||
|
syntax tree.
|
||||||
|
The nodes of this tree contain the operation and the leafes are the
|
||||||
|
constants of the expression.
|
||||||
|
The syntax tree is then traversed in order to transform the expression
|
||||||
|
into Reverse Polish Notation ([RPN](https://en.wikipedia.org/wiki/Reverse_Polish_notation))
|
||||||
|
and building the commands to calculate the results on a [stack machine](https://en.wikipedia.org/wiki/Stack_machine).
|
||||||
|
The assembler then translates the commands into a bytestring an saves the result an a file.
|
||||||
|
The runtime system reads the bytestring reconstructing the
|
||||||
|
commands and executes them using an operand stack.
|
||||||
|
This design is heavily influence by the [Java Virtual Machine](https://en.wikipedia.org/wiki/Java_virtual_machine), but providing not nearly as much features.
|
||||||
|
|
||||||
|
# But why?!
|
||||||
|
|
||||||
|
Mainly for the fun and learning.
|
||||||
|
I need to learn Haskell for University so I figuered I try to
|
||||||
|
write the compiler and assembler in it.
|
||||||
|
However I also always wanted to write something more than a "Hello world!"
|
||||||
|
in C and figured a stack machine would be the perfect fit, as it isn't too
|
||||||
|
complex but also more than the simple "Hello world!".
|
||||||
Loading…
Add table
Add a link
Reference in a new issue