added visitor pattern with lexer/parser/visitors.