home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d1xx
/
d145
/
tinyprolog.lha
/
TinyProlog
/
prolog.h
< prev
Wrap
Text File
|
1988-05-26
|
4KB
|
109 lines
/* Copyright 1986 - MicroExpert Systems
Box 430 R.D. 2
Nassau, NY 12123 */
/* Revisions - 1.1 Nov. 1986 - Edinburgh list syntax added */
/* converted to lattice c by Dennis J. Darland [73300,270] 11/9/87 */
/* VTPROLOG implements the data base searching and pattern matching of
PROLOG. It is described in "PROLOG from the Bottom Up" in issues
1 and 2 of AI Expert.
We would be pleased to hear your comments, good or bad, or any applications
and modifications of the program. Contact us at:
AI Expert
CL Publications Inc.
650 Fifth St.
Suite 311
San Francisco, CA 94107
or on the AI Expert BBS. Our id is BillandBev Thompson ,[76703,4324].
You can also contact us on BIX, our id is bbt.
Bill and Bev Thompson */
#define debug 0
#define back_space 8
#define tab '\t'
#define eof_mark 26
#define esc 27
#define quote_char 39
#define left_arrow 75
#define end_key = 79
#define del_line 24
#define bell 7
#define true 1
#define false 0
#define MAX_ALLOC 1000
typedef int counter;
typedef unsigned char boolean;
enum node_type {consnode,func,variable,constant,freenode};
typedef struct node_struct
{
boolean in_use;
enum node_type tag;
struct chain_struct
{
struct node_struct *next_in_chain;
} chain_node_ptr;
union {
struct cons_struct
{
struct node_struct *tail_ptr;
struct node_struct *head_ptr;
} cons_node;
char string_data[80];
} node_union;
} node;
/* node is the basic allocation unit for lists. The fields are used as
follows:
in_use - in_use = false tells the garbage collector that this node
is available for re-use.
tag - which kind of node this is.
cons_node - cons_nodes consist of two pointers. one to the head (first item)
the other to the rest of the list. They are the "glue" which
holds the list together. The list (A B C) would be stored as
------- -------- --------
| .| . |-----> | .| . |------> | .| . |---> NIL
--|----- --|------ --|-----
| | |
V V V
A B C
The boxes are the cons nodes, the first part of the box
holds the head pointer, then second contains the tail.
constant - holds string values, we don't actually use the entire 80
characters in most cases.
variable - also conatins a string value, these nodes will be treated as
PROLOG variables rather than constants.
free_node - the garbage collector frees all unused nodes. */
char line[132],saved_line[132];
unsigned char token[80];
FILE *source_file;
boolean error_flag,in_comment;
node *data_base,*saved_list;
int chain_cnt;
node *chain_head;
/* The important globals are:
source_file - text file containing PROLOG statements.
line - line buffer for reading in the text file
saved_list - list of all items that absolutely must be saved if garbage
collection occurs. Usually has at least the data_base and
the currents query attached to it.
data_base - a pointer to the start of the data base. It points to a
node pointing to the first sentence in the data base. Nodes
pointing to sentences are linked together to form the data
base.
delim_set - set of characters which delimit tokens.
chain_cnt - total number of nodes malloc'ed.
chain_head - head to chain of all malloc'ed nodes. */