code: public function generateSyntaxTree(
          RuntimeConfiguration $configuration,
          &$className = null
      ) {
          $this->typeCheck->generateSyntaxTree(func_get_args());
  
          $className = $configuration
              ->validatorNamespace()
              ->joinAtoms('Exception', 'MissingArgumentException')
          ;
  
          $classDefinition = new ClassDefinition(
              new Identifier($className->shortName()->string()),
              ClassModifier::FINAL_()
          );
          $classDefinition->setParentName(
              QualifiedIdentifier::fromString('UnexpectedInputException')
          );
          $classDefinition->add($this->generateConstructor());
          $classDefinition->add($this->generateParameterNameMethod());
          $classDefinition->add($this->generateIndexMethod());
          $classDefinition->add($this->generateExpectedTypeMethod());
  
          $classDefinition->add(new Property(
              new Identifier('parameterName'),
              AccessModifier::PRIVATE_()
          ));
          $classDefinition->add(new Property(
              new Identifier('index'),
              AccessModifier::PRIVATE_()
          ));
          $classDefinition->add(new Property(
              new Identifier('expectedType'),
              AccessModifier::PRIVATE_()
          ));
  
          $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