  private final void find ( ArrayList < String > pBounded ,
      Expression pExpression )
  {
    for ( Method method : this.getClass ( ).getDeclaredMethods ( ) )
    {
      if ( method.getName ( ).equals (
          FIND + pExpression.getClass ( ).getSimpleName ( ) ) )
      {
        try
        {
          Object [ ] argument = new Object [ 2 ] ;
          argument [ 0 ] = pBounded ;
          argument [ 1 ] = pExpression ;
          method.invoke ( this , argument ) ;
        }
        catch ( IllegalArgumentException e )
        {
        }
        catch ( IllegalAccessException e )
        {
        }
        catch ( InvocationTargetException e )
        {
        }
        return ;
      }
    }
    Enumeration < Expression > children = pExpression.children ( ) ;
    while ( children.hasMoreElements ( ) )
    {
      find ( pBounded , children.nextElement ( ) ) ;
    }
  }

  private final void find ( ArrayList < String > pBounded ,
      Expression pExpression )
  {
    for ( Method method : this.getClass ( ).getDeclaredMethods ( ) )
    {
      if ( method.getName ( ).equals (
          FIND + pExpression.getClass ( ).getSimpleName ( ) ) )
      {
        try
        {
          Object [ ] argument = new Object [ 2 ] ;
          argument [ 0 ] = pBounded ;
          argument [ 1 ] = pExpression ;
          method.invoke ( this , argument ) ;
        }
        catch ( IllegalArgumentException e )
        {
          System.err.println ( "IllegalArgumentException: " 
              + this.getClass ( ).getCanonicalName ( ) + "." + FIND 
              + pExpression.getClass ( ).getSimpleName ( ) ) ;
        }
        catch ( IllegalAccessException e )
        {
          System.err.println ( "IllegalAccessException: " 
              + this.getClass ( ).getCanonicalName ( ) + "." + FIND 
              + pExpression.getClass ( ).getSimpleName ( ) ) ;
        }
        catch ( InvocationTargetException e )
        {
          System.err.println ( "InvocationTargetException: " 
              + this.getClass ( ).getCanonicalName ( ) + "." + FIND 
              + pExpression.getClass ( ).getSimpleName ( ) ) ;
        }
        return ;
      }
    }
    Enumeration < Expression > children = pExpression.children ( ) ;
    while ( children.hasMoreElements ( ) )
    {
      find ( pBounded , children.nextElement ( ) ) ;
    }
  }
