Changes to attempt to silence bcc64x
[ACE_TAO.git] / ACE / ace / ETCL / ETCL.yy
blob27dd570f501a79f49ce8e75294fc32f7f4d191ca
1 %{
2 // ========================================================================
3 //
4 // = LIBRARY
5 //   orbsvcs / Extended Trader Constraint Language parser.
6 //
7 // = FILENAME
8 //   ETCL.yy
9 //
10 // = AUTHOR
11 //   Carlos O'Ryan <coryan@uci.edu> based on previous work by
12 //   Seth Widoff <sbw1@cs.wustl.edu>
13 //   Jeff Parsons <j.parsons@vanderbilt.edu>
15 // ========================================================================
17 #include "ace/ETCL/ETCL_y.h"
18 #include "ace/ETCL/ETCL_constraint.h"
19 #include "ace/ETCL/ETCL_Interpreter.h"
21 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
23 extern int yylex (void);
24 extern void yyflush_current_buffer (void);
26 static void yyerror (const char *)
28   // @@ TODO
29   // Ignore error messages
32 ACE_END_VERSIONED_NAMESPACE_DECL
34 #include <stdio.h>
36 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
40 %token ETCL_GT
41 %token ETCL_GE
42 %token ETCL_LT
43 %token ETCL_LE
44 %token ETCL_EQ
45 %token ETCL_NE
46 %token ETCL_EXIST
47 %token ETCL_DEFAULT
48 %token ETCL_AND
49 %token ETCL_OR
50 %token ETCL_NOT
51 %token ETCL_IN
52 %token ETCL_TWIDDLE
53 %token ETCL_BOOLEAN
54 %token ETCL_PLUS
55 %token ETCL_MINUS
56 %token ETCL_MULT
57 %token ETCL_DIV
58 %token ETCL_UMINUS
59 %token ETCL_INTEGER
60 %token ETCL_FLOAT
61 %token ETCL_STRING
62 %token ETCL_RPAREN
63 %token ETCL_LPAREN
64 %token ETCL_RBRA
65 %token ETCL_LBRA
66 %token ETCL_IDENT
67 %token ETCL_UNSIGNED
68 %token ETCL_SIGNED
69 %token ETCL_DOUBLE
70 %token ETCL_CONSTRAINT
71 %token ETCL_COMPONENT
72 %token ETCL_WITH
73 %token ETCL_MAX
74 %token ETCL_MIN
75 %token ETCL_FIRST
76 %token ETCL_RANDOM
77 %token ETCL_DOLLAR
78 %token ETCL_DOT
79 %token ETCL_DISCRIMINANT
80 %token ETCL_LENGTH
81 %token ETCL_TYPE_ID
82 %token ETCL_REPOS_ID
85 %type <constraint> ETCL_IDENT
86 %type <constraint> ETCL_BOOLEAN
87 %type <constraint> ETCL_STRING
88 %type <constraint> ETCL_FLOAT
89 %type <constraint> ETCL_INTEGER
90 %type <constraint> expr_in
91 %type <constraint> constraint preference bool_or bool_and bool_compare
92 %type <constraint> expr_in expr_twiddle expr term factor_not factor
93 %type <constraint> union_pos union_val component_array
94 %type <constraint> component_array component_assoc component_pos
95 %type <constraint> component_dot component_ext component
97 %start constraint
101 constraint: bool_or
102         | preference
103         ;
105 preference:     ETCL_MIN bool_or
106         { $$ = new ETCL_PREFERENCE_CLASS (ETCL_MIN, $2); }
107         |       ETCL_MAX bool_or
108         { $$ = new ETCL_PREFERENCE_CLASS (ETCL_MAX, $2); }
109         |       ETCL_WITH bool_or
110         { $$ = new ETCL_PREFERENCE_CLASS (ETCL_WITH, $2); }
111         |       ETCL_FIRST
112         { $$ = new ETCL_PREFERENCE_CLASS (ETCL_FIRST); }
113         |       ETCL_RANDOM
114         { $$ = new ETCL_PREFERENCE_CLASS (ETCL_RANDOM); }
115         ;
117 bool_or:        bool_or ETCL_OR bool_and
118                 { $$ = new ETCL_BINARY_EXPR_CLASS (ETCL_OR, $1, $3); }
119         |       bool_and
120         ;
122 bool_and:       bool_and ETCL_AND bool_compare
123                 { $$ = new ETCL_BINARY_EXPR_CLASS (ETCL_AND, $1, $3); }
124         |       bool_compare
125         ;
127 bool_compare:   expr_in ETCL_EQ expr_in
128         { $$ = new ETCL_BINARY_EXPR_CLASS (ETCL_EQ, $1, $3); }
129         |       expr_in ETCL_NE expr_in
130         { $$ = new ETCL_BINARY_EXPR_CLASS (ETCL_NE, $1, $3); }
131         |       expr_in ETCL_GT expr_in
132         { $$ = new ETCL_BINARY_EXPR_CLASS (ETCL_GT, $1, $3); }
133         |       expr_in ETCL_GE expr_in
134         { $$ = new ETCL_BINARY_EXPR_CLASS (ETCL_GE, $1, $3); }
135         |       expr_in ETCL_LT expr_in
136         { $$ = new ETCL_BINARY_EXPR_CLASS (ETCL_LT, $1, $3); }
137         |       expr_in ETCL_LE expr_in
138         { $$ = new ETCL_BINARY_EXPR_CLASS (ETCL_LE, $1, $3); }
139         |       expr_in
140         ;
142 expr_in:        expr_twiddle ETCL_IN component
143         { $$ = new ETCL_BINARY_EXPR_CLASS (ETCL_IN, $1, $3); }
144         |       expr_twiddle ETCL_IN ETCL_DOLLAR component
145         { $$ = new ETCL_BINARY_EXPR_CLASS (ETCL_IN, $1, $4); }
146         |       expr_twiddle
147         ;
149 expr_twiddle:   expr ETCL_TWIDDLE expr
150         { $$ = new ETCL_BINARY_EXPR_CLASS (ETCL_TWIDDLE, $1, $3); }
151         |       expr
152         ;
154 expr:           expr ETCL_PLUS term
155         { $$ = new ETCL_BINARY_EXPR_CLASS (ETCL_PLUS, $1, $3); }
156         |       expr ETCL_MINUS term
157         { $$ = new ETCL_BINARY_EXPR_CLASS (ETCL_MINUS, $1, $3); }
158         |       term
159         ;
161 term:           term ETCL_MULT factor_not
162         { $$ = new ETCL_BINARY_EXPR_CLASS (ETCL_MULT, $1, $3); }
163         |       term ETCL_DIV factor_not
164         { $$ = new ETCL_BINARY_EXPR_CLASS (ETCL_DIV, $1, $3); }
165         |       factor_not
166         ;
168 factor_not:     ETCL_NOT factor
169         { $$ = new ETCL_UNARY_EXPR_CLASS (ETCL_NOT, $2); }
170         |       factor
171         ;
173 factor:         ETCL_LPAREN bool_or ETCL_RPAREN
174         { $$ = $2; }
175         |       ETCL_INTEGER
176         { $$ = $1; }
177         |       ETCL_PLUS ETCL_INTEGER
178         { $$ = new ETCL_UNARY_EXPR_CLASS (ETCL_PLUS, $2); }
179         |       ETCL_MINUS ETCL_INTEGER
180         { $$ = new ETCL_UNARY_EXPR_CLASS (ETCL_MINUS, $2); }
181         |       ETCL_FLOAT
182         { $$ = $1; }
183         |       ETCL_PLUS ETCL_FLOAT
184         { $$ = new ETCL_UNARY_EXPR_CLASS (ETCL_PLUS, $2); }
185         |       ETCL_MINUS ETCL_FLOAT
186         { $$ = new ETCL_UNARY_EXPR_CLASS (ETCL_MINUS, $2); }
187         |       ETCL_STRING
188         { $$ = $1; }
189         |       ETCL_BOOLEAN
190         { $$ = $1; }
191         |       ETCL_EXIST ETCL_IDENT
192         { $$ = new ETCL_EXIST_CLASS ($2); }
193         |       ETCL_EXIST ETCL_DOLLAR component
194         { $$ = new ETCL_EXIST_CLASS ($3); }
195         |       ETCL_DEFAULT ETCL_DOLLAR component
196         { $$ = new ETCL_DEFAULT_CLASS ($3); }
197         |       ETCL_DOLLAR component
198         { $$ = new ETCL_EVAL_CLASS ($2); }
199         |       ETCL_IDENT
200         { $$ = $1; }
201         ;
203 component:      /* empty */
204         { $$ = 0; }
205         | ETCL_DOT component_dot
206         { $$ = new ETCL_DOT_CLASS ($2); }
208         | ETCL_IDENT component_ext
209         { $$ = new ETCL_COMPONENT_CLASS ($1, $2); }
211         | component_array
212         | component_assoc
213         ;
215 component_ext:  /* empty */
216         { $$ = 0; }
217         | ETCL_DOT component_dot
218         { $$ = new ETCL_Dot ($2); }
220         | component_array
221         | component_assoc
222         ;
224 component_dot:  ETCL_IDENT component_ext
225         { $$ = new ETCL_COMPONENT_CLASS ($1, $2); }
226         | ETCL_LENGTH
227         { $$ = new ETCL_SPECIAL_CLASS (ETCL_LENGTH); }
228         | ETCL_DISCRIMINANT
229         { $$ = new ETCL_SPECIAL_CLASS (ETCL_DISCRIMINANT); }
230         | ETCL_TYPE_ID
231         { $$ = new ETCL_SPECIAL_CLASS (ETCL_TYPE_ID); }
232         | ETCL_REPOS_ID
233         { $$ = new ETCL_SPECIAL_CLASS (ETCL_REPOS_ID); }
234         | component_pos
235         | union_pos
236         ;
238 component_array:  ETCL_LBRA ETCL_INTEGER ETCL_RBRA component_ext
239         { $$ = new ETCL_COMPONENT_ARRAY_CLASS ($2, $4); }
240         ;
242 component_assoc:  ETCL_LPAREN ETCL_IDENT ETCL_RPAREN component_ext
243         { $$ = new ETCL_COMPONENT_ASSOC_CLASS ($2, $4); }
244         ;
246 component_pos:  ETCL_INTEGER component_ext
247         { $$ = new ETCL_COMPONENT_POS_CLASS ($1, $2); }
248         ;
250 union_pos:  ETCL_LPAREN union_val ETCL_RPAREN component_ext
251         { $$ = new ETCL_UNION_POS_CLASS ($2, $4); }
252         ;
254 union_val:  /* empty */
255         { $$ = 0; }
256         | ETCL_INTEGER
257         { $$ = new ETCL_UNION_VALUE_CLASS (+1, $1); }
258         | ETCL_PLUS ETCL_INTEGER
259         { $$ = new ETCL_UNION_VALUE_CLASS (+1, $2); }
260         | ETCL_MINUS ETCL_INTEGER
261         { $$ = new ETCL_UNION_VALUE_CLASS (-1, $2); }
262         | ETCL_STRING
263         { $$ = new ETCL_UNION_VALUE_CLASS ($1); }
264         ;
268 ACE_END_VERSIONED_NAMESPACE_DECL