?? rulecmp.c
字號:
/*********************************************************//* 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 + -