⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rulecmp.c

📁 clips源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*********************************************************//* DefruleModuleToCode: Writes the C code representation *//*   of a single defrule module to the specified file.   *//*********************************************************/#if IBM_TBC#pragma argsused#endifstatic void DefruleModuleToCode(  void *theEnv,  FILE *theFile,  struct defmodule *theModule,  int imageID,  int maxIndices,  int moduleCount)  {#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(moduleCount)#endif   fprintf(theFile,"{");   ConstructModuleToCode(theEnv,theFile,theModule,imageID,maxIndices,                                  DefruleData(theEnv)->DefruleModuleIndex,ConstructPrefix(DefruleData(theEnv)->DefruleCodeItem));   fprintf(theFile,",NULL}");  }/**********************************************************//* DefruleToCode: Writes the C code representation of a   *//*   single defrule data structure to the specified file. *//**********************************************************/static void DefruleToCode(  void *theEnv,  FILE *theFile,  struct defrule *theDefrule,  int imageID,  int maxIndices,  int moduleCount)  {   /*==================*/   /* Construct Header */   /*==================*/   fprintf(theFile,"{");   ConstructHeaderToCode(theEnv,theFile,&theDefrule->header,imageID,maxIndices,                                  moduleCount,ModulePrefix(DefruleData(theEnv)->DefruleCodeItem),                                  ConstructPrefix(DefruleData(theEnv)->DefruleCodeItem));   /*==========================*/   /* Flags and Integer Values */   /*==========================*/   fprintf(theFile,",%d,%d,%d,%d,%d,%d,%d,%d,",                   theDefrule->salience,theDefrule->localVarCnt,                   theDefrule->complexity,theDefrule->afterBreakpoint,                   theDefrule->watchActivation,theDefrule->watchFiring,                   theDefrule->autoFocus,theDefrule->executing);   /*==================*/   /* Dynamic Salience */   /*==================*/   ExpressionToCode(theEnv,theFile,theDefrule->dynamicSalience);   fprintf(theFile,",");   /*=============*/   /* RHS Actions */   /*=============*/   ExpressionToCode(theEnv,theFile,theDefrule->actions);   fprintf(theFile,",");   /*=========================*/   /* Logical Dependency Join */   /*=========================*/   if (theDefrule->logicalJoin != NULL)     {      fprintf(theFile,"&%s%d_%ld[%ld],",JoinPrefix(),                     imageID,(theDefrule->logicalJoin->bsaveID / maxIndices) + 1,                             theDefrule->logicalJoin->bsaveID % maxIndices);     }   else     { fprintf(theFile,"NULL,"); }   /*===========*/   /* Last Join */   /*===========*/   if (theDefrule->lastJoin != NULL)     {      fprintf(theFile,"&%s%d_%ld[%ld],",JoinPrefix(),                     imageID,(theDefrule->lastJoin->bsaveID / maxIndices) + 1,                             theDefrule->lastJoin->bsaveID % maxIndices);     }   else     { fprintf(theFile,"NULL,"); }   /*===============*/   /* Next Disjunct */   /*===============*/   if (theDefrule->disjunct != NULL)     {      fprintf(theFile,"&%s%d_%ld[%ld]}",ConstructPrefix(DefruleData(theEnv)->DefruleCodeItem),                     imageID,(theDefrule->disjunct->header.bsaveID / maxIndices) + 1,                             theDefrule->disjunct->header.bsaveID % maxIndices);     }   else     { fprintf(theFile,"NULL}"); }  }/***************************************************//* JoinToCode: Writes the C code representation of *//*   a single join node to the specified file.     *//***************************************************/static void JoinToCode(  void *theEnv,  FILE *joinFile,  struct joinNode *theJoin,  int imageID,  int maxIndices)  {   struct patternParser *theParser;   /*===========================*/   /* Mark the join as visited. */   /*===========================*/   theJoin->marked = 0;   /*===========================*/   /* Flags and Integer Values. */   /*===========================*/   fprintf(joinFile,"{%d,%d,%d,%d,%d,0,0,%d,%d,0,0,0,0,",                   theJoin->firstJoin,theJoin->logicalJoin,                   theJoin->joinFromTheRight,theJoin->patternIsNegated,                   theJoin->patternIsExists,                   theJoin->rhsType,theJoin->depth);   /*==========================*/   /* Left and right Memories. */   /*==========================*/   fprintf(joinFile,"NULL,NULL,");   /*====================*/   /* Network Expression */   /*====================*/   PrintHashedExpressionReference(theEnv,joinFile,theJoin->networkTest,imageID,maxIndices);   fprintf(joinFile,",");   PrintHashedExpressionReference(theEnv,joinFile,theJoin->secondaryNetworkTest,imageID,maxIndices);   fprintf(joinFile,",");   PrintHashedExpressionReference(theEnv,joinFile,theJoin->leftHash,imageID,maxIndices);   fprintf(joinFile,",");   PrintHashedExpressionReference(theEnv,joinFile,theJoin->rightHash,imageID,maxIndices);   fprintf(joinFile,",");      /*============================*/   /* Right Side Entry Structure */   /*============================*/   if (theJoin->rightSideEntryStructure == NULL)     { fprintf(joinFile,"NULL,"); }   else if (theJoin->joinFromTheRight == FALSE)     {      theParser = GetPatternParser(theEnv,(int) theJoin->rhsType);      if (theParser->codeReferenceFunction == NULL) fprintf(joinFile,"NULL,");      else        {         fprintf(joinFile,"VS ");         (*theParser->codeReferenceFunction)(theEnv,theJoin->rightSideEntryStructure,                                             joinFile,imageID,maxIndices);         fprintf(joinFile,",");        }     }   else     {      fprintf(joinFile,"&%s%d_%ld[%ld],",JoinPrefix(),              imageID,(((struct joinNode *) theJoin->rightSideEntryStructure)->bsaveID / maxIndices) + 1,                      ((struct joinNode *) theJoin->rightSideEntryStructure)->bsaveID % maxIndices);     }   /*=================*/   /* Next Join Level */   /*=================*/   if (theJoin->nextLinks == NULL)     { fprintf(joinFile,"NULL,"); }   else     {      fprintf(joinFile,"&%s%d_%ld[%ld],",LinkPrefix(),                    imageID,(theJoin->nextLinks->bsaveID / maxIndices) + 1,                            theJoin->nextLinks->bsaveID % maxIndices);     }   /*=================*/   /* Last Join Level */   /*=================*/   if (theJoin->lastLevel == NULL)     { fprintf(joinFile,"NULL,"); }   else     {      fprintf(joinFile,"&%s%d_%ld[%ld],",JoinPrefix(),                    imageID,(theJoin->lastLevel->bsaveID / maxIndices) + 1,                            theJoin->lastLevel->bsaveID % maxIndices);     }   /*==================*/   /* Right Match Node */   /*==================*/   if (theJoin->rightMatchNode == NULL)     { fprintf(joinFile,"NULL,"); }   else     {      fprintf(joinFile,"&%s%d_%ld[%ld],",JoinPrefix(),                    imageID,(theJoin->rightMatchNode->bsaveID / maxIndices) + 1,                            theJoin->rightMatchNode->bsaveID % maxIndices);     }   /*==================*/   /* Rule to Activate */   /*==================*/   if (theJoin->ruleToActivate == NULL)     { fprintf(joinFile,"NULL}"); }   else     {      fprintf(joinFile,"&%s%d_%ld[%ld]}",ConstructPrefix(DefruleData(theEnv)->DefruleCodeItem),imageID,                                    (theJoin->ruleToActivate->header.bsaveID / maxIndices) + 1,                                    theJoin->ruleToActivate->header.bsaveID % maxIndices);     }  }/***************************************************//* LinkToCode: Writes the C code representation of *//*   a single join node to the specified file.     *//***************************************************/static void LinkToCode(  void *theEnv,  FILE *theFile,  struct joinLink *theLink,  int imageID,  int maxIndices)  {       /*==================*/   /* Enter Direction. */   /*==================*/   fprintf(theFile,"{%d,",theLink->enterDirection);   /*======*/   /* Join */   /*======*/   if (theLink->join == NULL)     { fprintf(theFile,"NULL,"); }   else     {      fprintf(theFile,"&%s%d_%ld[%ld],",JoinPrefix(),                    imageID,(theLink->join->bsaveID / maxIndices) + 1,                            theLink->join->bsaveID % maxIndices);     }   /*======*/   /* Next */   /*======*/   if (theLink->next == NULL)     { fprintf(theFile,"NULL,"); }   else     {      fprintf(theFile,"&%s%d_%ld[%ld],",LinkPrefix(),                    imageID,(theLink->next->bsaveID / maxIndices) + 1,                            theLink->next->bsaveID % maxIndices);     }        /*===========*/   /* Bsave ID. */   /*===========*/   fprintf(theFile,"0}");  }/*************************************************************//* DefruleCModuleReference: Writes the C code representation *//*   of a reference to a defrule module data structure.      *//*************************************************************/globle void DefruleCModuleReference(  void *theEnv,  FILE *theFile,  int count,  int imageID,  int maxIndices)  {   fprintf(theFile,"MIHS &%s%d_%d[%d]",ModulePrefix(DefruleData(theEnv)->DefruleCodeItem),                      imageID,                      (count / maxIndices) + 1,                      (count % maxIndices));  }/*****************************************************************//* InitDefruleCode: Writes out initialization code for defrules. *//*****************************************************************/#if IBM_TBC#pragma argsused#endifstatic void InitDefruleCode(  void *theEnv,  FILE *initFP,  int imageID,  int maxIndices)  {#if MAC_MCW || IBM_MCW || MAC_XCD#pragma unused(maxIndices)#pragma unused(theEnv)#pragma unused(imageID)#endif   fprintf(initFP,"   DefruleRunTimeInitialize(theEnv,");   if (DefruleData(theEnv)->RightPrimeJoins == NULL)     { fprintf(initFP,"NULL,"); }   else     {      fprintf(initFP,"&%s%d_%ld[%ld],",LinkPrefix(),                    imageID,(DefruleData(theEnv)->RightPrimeJoins->bsaveID / maxIndices) + 1,                             DefruleData(theEnv)->RightPrimeJoins->bsaveID % maxIndices);     }   if (DefruleData(theEnv)->LeftPrimeJoins == NULL)     { fprintf(initFP,"NULL);\n"); }   else     {      fprintf(initFP,"&%s%d_%ld[%ld]);\n",LinkPrefix(),                    imageID,(DefruleData(theEnv)->LeftPrimeJoins->bsaveID / maxIndices) + 1,                             DefruleData(theEnv)->LeftPrimeJoins->bsaveID % maxIndices);     }  }#endif /* DEFRULE_CONSTRUCT && (! RUN_TIME) && CONSTRUCT_COMPILER */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -