code: public function generateSyntaxTree(
          RuntimeConfiguration $configuration,
          &$className = null
      ) {
          $this->typeCheck->generateSyntaxTree(func_get_args());
  
          $className = $configuration
              ->validatorNamespace()
              ->joinAtoms('TypeCheck')
          ;
  
          $classDefinition = new ClassDefinition(
              new Identifier($className->shortName()->string()),
              ClassModifier::ABSTRACT_()
          );
          $classDefinition->add($this->generateGetMethod());
          $classDefinition->add($this->generateInstallMethod());
          $classDefinition->add($this->generateSetDummyModeMethod());
          $classDefinition->add($this->generateDummyModeMethod());
          $classDefinition->add($this->generateSetRuntimeGenerationMethod());
          $classDefinition->add($this->generateRuntimeGenerationMethod());
          $classDefinition->add($this->generateCreateValidatorMethod(
              $configuration
          ));
          $classDefinition->add($this->generateDefineValidatorMethod(
              $configuration
          ));
          $classDefinition->add($this->generateConfigurationMethod(
              $configuration
          ));
  
          $instancesProperty = new Property(
              new Identifier('instances'),
              AccessModifier::PRIVATE_(),
              true
          );
          $instancesProperty->setDefaultValue(
              new ArrayLiteral
          );
          $classDefinition->add($instancesProperty);
  
          $dummyModeProperty = new Property(
              new Identifier('dummyMode'),
              AccessModifier::PRIVATE_(),
              true
          );
          $dummyModeProperty->setDefaultValue(new Literal(false));
          $classDefinition->add($dummyModeProperty);
  
          $runtimeGenerationProperty = new Property(
              new Identifier('runtimeGeneration'),
              AccessModifier::PRIVATE_(),
              true
          );
          $runtimeGenerationProperty->setDefaultValue(new Literal(false));
          $classDefinition->add($runtimeGenerationProperty);
  
          $primaryBlock = new PhpBlock;
          $primaryBlock->add(new NamespaceStatement(QualifiedIdentifier::fromString(
              $className->parent()->toRelative()->string()
          )));
          $primaryBlock->add($classDefinition);
  
          $syntaxTree = new SyntaxTree;
          $syntaxTree->add($primaryBlock);
  
          return $syntaxTree;
      }
docs: @param RuntimeConfiguration $configuration
  @param null                 &$className
  
  @return SyntaxTree