⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 algebra.h

📁 一个小型的关系数据库系统
💻 H
字号:
/*  * Name: leap_parser.h * Description: Parser header files * Version: algebra.h,v 1.4 2001/04/30 21:07:16 rleyton Exp * *   LEAP - An extensible and free RDBMS *   Copyright (C) 1995-2001 Richard Leyton * *   This program is free software; you can redistribute it and/or modify *   it under the terms of the GNU General Public License as published by *   the Free Software Foundation; either version 2 of the License, or *   (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * *   See the file COPYING for more information. * *   Richard Leyton, 30c Bassein Park Road, London, W12 9RZ, UK *   rleyton@acm.org *   http://leap.sourceforge.net * */#include "defines.h"/* To prevent multiple definitions */#ifndef _LEAP_PARSER_#define _LEAP_PARSER_#include <stdio.h>/* Maximum number of sub-nodes at each node in the parse tree */#define MAX_TREE_NODES 3	/* Maximum number of sub-trees */#define MAX_LEAF_NODES 25	/* Maximum number of leaf nodes at each level */#define MAX_SUBCONDITIONS 10	/* Maximum number of subconditions at each level *//* Define types of node */#define NODE_TYPE_UNKNOWN 0	/* Uninitialised */#define NODE_TYPE_BASE 1	/* Root node */#define NODE_TYPE_NAME 10	/* Name */#define NODE_TYPE_SELECT 11	/* Select */#define NODE_TYPE_PROJECT 12	/* Project */#define NODE_TYPE_JOIN 13	/* Join */#define NODE_TYPE_UNION 14	/* Union */#define NODE_TYPE_INTERSECT 15	/* Intersect */#define NODE_TYPE_DIFFERENCE 16	/* Difference  */#define NODE_TYPE_PRODUCT 17	/* Product */#define NODE_TYPE_TERMINATE 100	/* Termination *//* Define position of node */#define NODE_POS_BASE	 0	/* Base/Root node */#define NODE_POS_LEAF	 1	/* Leaf node */#define NODE_POS_BRANCH	 2	/* Branch node */#define NODE_POS_UNKNOWN 3	/* Unknown node *//* Define level of node */#define NODE_LEVEL_UNKNOWN	0	/* Undefined node *//* Define a parse tree node structure */typedef struct parse_leaf_struct {	char	*item;} parse_leaf_struct;/* Define a pointer to the parse tree node */typedef parse_leaf_struct *parse_leaf;#define COND_CHAR 0#define COND_INT 1#define COND_FLOAT 2#define COND_SUBCONDITION 3#define COND_RELOP_NOTHING 0#define COND_RELOP_OR 1#define COND_RELOP_AND 2#define COND_RELOP_XOR 3#define COND_RELOP_NOT 4#define COND_BOOLEAN_UNSET 0#define COND_BOOLEAN_EQUAL 1#define COND_BOOLEAN_NEQUAL 2#define COND_BOOLEAN_GTHAN 3#define COND_BOOLEAN_LTHAN 4#define COND_BOOLEAN_LEQUAL 5#define COND_BOOLEAN_GEQUAL 6#define COND_LEAF_TYPE_UNASSIGNED 0#define COND_LEAF_TYPE_ATTRIBUTE 1#define COND_LEAF_TYPE_ATOM 2#define COND_LEAF_TYPE_CONDITION 3#define COND_LEAF_TYPE_PREDICATE 4 /* A condition predicate - (lval) (boolean operator) (rval) */typedef struct cond_branch_node_struct {	/* We have to give a forward declaration of cond_leaf_node_struct */	struct cond_leaf_node_struct *left;	struct cond_leaf_node_struct *right;	char *boolean_op;} cond_branch_node_struct;typedef cond_branch_node_struct *cond_branch_node;/* Definition of a structure to contain a condition and the relational * operators applying to it's two sides, eg. (cond) {AND|OR|XOR|...} (cond) */typedef struct condition_struct {	cond_branch_node left,right;	int	relational_op;} condition_struct;typedef condition_struct *condition;/* Definition of a structure to hold a condition predicate, * e.g. 1, 'attrib', TRUE, or a subcondition. */typedef struct cond_leaf_node_struct {	int leaftype;	union leafval_union {		char *atom;		char *reference;		condition cond;		cond_branch_node predicate;	} leafval;} cond_leaf_node_struct;typedef cond_leaf_node_struct *cond_leaf_node;/* External declaration of the condition generation routines */extern cond_leaf_node create_atom_leaf_node(char *atom);extern cond_leaf_node create_ref_leaf_node(char *ref);extern cond_leaf_node create_cond_leaf_node(condition cond);extern cond_leaf_node create_predicate_leaf_node(cond_leaf_node lpred, cond_leaf_node rpred, char *bool);extern cond_branch_node create_branch_node( cond_leaf_node lnode, cond_leaf_node rnode, char *boolean_op);extern condition create_cond_statement( cond_branch_node cond);extern condition create_condholder( cond_leaf_node lnode);extern condition create_branch_statement( cond_leaf_node lcond, int relational_op, cond_leaf_node rcond);/* Define the high-level parser structure */typedef struct parse_tree_struct {	int node_type;	int node_pos;	int node_level;	int no_sub_nodes;	struct parse_tree_struct *node[MAX_TREE_NODES];	int no_leaf_nodes;	parse_leaf leaf[MAX_LEAF_NODES];	condition cond;	/* Work data - used when traversing/processing tree */	/* Pointer to the return value */	void *returnptr;	/* Indicates current node */	int currentposition;} parse_tree_struct;/* Define some access defines */#define ptree_type(var) var->node_type#define ptree_no_leafnodes(var) var->no_leafnodes#define ptree_leafnode(var,pos) var->leaf[pos];#define ptree_no_subnodes(var) var->no_sub_nodes#define ptree_subnode(var,pos) var->node[pos]#define ptree_currentpos(var) var->currentposition#define ptree_returnptr(var) var->returnptr/* Define a pointer to the parse tree root */typedef parse_tree_struct *parse_tree;/* External declaration of the entry point to the parser generated code */extern void init_parser();/* External declaration of the parse tree generation routines */extern parse_tree create_tree_node( int node_type, int node_pos, parse_tree subnode, int condition );extern parse_tree add_tree_node(  parse_tree originaltree, parse_tree newtree );extern parse_tree create_leaf_node( char *leafdata );extern parse_tree add_leaf_node( parse_tree originaltree, char *leafdata ) ;extern parse_tree add_condition( parse_tree originaltree, condition cond);/* External declaration of the root tree node *//* Is there a way this can be incorporated into the lex/yacc? */extern parse_tree parse_base;extern int init_parse();extern FILE *yyin;#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -