Disable all code related to libXp
[oweals/cde.git] / cde / programs / dtinfo / DtMmdb / StyleSheet / defParser.y
1 /* $XConsortium: defParser.y /main/2 1996/11/11 11:51:02 drk $ */
2
3 %{
4 #include <stdio.h>
5 #include <ctype.h>
6 #include <sstream>
7 #include <iostream.h>
8 #include "Debug.h"
9 #include "FeatureDefDictionary.h"
10
11 #define alloca(x)       (malloc(x))
12
13 def_list_t* g_def_list = 0;
14
15 extern void yyerror(char*);
16 extern int yylex();
17
18 #undef yywrap
19
20 %}
21
22 %union
23 {
24  unsigned char  charData;
25  unsigned char* charPtrData;
26  int            intData;
27  float          realData;
28  FeatureValue*  valueData;
29
30  defv_t*        valueListPtrData;
31  TypeValues*    typeValuesPtrData;
32  type_values_list_t*    typeValuesListPtrData;
33
34  def_list_t*    defListPtrData;
35  FeatureDef*    defPtrData;
36
37 }
38
39 %token<charData>
40         STAR
41         COMMA
42         COLON
43         SEMI_COLON
44         FSOPEN
45         FSCLOSE
46         OPER_parenopen
47         OPER_parenclose
48
49 %token<intData>
50         INTEGER
51
52 %token<realData>
53         REAL
54
55 %token<charPtrData>
56         NORMAL_STRING
57         QUOTED_STRING
58         REF_NAME
59         TYPE
60
61 %type<charPtrData>
62         Name
63
64 %type<valueData>
65         Value
66
67 %type<valueListPtrData>
68         ValueList
69         ValueListOpt
70
71 %type<typeValuesPtrData>
72         TypeValues
73
74 %type<typeValuesListPtrData>
75         TypeValuesList
76
77 %type<defPtrData>
78         Def
79         DefReference
80         CompositeDef
81         WildCardDef
82         PrimitiveDef
83         
84
85 %type<defListPtrData>
86         DefList
87
88 %start  featureDef
89
90 %%
91
92 featureDef : DefList
93         {
94            g_def_list = $1;
95         }
96         ;
97
98 DefList : DefList Def
99         {
100            $$=$1;
101
102            if ( $2 -> type() == FeatureDef::WILDCARD )
103               $$ -> prepend($2);
104            else
105               $$ -> append($2);
106         }
107         |
108         Def
109         {
110            $$=new def_list_t();
111            $$ -> append($1);
112         }
113         ;
114
115 Def:    CompositeDef
116         {
117            $$=$1;
118         }
119         | PrimitiveDef
120         {
121            $$=$1;
122         }
123         | DefReference
124         {
125            $$=$1;
126         } 
127         | WildCardDef
128         {
129            $$=$1;
130         } 
131         ;
132
133 CompositeDef    : Name FSOPEN DefList FSCLOSE
134         {
135            $$= new FeatureDefComposite((char*)$1, $3);
136                 delete $1;
137         }
138         ;
139
140 PrimitiveDef : Name COLON TypeValuesList SEMI_COLON
141         {
142            $$= new FeatureDefPrimitive((char*)$1, $3);
143                 delete $1;
144         }
145         ;
146
147 DefReference : Name SEMI_COLON
148         {
149            $$= new FeatureDefReference((char*)$1);
150                 delete $1;
151         }
152         ;
153
154 WildCardDef : STAR  SEMI_COLON
155         {
156            $$= new FeatureDefWildCard("*");
157         }
158         ;
159
160 Name :   NORMAL_STRING
161         {
162           $$=$1;
163         }
164         ;
165
166 TypeValuesList :   TypeValuesList COMMA TypeValues
167         {
168            $$=$1;
169            $$ -> append($3);
170         }
171         | TypeValues
172         {
173            $$=new type_values_list_t();
174            $$ -> append($1);
175         }
176         ;
177
178 TypeValues :  TYPE OPER_parenopen ValueList OPER_parenclose
179         {
180                 $$=new TypeValues((char*)$1, $3);
181                 delete $1;
182         }
183         | TYPE
184         {
185                 $$=new TypeValues((char*)$1, 0);
186                 delete $1;
187         }
188         ;
189
190 ValueList : ValueList COMMA Value 
191         {
192            $1 -> append($3);
193            $$=$1;
194         }
195         | Value
196         {
197            $$ = new defv_t();
198            $$ -> append($1);
199             
200         }
201         ;
202
203
204 Value : INTEGER
205         {
206            $$=new FeatureValueInt($1);
207         }
208         | QUOTED_STRING
209         {
210            $$=new FeatureValueString((char*)$1);
211            delete $1;
212         }
213         | REAL
214         {
215            $$=new FeatureValueReal($1);
216         }
217         ;
218
219
220 %%
221
222 /*
223 void yyerror(char *errorstr)
224 {
225   cerr << errorstr ;
226 }
227 */