Structs
Useful for debugging errors in the code, the range will tell us where
Useful for lexical analysys, with the tokenizer we transform series of
characters into tokens to feed to the parser
This struct behaves like a peekable iterator of tokens with methods to eat
tokens and effectively advance the iterator