TODO:
- interpret AST at runtime
- optimise the AST (http://calmerthanyouare.org/2015/01/07/optimizing-brainfuck.html)
- clear loops
- simplification (+x5 -x3 == +x2)
- copy loops
- multiplication loops
- scan loops
- operation offsets
pros:
- simple
- has an AST for expandability
cons:
- naive
- minimal optimisations
- memory hungry due to AST