separating parse tree builder from semantic tree builder