Inspired by https://www.codewars.com/kata/assembler-interpreter-part-ii/
But overengineered:
- Syntactic checks
- Semantic checks (check for duplicated labels, invalid operands, invalid types etc)
- Useful errors
- and probably more useless stuff
NOTE: most of this code is almost one year old