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

📄 objrtcmp.c

📁 NASA 开发使用的一个专家系统
💻 C
📖 第 1 页 / 共 2 页
字号:
   /*******************************************************/   /*      "C" Language Integrated Production System      */   /*                                                     */   /*               CLIPS Version 6.05  04/09/97          */   /*                                                     */   /*    OBJECT PATTERN NETWORK CONSTRUCTS-TO-C MODULE    */   /*******************************************************//**************************************************************//* Purpose: Saves object pattern network for constructs-to-c  *//*                                                            *//* Principal Programmer(s):                                   *//*      Brian L. Donnell                                      *//*                                                            *//* Contributing Programmer(s):                                *//*                                                            *//* Revision History:                                          *//*                                                            *//**************************************************************//* =========================================   *****************************************               EXTERNAL DEFINITIONS   =========================================   ***************************************** */#include "setup.h"#if INSTANCE_PATTERN_MATCHING && (! RUN_TIME) && CONSTRUCT_COMPILER#include <stdio.h>#define _CLIPS_STDIO_#include "conscomp.h"#include "objrtmch.h"#include "pattern.h"#define _OBJRTCMP_SOURCE_#include "objrtcmp.h"/* =========================================   *****************************************                   CONSTANTS   =========================================   ***************************************** *//* =========================================   *****************************************                 MACROS AND TYPES   =========================================   ***************************************** */#define ObjectPNPrefix() ArbitraryPrefix(ObjectPatternCodeItem,0)#define ObjectANPrefix() ArbitraryPrefix(ObjectPatternCodeItem,1)/* =========================================   *****************************************      INTERNALLY VISIBLE FUNCTION HEADERS   =========================================   ***************************************** */#if ANSI_COMPILERstatic VOID BeforeObjectPatternsToCode(void);static OBJECT_PATTERN_NODE *GetNextObjectPatternNode(OBJECT_PATTERN_NODE *);static VOID InitObjectPatternsCode(FILE *,int,int);static int ObjectPatternsToCode(char *,int,FILE *,int,int);static VOID IntermediatePatternNodeReference(OBJECT_PATTERN_NODE *,FILE *,int,int);static int IntermediatePatternNodesToCode(char *,int,FILE *,int,int,int);static int AlphaPatternNodesToCode(char *,int,FILE *,int,int,int);#elsestatic VOID BeforeObjectPatternsToCode();static OBJECT_PATTERN_NODE *GetNextObjectPatternNode();static VOID InitObjectPatternsCode();static int ObjectPatternsToCode();static VOID IntermediatePatternNodeReference();static int IntermediatePatternNodesToCode();static int AlphaPatternNodesToCode();#endif/* =========================================   *****************************************      EXTERNALLY VISIBLE GLOBAL VARIABLES   =========================================   ***************************************** */   /* =========================================   *****************************************      INTERNALLY VISIBLE GLOBAL VARIABLES   =========================================   ***************************************** */static struct CodeGeneratorItem *ObjectPatternCodeItem;   /* =========================================   *****************************************          EXTERNALLY VISIBLE FUNCTIONS   =========================================   ***************************************** */   /***************************************************  NAME         : ObjectPatternsCompilerSetup  DESCRIPTION  : Sets up interface for object                 patterns to construct compiler  INPUTS       : None  RETURNS      : Nothing useful  SIDE EFFECTS : Code generator item added  NOTES        : None ***************************************************/globle VOID ObjectPatternsCompilerSetup()  {   ObjectPatternCodeItem =          AddCodeGeneratorItem("object-patterns",0,BeforeObjectPatternsToCode,                              InitObjectPatternsCode,ObjectPatternsToCode,2);  }/***************************************************  NAME         : ObjectPatternNodeReference  DESCRIPTION  : Prints out a reference to an                 object pattern alpha memory for                 the join network interface to the                 construct compiler  INPUTS       : 1) A pointer to the object pattern                    alpha memory                 2) A pointer to the output file                 3) The id of constructs-to-c image                 4) The maximum number of indices                    allowed in any single array                    in the image  RETURNS      : Nothing useful  SIDE EFFECTS : Reference to object pattern alpha                 memory printed  NOTES        : None ***************************************************/globle VOID ObjectPatternNodeReference(theVPattern,theFile,imageID,maxIndices)  VOID *theVPattern;  FILE *theFile;  int imageID;  int maxIndices;  {   OBJECT_ALPHA_NODE *thePattern;      if (theVPattern == NULL)     fprintf(theFile,"NULL");   else     {      thePattern = (OBJECT_ALPHA_NODE *) theVPattern;      fprintf(theFile,"&%s%d_%d[%d]",                      ObjectANPrefix(),imageID,                      (((int) thePattern->bsaveID) / maxIndices) + 1,                      ((int) thePattern->bsaveID) % maxIndices);     }  }/* =========================================   *****************************************          INTERNALLY VISIBLE FUNCTIONS   =========================================   ***************************************** *//*****************************************************  NAME         : BeforeObjectPatternsToCode  DESCRIPTION  : Marks all object pattern intermediate                 and alpha memory nodes with a                 unique integer id prior to the                 constructs-to-c execution  INPUTS       : None  RETURNS      : Nothing useful  SIDE EFFECTS : bsaveIDs of nodes set  NOTES        : None *****************************************************/static VOID BeforeObjectPatternsToCode()  {   long whichPattern;   OBJECT_PATTERN_NODE *intermediateNode;   OBJECT_ALPHA_NODE *alphaNode;   whichPattern = 0L;   intermediateNode = ObjectNetworkPointer();   while (intermediateNode != NULL)     {      intermediateNode->bsaveID = whichPattern++;      intermediateNode = GetNextObjectPatternNode(intermediateNode);     }        whichPattern = 0L;   alphaNode = ObjectNetworkTerminalPointer();   while (alphaNode != NULL)     {      alphaNode->bsaveID = whichPattern++;      alphaNode = alphaNode->nxtTerminal;     }  }  /***************************************************  NAME         : GetNextObjectPatternNode  DESCRIPTION  : Grabs the next node in a depth                 first perusal of the object pattern                 intermediate nodes  INPUTS       : The previous node  RETURNS      : The next node (NULL if done)  SIDE EFFECTS : None  NOTES        : Alpha meory nodes are ignored ***************************************************/static OBJECT_PATTERN_NODE *GetNextObjectPatternNode(thePattern)  OBJECT_PATTERN_NODE *thePattern;  {   if (thePattern->nextLevel != NULL)     return(thePattern->nextLevel);   while (thePattern->rightNode == NULL)     {      thePattern = thePattern->lastLevel;      if (thePattern == NULL)        return(NULL);     }   return(thePattern->rightNode);  }  /***************************************************  NAME         : InitObjectPatternsCode  DESCRIPTION  : Prints out run-time initialization                 code for object patterns  INPUTS       : 1) A pointer to the output file                 2) The id of constructs-to-c image                 3) The maximum number of indices                    allowed in any single array                    in the image  RETURNS      : Nothing useful  SIDE EFFECTS : Initialization code written  NOTES        : None ***************************************************/static VOID InitObjectPatternsCode(initFP,imageID,maxIndices)  FILE *initFP;  int imageID;  int maxIndices;  {   long firstIntermediateNode,firstAlphaNode;        if (ObjectNetworkPointer() != NULL)     {      firstIntermediateNode = ObjectNetworkPointer()->bsaveID;      firstAlphaNode = ObjectNetworkTerminalPointer()->bsaveID;      fprintf(initFP,"   SetObjectNetworkPointer(&%s%d_%d[%d]);\n",                       ObjectPNPrefix(),imageID,                       (int) ((firstIntermediateNode / maxIndices) + 1),                       (int) (firstIntermediateNode % maxIndices));      fprintf(initFP,"   SetObjectNetworkTerminalPointer(&%s%d_%d[%d]);\n",                       ObjectANPrefix(),imageID,                       (int) ((firstAlphaNode / maxIndices) + 1),                       (int) (firstAlphaNode % maxIndices));     }   else     {      fprintf(initFP,"   SetObjectNetworkPointer(NULL);\n");      fprintf(initFP,"   SetObjectNetworkTerminalPointer(NULL);\n");     }  } /***********************************************************  NAME         : ObjectPatternsToCode  DESCRIPTION  : Writes out data structures for run-time                 creation of object patterns  INPUTS       : 1) The base image output file name                 2) The base image file id                 3) A pointer to the header output file                 4) The id of constructs-to-c image                 5) The maximum number of indices                    allowed in any single array                    in the image  RETURNS      : 1 if OK, 0 if could not open a file

⌨️ 快捷键说明

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