That's the real purpose of this module; it's not really generating an
AST since ARL's syntax isn't tree like whatsoever.
The next stage will be something closer to an AST, in the sense we'll
be introducing:
- Syntactical analysis
- Type Checking
LOG, LOG_ERR. LOG_ERR will always compile to a /stderr/ print. LOG,
on the other hand, may not actually do anything if VERBOSE_LOGS is
not 1. By default it is 0, so it must be defined when compiling to
enable - hence the adjustment of the Makefile.
Primitive is a bit of a word conflict here; primitives are what we'd
expect our callables to be named eventually. However, these parser
"primitives" are just well known symbols that we want to optimise the
representation of for later stages. Thus, KNOWN is a bit better for
signalling intent then PRIMITIVE is.
Main reason is so we don't have that stupid arl prefix directory in
our source code. Now our source code is flat, and we can still
reference headers by linking from root.