Reinitial commit, with refactoring visitor pattern, composite pattern, grammar