added new classes and began reimplementation of SemanticChecker