clipsruby 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/ext/clipsruby/agenda.c +1373 -0
- data/ext/clipsruby/agenda.h +169 -0
- data/ext/clipsruby/analysis.c +1142 -0
- data/ext/clipsruby/analysis.h +61 -0
- data/ext/clipsruby/argacces.c +526 -0
- data/ext/clipsruby/argacces.h +77 -0
- data/ext/clipsruby/bload.c +884 -0
- data/ext/clipsruby/bload.h +94 -0
- data/ext/clipsruby/bmathfun.c +557 -0
- data/ext/clipsruby/bmathfun.h +66 -0
- data/ext/clipsruby/bsave.c +634 -0
- data/ext/clipsruby/bsave.h +130 -0
- data/ext/clipsruby/classcom.c +976 -0
- data/ext/clipsruby/classcom.h +115 -0
- data/ext/clipsruby/classexm.c +1376 -0
- data/ext/clipsruby/classexm.h +97 -0
- data/ext/clipsruby/classfun.c +1392 -0
- data/ext/clipsruby/classfun.h +164 -0
- data/ext/clipsruby/classinf.c +1245 -0
- data/ext/clipsruby/classinf.h +94 -0
- data/ext/clipsruby/classini.c +843 -0
- data/ext/clipsruby/classini.h +75 -0
- data/ext/clipsruby/classpsr.c +957 -0
- data/ext/clipsruby/classpsr.h +73 -0
- data/ext/clipsruby/clips.h +133 -0
- data/ext/clipsruby/clipsruby.c +619 -0
- data/ext/clipsruby/clsltpsr.c +931 -0
- data/ext/clipsruby/clsltpsr.h +72 -0
- data/ext/clipsruby/commline.c +1217 -0
- data/ext/clipsruby/commline.h +131 -0
- data/ext/clipsruby/conscomp.c +1593 -0
- data/ext/clipsruby/conscomp.h +150 -0
- data/ext/clipsruby/constant.h +264 -0
- data/ext/clipsruby/constrct.c +1090 -0
- data/ext/clipsruby/constrct.h +216 -0
- data/ext/clipsruby/constrnt.c +554 -0
- data/ext/clipsruby/constrnt.h +132 -0
- data/ext/clipsruby/crstrtgy.c +1088 -0
- data/ext/clipsruby/crstrtgy.h +85 -0
- data/ext/clipsruby/cstrcbin.c +185 -0
- data/ext/clipsruby/cstrcbin.h +61 -0
- data/ext/clipsruby/cstrccmp.h +43 -0
- data/ext/clipsruby/cstrccom.c +1791 -0
- data/ext/clipsruby/cstrccom.h +115 -0
- data/ext/clipsruby/cstrcpsr.c +835 -0
- data/ext/clipsruby/cstrcpsr.h +97 -0
- data/ext/clipsruby/cstrnbin.c +282 -0
- data/ext/clipsruby/cstrnbin.h +55 -0
- data/ext/clipsruby/cstrnchk.c +826 -0
- data/ext/clipsruby/cstrnchk.h +91 -0
- data/ext/clipsruby/cstrncmp.c +238 -0
- data/ext/clipsruby/cstrncmp.h +57 -0
- data/ext/clipsruby/cstrnops.c +1176 -0
- data/ext/clipsruby/cstrnops.h +47 -0
- data/ext/clipsruby/cstrnpsr.c +1394 -0
- data/ext/clipsruby/cstrnpsr.h +88 -0
- data/ext/clipsruby/cstrnutl.c +564 -0
- data/ext/clipsruby/cstrnutl.h +54 -0
- data/ext/clipsruby/default.c +454 -0
- data/ext/clipsruby/default.h +57 -0
- data/ext/clipsruby/defins.c +971 -0
- data/ext/clipsruby/defins.h +127 -0
- data/ext/clipsruby/developr.c +677 -0
- data/ext/clipsruby/developr.h +69 -0
- data/ext/clipsruby/dffctbin.c +477 -0
- data/ext/clipsruby/dffctbin.h +76 -0
- data/ext/clipsruby/dffctbsc.c +308 -0
- data/ext/clipsruby/dffctbsc.h +72 -0
- data/ext/clipsruby/dffctcmp.c +297 -0
- data/ext/clipsruby/dffctcmp.h +44 -0
- data/ext/clipsruby/dffctdef.c +364 -0
- data/ext/clipsruby/dffctdef.h +104 -0
- data/ext/clipsruby/dffctpsr.c +179 -0
- data/ext/clipsruby/dffctpsr.h +49 -0
- data/ext/clipsruby/dffnxbin.c +520 -0
- data/ext/clipsruby/dffnxbin.h +67 -0
- data/ext/clipsruby/dffnxcmp.c +378 -0
- data/ext/clipsruby/dffnxcmp.h +54 -0
- data/ext/clipsruby/dffnxexe.c +241 -0
- data/ext/clipsruby/dffnxexe.h +58 -0
- data/ext/clipsruby/dffnxfun.c +1192 -0
- data/ext/clipsruby/dffnxfun.h +155 -0
- data/ext/clipsruby/dffnxpsr.c +514 -0
- data/ext/clipsruby/dffnxpsr.h +57 -0
- data/ext/clipsruby/dfinsbin.c +509 -0
- data/ext/clipsruby/dfinsbin.h +66 -0
- data/ext/clipsruby/dfinscmp.c +345 -0
- data/ext/clipsruby/dfinscmp.h +48 -0
- data/ext/clipsruby/drive.c +1191 -0
- data/ext/clipsruby/drive.h +65 -0
- data/ext/clipsruby/emathfun.c +1213 -0
- data/ext/clipsruby/emathfun.h +99 -0
- data/ext/clipsruby/engine.c +1568 -0
- data/ext/clipsruby/engine.h +203 -0
- data/ext/clipsruby/entities.h +276 -0
- data/ext/clipsruby/envrnbld.c +514 -0
- data/ext/clipsruby/envrnbld.h +40 -0
- data/ext/clipsruby/envrnmnt.c +257 -0
- data/ext/clipsruby/envrnmnt.h +112 -0
- data/ext/clipsruby/evaluatn.c +1736 -0
- data/ext/clipsruby/evaluatn.h +211 -0
- data/ext/clipsruby/expressn.c +494 -0
- data/ext/clipsruby/expressn.h +154 -0
- data/ext/clipsruby/exprnbin.c +538 -0
- data/ext/clipsruby/exprnbin.h +60 -0
- data/ext/clipsruby/exprnops.c +564 -0
- data/ext/clipsruby/exprnops.h +67 -0
- data/ext/clipsruby/exprnpsr.c +1112 -0
- data/ext/clipsruby/exprnpsr.h +98 -0
- data/ext/clipsruby/extconf.rb +2 -0
- data/ext/clipsruby/extnfunc.c +1015 -0
- data/ext/clipsruby/extnfunc.h +157 -0
- data/ext/clipsruby/factbin.c +447 -0
- data/ext/clipsruby/factbin.h +56 -0
- data/ext/clipsruby/factbld.c +1035 -0
- data/ext/clipsruby/factbld.h +63 -0
- data/ext/clipsruby/factcmp.c +386 -0
- data/ext/clipsruby/factcmp.h +46 -0
- data/ext/clipsruby/factcom.c +759 -0
- data/ext/clipsruby/factcom.h +80 -0
- data/ext/clipsruby/factfile.c +1761 -0
- data/ext/clipsruby/factfile.h +54 -0
- data/ext/clipsruby/factfun.c +682 -0
- data/ext/clipsruby/factfun.h +77 -0
- data/ext/clipsruby/factgen.c +1305 -0
- data/ext/clipsruby/factgen.h +229 -0
- data/ext/clipsruby/facthsh.c +438 -0
- data/ext/clipsruby/facthsh.h +81 -0
- data/ext/clipsruby/factlhs.c +250 -0
- data/ext/clipsruby/factlhs.h +54 -0
- data/ext/clipsruby/factmch.c +905 -0
- data/ext/clipsruby/factmch.h +68 -0
- data/ext/clipsruby/factmngr.c +3373 -0
- data/ext/clipsruby/factmngr.h +325 -0
- data/ext/clipsruby/factprt.c +498 -0
- data/ext/clipsruby/factprt.h +60 -0
- data/ext/clipsruby/factqpsr.c +796 -0
- data/ext/clipsruby/factqpsr.h +61 -0
- data/ext/clipsruby/factqury.c +1267 -0
- data/ext/clipsruby/factqury.h +112 -0
- data/ext/clipsruby/factrete.c +978 -0
- data/ext/clipsruby/factrete.h +70 -0
- data/ext/clipsruby/factrhs.c +667 -0
- data/ext/clipsruby/factrhs.h +55 -0
- data/ext/clipsruby/filecom.c +353 -0
- data/ext/clipsruby/filecom.h +137 -0
- data/ext/clipsruby/filertr.c +481 -0
- data/ext/clipsruby/filertr.h +94 -0
- data/ext/clipsruby/fileutil.c +1020 -0
- data/ext/clipsruby/fileutil.h +50 -0
- data/ext/clipsruby/generate.c +1079 -0
- data/ext/clipsruby/generate.h +57 -0
- data/ext/clipsruby/genrcbin.c +902 -0
- data/ext/clipsruby/genrcbin.h +69 -0
- data/ext/clipsruby/genrccmp.c +640 -0
- data/ext/clipsruby/genrccmp.h +59 -0
- data/ext/clipsruby/genrccom.c +2017 -0
- data/ext/clipsruby/genrccom.h +119 -0
- data/ext/clipsruby/genrcexe.c +737 -0
- data/ext/clipsruby/genrcexe.h +73 -0
- data/ext/clipsruby/genrcfun.c +890 -0
- data/ext/clipsruby/genrcfun.h +185 -0
- data/ext/clipsruby/genrcpsr.c +1618 -0
- data/ext/clipsruby/genrcpsr.h +80 -0
- data/ext/clipsruby/globlbin.c +458 -0
- data/ext/clipsruby/globlbin.h +71 -0
- data/ext/clipsruby/globlbsc.c +361 -0
- data/ext/clipsruby/globlbsc.h +83 -0
- data/ext/clipsruby/globlcmp.c +330 -0
- data/ext/clipsruby/globlcmp.h +52 -0
- data/ext/clipsruby/globlcom.c +289 -0
- data/ext/clipsruby/globlcom.h +63 -0
- data/ext/clipsruby/globldef.c +1087 -0
- data/ext/clipsruby/globldef.h +151 -0
- data/ext/clipsruby/globlpsr.c +530 -0
- data/ext/clipsruby/globlpsr.h +59 -0
- data/ext/clipsruby/immthpsr.c +431 -0
- data/ext/clipsruby/immthpsr.h +55 -0
- data/ext/clipsruby/incrrset.c +530 -0
- data/ext/clipsruby/incrrset.h +73 -0
- data/ext/clipsruby/inherpsr.c +850 -0
- data/ext/clipsruby/inherpsr.h +52 -0
- data/ext/clipsruby/inscom.c +2076 -0
- data/ext/clipsruby/inscom.h +182 -0
- data/ext/clipsruby/insfile.c +1764 -0
- data/ext/clipsruby/insfile.h +96 -0
- data/ext/clipsruby/insfun.c +1451 -0
- data/ext/clipsruby/insfun.h +134 -0
- data/ext/clipsruby/insmngr.c +2550 -0
- data/ext/clipsruby/insmngr.h +125 -0
- data/ext/clipsruby/insmoddp.c +1041 -0
- data/ext/clipsruby/insmoddp.h +91 -0
- data/ext/clipsruby/insmult.c +804 -0
- data/ext/clipsruby/insmult.h +62 -0
- data/ext/clipsruby/inspsr.c +602 -0
- data/ext/clipsruby/inspsr.h +60 -0
- data/ext/clipsruby/insquery.c +1278 -0
- data/ext/clipsruby/insquery.h +115 -0
- data/ext/clipsruby/insqypsr.c +729 -0
- data/ext/clipsruby/insqypsr.h +63 -0
- data/ext/clipsruby/iofun.c +2045 -0
- data/ext/clipsruby/iofun.h +116 -0
- data/ext/clipsruby/lgcldpnd.c +644 -0
- data/ext/clipsruby/lgcldpnd.h +75 -0
- data/ext/clipsruby/main.c +112 -0
- data/ext/clipsruby/match.h +142 -0
- data/ext/clipsruby/memalloc.c +481 -0
- data/ext/clipsruby/memalloc.h +197 -0
- data/ext/clipsruby/miscfun.c +1801 -0
- data/ext/clipsruby/miscfun.h +132 -0
- data/ext/clipsruby/modulbin.c +607 -0
- data/ext/clipsruby/modulbin.h +84 -0
- data/ext/clipsruby/modulbsc.c +347 -0
- data/ext/clipsruby/modulbsc.h +67 -0
- data/ext/clipsruby/modulcmp.c +499 -0
- data/ext/clipsruby/modulcmp.h +54 -0
- data/ext/clipsruby/moduldef.c +817 -0
- data/ext/clipsruby/moduldef.h +271 -0
- data/ext/clipsruby/modulpsr.c +1150 -0
- data/ext/clipsruby/modulpsr.h +69 -0
- data/ext/clipsruby/modulutl.c +1036 -0
- data/ext/clipsruby/modulutl.h +84 -0
- data/ext/clipsruby/msgcom.c +1221 -0
- data/ext/clipsruby/msgcom.h +125 -0
- data/ext/clipsruby/msgfun.c +1076 -0
- data/ext/clipsruby/msgfun.h +118 -0
- data/ext/clipsruby/msgpass.c +1441 -0
- data/ext/clipsruby/msgpass.h +103 -0
- data/ext/clipsruby/msgpsr.c +698 -0
- data/ext/clipsruby/msgpsr.h +73 -0
- data/ext/clipsruby/multifld.c +1404 -0
- data/ext/clipsruby/multifld.h +130 -0
- data/ext/clipsruby/multifun.c +2182 -0
- data/ext/clipsruby/multifun.h +102 -0
- data/ext/clipsruby/network.h +142 -0
- data/ext/clipsruby/objbin.c +1522 -0
- data/ext/clipsruby/objbin.h +79 -0
- data/ext/clipsruby/objcmp.c +1507 -0
- data/ext/clipsruby/objcmp.h +71 -0
- data/ext/clipsruby/object.h +260 -0
- data/ext/clipsruby/objrtbin.c +701 -0
- data/ext/clipsruby/objrtbin.h +79 -0
- data/ext/clipsruby/objrtbld.c +2393 -0
- data/ext/clipsruby/objrtbld.h +66 -0
- data/ext/clipsruby/objrtcmp.c +734 -0
- data/ext/clipsruby/objrtcmp.h +66 -0
- data/ext/clipsruby/objrtfnx.c +1330 -0
- data/ext/clipsruby/objrtfnx.h +222 -0
- data/ext/clipsruby/objrtgen.c +736 -0
- data/ext/clipsruby/objrtgen.h +63 -0
- data/ext/clipsruby/objrtmch.c +1524 -0
- data/ext/clipsruby/objrtmch.h +160 -0
- data/ext/clipsruby/parsefun.c +415 -0
- data/ext/clipsruby/parsefun.h +67 -0
- data/ext/clipsruby/pattern.c +1265 -0
- data/ext/clipsruby/pattern.h +163 -0
- data/ext/clipsruby/pprint.c +328 -0
- data/ext/clipsruby/pprint.h +79 -0
- data/ext/clipsruby/prccode.c +1478 -0
- data/ext/clipsruby/prccode.h +145 -0
- data/ext/clipsruby/prcdrfun.c +640 -0
- data/ext/clipsruby/prcdrfun.h +95 -0
- data/ext/clipsruby/prcdrpsr.c +1068 -0
- data/ext/clipsruby/prcdrpsr.h +79 -0
- data/ext/clipsruby/prdctfun.c +869 -0
- data/ext/clipsruby/prdctfun.h +77 -0
- data/ext/clipsruby/prntutil.c +878 -0
- data/ext/clipsruby/prntutil.h +125 -0
- data/ext/clipsruby/proflfun.c +827 -0
- data/ext/clipsruby/proflfun.h +118 -0
- data/ext/clipsruby/reorder.c +2082 -0
- data/ext/clipsruby/reorder.h +172 -0
- data/ext/clipsruby/reteutil.c +1732 -0
- data/ext/clipsruby/reteutil.h +111 -0
- data/ext/clipsruby/retract.c +710 -0
- data/ext/clipsruby/retract.h +74 -0
- data/ext/clipsruby/router.c +737 -0
- data/ext/clipsruby/router.h +147 -0
- data/ext/clipsruby/rulebin.c +1136 -0
- data/ext/clipsruby/rulebin.h +153 -0
- data/ext/clipsruby/rulebld.c +1328 -0
- data/ext/clipsruby/rulebld.h +62 -0
- data/ext/clipsruby/rulebsc.c +517 -0
- data/ext/clipsruby/rulebsc.h +91 -0
- data/ext/clipsruby/rulecmp.c +733 -0
- data/ext/clipsruby/rulecmp.h +63 -0
- data/ext/clipsruby/rulecom.c +1583 -0
- data/ext/clipsruby/rulecom.h +116 -0
- data/ext/clipsruby/rulecstr.c +892 -0
- data/ext/clipsruby/rulecstr.h +53 -0
- data/ext/clipsruby/ruledef.c +559 -0
- data/ext/clipsruby/ruledef.h +179 -0
- data/ext/clipsruby/ruledlt.c +599 -0
- data/ext/clipsruby/ruledlt.h +58 -0
- data/ext/clipsruby/rulelhs.c +1216 -0
- data/ext/clipsruby/rulelhs.h +52 -0
- data/ext/clipsruby/rulepsr.c +1073 -0
- data/ext/clipsruby/rulepsr.h +61 -0
- data/ext/clipsruby/scanner.c +856 -0
- data/ext/clipsruby/scanner.h +112 -0
- data/ext/clipsruby/setup.h +488 -0
- data/ext/clipsruby/sortfun.c +433 -0
- data/ext/clipsruby/sortfun.h +55 -0
- data/ext/clipsruby/strngfun.c +1173 -0
- data/ext/clipsruby/strngfun.h +96 -0
- data/ext/clipsruby/strngrtr.c +523 -0
- data/ext/clipsruby/strngrtr.h +97 -0
- data/ext/clipsruby/symblbin.c +648 -0
- data/ext/clipsruby/symblbin.h +64 -0
- data/ext/clipsruby/symblcmp.c +893 -0
- data/ext/clipsruby/symblcmp.h +61 -0
- data/ext/clipsruby/symbol.c +1961 -0
- data/ext/clipsruby/symbol.h +243 -0
- data/ext/clipsruby/sysdep.c +894 -0
- data/ext/clipsruby/sysdep.h +164 -0
- data/ext/clipsruby/textpro.c +1388 -0
- data/ext/clipsruby/textpro.h +77 -0
- data/ext/clipsruby/tmpltbin.c +609 -0
- data/ext/clipsruby/tmpltbin.h +108 -0
- data/ext/clipsruby/tmpltbsc.c +327 -0
- data/ext/clipsruby/tmpltbsc.h +87 -0
- data/ext/clipsruby/tmpltcmp.c +450 -0
- data/ext/clipsruby/tmpltcmp.h +57 -0
- data/ext/clipsruby/tmpltdef.c +584 -0
- data/ext/clipsruby/tmpltdef.h +155 -0
- data/ext/clipsruby/tmpltfun.c +2477 -0
- data/ext/clipsruby/tmpltfun.h +122 -0
- data/ext/clipsruby/tmpltlhs.c +379 -0
- data/ext/clipsruby/tmpltlhs.h +50 -0
- data/ext/clipsruby/tmpltpsr.c +819 -0
- data/ext/clipsruby/tmpltpsr.h +59 -0
- data/ext/clipsruby/tmpltrhs.c +595 -0
- data/ext/clipsruby/tmpltrhs.h +55 -0
- data/ext/clipsruby/tmpltutl.c +637 -0
- data/ext/clipsruby/tmpltutl.h +82 -0
- data/ext/clipsruby/userdata.c +156 -0
- data/ext/clipsruby/userdata.h +72 -0
- data/ext/clipsruby/userfunctions.c +70 -0
- data/ext/clipsruby/usrsetup.h +7 -0
- data/ext/clipsruby/utility.c +1594 -0
- data/ext/clipsruby/utility.h +250 -0
- data/ext/clipsruby/watch.c +865 -0
- data/ext/clipsruby/watch.h +124 -0
- data/lib/clipsruby.rb +1 -0
- metadata +388 -0
@@ -0,0 +1,63 @@
|
|
1
|
+
/*******************************************************/
|
2
|
+
/* "C" Language Integrated Production System */
|
3
|
+
/* */
|
4
|
+
/* CLIPS Version 6.40 07/23/20 */
|
5
|
+
/* */
|
6
|
+
/* FACT BUILD HEADER FILE */
|
7
|
+
/*******************************************************/
|
8
|
+
|
9
|
+
/*************************************************************/
|
10
|
+
/* Purpose: */
|
11
|
+
/* */
|
12
|
+
/* Principal Programmer(s): */
|
13
|
+
/* Gary D. Riley */
|
14
|
+
/* */
|
15
|
+
/* Contributing Programmer(s): */
|
16
|
+
/* */
|
17
|
+
/* Revision History: */
|
18
|
+
/* */
|
19
|
+
/* 6.30: Added support for hashed alpha memories. */
|
20
|
+
/* */
|
21
|
+
/* Added support for hashed comparisons to */
|
22
|
+
/* constants. */
|
23
|
+
/* */
|
24
|
+
/* 6.32: Fixed _FACTBUILD_SOURCE_ typo. */
|
25
|
+
/* */
|
26
|
+
/* 6.40: Removed LOCALE definition. */
|
27
|
+
/* */
|
28
|
+
/* Pragma once and other inclusion changes. */
|
29
|
+
/* */
|
30
|
+
/* Removed use of void pointers for specific */
|
31
|
+
/* data structures. */
|
32
|
+
/* */
|
33
|
+
/*************************************************************/
|
34
|
+
|
35
|
+
#ifndef _H_factbld
|
36
|
+
|
37
|
+
#pragma once
|
38
|
+
|
39
|
+
#define _H_factbld
|
40
|
+
|
41
|
+
struct factPatternNode;
|
42
|
+
|
43
|
+
#include "network.h"
|
44
|
+
#include "expressn.h"
|
45
|
+
|
46
|
+
struct factPatternNode
|
47
|
+
{
|
48
|
+
struct patternNodeHeader header;
|
49
|
+
unsigned long bsaveID;
|
50
|
+
unsigned short whichField; // TBD seems to be 1 based rather than 0 based
|
51
|
+
unsigned short whichSlot;
|
52
|
+
unsigned short leaveFields;
|
53
|
+
struct expr *networkTest;
|
54
|
+
struct factPatternNode *nextLevel;
|
55
|
+
struct factPatternNode *lastLevel;
|
56
|
+
struct factPatternNode *leftNode;
|
57
|
+
struct factPatternNode *rightNode;
|
58
|
+
};
|
59
|
+
|
60
|
+
void InitializeFactPatterns(Environment *);
|
61
|
+
void DestroyFactPatternNetwork(Environment *,struct factPatternNode *);
|
62
|
+
|
63
|
+
#endif /* _H_factbld */
|
@@ -0,0 +1,386 @@
|
|
1
|
+
|
2
|
+
/*******************************************************/
|
3
|
+
/* "C" Language Integrated Production System */
|
4
|
+
/* */
|
5
|
+
/* CLIPS Version 6.40 11/01/16 */
|
6
|
+
/* */
|
7
|
+
/* FACT PATTERN NETWORK CONSTRUCTS-TO-C MODULE */
|
8
|
+
/*******************************************************/
|
9
|
+
|
10
|
+
/*************************************************************/
|
11
|
+
/* Purpose: Implements the constructs-to-c feature for the */
|
12
|
+
/* fact pattern network. */
|
13
|
+
/* */
|
14
|
+
/* Principal Programmer(s): */
|
15
|
+
/* Gary D. Riley */
|
16
|
+
/* */
|
17
|
+
/* Contributing Programmer(s): */
|
18
|
+
/* */
|
19
|
+
/* Revision History: */
|
20
|
+
/* */
|
21
|
+
/* 6.30: Added support for path name argument to */
|
22
|
+
/* constructs-to-c. */
|
23
|
+
/* */
|
24
|
+
/* Added const qualifiers to remove C++ */
|
25
|
+
/* deprecation warnings. */
|
26
|
+
/* */
|
27
|
+
/* 6.40: Pragma once and other inclusion changes. */
|
28
|
+
/* */
|
29
|
+
/* Added support for booleans with <stdbool.h>. */
|
30
|
+
/* */
|
31
|
+
/* Removed use of void pointers for specific */
|
32
|
+
/* data structures. */
|
33
|
+
/* */
|
34
|
+
/*************************************************************/
|
35
|
+
|
36
|
+
#include "setup.h"
|
37
|
+
|
38
|
+
#if DEFRULE_CONSTRUCT && (! RUN_TIME) && DEFTEMPLATE_CONSTRUCT && CONSTRUCT_COMPILER
|
39
|
+
|
40
|
+
#define FactPrefix() ArbitraryPrefix(FactData(theEnv)->FactCodeItem,0)
|
41
|
+
|
42
|
+
#include <stdio.h>
|
43
|
+
|
44
|
+
#include "factbld.h"
|
45
|
+
#include "factmngr.h"
|
46
|
+
#include "conscomp.h"
|
47
|
+
#include "factcmp.h"
|
48
|
+
#include "tmpltdef.h"
|
49
|
+
#include "envrnmnt.h"
|
50
|
+
|
51
|
+
/***************************************/
|
52
|
+
/* LOCAL INTERNAL FUNCTION DEFINITIONS */
|
53
|
+
/***************************************/
|
54
|
+
|
55
|
+
static bool PatternNetworkToCode(Environment *,const char *,const char *,char *,
|
56
|
+
unsigned int,FILE *,unsigned int,unsigned int);
|
57
|
+
static void BeforePatternNetworkToCode(Environment *);
|
58
|
+
static struct factPatternNode *GetNextPatternNode(struct factPatternNode *);
|
59
|
+
static void CloseNetworkFiles(Environment *,FILE *,unsigned int);
|
60
|
+
static void PatternNodeToCode(Environment *,FILE *,struct factPatternNode *,unsigned int,unsigned int);
|
61
|
+
|
62
|
+
/**************************************************************/
|
63
|
+
/* FactPatternsCompilerSetup: Initializes the constructs-to-c */
|
64
|
+
/* command for use with the fact pattern network. */
|
65
|
+
/**************************************************************/
|
66
|
+
void FactPatternsCompilerSetup(
|
67
|
+
Environment *theEnv)
|
68
|
+
{
|
69
|
+
FactData(theEnv)->FactCodeItem = AddCodeGeneratorItem(theEnv,"facts",0,BeforePatternNetworkToCode,
|
70
|
+
NULL,PatternNetworkToCode,1);
|
71
|
+
}
|
72
|
+
|
73
|
+
/****************************************************************/
|
74
|
+
/* BeforePatternNetworkToCode: Assigns each pattern node with a */
|
75
|
+
/* unique ID which will be used for pointer references when */
|
76
|
+
/* the data structures are written to a file as C code */
|
77
|
+
/****************************************************************/
|
78
|
+
static void BeforePatternNetworkToCode(
|
79
|
+
Environment *theEnv)
|
80
|
+
{
|
81
|
+
unsigned int whichPattern = 0;
|
82
|
+
unsigned int whichDeftemplate = 0;
|
83
|
+
Defmodule *theModule;
|
84
|
+
Deftemplate *theDeftemplate;
|
85
|
+
struct factPatternNode *thePattern;
|
86
|
+
|
87
|
+
/*===========================*/
|
88
|
+
/* Loop through each module. */
|
89
|
+
/*===========================*/
|
90
|
+
|
91
|
+
for (theModule = GetNextDefmodule(theEnv,NULL);
|
92
|
+
theModule != NULL;
|
93
|
+
theModule = GetNextDefmodule(theEnv,theModule))
|
94
|
+
{
|
95
|
+
/*=========================*/
|
96
|
+
/* Set the current module. */
|
97
|
+
/*=========================*/
|
98
|
+
|
99
|
+
SetCurrentModule(theEnv,theModule);
|
100
|
+
|
101
|
+
/*======================================================*/
|
102
|
+
/* Loop through each deftemplate in the current module. */
|
103
|
+
/*======================================================*/
|
104
|
+
|
105
|
+
for (theDeftemplate = GetNextDeftemplate(theEnv,NULL);
|
106
|
+
theDeftemplate != NULL;
|
107
|
+
theDeftemplate = GetNextDeftemplate(theEnv,theDeftemplate))
|
108
|
+
{
|
109
|
+
/*=================================================*/
|
110
|
+
/* Assign each pattern node in the pattern network */
|
111
|
+
/* for the deftemplate a unique integer ID. */
|
112
|
+
/*=================================================*/
|
113
|
+
|
114
|
+
theDeftemplate->header.bsaveID = whichDeftemplate++;
|
115
|
+
for (thePattern = theDeftemplate->patternNetwork;
|
116
|
+
thePattern != NULL;
|
117
|
+
thePattern = GetNextPatternNode(thePattern))
|
118
|
+
{ thePattern->bsaveID = whichPattern++; }
|
119
|
+
}
|
120
|
+
}
|
121
|
+
}
|
122
|
+
|
123
|
+
/********************************************************************/
|
124
|
+
/* GetNextPatternNode: Returns the next node in a pattern network */
|
125
|
+
/* tree. The next node is computed using a depth first traversal. */
|
126
|
+
/********************************************************************/
|
127
|
+
static struct factPatternNode *GetNextPatternNode(
|
128
|
+
struct factPatternNode *thePattern)
|
129
|
+
{
|
130
|
+
/*=========================================*/
|
131
|
+
/* If it's possible to go deeper into the */
|
132
|
+
/* tree, then move down to the next level. */
|
133
|
+
/*=========================================*/
|
134
|
+
|
135
|
+
if (thePattern->nextLevel != NULL) return(thePattern->nextLevel);
|
136
|
+
|
137
|
+
/*========================================*/
|
138
|
+
/* Keep backing up toward the root of the */
|
139
|
+
/* tree until a side branch can be taken. */
|
140
|
+
/*========================================*/
|
141
|
+
|
142
|
+
while (thePattern->rightNode == NULL)
|
143
|
+
{
|
144
|
+
/*========================================*/
|
145
|
+
/* Back up to check the next side branch. */
|
146
|
+
/*========================================*/
|
147
|
+
|
148
|
+
thePattern = thePattern->lastLevel;
|
149
|
+
|
150
|
+
/*======================================*/
|
151
|
+
/* If we branched up from the root, the */
|
152
|
+
/* entire tree has been traversed. */
|
153
|
+
/*======================================*/
|
154
|
+
|
155
|
+
if (thePattern == NULL) return NULL;
|
156
|
+
}
|
157
|
+
|
158
|
+
/*==================================*/
|
159
|
+
/* Move on to the next side branch. */
|
160
|
+
/*==================================*/
|
161
|
+
|
162
|
+
return(thePattern->rightNode);
|
163
|
+
}
|
164
|
+
|
165
|
+
/********************************************************************/
|
166
|
+
/* PatternNetworkToCode: Produces the fact pattern network code for */
|
167
|
+
/* a run-time module created using the constructs-to-c function. */
|
168
|
+
/********************************************************************/
|
169
|
+
static bool PatternNetworkToCode(
|
170
|
+
Environment *theEnv,
|
171
|
+
const char *fileName,
|
172
|
+
const char *pathName,
|
173
|
+
char *fileNameBuffer,
|
174
|
+
unsigned int fileID,
|
175
|
+
FILE *headerFP,
|
176
|
+
unsigned int imageID,
|
177
|
+
unsigned int maxIndices)
|
178
|
+
{
|
179
|
+
unsigned int fileCount = 1;
|
180
|
+
Defmodule *theModule;
|
181
|
+
Deftemplate *theTemplate;
|
182
|
+
struct factPatternNode *thePatternNode;
|
183
|
+
unsigned int networkArrayCount = 0, networkArrayVersion = 1;
|
184
|
+
FILE *networkFile = NULL;
|
185
|
+
|
186
|
+
/*===========================================================*/
|
187
|
+
/* Include the appropriate fact pattern network header file. */
|
188
|
+
/*===========================================================*/
|
189
|
+
|
190
|
+
fprintf(headerFP,"#include \"factbld.h\"\n");
|
191
|
+
|
192
|
+
/*===============================*/
|
193
|
+
/* Loop through all the modules. */
|
194
|
+
/*===============================*/
|
195
|
+
|
196
|
+
for (theModule = GetNextDefmodule(theEnv,NULL);
|
197
|
+
theModule != NULL;
|
198
|
+
theModule = GetNextDefmodule(theEnv,theModule))
|
199
|
+
{
|
200
|
+
/*=========================*/
|
201
|
+
/* Set the current module. */
|
202
|
+
/*=========================*/
|
203
|
+
|
204
|
+
SetCurrentModule(theEnv,theModule);
|
205
|
+
|
206
|
+
/*======================================*/
|
207
|
+
/* Loop through all of the deftemplates */
|
208
|
+
/* in the current module. */
|
209
|
+
/*======================================*/
|
210
|
+
|
211
|
+
for (theTemplate = GetNextDeftemplate(theEnv,NULL);
|
212
|
+
theTemplate != NULL;
|
213
|
+
theTemplate = GetNextDeftemplate(theEnv,theTemplate))
|
214
|
+
{
|
215
|
+
/*======================================================*/
|
216
|
+
/* Loop through each pattern node in the deftemplate's */
|
217
|
+
/* pattern network writing its C code representation to */
|
218
|
+
/* the file as it is traversed. */
|
219
|
+
/*======================================================*/
|
220
|
+
|
221
|
+
for (thePatternNode = theTemplate->patternNetwork;
|
222
|
+
thePatternNode != NULL;
|
223
|
+
thePatternNode = GetNextPatternNode(thePatternNode))
|
224
|
+
{
|
225
|
+
networkFile = OpenFileIfNeeded(theEnv,networkFile,fileName,pathName,fileNameBuffer,fileID,imageID,&fileCount,
|
226
|
+
networkArrayVersion,headerFP,
|
227
|
+
"struct factPatternNode",FactPrefix(),false,NULL);
|
228
|
+
if (networkFile == NULL)
|
229
|
+
{
|
230
|
+
CloseNetworkFiles(theEnv,networkFile,maxIndices);
|
231
|
+
return false;
|
232
|
+
}
|
233
|
+
|
234
|
+
PatternNodeToCode(theEnv,networkFile,thePatternNode,imageID,maxIndices);
|
235
|
+
networkArrayCount++;
|
236
|
+
networkFile = CloseFileIfNeeded(theEnv,networkFile,&networkArrayCount,
|
237
|
+
&networkArrayVersion,maxIndices,NULL,NULL);
|
238
|
+
}
|
239
|
+
}
|
240
|
+
}
|
241
|
+
|
242
|
+
/*==============================*/
|
243
|
+
/* Close any C files left open. */
|
244
|
+
/*==============================*/
|
245
|
+
|
246
|
+
CloseNetworkFiles(theEnv,networkFile,maxIndices);
|
247
|
+
|
248
|
+
/*===============================*/
|
249
|
+
/* Return true to indicate the C */
|
250
|
+
/* code was successfully saved. */
|
251
|
+
/*===============================*/
|
252
|
+
|
253
|
+
return true;
|
254
|
+
}
|
255
|
+
|
256
|
+
/****************************************************************/
|
257
|
+
/* CloseNetworkFiles: Closes all of the C files created for the */
|
258
|
+
/* fact pattern network. Called when an error occurs or when */
|
259
|
+
/* the fact pattern network data structures have all been */
|
260
|
+
/* written to the files. */
|
261
|
+
/****************************************************************/
|
262
|
+
static void CloseNetworkFiles(
|
263
|
+
Environment *theEnv,
|
264
|
+
FILE *networkFile,
|
265
|
+
unsigned int maxIndices)
|
266
|
+
{
|
267
|
+
unsigned int count = maxIndices;
|
268
|
+
unsigned int arrayVersion = 0;
|
269
|
+
|
270
|
+
if (networkFile != NULL)
|
271
|
+
{
|
272
|
+
CloseFileIfNeeded(theEnv,networkFile,&count,&arrayVersion,maxIndices,NULL,NULL);
|
273
|
+
}
|
274
|
+
}
|
275
|
+
|
276
|
+
/************************************************************/
|
277
|
+
/* PatternNodeToCode: Writes the C code representation of a */
|
278
|
+
/* single fact pattern node slot to the specified file. */
|
279
|
+
/************************************************************/
|
280
|
+
static void PatternNodeToCode(
|
281
|
+
Environment *theEnv,
|
282
|
+
FILE *theFile,
|
283
|
+
struct factPatternNode *thePatternNode,
|
284
|
+
unsigned int imageID,
|
285
|
+
unsigned int maxIndices)
|
286
|
+
{
|
287
|
+
fprintf(theFile,"{");
|
288
|
+
|
289
|
+
/*=====================*/
|
290
|
+
/* Pattern Node Header */
|
291
|
+
/*=====================*/
|
292
|
+
|
293
|
+
PatternNodeHeaderToCode(theEnv,theFile,&thePatternNode->header,imageID,maxIndices);
|
294
|
+
|
295
|
+
/*========================*/
|
296
|
+
/* Field and Slot Indices */
|
297
|
+
/*========================*/
|
298
|
+
|
299
|
+
fprintf(theFile,",0,%d,%d,%d,",thePatternNode->whichField,
|
300
|
+
thePatternNode->whichSlot,
|
301
|
+
thePatternNode->leaveFields);
|
302
|
+
|
303
|
+
/*===============*/
|
304
|
+
/* Network Tests */
|
305
|
+
/*===============*/
|
306
|
+
|
307
|
+
PrintHashedExpressionReference(theEnv,theFile,thePatternNode->networkTest,imageID,maxIndices);
|
308
|
+
|
309
|
+
/*============*/
|
310
|
+
/* Next Level */
|
311
|
+
/*============*/
|
312
|
+
|
313
|
+
if (thePatternNode->nextLevel == NULL)
|
314
|
+
{ fprintf(theFile,",NULL,"); }
|
315
|
+
else
|
316
|
+
{
|
317
|
+
fprintf(theFile,",&%s%d_%ld[%ld],",FactPrefix(),
|
318
|
+
imageID,(thePatternNode->nextLevel->bsaveID / maxIndices) + 1,
|
319
|
+
thePatternNode->nextLevel->bsaveID % maxIndices);
|
320
|
+
}
|
321
|
+
|
322
|
+
/*============*/
|
323
|
+
/* Last Level */
|
324
|
+
/*============*/
|
325
|
+
|
326
|
+
if (thePatternNode->lastLevel == NULL)
|
327
|
+
{ fprintf(theFile,"NULL,"); }
|
328
|
+
else
|
329
|
+
{
|
330
|
+
fprintf(theFile,"&%s%d_%ld[%ld],",FactPrefix(),
|
331
|
+
imageID,(thePatternNode->lastLevel->bsaveID / maxIndices) + 1,
|
332
|
+
thePatternNode->lastLevel->bsaveID % maxIndices);
|
333
|
+
}
|
334
|
+
|
335
|
+
/*===========*/
|
336
|
+
/* Left Node */
|
337
|
+
/*===========*/
|
338
|
+
|
339
|
+
if (thePatternNode->leftNode == NULL)
|
340
|
+
{ fprintf(theFile,"NULL,"); }
|
341
|
+
else
|
342
|
+
{
|
343
|
+
fprintf(theFile,"&%s%d_%ld[%ld],",FactPrefix(),
|
344
|
+
imageID,(thePatternNode->leftNode->bsaveID / maxIndices) + 1,
|
345
|
+
thePatternNode->leftNode->bsaveID % maxIndices);
|
346
|
+
}
|
347
|
+
|
348
|
+
/*============*/
|
349
|
+
/* Right Node */
|
350
|
+
/*============*/
|
351
|
+
|
352
|
+
if (thePatternNode->rightNode == NULL)
|
353
|
+
{ fprintf(theFile,"NULL}"); }
|
354
|
+
else
|
355
|
+
{
|
356
|
+
fprintf(theFile,"&%s%d_%ld[%ld]}",FactPrefix(),
|
357
|
+
imageID,(thePatternNode->rightNode->bsaveID / maxIndices) + 1,
|
358
|
+
thePatternNode->rightNode->bsaveID % maxIndices);
|
359
|
+
}
|
360
|
+
}
|
361
|
+
|
362
|
+
/**********************************************************/
|
363
|
+
/* FactPatternNodeReference: Prints C code representation */
|
364
|
+
/* of a fact pattern node data structure reference. */
|
365
|
+
/**********************************************************/
|
366
|
+
void FactPatternNodeReference(
|
367
|
+
Environment *theEnv,
|
368
|
+
void *theVPattern,
|
369
|
+
FILE *theFile,
|
370
|
+
unsigned int imageID,
|
371
|
+
unsigned int maxIndices)
|
372
|
+
{
|
373
|
+
struct factPatternNode *thePattern = (struct factPatternNode *) theVPattern;
|
374
|
+
|
375
|
+
if (thePattern == NULL) fprintf(theFile,"NULL");
|
376
|
+
else
|
377
|
+
{
|
378
|
+
fprintf(theFile,"&%s%u_%lu[%lu]",FactPrefix(),
|
379
|
+
imageID,(thePattern->bsaveID / maxIndices) + 1,
|
380
|
+
thePattern->bsaveID % maxIndices);
|
381
|
+
}
|
382
|
+
}
|
383
|
+
|
384
|
+
#endif /* DEFRULE_CONSTRUCT && (! RUN_TIME) && DEFTEMPLATE_CONSTRUCT && CONSTRUCT_COMPILER */
|
385
|
+
|
386
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
/*******************************************************/
|
2
|
+
/* "C" Language Integrated Production System */
|
3
|
+
/* */
|
4
|
+
/* CLIPS Version 6.40 07/30/16 */
|
5
|
+
/* */
|
6
|
+
/* FACT CONSTRUCT COMPILER HEADER FILE */
|
7
|
+
/*******************************************************/
|
8
|
+
|
9
|
+
/*************************************************************/
|
10
|
+
/* Purpose: */
|
11
|
+
/* */
|
12
|
+
/* Principal Programmer(s): */
|
13
|
+
/* Gary D. Riley */
|
14
|
+
/* */
|
15
|
+
/* Contributing Programmer(s): */
|
16
|
+
/* */
|
17
|
+
/* Revision History: */
|
18
|
+
/* */
|
19
|
+
/* 6.30: Added support for path name argument to */
|
20
|
+
/* constructs-to-c. */
|
21
|
+
/* */
|
22
|
+
/* Added const qualifiers to remove C++ */
|
23
|
+
/* deprecation warnings. */
|
24
|
+
/* */
|
25
|
+
/* 6.40: Removed LOCALE definition. */
|
26
|
+
/* */
|
27
|
+
/* Pragma once and other inclusion changes. */
|
28
|
+
/* */
|
29
|
+
/* Removed use of void pointers for specific */
|
30
|
+
/* data structures. */
|
31
|
+
/* */
|
32
|
+
/*************************************************************/
|
33
|
+
|
34
|
+
#ifndef _H_factcmp
|
35
|
+
|
36
|
+
#pragma once
|
37
|
+
|
38
|
+
#define _H_factcmp
|
39
|
+
|
40
|
+
#include "network.h"
|
41
|
+
#include "pattern.h"
|
42
|
+
|
43
|
+
void FactPatternsCompilerSetup(Environment *);
|
44
|
+
void FactPatternNodeReference(Environment *,void *,FILE *,unsigned int,unsigned int);
|
45
|
+
|
46
|
+
#endif /* _H_factcmp */
|