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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? tmpltlhs.c

?? clips源代碼
?? C
字號(hào):
   /*******************************************************/   /*      "C" Language Integrated Production System      */   /*                                                     */   /*             CLIPS Version 6.24  06/05/06            */   /*                                                     */   /*                DEFTEMPLATE LHS MODULE               */   /*******************************************************//*************************************************************//* Purpose: Parses LHS deftemplate patterns.                 *//*                                                           *//* Principal Programmer(s):                                  *//*      Gary D. Riley                                        *//*                                                           *//* Contributing Programmer(s):                               *//*                                                           *//* Revision History:                                         *//*                                                           *//*      6.24: Renamed BOOLEAN macro type to intBool.         *//*                                                           *//*************************************************************/#define _TMPLTLHS_SOURCE_#include "setup.h"#if DEFTEMPLATE_CONSTRUCT && DEFRULE_CONSTRUCT && (! RUN_TIME) && (! BLOAD_ONLY)#include <stdio.h>#define _STDIO_INCLUDED_#include <string.h>#include "constant.h"#include "envrnmnt.h"#include "memalloc.h"#include "symbol.h"#include "scanner.h"#include "exprnpsr.h"#include "router.h"#include "constrnt.h"#include "constrct.h"#include "reorder.h"#include "pattern.h"#include "factrhs.h"#include "modulutl.h"#include "tmpltutl.h"#include "tmpltdef.h"#include "tmpltlhs.h"/***************************************//* LOCAL INTERNAL FUNCTION DEFINITIONS *//***************************************/   static struct lhsParseNode    *GetLHSSlots(void *,char *,struct token *,struct deftemplate *,int *);   static struct lhsParseNode    *GetSingleLHSSlot(void *,char *,struct token *,                                                   struct templateSlot *,int *,short);   static intBool                 MultiplyDefinedLHSSlots(void *,struct lhsParseNode *,SYMBOL_HN *);/*********************************************//* DeftemplateLHSParse: Parses a LHS pattern *//*   that uses the deftemplate format.       *//*********************************************/globle struct lhsParseNode *DeftemplateLHSParse(  void *theEnv,  char *readSource,  struct deftemplate *theDeftemplate)  {   struct lhsParseNode *head, *firstSlot;   struct token theToken;   int error;      /*===============================================================*/   /* Make sure the deftemplate name is not connected to subfields. */   /*===============================================================*/   GetToken(theEnv,readSource,&theToken);   if ((theToken.type == OR_CONSTRAINT) || (theToken.type == AND_CONSTRAINT))     {      SyntaxErrorMessage(theEnv,"deftemplate patterns");      return(NULL);     }   /*===================================================*/   /* Create the pattern node for the deftemplate name. */   /*===================================================*/   head = GetLHSParseNode(theEnv);   head->type = SF_WILDCARD;   head->negated = FALSE;   head->exists = FALSE;   head->index = 0;   head->slotNumber = 1;   head->bottom = GetLHSParseNode(theEnv);   head->bottom->type = SYMBOL;   head->bottom->negated = FALSE;   head->bottom->exists = FALSE;   head->bottom->value = (void *) theDeftemplate->header.name;   /*==========================================*/   /* Get the other fields in the deftemplate. */   /*==========================================*/   error = FALSE;   firstSlot = GetLHSSlots(theEnv,readSource,&theToken,theDeftemplate,&error);   if (error)     {      ReturnLHSParseNodes(theEnv,firstSlot);      ReturnLHSParseNodes(theEnv,head);      return(NULL);     }   /*=========================*/   /* Return the LHS pattern. */   /*=========================*/   head->right = firstSlot;   return(head);  }/******************************************//* GetLHSSlots: Retrieves all of the slot *//*   values used in a LHS pattern.        *//******************************************/static struct lhsParseNode *GetLHSSlots(  void *theEnv,  char *readSource,  struct token *tempToken,  struct deftemplate *theDeftemplate,  int *error)  {   struct lhsParseNode *firstSlot = NULL, *nextSlot, *lastSlot = NULL;   struct templateSlot *slotPtr;   short position;   /*=======================================================*/   /* Continue parsing slot definitions until the pattern's */   /* closing right parenthesis is encountered.             */   /*=======================================================*/   while (tempToken->type != RPAREN)     {      PPBackup(theEnv);      SavePPBuffer(theEnv," ");      SavePPBuffer(theEnv,tempToken->printForm);      /*=================================================*/      /* Slot definitions begin with a left parenthesis. */      /*=================================================*/      if (tempToken->type != LPAREN)        {         *error = TRUE;         SyntaxErrorMessage(theEnv,"deftemplate patterns");         ReturnLHSParseNodes(theEnv,firstSlot);         return(NULL);        }      /*====================*/      /* Get the slot name. */      /*====================*/      GetToken(theEnv,readSource,tempToken);      if (tempToken->type != SYMBOL)        {         *error = TRUE;         SyntaxErrorMessage(theEnv,"deftemplate patterns");         ReturnLHSParseNodes(theEnv,firstSlot);         return(NULL);        }      /*==========================================================*/      /* Determine if the slot name is valid for the deftemplate. */      /*==========================================================*/      if ((slotPtr = FindSlot(theDeftemplate,(SYMBOL_HN *) tempToken->value,&position)) == NULL)        {         *error = TRUE;         InvalidDeftemplateSlotMessage(theEnv,ValueToString(tempToken->value),                                       ValueToString(theDeftemplate->header.name),TRUE);         ReturnLHSParseNodes(theEnv,firstSlot);         return(NULL);        }      /*============================================*/      /* Determine if the slot is multiply defined. */      /*============================================*/      if (MultiplyDefinedLHSSlots(theEnv,firstSlot,(SYMBOL_HN *) tempToken->value) == TRUE)        {         *error = TRUE;         ReturnLHSParseNodes(theEnv,firstSlot);         return(NULL);        }      /*==============================================================*/      /* Get the pattern matching values used in the slot definition. */      /*==============================================================*/      nextSlot = GetSingleLHSSlot(theEnv,readSource,tempToken,slotPtr,error,(short) (position+1));      if (*error)        {         ReturnLHSParseNodes(theEnv,firstSlot);         ReturnLHSParseNodes(theEnv,nextSlot);         return(NULL);        }      /*=====================================*/      /* Add the slot definition to the list */      /* of slot definitions already parsed. */      /*=====================================*/      if (lastSlot == NULL)        { firstSlot = nextSlot; }      else        { lastSlot->right = nextSlot; }      while (nextSlot->right != NULL) nextSlot = nextSlot->right;      lastSlot = nextSlot;      /*==============================*/      /* Begin parsing the next slot. */      /*==============================*/      GetToken(theEnv,readSource,tempToken);     }   /*===========================================================*/   /* Return all the slot definitions found in the lhs pattern. */   /*===========================================================*/   return(firstSlot);  }/*****************************************************//* GetSingleLHSSlot: Get the pattern matching values *//*   to be associated with a slot name.              *//*****************************************************/static struct lhsParseNode *GetSingleLHSSlot(  void *theEnv,  char *readSource,  struct token *tempToken,  struct templateSlot *slotPtr,  int *error,  short position)  {   struct lhsParseNode *nextSlot;   SYMBOL_HN *slotName;   /*================================================*/   /* Get the slot name and read in the first token. */   /*================================================*/   slotName = (SYMBOL_HN *) tempToken->value;   SavePPBuffer(theEnv," ");   GetToken(theEnv,readSource,tempToken);   /*====================================*/   /* Get value for a single field slot. */   /*====================================*/   if (slotPtr->multislot == FALSE)     {      /*=======================*/      /* Get the single value. */      /*=======================*/      nextSlot = RestrictionParse(theEnv,readSource,tempToken,FALSE,                                  slotPtr->slotName,(short) (position - 1),                                  slotPtr->constraints,0);      if (nextSlot == NULL)        {         *error = TRUE;         return(NULL);        }      /*======================================*/      /* Multi field wildcards and variables  */      /* not allowed in a single field slot.  */      /*======================================*/      if ((nextSlot->type == MF_VARIABLE) ||          (nextSlot->type == MULTIFIELD))        {         SingleFieldSlotCardinalityError(theEnv,slotPtr->slotName->contents);         *error = TRUE;         ReturnLHSParseNodes(theEnv,nextSlot);         return(NULL);        }     }   /*===================================*/   /* Get values for a multifield slot. */   /*===================================*/   else     {      nextSlot = RestrictionParse(theEnv,readSource,tempToken,TRUE,slotName,(short) (position - 1),                                  slotPtr->constraints,1);      if (nextSlot == NULL)        {         *error = TRUE;         return(NULL);        }     }   /*========================================================*/   /* The slot definition must end with a right parenthesis. */   /*========================================================*/   if (tempToken->type != RPAREN)     {      PPBackup(theEnv);      SavePPBuffer(theEnv," ");      SavePPBuffer(theEnv,tempToken->printForm);      SyntaxErrorMessage(theEnv,"deftemplate patterns");      *error = TRUE;      ReturnLHSParseNodes(theEnv,nextSlot);      return(NULL);     }   /*===============================================*/   /* Fix the pretty print output if the multifield */   /* slot contained no restrictions.               */   /*===============================================*/   if ((nextSlot->bottom == NULL) && slotPtr->multislot)     {      PPBackup(theEnv);      PPBackup(theEnv);      SavePPBuffer(theEnv,")");     }   /*=================================*/   /* Add the slot values to the slot */   /* structure and return it.        */   /*=================================*/   return(nextSlot);  }/******************************************************//* MultiplyDefinedLHSSlots: Determines if a slot name *//*   was used more than once in a LHS pattern.        *//******************************************************/static intBool MultiplyDefinedLHSSlots(  void *theEnv,  struct lhsParseNode *theSlots,  SYMBOL_HN *slotName)  {   for (;        theSlots != NULL;        theSlots = theSlots->right)     {      if (theSlots->slot == slotName)        {         AlreadyParsedErrorMessage(theEnv,"slot ",ValueToString(slotName));         return(TRUE);        }     }   return(FALSE);  }#endif /* DEFTEMPLATE_CONSTRUCT && DEFRULE_CONSTRUCT && (! RUN_TIME) && (! BLOAD_ONLY) */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品黑人一区二区三区久久| 在线综合亚洲欧美在线视频| 日韩二区三区四区| 国产亚洲一本大道中文在线| 欧美日韩在线播放| 国产99久久久国产精品| 亚洲综合丝袜美腿| 中文乱码免费一区二区| 337p亚洲精品色噜噜| 韩国欧美国产一区| 丝袜美腿亚洲一区二区图片| 国产欧美中文在线| 日韩欧美一二区| 在线观看日韩一区| 91免费观看在线| 成人午夜碰碰视频| 国产馆精品极品| 激情av综合网| 精品无人区卡一卡二卡三乱码免费卡 | 久久久综合视频| 日韩亚洲欧美综合| 欧美日韩免费一区二区三区| 91丨九色丨黑人外教| 国产成人精品亚洲午夜麻豆| 理论电影国产精品| 日日夜夜精品免费视频| 亚洲成av人片| 国产精品久久久久久久久搜平片| 日韩一区二区三区在线视频| 91精品国产丝袜白色高跟鞋| 欧美日韩在线播放一区| 欧美日韩一区精品| 欧美色手机在线观看| 欧美在线影院一区二区| 欧洲人成人精品| 色素色在线综合| 欧美亚洲综合色| 欧美三级视频在线| 欧美一区二区在线播放| 欧美精品欧美精品系列| 欧美精品久久99久久在免费线 | 欧美四级电影在线观看| 日本乱码高清不卡字幕| 在线观看免费视频综合| 在线国产亚洲欧美| 欧美人狂配大交3d怪物一区| 8v天堂国产在线一区二区| 91精品国产高清一区二区三区| 欧美一区二区播放| 久久综合九色综合97婷婷| 精品国产乱码久久久久久1区2区| 亚洲精品在线三区| 国产日产亚洲精品系列| 中文字幕中文字幕在线一区| 亚洲婷婷综合久久一本伊一区| 亚洲男同性恋视频| 亚洲高清不卡在线观看| 日韩av在线发布| 国产一区二区在线电影| 成熟亚洲日本毛茸茸凸凹| 一本一道波多野结衣一区二区| 欧美视频在线观看一区二区| 欧美一级欧美一级在线播放| 日韩免费看的电影| 国产精品国产a| 亚洲精品一二三四区| 日本中文字幕一区二区有限公司| 极品美女销魂一区二区三区免费| 国产一区二区三区免费观看| 成人精品免费网站| 欧美性受极品xxxx喷水| 欧美α欧美αv大片| 日本一区二区三区四区| 极品美女销魂一区二区三区免费 | 东方aⅴ免费观看久久av| 一本到不卡精品视频在线观看| 欧美视频一区二区三区在线观看| 日韩美一区二区三区| 国产精品三级av在线播放| 亚洲高清在线视频| 麻豆国产精品777777在线| 国产成人精品亚洲777人妖 | 在线一区二区观看| 精品日韩欧美在线| 亚洲一区视频在线观看视频| 国产乱对白刺激视频不卡| 在线观看不卡一区| 久久影院午夜论| 亚洲成a天堂v人片| 丁香一区二区三区| 欧美一级生活片| 亚洲综合色自拍一区| 国产精品一级片在线观看| 欧美三级日韩三级| 国产精品久久久久永久免费观看 | 日韩亚洲国产中文字幕欧美| 国产欧美一区二区三区鸳鸯浴 | 精品国精品自拍自在线| 中文字幕一区二区三区乱码在线| 天天爽夜夜爽夜夜爽精品视频| 国产精品 欧美精品| 欧美高清hd18日本| 亚洲三级免费观看| 久久不见久久见免费视频1| 欧美视频中文字幕| 1024国产精品| 国产成人亚洲精品狼色在线 | 在线成人高清不卡| 极品尤物av久久免费看| 欧美性色黄大片| 欧美精品丝袜久久久中文字幕| 欧美日韩另类一区| 国产精品视频一二三| 久久99久久99小草精品免视看| 欧美色图激情小说| 艳妇臀荡乳欲伦亚洲一区| 成熟亚洲日本毛茸茸凸凹| 26uuu色噜噜精品一区| 污片在线观看一区二区| 99久久99久久精品国产片果冻| 国产午夜精品一区二区三区四区| 日韩激情视频在线观看| 欧美色综合影院| 一区二区三国产精华液| 99精品国产99久久久久久白柏| 国产拍欧美日韩视频二区| 韩国女主播成人在线| 日韩色视频在线观看| 天天亚洲美女在线视频| 欧美视频中文字幕| 午夜激情一区二区三区| 色94色欧美sute亚洲13| 亚洲色图欧洲色图婷婷| 国产馆精品极品| 国产清纯美女被跳蛋高潮一区二区久久w | 亚洲综合在线五月| 99国产欧美另类久久久精品| 国产精品午夜久久| 成人综合在线网站| 国产片一区二区| gogogo免费视频观看亚洲一| 欧美国产亚洲另类动漫| 国产一区在线精品| 久久婷婷久久一区二区三区| 国产成人在线免费观看| 国产精品天天摸av网| 国产成人午夜99999| 国产视频一区二区在线观看| 成人毛片视频在线观看| 最新不卡av在线| 欧美日韩小视频| 日本美女视频一区二区| 欧美成人a在线| 国产成人av电影| 亚洲男人的天堂一区二区| 欧美日产在线观看| 久久国产婷婷国产香蕉| 精品99一区二区| 成人a区在线观看| 一区二区三区中文免费| 在线不卡免费欧美| 国产久卡久卡久卡久卡视频精品| 日本一区二区免费在线 | 欧美日韩一区中文字幕| 蜜桃在线一区二区三区| 国产日韩欧美亚洲| 91久久一区二区| 免费高清视频精品| 国产女同性恋一区二区| 色婷婷国产精品综合在线观看| 五月天网站亚洲| 国产欧美精品国产国产专区| 在线免费观看日韩欧美| 久久成人久久鬼色| 亚洲精品成人天堂一二三| 91精品久久久久久久久99蜜臂| 国产精品888| 亚洲国产综合91精品麻豆| 久久久精品天堂| 欧美系列日韩一区| 国产电影一区二区三区| 亚洲sss视频在线视频| 久久久久国产精品厨房| 欧美日韩在线电影| 成人蜜臀av电影| 人人狠狠综合久久亚洲| 成人免费视频在线观看| 日韩一区二区三区免费观看| 97久久精品人人做人人爽50路| 日韩电影网1区2区| 亚洲日本电影在线| 久久午夜色播影院免费高清| 在线精品视频小说1| 成人综合婷婷国产精品久久蜜臀| 五月婷婷久久综合| 亚洲卡通欧美制服中文| 久久久久久**毛片大全| 欧美一区二区视频免费观看| 91日韩在线专区| 国产成人亚洲综合a∨婷婷|