Subversion Repositories Vertical

Rev

Rev 9 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
11 mjames 1
/* contains the type declarations for expression handling information  
2 mjames 2
 *
11 mjames 3
 * $Header: c:\\cygwin\\cvsroot/Vert03/vertlib/expression.h,v 1.1.1.1 2003/11/04 23:34:57 mjames Exp $
2 mjames 4
 *
5
 * $Log: expression.h,v $
6
 * Revision 1.1.1.1  2003/11/04 23:34:57  mjames
7
 * Imported into local repositrory
8
 *
9
 * Revision 1.8  2002/10/02 19:37:30  MJAMES
10
 * Moved dummy functions to a separate support file.
11
 *
12
 * Used correct number of arguments to define_pin
13
 *
14
 * Revision 1.7  2002/09/30 13:22:38  MJAMES
15
 * Altered the use and creation of partition
16
 * generics (at evaluation time of expressions within the partition )
17
 * This still needs checking, as evaluation of the expression may well be
18
 * delayed until after when the partition generics need to be defined.
19
 *
20
 * Revision 1.6  2002/09/09 10:15:54  mjames
21
 * Modified expression parser to match CC as previous one was
22
 * broken
23
 *
24
 * Revision 1.5  2002/08/14 12:04:42  mjames
25
 * Added declaration for eval_expression
26
 *
27
 * Revision 1.5  2002/04/04 14:53:05  mjames
28
 * Added mentor board station reader to the portfolio
29
 *
30
 * Revision 1.4  2001/10/31 22:20:04  mjames
31
 * Tidying up problematical comments caused by CVS
32
 * 'intelligent' comment guessing
33
 *
34
 * Revision 1.3  2001/06/06 12:10:23  mjames
35
 * Move from HPUX
36
 *
37
 * Revision 1.2  2000/11/29 21:51:18  mjames
38
 * Fine tuning of software
39
 *
40
 * Revision 1.1.1.1  2000/10/19 21:58:37  mjames
41
 * Mike put it here
42
 *
43
 *
44
 * Revision 1.19  2000/10/04  10:37:15  10:37:15  mjames (Mike James)
45
 * Modified for Vertical2 : support COMPONENTS and SIGNALS
11 mjames 46
 *
2 mjames 47
 * Revision 1.19  2000/10/04  10:37:15  10:37:15  mjames (Mike James)
48
 * Part of Release PSAVAT01
11 mjames 49
 *
2 mjames 50
 * Revision 1.18  2000/10/02  11:04:12  11:04:12  mjames (Mike James)
51
 * new_vhdl
11 mjames 52
 *
2 mjames 53
 * Revision 1.17  2000/09/27  14:42:30  14:42:30  mjames (Mike James)
54
 * Part of Release Sep_27_ST_2000
11 mjames 55
 *
2 mjames 56
 * Revision 1.16  2000/09/21  10:16:00  10:16:00  mjames (Mike James)
57
 * Part of Release Sep21Alpha
11 mjames 58
 *
2 mjames 59
 * Revision 1.15  2000/08/25  09:57:23  09:57:23  mjames (Mike James)
60
 * Part of Release Aug25_alpha
11 mjames 61
 *
2 mjames 62
 * Revision 1.14  2000/08/16  08:57:40  08:57:40  mjames (Mike James)
63
 * Part of Release CD01_Aug2000
11 mjames 64
 *
2 mjames 65
 * Revision 1.13  2000/08/14  14:45:19  14:45:19  mjames (Mike James)
66
 * Part of Release Aug_14_2000
11 mjames 67
 *
2 mjames 68
 * Revision 1.12  2000/08/11  08:30:40  08:30:40  mjames (Mike James)
69
 * Part of Release Aug_11_2000
11 mjames 70
 *
2 mjames 71
 * Revision 1.11  2000/08/09  10:31:57  10:31:57  mjames (Mike James)
72
 * Part of Release Aug__9_2000
11 mjames 73
 *
2 mjames 74
 * Revision 1.10  2000/05/31  11:43:11  11:43:11  mjames (Mike James)
75
 * Part of Release May_31_2000
11 mjames 76
 *
2 mjames 77
 * Revision 1.9  2000/05/08  17:01:46  17:01:46  mjames (Mike James)
78
 * Part of Release May__8_2000
11 mjames 79
 *
2 mjames 80
 * Revision 1.8  2000/05/08  16:59:40  16:59:40  mjames (Mike James)
81
 * Part of Release May__8_2000
11 mjames 82
 *
2 mjames 83
 * Revision 1.7  2000/05/08  16:57:16  16:57:16  mjames (Mike James)
84
 * Part of Release May__8_2000
11 mjames 85
 *
2 mjames 86
 * Revision 1.6  2000/03/08  16:18:57  16:18:57  mjames (Mike James)
87
 * New version including PC
11 mjames 88
 *
2 mjames 89
 * Revision 1.3  2000/01/20  15:58:58  15:58:58  mjames (Mike James)
90
 * Part of Release R22
11 mjames 91
 *
2 mjames 92
 * Revision 1.2  99/12/22  11:15:39  11:15:39  mjames (Mike James)
93
 * Part of Release Dec_22_1999
11 mjames 94
 *
2 mjames 95
 * Revision 1.1  99/06/25  14:36:23  14:36:23  mjames (Mike James)
96
 * Initial revision
11 mjames 97
 *
2 mjames 98
 *  */
99
#if !defined _EXPRESSION
100
#define _EXPRESSION
101
 
11 mjames 102
 
2 mjames 103
/* constants for object types found at bottom of expressions */
11 mjames 104
#define EXP_CONSTANT   'C'
105
#define EXP_VAR_REF    'I'
106
#define EXP_BOOLEAN    'B'
107
#define EXP_VARIABLE   'V'
108
#define EXP_STRING     'S'
109
#define EXP_UNDEF_VAR  'U'
110
#define EXP_CHAR       'H'
2 mjames 111
 
11 mjames 112
 
113
 
114
/* decoding  recurse_generics
2 mjames 115
 * 0: NO_RECURSE stop expanding generics when a constant encountered
116
 * 1: RECURSE_CONST expand generics until one found which does not contain an expression
117
 * 2: RECURSE_NUMBER: expand generics until all constants are exposed
11 mjames 118
 
2 mjames 119
 constant a : integer := 3;
120
 constant b : integer := a + 3;
121
 constant c : integer := b + a;
11 mjames 122
 
2 mjames 123
 for values of expand generics :
11 mjames 124
 value 0:
2 mjames 125
 constant a : integer := 3;
126
 constant b : integer := a + 3;
127
 constant c : integer := b + a;
11 mjames 128
 
129
 value 1:
2 mjames 130
 constant a : integer := 3;
131
 constant b : integer := a + 3;
132
 constant c : integer := (a+3) + a;
11 mjames 133
 
134
 value 2:
2 mjames 135
 constant a : integer := 3;
136
 constant b : integer := (3) + 3;
137
 constant c : integer := ((3)+3) + (3);
11 mjames 138
 
139
 
2 mjames 140
  */
141
 
11 mjames 142
typedef enum { NO_RECURSE=0,RECURSE_CONST,RECURSE_NUMBER } generic_print_style;
2 mjames 143
 
144
struct generic_info;
145
/* see database.h for the description of expression_t */
146
/* expression data structures .. see expression.h for handler fns */
11 mjames 147
typedef struct exp {
148
  int opcode;
149
  union {
150
    char * s; /* pointer to string value */
151
    struct generic_info  * g; /* pointer to generic value */
152
    int    i;  /* integer part of expression */
153
    struct exp * e;
154
    int * ip; /* pointer to an integer somewhere */
155
    } left; /* values */
156
  union {
157
    char * s;  /* pointer to name */
158
    struct exp * e;
159
    } right;  /* name or expression */
160
 
161
  } expression_t;
2 mjames 162
 
163
/* place reference to a 'C' variable at the end of the tree branch */
11 mjames 164
extern expression_t * compile_variable_reference(int *v,char * s );
2 mjames 165
 
166
/* compiles a variable. When printing expression stop descent of the evaluation tree here */
11 mjames 167
extern expression_t * compile_variable(struct generic_info * gen , char * valname);
2 mjames 168
 
11 mjames 169
extern expression_t * compile_string(char * s);
2 mjames 170
 
11 mjames 171
extern expression_t * compile_char(char c);
2 mjames 172
 
173
/* an unelaborated variable reference (link at evaluation time */
11 mjames 174
extern expression_t * compile_reference(char * s);
2 mjames 175
 
176
/* compiles an integer constant */
11 mjames 177
extern expression_t * compile_constant(int k );  
2 mjames 178
 
11 mjames 179
extern expression_t * compile_constant_string(int k,char * s ) ;
2 mjames 180
 
181
/* compiles an boolean constant */
11 mjames 182
extern expression_t * compile_bool_constant(int k );  
2 mjames 183
 
11 mjames 184
extern expression_t * compile_bool_constant_string(int k,char * s ) ;
2 mjames 185
 
186
 
11 mjames 187
extern expression_t * compile_expression(int opcode,
188
       expression_t * left,
189
       expression_t * right );  
2 mjames 190
 
11 mjames 191
extern void print_expression(FILE * f,expression_t * e,generic_print_style recurse_generics ) ;
2 mjames 192
 
11 mjames 193
extern void print_range_expression(FILE * f,expression_t * e,generic_print_style recurse_generics);
2 mjames 194
 
11 mjames 195
extern void print_msg_expression(FILE * f,char * s,expression_t * e );
196
 
197
 
2 mjames 198
/* this is actually returning the type of the generic */
11 mjames 199
extern int eval_gen_expression(
200
       struct generic_info * gen);
2 mjames 201
 
11 mjames 202
extern int eval_vhdl_expression(expression_t * expr,
203
                         int * high,
204
                         int * low );
2 mjames 205
 
206
/*******************************************/
11 mjames 207
struct socket;/* pulled in from database.h */
2 mjames 208
struct vhdl;
209
/*******************************************/
11 mjames 210
extern expression_t * copy_expression(expression_t * src,struct socket  * skt);
2 mjames 211
 
212
 
11 mjames 213
extern struct vhdl * copy_vhdl(struct vhdl * vhdl,struct socket * skt);
2 mjames 214
 
11 mjames 215
extern void free_expression(expression_t * expr);
2 mjames 216
 
11 mjames 217
extern int eval_expression(expression_t * e,struct generic_info ** generic_list);
218
 
2 mjames 219
#endif