/* ....[@@@..[@@@..............[@.................. MUD++ is a written from ....[@..[@..[@..[@..[@..[@@@@@....[@......[@.... scratch multi-user swords and ....[@..[@..[@..[@..[@..[@..[@..[@@@@@..[@@@@@.. sorcery game written in C++. ....[@......[@..[@..[@..[@..[@....[@......[@.... This server is an ongoing ....[@......[@..[@@@@@..[@@@@@.................. development project. All ................................................ contributions are welcome. ....Copyright(C).1995.Melvin.Smith.............. Enjoy. ------------------------------------------------------------------------------ Melvin Smith (aka Fusion) msmith@hom.net MUD++ development mailing list mudpp@van.ml.org ------------------------------------------------------------------------------ parse.h */ /* Structures and functions for managing parse tree for syntax directed transation. Much of this is right out of the 'Red Dragon' book. -Melvin */ #ifndef _PARSE_H #define _PARSE_H #include "sym.h" #include <malloc.h> #define OP_DEFINE 0x0001 #define OP_DECLARE 0x0002 #define OP_CALL 0x0004 #define OP_ID 0x0008 #define OP_CONSTANT 0x0010 typedef struct __node { int op; int type; union { char cval; long lval; float fval; struct __node * args; } u; struct __node * left; struct __node * right; sym * sym_ptr; } node; #define malloc_node() (node *)malloc( sizeof( node ) ) #define calloc_node() (node *)calloc( 1, sizeof( node ) ) #define free_node( x ) free( x ) /* unit[] is an array of parse trees, each tree representing a block of code which can be generating by evaluating the tree unit[i] and emmitting intermediate code. */ node * unit[]; node * mknode( int, sym *, node *, node * ); node * mkleaf_id( int, sym * ); node * mkleaf_declaration( int, sym * ); node * mkleaf_constant_int( long ); node * mkleaf_constant_float( float ); node * mkleaf_statement( node *, node * ); node * mkleaf_function_def( int, sym *, node * ); node * add_leaf_right( node *, node * ); int cur_unit; void emit_asm(); int emit_statement( node * ); #endif