TokenValueNode

interface TokenValueNode<T extends TokenType> extends TokenNode<T> {
  value: string
}

We now create another interface, this one being an extension of our base TokenNode, with an additional field called value.

This will be used when we need to capture what a thing references, or what it is called, when we build our token.

Example

If we take our (shortened) DSL of:

new hello

We could pass this as:

[
  { type: TokenType.VariableDeclaration },
  { type: TokenType.Literal }
]

But.. when we go forward, we have no idea what this literal is actually called.

When we introduce our TokenValueNode, our result would look like this:

[
  { type: TokenType.VariableDeclaration },
  { type: TokenType.Literal, value: 'hello' }
]

Now we know what the literals value is.