[WIP] Use lexer 

This method should be split up into multiple private methods for readability/complexity