code: public function generateSyntaxTree(
          RuntimeConfiguration $configuration,
          ClassDefinition $classDefinition,
          &$className = null
      ) {
          $this->typeCheck->generateSyntaxTree(func_get_args());
  
          $className = $this->validatorClassName(
              $configuration,
              $classDefinition
          );
  
          $classDefinitionASTNode = new ClassDefinitionASTNode(
              new Identifier($className->shortName()->string())
          );
          $classDefinitionASTNode->setParentName(QualifiedIdentifier::fromString(
              $configuration
                  ->validatorNamespace()
                  ->joinAtoms('AbstractValidator')
                  ->string()
          ));
          foreach ($classDefinition->methods() as $methodDefinition) {
              $classDefinitionASTNode->add(
                  $this->generateMethod($configuration, $classDefinition, $methodDefinition)
              );
          }
  
          $primaryBlock = new PhpBlock;
          $primaryBlock->add(new NamespaceStatement(QualifiedIdentifier::fromString(
              $className->parent()->toRelative()->string()
          )));
          $primaryBlock->add($classDefinitionASTNode);
  
          $syntaxTree = new SyntaxTree;
          $syntaxTree->add($primaryBlock);
  
          return $syntaxTree;
      }
docs: @param RuntimeConfiguration $configuration
  @param ClassDefinition      $classDefinition
  @param null                 &$className
  
  @return SyntaxTree