📄 rulecmp.c
字号:
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 *theFile,
struct joinNode *theJoin,
int imageID,
int maxIndices)
{
struct patternParser *theParser;
/*===========================*/
/* Mark the join as visited. */
/*===========================*/
theJoin->marked = 0;
/*===========================*/
/* Flags and Integer Values. */
/*===========================*/
fprintf(theFile,"{%d,%d,%d,%d,0,0,%d,%d,0,",
theJoin->firstJoin,theJoin->logicalJoin,
theJoin->joinFromTheRight,theJoin->patternIsNegated,
theJoin->rhsType,theJoin->depth);
/*==============*/
/* Beta Memory. */
/*==============*/
fprintf(theFile,"NULL,");
/*====================*/
/* Network Expression */
/*====================*/
PrintHashedExpressionReference(theEnv,theFile,theJoin->networkTest,imageID,maxIndices);
fprintf(theFile,",");
/*============================*/
/* Right Side Entry Structure */
/*============================*/
if (theJoin->rightSideEntryStructure == NULL)
{ fprintf(theFile,"NULL,"); }
else if (theJoin->joinFromTheRight == FALSE)
{
theParser = GetPatternParser(theEnv,(int) theJoin->rhsType);
if (theParser->codeReferenceFunction == NULL) fprintf(theFile,"NULL,");
else
{
fprintf(theFile,"VS ");
(*theParser->codeReferenceFunction)(theEnv,theJoin->rightSideEntryStructure,
theFile,imageID,maxIndices);
fprintf(theFile,",");
}
}
else
{
fprintf(theFile,"&%s%d_%ld[%ld],",JoinPrefix(),
imageID,(((struct joinNode *) theJoin->rightSideEntryStructure)->bsaveID / maxIndices) + 1,
((struct joinNode *) theJoin->rightSideEntryStructure)->bsaveID % maxIndices);
}
/*=================*/
/* Next Join Level */
/*=================*/
if (theJoin->nextLevel == NULL)
{ fprintf(theFile,"NULL,"); }
else
{
fprintf(theFile,"&%s%d_%ld[%ld],",JoinPrefix(),
imageID,(theJoin->nextLevel->bsaveID / maxIndices) + 1,
theJoin->nextLevel->bsaveID % maxIndices);
}
/*=================*/
/* Last Join Level */
/*=================*/
if (theJoin->lastLevel == NULL)
{ fprintf(theFile,"NULL,"); }
else
{
fprintf(theFile,"&%s%d_%ld[%ld],",JoinPrefix(),
imageID,(theJoin->lastLevel->bsaveID / maxIndices) + 1,
theJoin->lastLevel->bsaveID % maxIndices);
}
/*==================*/
/* Right Drive Node */
/*==================*/
if (theJoin->rightDriveNode == NULL)
{ fprintf(theFile,"NULL,"); }
else
{
fprintf(theFile,"&%s%d_%ld[%ld],",JoinPrefix(),
imageID,(theJoin->rightDriveNode->bsaveID / maxIndices) + 1,
theJoin->rightDriveNode->bsaveID % maxIndices);
}
/*==================*/
/* Right Match Node */
/*==================*/
if (theJoin->rightMatchNode == NULL)
{ fprintf(theFile,"NULL,"); }
else
{
fprintf(theFile,"&%s%d_%ld[%ld],",JoinPrefix(),
imageID,(theJoin->rightMatchNode->bsaveID / maxIndices) + 1,
theJoin->rightMatchNode->bsaveID % maxIndices);
}
/*==================*/
/* Rule to Activate */
/*==================*/
if (theJoin->ruleToActivate == NULL)
{ fprintf(theFile,"NULL}"); }
else
{
fprintf(theFile,"&%s%d_%ld[%ld]}",ConstructPrefix(DefruleData(theEnv)->DefruleCodeItem),imageID,
(theJoin->ruleToActivate->header.bsaveID / maxIndices) + 1,
theJoin->ruleToActivate->header.bsaveID % maxIndices);
}
}
/*************************************************************/
/* 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));
}
#endif /* DEFRULE_CONSTRUCT && (! RUN_TIME) && CONSTRUCT_COMPILER */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -