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

📄 classini.c

📁 NASA 开发使用的一个专家系统
💻 C
📖 第 1 页 / 共 2 页
字号:
   /*******************************************************/   /*      "C" Language Integrated Production System      */   /*                                                     */   /*               CLIPS Version 6.05  04/09/97          */   /*                                                     */   /*               CLASS INITIALIZATION MODULE           */   /*******************************************************//**************************************************************//* Purpose: Defclass Initialization Routines                  *//*                                                            *//* Principal Programmer(s):                                   *//*      Brian L. Donnell                                      *//*                                                            *//* Contributing Programmer(s):                                *//*                                                            *//* Revision History:                                          *//*                                                            *//**************************************************************/   /* =========================================   *****************************************               EXTERNAL DEFINITIONS   =========================================   ***************************************** */#include "setup.h"#if OBJECT_SYSTEM#ifndef _CLIPS_STDIO_#define _CLIPS_STDIO_#include <stdio.h>#endif#include "classcom.h"#include "classexm.h"#include "classfun.h"#include "classinf.h"#include "classpsr.h"#include "clipsmem.h"#include "cstrccom.h"#include "cstrcpsr.h"#include "extnfunc.h"#include "inscom.h"#include "modulpsr.h"#include "modulutl.h"#include "msgcom.h"#include "watch.h"#if DEFINSTANCES_CONSTRUCT#include "defins.h"#endif#if INSTANCE_SET_QUERIES#include "insquery.h"#endif#if BLOAD_AND_BSAVE || BLOAD || BLOAD_ONLY#include "objbin.h"#endif#if CONSTRUCT_COMPILER && (! RUN_TIME)#include "objcmp.h"#endif#if INSTANCE_PATTERN_MATCHING#include "objrtbld.h"#endif#if RUN_TIME#include "insfun.h"#include "msgfun.h"#endif#include "classini.h"/* =========================================   *****************************************                   CONSTANTS   =========================================   ***************************************** */#define SUPERCLASS_RLN       "is-a"#define NAME_RLN             "name"#define INITIAL_OBJECT_NAME  "initial-object"/* =========================================   *****************************************      INTERNALLY VISIBLE FUNCTION HEADERS   =========================================   ***************************************** */#if ANSI_COMPILERstatic VOID SetupDefclasses(void);#if (! RUN_TIME)static DEFCLASS *AddSystemClass(char *,DEFCLASS *);static VOID *AllocateModule(void);static VOID  FreeModule(VOID *);#endif#if (! BLOAD_ONLY) && (! RUN_TIME) && DEFMODULE_CONSTRUCTstatic VOID UpdateDefclassesScope(void);#endif#elsestatic VOID SetupDefclasses();#if (! RUN_TIME)static DEFCLASS *AddSystemClass();static VOID *AllocateModule();static VOID  FreeModule();#endif#if (! BLOAD_ONLY) && (! RUN_TIME) && DEFMODULE_CONSTRUCTstatic VOID UpdateDefclassesScope();#endif#endif/* =========================================   *****************************************      INTERNALLY VISIBLE GLOBAL VARIABLES   =========================================   ***************************************** */globle int DefclassModuleIndex;globle struct construct *DefclassConstruct;   /* =========================================   *****************************************      INTERNALLY VISIBLE GLOBAL VARIABLES   =========================================   ***************************************** */   static ENTITY_RECORD DefclassEntityRecord = { DEFCLASS_PTR,1,0,0,                                              NULL,NULL,NULL,NULL,NULL,                                              DecrementDefclassBusyCount,                                              IncrementDefclassBusyCount,                                              NULL,NULL,NULL,NULL };/* =========================================   *****************************************          EXTERNALLY VISIBLE FUNCTIONS   =========================================   ***************************************** *//**********************************************************  NAME         : SetupObjectSystem  DESCRIPTION  : Initializes all COOL constructs, functions,                   and data structures  INPUTS       : None  RETURNS      : Nothing useful  SIDE EFFECTS : COOL initialized  NOTES        : Order of setup calls is important **********************************************************/globle VOID SetupObjectSystem()  {#if ! RUN_TIME   ISA_SYMBOL = (SYMBOL_HN *) AddSymbol(SUPERCLASS_RLN);   IncrementSymbolCount(ISA_SYMBOL);   NAME_SYMBOL = (SYMBOL_HN *) AddSymbol(NAME_RLN);   IncrementSymbolCount(NAME_SYMBOL);#if INSTANCE_PATTERN_MATCHING   INITIAL_OBJECT_SYMBOL = (SYMBOL_HN *) AddSymbol(INITIAL_OBJECT_NAME);   IncrementSymbolCount(INITIAL_OBJECT_SYMBOL);#endif#endif   SetupDefclasses();   SetupInstances();   SetupMessageHandlers();   #if DEFINSTANCES_CONSTRUCT   SetupDefinstances();#endif#if INSTANCE_SET_QUERIES   SetupQuery();#endif#if BLOAD_AND_BSAVE || BLOAD || BLOAD_ONLY   SetupObjectsBload();#endif#if CONSTRUCT_COMPILER && (! RUN_TIME)   SetupObjectsCompiler();#endif#if INSTANCE_PATTERN_MATCHING   SetupObjectPatternStuff();#endif  }   #if RUN_TIME /***************************************************  NAME         : ObjectsRunTimeInitialize  DESCRIPTION  : Initializes objects system lists                   in a run-time module  INPUTS       : 1) Pointer to new class hash table                 2) Pointer to new slot name table  RETURNS      : Nothing useful  SIDE EFFECTS : Global pointers set  NOTES        : None ***************************************************/globle VOID ObjectsRunTimeInitialize(ctable,sntable,cidmap,mid)  DEFCLASS *ctable[];  SLOT_NAME *sntable[];  DEFCLASS **cidmap;  unsigned mid;  {   DEFCLASS *cls;   VOID *tmpexp;   register int i,j;      if (ClassTable != NULL)     {      for (j = 0 ; j < CLASS_TABLE_HASH_SIZE ; j++)        for (cls = ClassTable[j] ; cls != NULL ; cls = cls->nxtHash)          {           for (i = 0 ; i < cls->slotCount ; i++)             {              /* =====================================================================                 For static default values, the data object value needs to deinstalled                 and deallocated, and the expression needs to be restored (which was                 temporarily stored in the supplementalInfo field of the data object)                 ===================================================================== */              if ((cls->slots[i].defaultValue != NULL) && (cls->slots[i].dynamicDefault == 0))                {                 tmpexp = ((DATA_OBJECT *) cls->slots[i].defaultValue)->supplementalInfo;                 ValueDeinstall((DATA_OBJECT *) cls->slots[i].defaultValue);                 rtn_struct(dataObject,cls->slots[i].defaultValue);                 cls->slots[i].defaultValue = tmpexp;                }             }          }     }            QUERY_DELIMETER_SYMBOL = FindSymbol(QUERY_DELIMETER_STRING);   INIT_SYMBOL = FindSymbol(INIT_STRING);   DELETE_SYMBOL = FindSymbol(DELETE_STRING);   ISA_SYMBOL = FindSymbol(SUPERCLASS_RLN);   NAME_SYMBOL = FindSymbol(NAME_RLN);#if INSTANCE_PATTERN_MATCHING   INITIAL_OBJECT_SYMBOL = FindSymbol(INITIAL_OBJECT_NAME);#endif      ClassTable = (DEFCLASS **) ctable;   SlotNameTable = (SLOT_NAME **) sntable;   ClassIDMap = (DEFCLASS **) cidmap;   MaxClassID = (unsigned short) mid;   PrimitiveClassMap[FLOAT] =     LookupDefclassByMdlOrScope(FLOAT_TYPE_NAME);   PrimitiveClassMap[INTEGER] =     LookupDefclassByMdlOrScope(INTEGER_TYPE_NAME);   PrimitiveClassMap[STRING] =     LookupDefclassByMdlOrScope(STRING_TYPE_NAME);   PrimitiveClassMap[SYMBOL] =     LookupDefclassByMdlOrScope(SYMBOL_TYPE_NAME);   PrimitiveClassMap[MULTIFIELD] =     LookupDefclassByMdlOrScope(MULTIFIELD_TYPE_NAME);   PrimitiveClassMap[EXTERNAL_ADDRESS] =     LookupDefclassByMdlOrScope(EXTERNAL_ADDRESS_TYPE_NAME);   PrimitiveClassMap[FACT_ADDRESS] =     LookupDefclassByMdlOrScope(FACT_ADDRESS_TYPE_NAME);   PrimitiveClassMap[INSTANCE_NAME] =     LookupDefclassByMdlOrScope(INSTANCE_NAME_TYPE_NAME);   PrimitiveClassMap[INSTANCE_ADDRESS] =      LookupDefclassByMdlOrScope(INSTANCE_ADDRESS_TYPE_NAME);   for (j = 0 ; j < CLASS_TABLE_HASH_SIZE ; j++)     for (cls = ClassTable[j] ; cls != NULL ; cls = cls->nxtHash)     {      for (i = 0 ; i < cls->slotCount ; i++)        {         if ((cls->slots[i].defaultValue != NULL) && (cls->slots[i].dynamicDefault == 0))           {            tmpexp = cls->slots[i].defaultValue;            cls->slots[i].defaultValue = (VOID *) get_struct(dataObject);            EvaluateAndStoreInDataObject((int) cls->slots[i].multiple,(EXPRESSION *) tmpexp,                                         (DATA_OBJECT *) cls->slots[i].defaultValue);            ValueInstall((DATA_OBJECT *) cls->slots[i].defaultValue);            ((DATA_OBJECT *) cls->slots[i].defaultValue)->supplementalInfo = tmpexp;           }        }     }  }#else/***************************************************************  NAME         : CreateSystemClasses  DESCRIPTION  : Creates the built-in system classes   INPUTS       : None  RETURNS      : Nothing useful  SIDE EFFECTS : System classes inserted in the                   class hash table  NOTES        : The binary/load save indices for the primitive                   types (integer, float, symbol and string,                    multifield, external-address and fact-address)                   are very important.  Need to be able to refer                   to types with the same index regardless of                   whether the object system is installed or                   not.  Thus, the bsave/blaod indices of these                   classes match their CLIPS integer codes.                WARNING!!: Assumes no classes exist yet! ***************************************************************/globle VOID CreateSystemClasses()  {   DEFCLASS *user,*any,*primitive,*number,*lexeme,*address,*instance;#if INSTANCE_PATTERN_MATCHING   DEFCLASS *initialObject;#endif      /* ===================================      Add canonical slot name entries for      the is-a and name fields - used for      object patterns      =================================== */   AddSlotName(ISA_SYMBOL,ISA_ID,CLIPS_TRUE);   AddSlotName(NAME_SYMBOL,NAME_ID,CLIPS_TRUE);   /* =========================================================      Bsave Indices for non-primitive classes start at 9               Object is 9, Primitive is 10, Number is 11,               Lexeme is 12, Address is 13, and Instance is 14.      because: float = 0, integer = 1, symbol = 2, string = 3,               multifield = 4, and external-address = 5 and               fact-address = 6, instance-adress = 7 and                instance-name = 8.      ========================================================= */   any = AddSystemClass(OBJECT_TYPE_NAME,NULL);   primitive = AddSystemClass(PRIMITIVE_TYPE_NAME,any);   user = AddSystemClass(USER_TYPE_NAME,any);   number = AddSystemClass(NUMBER_TYPE_NAME,primitive);

⌨️ 快捷键说明

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