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

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

?? rulecstr.c

?? clips源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
   /*******************************************************/   /*      "C" Language Integrated Production System      */   /*                                                     */   /*             CLIPS Version 6.24  06/05/06            */   /*                                                     */   /*              RULE CONSTRAINTS MODULE                */   /*******************************************************//*************************************************************//* Purpose: Provides routines for detecting constraint       *//*   conflicts in the LHS and RHS of rules.                  *//*                                                           *//* Principal Programmer(s):                                  *//*      Gary D. Riley                                        *//*                                                           *//* Contributing Programmer(s):                               *//*                                                           *//* Revision History:                                         *//*                                                           *//*      6.24: Renamed BOOLEAN macro type to intBool.         *//*                                                           *//*************************************************************/#define _RULECSTR_SOURCE_#include "setup.h"#if (! RUN_TIME) && (! BLOAD_ONLY) && DEFRULE_CONSTRUCT#include <stdio.h>#define _STDIO_INCLUDED_#include "analysis.h"#include "cstrnchk.h"#include "cstrnops.h"#include "cstrnutl.h"#include "envrnmnt.h"#include "extnfunc.h"#include "prcdrpsr.h"#include "reorder.h"#include "router.h"#include "rulepsr.h"#include "rulecstr.h"/***************************************//* LOCAL INTERNAL FUNCTION DEFINITIONS *//***************************************/   static intBool                 CheckForUnmatchableConstraints(void *,struct lhsParseNode *,int);   static intBool                 MultifieldCardinalityViolation(void *,struct lhsParseNode *);   static struct lhsParseNode    *UnionVariableConstraints(void *,struct lhsParseNode *,                                                     struct lhsParseNode *);   static struct lhsParseNode    *AddToVariableConstraints(void *,struct lhsParseNode *,                                                    struct lhsParseNode *);   static void                    ConstraintConflictMessage(void *,struct symbolHashNode *,                                                            int,int,struct symbolHashNode *);   static intBool                 CheckArgumentForConstraintError(void *,struct expr *,struct expr*,                                                                  int,struct FunctionDefinition *,                                                                  struct lhsParseNode *);/***********************************************************//* CheckForUnmatchableConstraints: Determines if a LHS CE  *//*   node contains unmatchable constraints. Return TRUE if *//*   there are unmatchable constraints, otherwise FALSE.   *//***********************************************************/static intBool CheckForUnmatchableConstraints(  void *theEnv,  struct lhsParseNode *theNode,  int whichCE)  {   if (EnvGetStaticConstraintChecking(theEnv) == FALSE) return(FALSE);   if (UnmatchableConstraint(theNode->constraints))     {      ConstraintConflictMessage(theEnv,(SYMBOL_HN *) theNode->value,whichCE,                                theNode->index,theNode->slot);      return(TRUE);     }   return(FALSE);  }/******************************************************//* ConstraintConflictMessage: Error message used when *//*   a constraint restriction for a slot prevents any *//*   value from matching the pattern constraint.      *//******************************************************/static void ConstraintConflictMessage(  void *theEnv,  struct symbolHashNode *variableName,  int thePattern,  int theField,  struct symbolHashNode *theSlot)  {   /*=========================*/   /* Print the error header. */   /*=========================*/   PrintErrorID(theEnv,"RULECSTR",1,TRUE);   /*======================================================*/   /* Print the variable name (if available) and CE number */   /* for which the constraint violation occurred.         */   /*======================================================*/   if (variableName != NULL)     {      EnvPrintRouter(theEnv,WERROR,"Variable ?");      EnvPrintRouter(theEnv,WERROR,ValueToString(variableName));      EnvPrintRouter(theEnv,WERROR," in CE #");      PrintLongInteger(theEnv,WERROR,(long int) thePattern);     }   else     {      EnvPrintRouter(theEnv,WERROR,"Pattern #");      PrintLongInteger(theEnv,WERROR,(long int) thePattern);     }   /*=======================================*/   /* Print the slot name or field position */   /* in which the violation occurred.      */   /*=======================================*/   if (theSlot == NULL)     {      EnvPrintRouter(theEnv,WERROR," field #");      PrintLongInteger(theEnv,WERROR,(long int) theField);     }   else     {      EnvPrintRouter(theEnv,WERROR," slot ");      EnvPrintRouter(theEnv,WERROR,ValueToString(theSlot));     }   /*======================================*/   /* Print the rest of the error message. */   /*======================================*/   EnvPrintRouter(theEnv,WERROR,"\nhas constraint conflicts which make the pattern unmatchable.\n");  }/***************************************************************//* MultifieldCardinalityViolation: Determines if a cardinality *//*   violation has occurred for a LHS CE node.                 *//***************************************************************/static intBool MultifieldCardinalityViolation(  void *theEnv,  struct lhsParseNode *theNode)  {   struct lhsParseNode *tmpNode;   struct expr *tmpMax;   long minFields = 0;   long maxFields = 0;   int posInfinity = FALSE;   CONSTRAINT_RECORD *newConstraint, *tempConstraint;   /*================================*/   /* A single field slot can't have */   /* a cardinality violation.       */   /*================================*/   if (theNode->multifieldSlot == FALSE) return(FALSE);   /*=============================================*/   /* Determine the minimum and maximum number of */   /* fields the slot could contain based on the  */   /* slot constraints found in the pattern.      */   /*=============================================*/   for (tmpNode = theNode->bottom;        tmpNode != NULL;        tmpNode = tmpNode->right)     {      /*====================================================*/      /* A single field variable increases both the minimum */      /* and maximum number of fields by one.               */      /*====================================================*/      if ((tmpNode->type == SF_VARIABLE) ||          (tmpNode->type == SF_WILDCARD))        {         minFields++;         maxFields++;        }      /*=================================================*/      /* Otherwise a multifield wildcard or variable has */      /* been encountered. If it is constrained then use */      /* minimum and maximum number of fields constraint */      /* associated with this LHS node.                  */      /*=================================================*/      else if (tmpNode->constraints != NULL)        {         /*=======================================*/         /* The lowest minimum of all the min/max */         /* pairs will be the first in the list.  */         /*=======================================*/         if (tmpNode->constraints->minFields->value != SymbolData(theEnv)->NegativeInfinity)           { minFields += (long) ValueToLong(tmpNode->constraints->minFields->value); }         /*=========================================*/         /* The greatest maximum of all the min/max */         /* pairs will be the last in the list.     */         /*=========================================*/         tmpMax = tmpNode->constraints->maxFields;         while (tmpMax->nextArg != NULL) tmpMax = tmpMax->nextArg;         if (tmpMax->value == SymbolData(theEnv)->PositiveInfinity)           { posInfinity = TRUE; }         else           { maxFields += (long) ValueToLong(tmpMax->value); }        }      /*================================================*/      /* Otherwise an unconstrained multifield wildcard */      /* or variable increases the maximum number of    */      /* fields to positive infinity.                   */      /*================================================*/      else        { posInfinity = TRUE; }     }   /*==================================================================*/   /* Create a constraint record for the cardinality of the sum of the */   /* cardinalities of the restrictions inside the multifield slot.    */   /*==================================================================*/   if (theNode->constraints == NULL) tempConstraint = GetConstraintRecord(theEnv);   else tempConstraint = CopyConstraintRecord(theEnv,theNode->constraints);   ReturnExpression(theEnv,tempConstraint->minFields);   ReturnExpression(theEnv,tempConstraint->maxFields);   tempConstraint->minFields = GenConstant(theEnv,INTEGER,EnvAddLong(theEnv,(long long) minFields));   if (posInfinity) tempConstraint->maxFields = GenConstant(theEnv,SYMBOL,SymbolData(theEnv)->PositiveInfinity);   else tempConstraint->maxFields = GenConstant(theEnv,INTEGER,EnvAddLong(theEnv,(long long) maxFields));   /*================================================================*/   /* Determine the final cardinality for the multifield slot by     */   /* intersecting the cardinality sum of the restrictions within    */   /* the multifield slot with the original cardinality of the slot. */   /*================================================================*/   newConstraint = IntersectConstraints(theEnv,theNode->constraints,tempConstraint);   if (theNode->derivedConstraints) RemoveConstraint(theEnv,theNode->constraints);   RemoveConstraint(theEnv,tempConstraint);   theNode->constraints = newConstraint;   theNode->derivedConstraints = TRUE;   /*===================================================================*/   /* Determine if the final cardinality for the slot can be satisfied. */   /*===================================================================*/   if (EnvGetStaticConstraintChecking(theEnv) == FALSE) return(FALSE);   if (UnmatchableConstraint(newConstraint)) return(TRUE);   return(FALSE);  }/***************************************************//* ProcessConnectedConstraints: Examines a single  *//*   connected constraint searching for constraint *//*   violations.                                   *//***************************************************/globle intBool ProcessConnectedConstraints(  void *theEnv,  struct lhsParseNode *theNode,  struct lhsParseNode *multifieldHeader,  struct lhsParseNode *patternHead)  {   struct constraintRecord *orConstraints = NULL, *andConstraints;   struct constraintRecord *tmpConstraints, *rvConstraints;   struct lhsParseNode *orNode, *andNode;   struct expr *tmpExpr;   /*============================================*/   /* Loop through all of the or (|) constraints */   /* found in the connected constraint.         */   /*============================================*/   for (orNode = theNode->bottom; orNode != NULL; orNode = orNode->bottom)     {      /*=================================================*/      /* Intersect all of the &'ed constraints together. */      /*=================================================*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合精品自拍| 日本亚洲三级在线| 精品盗摄一区二区三区| 国产精品1区2区3区在线观看| 一区二区免费在线播放| 久久久久久久电影| 欧美军同video69gay| 99这里都是精品| 精品一区二区在线观看| 天天爽夜夜爽夜夜爽精品视频| 国产精品久久久久久一区二区三区 | 日韩亚洲欧美在线| 一本一道综合狠狠老| 成人免费视频播放| 韩国v欧美v日本v亚洲v| 秋霞成人午夜伦在线观看| 亚洲人一二三区| 中文字幕欧美日韩一区| 精品999在线播放| 日韩一区二区三区四区五区六区| 在线看日本不卡| 一本久久a久久免费精品不卡| 国产91富婆露脸刺激对白| 麻豆91在线播放免费| 丝袜美腿亚洲一区二区图片| 一区二区三区四区av| 亚洲欧美综合另类在线卡通| 中文字幕欧美日韩一区| 国产亚洲一区二区在线观看| 精品国产污污免费网站入口| 欧美一级欧美一级在线播放| 欧美日韩日本视频| 欧美日韩小视频| 91国产丝袜在线播放| 91久久精品一区二区三区| 99精品欧美一区| 91亚洲男人天堂| 91视频国产观看| 色88888久久久久久影院野外| 99久久99久久综合| 91丨porny丨中文| 91猫先生在线| 欧洲色大大久久| 欧美美女直播网站| 欧美日韩国产乱码电影| 欧美精品v日韩精品v韩国精品v| 欧美日韩国产大片| 91精品国产欧美日韩| 91麻豆精品久久久久蜜臀| 91精品在线一区二区| 欧美一区二区久久久| 精品国产免费一区二区三区四区| www国产成人免费观看视频 深夜成人网| 日韩写真欧美这视频| 精品对白一区国产伦| 国产精品视频看| 亚洲乱码国产乱码精品精98午夜 | 欧美成人猛片aaaaaaa| 91精品视频网| 26uuu另类欧美亚洲曰本| 欧美激情综合在线| 国产精品大尺度| 亚洲伦在线观看| 五月激情综合色| 国产一区二区精品在线观看| 成人av在线播放网址| 91激情五月电影| 日韩欧美久久久| 欧美高清在线精品一区| 一区二区免费看| 日韩av在线发布| 国产成人av电影| 欧美日韩一区不卡| 国产精品欧美一级免费| 一区二区三区丝袜| 九一九一国产精品| 91网站黄www| 欧美一二三区精品| 国产精品不卡在线| 青青草国产成人av片免费| 成人av网站在线观看免费| 欧美日韩国产影片| 国产欧美视频一区二区三区| 亚洲国产裸拍裸体视频在线观看乱了 | 蜜桃av一区二区三区| 成人亚洲精品久久久久软件| 欧美三级视频在线| 国产三级精品视频| 性久久久久久久久| 成人福利电影精品一区二区在线观看| 欧美色图在线观看| 国产色产综合色产在线视频 | 国产电影一区在线| 欧美日韩国产片| 国产精品国模大尺度视频| 日本va欧美va欧美va精品| 成人av免费网站| 精品国产乱码久久久久久图片| 一区二区三区中文免费| 国产成人av福利| 日韩欧美自拍偷拍| 亚洲一区在线观看网站| a在线欧美一区| 久久久亚洲高清| 日韩av午夜在线观看| 色偷偷一区二区三区| 日本一区二区免费在线| 看电影不卡的网站| 欧美精品vⅰdeose4hd| 亚洲欧美日韩久久| 福利一区二区在线观看| 欧美电影免费观看高清完整版在| 亚洲狠狠爱一区二区三区| zzijzzij亚洲日本少妇熟睡| 久久免费视频一区| 精品一区二区在线免费观看| 51久久夜色精品国产麻豆| 亚洲在线一区二区三区| 成人黄色a**站在线观看| 2020国产精品自拍| 蜜桃视频在线一区| 在线电影院国产精品| 亚洲一区在线观看视频| 在线视频国内自拍亚洲视频| 亚洲欧美一区二区三区久本道91| 国产福利一区二区三区视频| 久久综合九色综合欧美98| 久久99精品视频| 精品美女一区二区| 久久精品国产999大香线蕉| 欧美日精品一区视频| 亚洲gay无套男同| 欧美日韩一卡二卡三卡 | 人人超碰91尤物精品国产| 欧美体内she精高潮| 一区二区三区四区在线播放| 91美女片黄在线观看| 一区二区在线观看免费视频播放| 91在线观看一区二区| 亚洲人精品一区| 色噜噜狠狠成人网p站| 亚洲一区免费观看| 欧美日韩国产成人在线免费| 日韩激情视频网站| 欧美一级黄色录像| 日本va欧美va瓶| 久久综合久久综合久久| 国产成人综合自拍| 一区在线观看视频| 在线观看不卡一区| 婷婷综合久久一区二区三区| 欧美一卡2卡三卡4卡5免费| 国产综合成人久久大片91| 中文欧美字幕免费| 色先锋aa成人| 偷拍亚洲欧洲综合| 久久综合成人精品亚洲另类欧美 | 高清不卡在线观看av| 最新国产の精品合集bt伙计| 在线免费观看不卡av| 日韩高清不卡一区| 国产亚洲视频系列| 96av麻豆蜜桃一区二区| 亚洲大尺度视频在线观看| 欧美va亚洲va| 成人激情免费电影网址| 亚洲国产中文字幕在线视频综合| 91精品国产91综合久久蜜臀| 国产91在线观看丝袜| 亚洲自拍另类综合| 欧美一级免费观看| 99精品桃花视频在线观看| 亚洲成人黄色影院| 久久久美女艺术照精彩视频福利播放 | 麻豆成人在线观看| 国产精品免费丝袜| 欧美日韩国产另类不卡| 国产a精品视频| 亚洲成人综合网站| 国产欧美日韩在线观看| 欧美日韩午夜影院| 国产精品夜夜嗨| 午夜欧美大尺度福利影院在线看| 久久中文娱乐网| 欧美亚洲综合网| 成人一区二区三区| 蜜桃精品在线观看| 一区二区三区欧美日韩| 精品国产百合女同互慰| 日本大香伊一区二区三区| 精品一二三四区| 一区二区三区日韩欧美| 久久久久国色av免费看影院| 欧美特级限制片免费在线观看| 国产精品一区二区三区乱码| 亚欧色一区w666天堂| 亚洲精品国产第一综合99久久| 国产视频一区二区三区在线观看| 91精品婷婷国产综合久久竹菊| 99riav一区二区三区|