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

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

?? cstrcpsr.c

?? clips源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
   /*******************************************************/   /*      "C" Language Integrated Production System      */   /*                                                     */   /*             CLIPS Version 6.24  06/05/06            */   /*                                                     */   /*              CONSTRUCT PARSER MODULE                */   /*******************************************************//*************************************************************//* Purpose: Parsing routines and utilities for parsing       *//*   constructs.                                             *//*                                                           *//* Principal Programmer(s):                                  *//*      Gary D. Riley                                        *//*                                                           *//* Contributing Programmer(s):                               *//*                                                           *//* Revision History:                                         *//*                                                           *//*      6.24: Added environment parameter to GenClose.       *//*            Added environment parameter to GenOpen.        *//*                                                           *//*            Made the construct redefinition message more   *//*            prominent.                                     *//*                                                           *//*            Added pragmas to remove compilation warnings.  *//*                                                           *//*************************************************************/#define _CSTRCPSR_SOURCE_#include "setup.h"#if (! RUN_TIME) && (! BLOAD_ONLY)#include <stdio.h>#define _STDIO_INCLUDED_#include <stdlib.h>#include "envrnmnt.h"#include "router.h"#include "watch.h"#include "constrct.h"#include "prcdrpsr.h"#include "exprnpsr.h"#include "modulutl.h"#include "modulpsr.h"#include "sysdep.h"#include "utility.h"#include "cstrcpsr.h"/***************************************//* LOCAL INTERNAL FUNCTION DEFINITIONS *//***************************************/   static int                     FindConstructBeginning(void *,char *,struct token *,int,int *);/************************************************************//* EnvLoad: C access routine for the load command. Returns  *//*   0 if the file couldn't be opened, -1 if the file was   *//*   opened but an error occurred while loading constructs, *//*   and 1 if the file was opened and no errors occured     *//*   while loading.                                         *//************************************************************/globle int EnvLoad(  void *theEnv,  char *fileName)  {   FILE *theFile;   int noErrorsDetected;   /*=======================================*/   /* Open the file specified by file name. */   /*=======================================*/   if ((theFile = GenOpen(theEnv,fileName,"r")) == NULL) return(0);   /*===================================================*/   /* Read in the constructs. Enabling fast load allows */   /* the router system to be bypassed for quicker load */   /* times.                                            */   /*===================================================*/   SetFastLoad(theEnv,theFile);   noErrorsDetected = LoadConstructsFromLogicalName(theEnv,(char *) theFile);   SetFastLoad(theEnv,NULL);   /*=================*/   /* Close the file. */   /*=================*/   GenClose(theEnv,theFile);   /*========================================*/   /* If no errors occurred during the load, */   /* return 1, otherwise return -1.         */   /*========================================*/   if (noErrorsDetected) return(1);   return(-1);  }/*****************************************************************//* LoadConstructsFromLogicalName: Loads a set of constructs into *//*   the current environment from a specified logical name.      *//*****************************************************************/globle int LoadConstructsFromLogicalName(  void *theEnv,  char *readSource)  {   int constructFlag;   struct token theToken;   int noErrors = TRUE;   int foundConstruct;   /*=========================================*/   /* Reset the halt execution and evaluation */   /* error flags in preparation for parsing. */   /*=========================================*/   if (EvaluationData(theEnv)->CurrentEvaluationDepth == 0) SetHaltExecution(theEnv,FALSE);   SetEvaluationError(theEnv,FALSE);   /*========================================================*/   /* Find the beginning of the first construct in the file. */   /*========================================================*/   EvaluationData(theEnv)->CurrentEvaluationDepth++;   GetToken(theEnv,readSource,&theToken);   foundConstruct = FindConstructBeginning(theEnv,readSource,&theToken,FALSE,&noErrors);   /*==================================================*/   /* Parse the file until the end of file is reached. */   /*==================================================*/   while ((foundConstruct == TRUE) && (GetHaltExecution(theEnv) == FALSE))     {      /*===========================================================*/      /* Clear the pretty print buffer in preparation for parsing. */      /*===========================================================*/      FlushPPBuffer(theEnv);      /*======================*/      /* Parse the construct. */      /*======================*/      constructFlag = ParseConstruct(theEnv,ValueToString(theToken.value),readSource);      /*==============================================================*/      /* If an error occurred while parsing, then find the beginning  */      /* of the next construct (but don't generate any more error     */      /* messages--in effect, skip everything until another construct */      /* is found).                                                   */      /*==============================================================*/      if (constructFlag == 1)        {         EnvPrintRouter(theEnv,WERROR,"\nERROR:\n");         PrintInChunks(theEnv,WERROR,GetPPBuffer(theEnv));         EnvPrintRouter(theEnv,WERROR,"\n");         noErrors = FALSE;         GetToken(theEnv,readSource,&theToken);         foundConstruct = FindConstructBeginning(theEnv,readSource,&theToken,TRUE,&noErrors);        }      /*======================================================*/      /* Otherwise, find the beginning of the next construct. */      /*======================================================*/      else        {         GetToken(theEnv,readSource,&theToken);         foundConstruct = FindConstructBeginning(theEnv,readSource,&theToken,FALSE,&noErrors);        }      /*=====================================================*/      /* Yield time if necessary to foreground applications. */      /*=====================================================*/       if (foundConstruct)         { IncrementSymbolCount(theToken.value); }       EvaluationData(theEnv)->CurrentEvaluationDepth--;       PeriodicCleanup(theEnv,FALSE,TRUE);       YieldTime(theEnv);       EvaluationData(theEnv)->CurrentEvaluationDepth++;       if (foundConstruct)         { DecrementSymbolCount(theEnv,(SYMBOL_HN *) theToken.value); }     }   EvaluationData(theEnv)->CurrentEvaluationDepth--;   /*========================================================*/   /* Print a carriage return if a single character is being */   /* printed to indicate constructs are being processed.    */   /*========================================================*/#if DEBUGGING_FUNCTIONS   if ((EnvGetWatchItem(theEnv,"compilations") != TRUE) && GetPrintWhileLoading(theEnv))#else   if (GetPrintWhileLoading(theEnv))#endif     { EnvPrintRouter(theEnv,WDIALOG,"\n"); }   /*=============================================================*/   /* Once the load is complete, destroy the pretty print buffer. */   /* This frees up any memory that was used to create the pretty */   /* print forms for constructs during parsing. Thus calls to    */   /* the mem-used function will accurately reflect the amount of */   /* memory being used after a load command.                     */   /*=============================================================*/   DestroyPPBuffer(theEnv);   /*==========================================================*/   /* Return a boolean flag which indicates whether any errors */   /* were encountered while loading the constructs.           */   /*==========================================================*/   return(noErrors);  }/********************************************************************//* FindConstructBeginning: Searches for a left parenthesis followed *//*   by the name of a valid construct. Used by the load command to  *//*   find the next construct to be parsed. Returns TRUE is the      *//*   beginning of a construct was found, otherwise FALSE.           *//********************************************************************/static int FindConstructBeginning(  void *theEnv,  char *readSource,  struct token *theToken,  int errorCorrection,  int *noErrors)  {   int leftParenthesisFound = FALSE;   int firstAttempt = TRUE;   /*===================================================*/   /* Process tokens until the beginning of a construct */   /* is found or there are no more tokens.             */   /*===================================================*/   while (theToken->type != STOP)     {      /*=====================================================*/      /* Constructs begin with a left parenthesis. Make note */      /* that the opening parenthesis has been found.        */      /*=====================================================*/      if (theToken->type == LPAREN)        { leftParenthesisFound = TRUE; }      /*=================================================================*/      /* The name of the construct follows the opening left parenthesis. */      /* If it is the name of a valid construct, then return TRUE.       */      /* Otherwise, reset the flags to look for the beginning of a       */      /* construct. If error correction is being performed (i.e. the     */      /* last construct parsed had an error in it), then don't bother to */      /* print an error message, otherwise, print an error message.      */      /*=================================================================*/      else if ((theToken->type == SYMBOL) && (leftParenthesisFound == TRUE))        {         /*===========================================================*/         /* Is this a valid construct name (e.g., defrule, deffacts). */         /*===========================================================*/         if (FindConstruct(theEnv,ValueToString(theToken->value)) != NULL) return(TRUE);         /*===============================================*/         /* The construct name is invalid. Print an error */         /* message if one hasn't already been printed.   */         /*===============================================*/         if (firstAttempt && (! errorCorrection))           {            errorCorrection = TRUE;            *noErrors = FALSE;            PrintErrorID(theEnv,"CSTRCPSR",1,TRUE);            EnvPrintRouter(theEnv,WERROR,"Expected the beginning of a construct.\n");           }         /*======================================================*/         /* Indicate that an error has been found and that we're */         /* looking for a left parenthesis again.                */         /*======================================================*/         firstAttempt = FALSE;         leftParenthesisFound = FALSE;        }      /*====================================================================*/      /* Any token encountered other than a left parenthesis or a construct */      /* name following a left parenthesis is illegal. Again, if error      */      /* correction is in progress, no error message is printed, otherwise, */      /*  an error message is printed.                                      */      /*====================================================================*/      else        {         if (firstAttempt && (! errorCorrection))           {            errorCorrection = TRUE;            *noErrors = FALSE;            PrintErrorID(theEnv,"CSTRCPSR",1,TRUE);            EnvPrintRouter(theEnv,WERROR,"Expected the beginning of a construct.\n");           }         firstAttempt = FALSE;         leftParenthesisFound = FALSE;        }      /*============================================*/      /* Move on to the next token to be processed. */      /*============================================*/      GetToken(theEnv,readSource,theToken);     }   /*===================================================================*/   /* Couldn't find the beginning of a construct, so FALSE is returned. */   /*===================================================================*/   return(FALSE);  }/***********************************************************//* ParseConstruct: Parses a construct. Returns an integer. *//*   -1 if the construct name has no parsing function, 0   *//*   if the construct was parsed successfully, and 1 if    *//*   the construct was parsed unsuccessfully.              *//***********************************************************/globle int ParseConstruct(  void *theEnv,  char *name,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区影视| 欧美精品一区男女天堂| 欧美www视频| 亚洲激情在线激情| 国产在线精品免费| 欧美挠脚心视频网站| 亚洲天堂精品在线观看| 国产一区免费电影| 欧美一级日韩不卡播放免费| 日韩毛片精品高清免费| 国产一区二区三区av电影 | 精品国产a毛片| 一个色综合网站| 99re这里只有精品6| 国产日韩欧美综合一区| 久久99久久精品欧美| 欧美色倩网站大全免费| 日韩亚洲欧美综合| 日韩无一区二区| 亚洲免费看黄网站| 99热99精品| 91精品一区二区三区在线观看| 日韩一区中文字幕| 色久优优欧美色久优优| 日韩av在线发布| 欧美激情综合在线| 欧美日韩精品是欧美日韩精品| 国产又粗又猛又爽又黄91精品| 中文字幕一区二区5566日韩| 91麻豆精品国产91| 97aⅴ精品视频一二三区| 日本一区中文字幕| 亚洲女女做受ⅹxx高潮| 日韩精品一区二区三区中文精品| 99久免费精品视频在线观看| 美女任你摸久久 | 欧美一区二区福利在线| 91在线精品秘密一区二区| 亚洲国产综合人成综合网站| 久久精品亚洲一区二区三区浴池 | 欧美精品久久天天躁| 国产xxx精品视频大全| 午夜欧美视频在线观看| 国产精品久久久久久久久快鸭 | 91在线观看一区二区| 久久成人综合网| 亚洲午夜私人影院| 国产女主播一区| 日韩欧美国产一区二区在线播放| 色综合久久精品| 成人精品视频网站| 国产一区二区三区免费观看| 亚洲国产综合在线| 亚洲精品日日夜夜| 国产精品视频一二三区| 久久噜噜亚洲综合| 精品三级在线观看| 666欧美在线视频| 欧美性xxxxxxxx| 91国产免费观看| 91蜜桃网址入口| youjizz国产精品| 国产麻豆精品在线观看| 美女网站在线免费欧美精品| 首页国产丝袜综合| 亚洲国产视频一区二区| 一区二区三区日韩欧美| 国产精品色一区二区三区| 久久色在线观看| 久久亚洲综合色一区二区三区| 日韩一级片在线播放| 91精品免费在线| 91久久精品网| 欧美午夜精品免费| 欧美吻胸吃奶大尺度电影| 欧美在线观看一区二区| 欧美日韩中文字幕精品| 欧美视频在线播放| 欧美日本视频在线| 91精品国产手机| 欧美一级精品在线| 欧美精品一区二区久久久| 日韩久久久精品| 亚洲精品一区二区三区四区高清| 亚洲精品一区二区三区蜜桃下载 | 男男视频亚洲欧美| 蜜臀久久99精品久久久久宅男| 奇米影视一区二区三区| 精品亚洲porn| 国产精品性做久久久久久| 福利一区二区在线| 91视频免费观看| 欧美日韩中文字幕一区二区| 日韩一级完整毛片| 国产日韩欧美不卡| 亚洲视频一区二区在线| 亚洲成人综合视频| 久久国产精品一区二区| 国产99久久久国产精品潘金| 色综合色狠狠天天综合色| 欧美色图免费看| 884aa四虎影成人精品一区| 欧美成人vps| 国产精品视频麻豆| 午夜私人影院久久久久| 久久国产三级精品| 成人18视频日本| 欧美三级日韩三级| 久久久不卡网国产精品二区| 一区二区三区日本| 久久精品国产一区二区三区免费看 | 亚洲人成伊人成综合网小说| 亚洲午夜国产一区99re久久| 国内外成人在线| 91在线观看美女| 欧美videos大乳护士334| 亚洲欧洲精品天堂一级| 日韩国产在线一| 成人黄色免费短视频| 欧美一区二区三区四区高清| 国产欧美一区二区在线| 午夜久久电影网| 成人中文字幕在线| 91麻豆精品91久久久久久清纯| 国产精品免费视频一区| 免费精品视频在线| 91女人视频在线观看| 精品国产凹凸成av人网站| 亚洲黄色在线视频| 国产乱妇无码大片在线观看| 欧美日韩另类国产亚洲欧美一级| 国产精品午夜电影| 欧美aaaaaa午夜精品| 欧美体内she精高潮| 国产精品伦一区二区三级视频| 午夜精品福利一区二区蜜股av| 成人性生交大片免费看中文 | 国产无遮挡一区二区三区毛片日本| 综合激情成人伊人| 国产传媒一区在线| 日韩三级电影网址| 亚洲精品国产品国语在线app| 国产一区二区不卡老阿姨| 欧美电影一区二区三区| 亚洲欧美日韩国产综合在线| 国产东北露脸精品视频| 精品国产自在久精品国产| 日日摸夜夜添夜夜添亚洲女人| 99这里只有久久精品视频| 久久影院午夜片一区| 免费观看91视频大全| 欧美日韩性生活| 亚洲高清视频的网址| 色综合网色综合| 国产精品久久久久aaaa| 高清在线观看日韩| 久久精品视频一区二区| 精品制服美女丁香| 日韩三级在线观看| 日韩av电影一区| 欧美喷水一区二区| 五月综合激情婷婷六月色窝| 欧美日韩一区三区四区| 一区二区三区高清| 在线观看日韩一区| 亚洲最色的网站| 欧美性大战xxxxx久久久| 亚洲一区二区三区四区五区黄 | 国内不卡的二区三区中文字幕| 欧美精品亚洲二区| 日韩高清国产一区在线| 欧美一区二区三区四区视频| 麻豆免费精品视频| 欧美xxxx老人做受| 国产传媒欧美日韩成人| 国产精品视频在线看| 91免费视频观看| 夜夜亚洲天天久久| 欧美日韩国产美| 久久草av在线| 国产欧美视频一区二区| 成人av网址在线| 亚洲精品国产精华液| 欧美精品一二三四| 黄网站免费久久| 国产精品久久久久久久久搜平片| 91在线视频网址| 日韩电影在线免费观看| 精品日产卡一卡二卡麻豆| 粉嫩高潮美女一区二区三区| 亚洲免费三区一区二区| 欧美丰满一区二区免费视频| 激情图片小说一区| 国产精品久久久久久久久久免费看 | 亚洲天堂免费在线观看视频| 欧美日韩大陆在线| 精品夜夜嗨av一区二区三区| 中文字幕日韩一区二区| 欧美日韩国产电影| 精品一区二区三区免费播放|