fixed whitespace handling in lexer, moved parser and renderer to separate files