constructor({
      stream,
      token,
      lines
    }) {
      this.token = token;
      this.stream = stream;
      this.lines = lines;
    }
Context is used to parse tokens into the base AST.
Originally the parser was a giant class and the context was the 'this' pointer.
Maintaining a monolithic parser is rather difficult so it was broken up into a
collection of self-contained parsers for each syntactic construct. The context
is passed around between each one to generate the desired tree