cpiDefineParserClass

Finalidad

Esta función define el nombre de una clase de analizador a la que da soporte una fábrica de analizador. functbl es un puntero a una tabla de funciones virtual que contiene punteros a las funciones de implementación de plug-in C, es decir, las funciones que proporcionan la función del propio analizador.

Sintaxis

void cpiDefineParserClass(
  int*         returnCode,
  CciFactory*  factoryObject,
  CciChar*     name,
  CPI_VFT*     functbl);

Parámetros

returnCode
Recibe el código de retorno de la función (salida).
factoryObject
Especifica la dirección del objeto de fábrica que da soporte al analizador nombrado (entrada). La dirección se devuelve desde cpiCreateParserFactory.
name
Nombre de la clase de analizador que se va a definir (entrada). La longitud máxima de un nombre de clase de analizador es ocho caracteres.
functbl
Dirección de la estructura CPI_VFT que contiene punteros a las funciones de implementación de plug-in (entrada).

Valores de retorno

Ninguno. Si se produce un error, returnCode indica la causa de dicho error.

Ejemplo

Este ejemplo se ha tomado del archivo de analizador de ejemplo BipSampPluginParser.c (de la línea 862 a la 901):

void LilFactoryExportPrefix * LilFactoryExportSuffix bipGetParserFactory()
{
  /* Declarar variables                                                  */
  CciFactory*     factoryObject;
  int             rc;
  static CPI_VFT  vftable = {CPI_VFT_DEFAULT};

  /* Antes de seguir, debemos inicializar todas las constantes estáticas */
  /* que el plug-in pueda utilizar.                                      */
  initParserConstants();

  /* Configurar tabla de funciones con punteros para analizar funciones  */
  /* de implementación                                                   */
  vftable.iFpCreateContext            = cpiCreateContext;
  vftable.iFpParseBufferEncoded       = cpiParseBufferEncoded;
  vftable.iFpParseFirstChild          = cpiParseFirstChild;
  vftable.iFpParseLastChild           = cpiParseLastChild;
  vftable.iFpParsePreviousSibling     = cpiParsePreviousSibling;
  vftable.iFpParseNextSibling         = cpiParseNextSibling;
  vftable.iFpWriteBufferEncoded       = cpiWriteBufferEncoded;
  vftable.iFpDeleteContext            = cpiDeleteContext;
  vftable.iFpSetElementValue          = cpiSetElementValue;
  vftable.iFpElementValue             = cpiElementValue;
  vftable.iFpNextParserClassName      = cpiNextParserClassName;
  vftable.iFpSetNextParserClassName   = cpiSetNextParserClassName;
  vftable.iFpNextParserEncoding       = cpiNextParserEncoding;
  vftable.iFpNextParserCodedCharSetId = cpiNextParserCodedCharSetId;

  /* Crear la fábrica del analizador para este plug-in                   */
  factoryObject = cpiCreateParserFactory(&rc, constParserFactory);
  if (factoryObject) {
    /* Definir las clases de mensaje que soporta la fábrica              */
    cpiDefineParserClass(&rc, factoryObject, constPXML, &vftable);
  }
  else {
    /* Error: No se ha podido crear la fábrica del analizador            */
  }

  /* Devolver dirección de este objeto de fábrica al intermediario       */
  return(factoryObject);
}

Conceptos relacionados
Analizadores definidos por el usuario
Extensiones definidas por el usuario

Tareas relacionadas
Creación de un analizador en C

Referencia relacionada
cpiCreateParserFactory
Funciones de programa de utilidad de analizador