亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? inherpsr.c

?? clips源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
   /*******************************************************/   /*      "C" Language Integrated Production System      */   /*                                                     */   /*               CLIPS Version 6.20  01/31/02          */   /*                                                     */   /*             MULTIPLE INHERITANCE PARSER MODULE      */   /*******************************************************//**************************************************************//* Purpose: Parsing Routines for Multiple Inheritance         *//*                                                            *//* Principal Programmer(s):                                   *//*      Brian L. Donnell                                      *//*                                                            *//* Contributing Programmer(s):                                *//*                                                            *//* Revision History:                                          *//*                                                            *//**************************************************************//* =========================================   *****************************************               EXTERNAL DEFINITIONS   =========================================   ***************************************** */#include "setup.h"#if OBJECT_SYSTEM && (! BLOAD_ONLY) && (! RUN_TIME)#include "classcom.h"#include "classfun.h"#include "envrnmnt.h"#include "memalloc.h"#include "modulutl.h"#include "router.h"#include "scanner.h"#define _INHERPSR_SOURCE_#include "inherpsr.h"/* =========================================   *****************************************               MACROS AND TYPES   =========================================   ***************************************** */typedef struct partialOrder PARTIAL_ORDER;typedef struct successor SUCCESSOR;struct partialOrder  {   DEFCLASS *cls;   unsigned pre;   SUCCESSOR *suc;   struct partialOrder *nxt;  };struct successor  {   PARTIAL_ORDER *po;   struct successor *nxt;  };/* =========================================   *****************************************      INTERNALLY VISIBLE FUNCTION HEADERS   =========================================   ***************************************** */static PARTIAL_ORDER *InitializePartialOrderTable(void *,PARTIAL_ORDER *,PACKED_CLASS_LINKS *);static void RecordPartialOrders(void *,PARTIAL_ORDER *,DEFCLASS *,PACKED_CLASS_LINKS *,long);static PARTIAL_ORDER *FindPartialOrder(PARTIAL_ORDER *,DEFCLASS *);static void PrintPartialOrderLoop(void *,PARTIAL_ORDER *);static void PrintClassLinks(void *,char *,char *,CLASS_LINK *);/* =========================================   *****************************************          EXTERNALLY VISIBLE FUNCTIONS   =========================================   ***************************************** *//**************************************************************  NAME         : ParseSuperclasses  DESCRIPTION  : Parses the (is-a <superclass>+) portion of                 the (defclass ...) construct and returns                 a list of direct superclasses.  The                 class "standard-class" is the precedence list                 for classes with no direct superclasses.                 The final precedence list (not calculated here)                 will have the class in question first followed                 by the merged precedence lists of its direct                 superclasses.  INPUTS       : 1) The logical name of the input source                 2) The symbolic name of the new class  RETURNS      : The address of the superclass list                  or NULL if there was an error  SIDE EFFECTS : None  NOTES        : Assumes "(defclass <name> [<comment>] ("                 has already been scanned.                 All superclasses must be defined before                 their subclasses.  Duplicates in the (is-a                 ...) list are are not allowed (a class may only                 inherits from a superclass once).                 This routine also checks the class-precedence                 lists of each of the direct superclasses for                 an occurrence of the new class - i.e. cycles!                 This can only happen when a class is redefined                 (a new class cannot have an unspecified                 superclass).                 This routine allocates the space for the list ***************************************************************/globle PACKED_CLASS_LINKS *ParseSuperclasses(  void *theEnv,  char *readSource,  SYMBOL_HN *newClassName)  {   CLASS_LINK *clink = NULL,*cbot = NULL,*ctmp;   DEFCLASS *sclass;   PACKED_CLASS_LINKS *plinks;   if (GetType(DefclassData(theEnv)->ObjectParseToken) != LPAREN)     {      SyntaxErrorMessage(theEnv,"defclass inheritance");      return(NULL);     }   GetToken(theEnv,readSource,&DefclassData(theEnv)->ObjectParseToken);   if ((GetType(DefclassData(theEnv)->ObjectParseToken) != SYMBOL) ? TRUE :       (DefclassData(theEnv)->ObjectParseToken.value != (void *) DefclassData(theEnv)->ISA_SYMBOL))     {      SyntaxErrorMessage(theEnv,"defclass inheritance");      return(NULL);     }   SavePPBuffer(theEnv," ");   GetToken(theEnv,readSource,&DefclassData(theEnv)->ObjectParseToken);   while (GetType(DefclassData(theEnv)->ObjectParseToken) != RPAREN)     {      if (GetType(DefclassData(theEnv)->ObjectParseToken) != SYMBOL)        {         SyntaxErrorMessage(theEnv,"defclass");         goto SuperclassParseError;        }      if (FindModuleSeparator(ValueToString(newClassName)))        {         IllegalModuleSpecifierMessage(theEnv);         goto SuperclassParseError;        }      if (GetValue(DefclassData(theEnv)->ObjectParseToken) == (void *) newClassName)        {         PrintErrorID(theEnv,"INHERPSR",1,FALSE);         EnvPrintRouter(theEnv,WERROR,"A class may not have itself as a superclass.\n");         goto SuperclassParseError;        }      for (ctmp = clink ; ctmp != NULL ; ctmp = ctmp->nxt)        {         if (GetValue(DefclassData(theEnv)->ObjectParseToken) == (void *) ctmp->cls->header.name)           {            PrintErrorID(theEnv,"INHERPSR",2,FALSE);            EnvPrintRouter(theEnv,WERROR,"A class may inherit from a superclass only once.\n");            goto SuperclassParseError;           }        }      sclass = LookupDefclassInScope(theEnv,ValueToString(GetValue(DefclassData(theEnv)->ObjectParseToken)));      if (sclass == NULL)        {         PrintErrorID(theEnv,"INHERPSR",3,FALSE);         EnvPrintRouter(theEnv,WERROR,"A class must be defined after all its superclasses.\n");         goto SuperclassParseError;        }      if ((sclass == DefclassData(theEnv)->PrimitiveClassMap[INSTANCE_NAME]) ||          (sclass == DefclassData(theEnv)->PrimitiveClassMap[INSTANCE_ADDRESS]) ||          (sclass == DefclassData(theEnv)->PrimitiveClassMap[INSTANCE_NAME]->directSuperclasses.classArray[0]))        {         PrintErrorID(theEnv,"INHERPSR",6,FALSE);         EnvPrintRouter(theEnv,WERROR,"A user-defined class cannot be a subclass of ");         EnvPrintRouter(theEnv,WERROR,EnvGetDefclassName(theEnv,(void *) sclass));         EnvPrintRouter(theEnv,WERROR,".\n");         goto SuperclassParseError;        }      ctmp = get_struct(theEnv,classLink);      ctmp->cls = sclass;      if (clink == NULL)        clink = ctmp;      else        cbot->nxt = ctmp;      ctmp->nxt = NULL;      cbot = ctmp;      SavePPBuffer(theEnv," ");      GetToken(theEnv,readSource,&DefclassData(theEnv)->ObjectParseToken);     }   if (clink == NULL)     {      PrintErrorID(theEnv,"INHERPSR",4,FALSE);      EnvPrintRouter(theEnv,WERROR,"Must have at least one superclass.\n");      return(NULL);     }   PPBackup(theEnv);   PPBackup(theEnv);   SavePPBuffer(theEnv,")");   plinks = get_struct(theEnv,packedClassLinks);   PackClassLinks(theEnv,plinks,clink);   return(plinks);SuperclassParseError:   DeleteClassLinks(theEnv,clink);   return(NULL);  }/***************************************************************************  NAME         : FindPrecedenceList  DESCRIPTION  : A complete class precedence list is obtained from the                 list of direct superclasses as follows :                 Each class and its direct superclasses are recursively                 entered in order to a list called the partial order table.                 A class is only entered once.  The order reflects a pre-order                 depth-first traversal of the classes, and this order will be                 followed as closely as possible to preserve the "family"                 heuristic when constructing the class precedence list.                 Attached to each node is a count indicating the number of                 classes which must precede this class and a list of classes                 which must succeed this class (attached via the suc field and                 linked via nxt fields).  These predecessor counts                 and successor lists indicate the partial orderings given                 by the rules of multiple inheritance for the classes:                 1) a class must precede all its superclasses, and 2) a                 class determines the precedence of its immediate superclasses.                 For example, the following class definitions                 (defclass A (is-a USER))                 (defclass B (is-a USER))                 (defclass C (is-a A B))                 would give the following partial orders:                 C < A          by Rule 1                 C < B          by Rule 1                 A < B          by Rule 2                 B < USER       by Rule 1                 A < USER       by Rule 1                 USER < OBJECT  by Rule 1                 In turn, these partial orders would be recorded in a                 sequence table:                                     C     A      USER    OBJECT    B                 Predecessor Count   0     1       2        1       2                 Successor List     A,B  B,USER  OBJECT   <NIL>    USER                 To generate a precedence list for C, we pick the first                 class with a predecessor count of 0, append it to the                 precedence list, and decrement the counts of all its                 successors.  We continue scanning for a 0 from where                 we left off.  If we ever scan completely through the                 table without finding a 0, then we know there is an                 error.                 Shown below is the table above after each class is                 entered onto the precedence list:                 Precedence list: C                                     A      USER    OBJECT    B                 Predecessor Count   0       2        1       1                 Successor List     B,USER  OBJECT   <NIL>    USER                 Precedence list: C A                                    USER    OBJECT    B                 Predecessor Count   1        1       0                 Successor List     OBJECT   <NIL>   USER                 Precedence list: C A B                                    USER    OBJECT                 Predecessor Count   0        1                 Successor List     OBJECT   <NIL>                 Precedence list: C A B USER

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品18久久久| 日本一区二区三区国色天香| 91精品福利视频| 99在线视频精品| 成人黄页毛片网站| 成人av网站在线| 成人av在线播放网站| 成人午夜大片免费观看| 成人激情电影免费在线观看| 不卡的av在线| 色婷婷激情久久| 欧美无砖专区一中文字| 欧美日韩一级视频| 宅男在线国产精品| 日韩视频免费观看高清完整版| 欧美一区二区三区四区视频| 日韩亚洲欧美成人一区| 精品美女被调教视频大全网站| 26uuu精品一区二区三区四区在线| 精品国产精品网麻豆系列| 精品播放一区二区| 国产欧美精品一区二区三区四区 | a美女胸又www黄视频久久| 岛国精品在线观看| 日本高清不卡aⅴ免费网站| 在线观看av一区| 在线综合+亚洲+欧美中文字幕| 精品88久久久久88久久久| 国产日韩影视精品| 一区二区三区视频在线看| 日韩电影一二三区| 国产一区二区三区在线观看免费 | 久久精品视频免费| 亚洲日本在线看| 性做久久久久久久免费看| 老司机精品视频线观看86| 成人一区二区三区视频在线观看| 91丨porny丨户外露出| 精品视频免费看| www激情久久| 一区二区三区视频在线看| 日韩成人午夜电影| 国产.欧美.日韩| 在线观看一区不卡| 欧美一区二区三区公司| 国产蜜臀av在线一区二区三区| 一区二区三区在线视频免费| 麻豆精品国产传媒mv男同| 99久久精品情趣| 91精品久久久久久久99蜜桃| 日本一区二区电影| 污片在线观看一区二区| 成人性生交大合| 在线播放国产精品二区一二区四区| 26uuu国产在线精品一区二区| 亚洲最大成人网4388xx| 国产在线一区观看| 欧美剧情片在线观看| 亚洲乱码国产乱码精品精小说| 免费xxxx性欧美18vr| 99久久精品99国产精品| 精品国产一区二区在线观看| 亚洲精品福利视频网站| 国产剧情一区二区| 欧美猛男男办公室激情| 国产精品免费av| 久久精品国产第一区二区三区| 色综合久久99| 国产精品美女久久久久av爽李琼| 青青草国产成人av片免费| 欧美亚洲高清一区二区三区不卡| 国产日韩欧美制服另类| 蜜臀av性久久久久蜜臀aⅴ | 久久久一区二区三区捆绑**| 亚洲亚洲人成综合网络| 成人动漫在线一区| 久久久美女毛片| 日韩国产在线观看| 欧美视频三区在线播放| 最新国产の精品合集bt伙计| 国产另类ts人妖一区二区| 日韩精品在线网站| 日韩av一二三| 在线观看亚洲一区| 亚洲乱码精品一二三四区日韩在线| 丁香一区二区三区| 精品国产免费人成在线观看| 日韩一区精品视频| 欧美日韩国产综合视频在线观看| 亚洲视频一区二区在线| 大白屁股一区二区视频| 国产欧美日韩在线| 国产一区二区毛片| 久久久久久久久久久久久久久99| 蜜桃视频在线一区| 91麻豆精品国产91久久久资源速度| 亚洲综合在线第一页| 日本高清成人免费播放| 一区二区日韩av| 日本韩国一区二区| 亚洲欧美色图小说| 91蝌蚪porny| 亚洲精品成人悠悠色影视| 91一区二区三区在线观看| 亚洲欧洲美洲综合色网| www.亚洲精品| 亚洲色图20p| 在线观看日韩国产| 亚洲国产三级在线| 欧美日韩国产区一| 日韩在线观看一区二区| 91精品国产黑色紧身裤美女| 日韩二区三区在线观看| 日韩区在线观看| 精品伊人久久久久7777人| 久久久久99精品一区| 国产久卡久卡久卡久卡视频精品| 久久日韩粉嫩一区二区三区| 成人免费毛片高清视频| 亚洲精品欧美激情| 欧美日韩精品欧美日韩精品一| 五月婷婷久久丁香| 日韩欧美在线影院| 国产一区二区三区黄视频 | 欧美色国产精品| 午夜欧美一区二区三区在线播放| 欧美日本一区二区在线观看| 蜜臀av亚洲一区中文字幕| 国产午夜一区二区三区| www.色精品| 亚洲丰满少妇videoshd| 精品久久久久久久久久久久久久久久久| 国产在线视频精品一区| 亚洲视频一二三区| 欧美久久久影院| 国产精品一区二区在线看| 最近日韩中文字幕| 4438成人网| 在线观看日韩毛片| 久99久精品视频免费观看| 国产精品女主播av| 欧美色男人天堂| 国产呦精品一区二区三区网站| 国产精品美女视频| 欧美日韩一卡二卡三卡| 国产麻豆精品theporn| 亚洲乱码国产乱码精品精的特点 | 欧美日韩国产高清一区| 黑人巨大精品欧美黑白配亚洲| 国产精品久久久久影视| 欧美欧美午夜aⅴ在线观看| 国产精品一二三区在线| 亚洲一区二区三区自拍| 久久美女高清视频| 欧美特级限制片免费在线观看| 国产一区二区三区四| 亚洲大片精品永久免费| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 日韩制服丝袜先锋影音| 日本一二三四高清不卡| 欧美军同video69gay| 9色porny自拍视频一区二区| 日韩av中文字幕一区二区三区| 国产精品青草综合久久久久99| 91精品国产美女浴室洗澡无遮挡| 99在线精品免费| 久久精品国产一区二区三区免费看 | 精品少妇一区二区| 色欧美片视频在线观看| 国产九色sp调教91| 蜜臀av亚洲一区中文字幕| 亚洲精品国产成人久久av盗摄| 国产三区在线成人av| 日韩午夜激情免费电影| 欧美亚洲国产一区二区三区va| 成人在线综合网| 国产综合一区二区| 日本亚洲电影天堂| 亚洲综合网站在线观看| 中文字幕五月欧美| 国产日韩三级在线| 精品999在线播放| 欧美一区二区三区免费| 欧美日韩一区二区三区不卡| 色婷婷精品久久二区二区蜜臂av| 国产aⅴ精品一区二区三区色成熟| 日韩av中文在线观看| 亚洲成人一区二区| 一区二区三区丝袜| 亚洲欧美日韩国产一区二区三区 | 激情都市一区二区| 男女男精品视频| 五月天精品一区二区三区| 一区二区三区在线观看网站| 国产精品成人网| 中文字幕在线观看不卡| 国产精品女同互慰在线看| 国产日韩三级在线| 国产精品欧美精品| 中文久久乱码一区二区|