xref: /plan9/sys/src/cmd/acid/dbg.y (revision 7c70c028d2d46a27a61ae88e6df0eb0935d9da7a)
1bd389b36SDavid du Colombier %{
2bd389b36SDavid du Colombier #include <u.h>
3219b2ee8SDavid du Colombier #include <libc.h>
4bd389b36SDavid du Colombier #include <bio.h>
5bd389b36SDavid du Colombier #include <mach.h>
6bd389b36SDavid du Colombier #define Extern extern
7bd389b36SDavid du Colombier #include "acid.h"
8bd389b36SDavid du Colombier %}
9bd389b36SDavid du Colombier 
10bd389b36SDavid du Colombier %union
11bd389b36SDavid du Colombier {
12bd389b36SDavid du Colombier 	Node	*node;
13bd389b36SDavid du Colombier 	Lsym	*sym;
144de34a7eSDavid du Colombier 	uvlong	ival;
15bd389b36SDavid du Colombier 	float	fval;
16bd389b36SDavid du Colombier 	String	*string;
17bd389b36SDavid du Colombier }
18bd389b36SDavid du Colombier 
19bd389b36SDavid du Colombier %type <node> expr monexpr term stmnt name args zexpr slist
20219b2ee8SDavid du Colombier %type <node> member members mname castexpr idlist
21219b2ee8SDavid du Colombier %type <sym> zname
22bd389b36SDavid du Colombier 
23bd389b36SDavid du Colombier %left	';'
24bd389b36SDavid du Colombier %right	'='
25219b2ee8SDavid du Colombier %left	Tfmt
26bd389b36SDavid du Colombier %left	Toror
27bd389b36SDavid du Colombier %left	Tandand
28bd389b36SDavid du Colombier %left	'|'
29bd389b36SDavid du Colombier %left	'^'
30bd389b36SDavid du Colombier %left	'&'
31bd389b36SDavid du Colombier %left	Teq Tneq
32bd389b36SDavid du Colombier %left	'<' '>' Tleq Tgeq
33bd389b36SDavid du Colombier %left	Tlsh Trsh
34bd389b36SDavid du Colombier %left	'+' '-'
35bd389b36SDavid du Colombier %left	'*' '/' '%'
36bd389b36SDavid du Colombier %right	Tdec Tinc Tindir '.' '[' '('
37bd389b36SDavid du Colombier 
38bd389b36SDavid du Colombier %token <sym>	Tid
39219b2ee8SDavid du Colombier %token <ival>	Tconst Tfmt
40bd389b36SDavid du Colombier %token <fval>	Tfconst
41bd389b36SDavid du Colombier %token <string>	Tstring
42bd389b36SDavid du Colombier %token Tif Tdo Tthen Telse Twhile Tloop Thead Ttail Tappend Tfn Tret Tlocal
430b459c2cSDavid du Colombier %token Tcomplex Twhat Tdelete Teval Tbuiltin
44bd389b36SDavid du Colombier 
45bd389b36SDavid du Colombier %%
46bd389b36SDavid du Colombier 
47bd389b36SDavid du Colombier prog		:
48bd389b36SDavid du Colombier 		| prog bigstmnt
49bd389b36SDavid du Colombier 		;
50bd389b36SDavid du Colombier 
51bd389b36SDavid du Colombier bigstmnt	: stmnt
52bd389b36SDavid du Colombier 		{
530809e9a7SDavid du Colombier 			/* make stmnt a root so it isn't collected! */
540809e9a7SDavid du Colombier 			mkvar("_thiscmd")->proc = $1;
55bd389b36SDavid du Colombier 			execute($1);
560809e9a7SDavid du Colombier 			mkvar("_thiscmd")->proc = nil;
57bd389b36SDavid du Colombier 			gc();
58bd389b36SDavid du Colombier 			if(interactive)
59bd389b36SDavid du Colombier 				Bprint(bout, "acid: ");
60bd389b36SDavid du Colombier 		}
61219b2ee8SDavid du Colombier 		| Tfn Tid '(' args ')' zsemi '{' slist '}'
62bd389b36SDavid du Colombier 		{
63219b2ee8SDavid du Colombier 			$2->proc = an(OLIST, $4, $8);
64bd389b36SDavid du Colombier 		}
650b459c2cSDavid du Colombier 		| Tfn Tid
660b459c2cSDavid du Colombier 		{
670b459c2cSDavid du Colombier 			$2->proc = nil;
680b459c2cSDavid du Colombier 		}
69219b2ee8SDavid du Colombier 		| Tcomplex name '{' members '}' ';'
70bd389b36SDavid du Colombier 		{
71219b2ee8SDavid du Colombier 			defcomplex($2, $4);
72bd389b36SDavid du Colombier 		}
73bd389b36SDavid du Colombier 		;
74bd389b36SDavid du Colombier 
75219b2ee8SDavid du Colombier zsemi		:
76219b2ee8SDavid du Colombier 		| ';' zsemi
77219b2ee8SDavid du Colombier 
78219b2ee8SDavid du Colombier members		: member
79219b2ee8SDavid du Colombier 		| members member
80219b2ee8SDavid du Colombier 		{
81219b2ee8SDavid du Colombier 			$$ = an(OLIST, $1, $2);
82219b2ee8SDavid du Colombier 		}
83219b2ee8SDavid du Colombier 		;
84219b2ee8SDavid du Colombier 
85219b2ee8SDavid du Colombier mname		: Tid
86219b2ee8SDavid du Colombier 		{
87219b2ee8SDavid du Colombier 			$$ = an(ONAME, ZN, ZN);
88219b2ee8SDavid du Colombier 			$$->sym = $1;
89219b2ee8SDavid du Colombier 		}
90219b2ee8SDavid du Colombier 		;
91219b2ee8SDavid du Colombier 
92219b2ee8SDavid du Colombier member		: Tconst Tconst mname ';'
93219b2ee8SDavid du Colombier 		{
94219b2ee8SDavid du Colombier 			$3->ival = $2;
95219b2ee8SDavid du Colombier 			$3->fmt = $1;
96219b2ee8SDavid du Colombier 			$$ = $3;
97219b2ee8SDavid du Colombier 		}
98219b2ee8SDavid du Colombier 		| Tconst mname Tconst mname ';'
99219b2ee8SDavid du Colombier 		{
100219b2ee8SDavid du Colombier 			$4->ival = $3;
101219b2ee8SDavid du Colombier 			$4->fmt = $1;
102219b2ee8SDavid du Colombier 			$4->right = $2;
103219b2ee8SDavid du Colombier 			$$ = $4;
104219b2ee8SDavid du Colombier 		}
105219b2ee8SDavid du Colombier 		| mname Tconst mname ';'
106219b2ee8SDavid du Colombier 		{
107219b2ee8SDavid du Colombier 			$3->ival = $2;
108219b2ee8SDavid du Colombier 			$3->left = $1;
109219b2ee8SDavid du Colombier 			$$ = $3;
110219b2ee8SDavid du Colombier 		}
111219b2ee8SDavid du Colombier 		| '{' members '}' ';'
112219b2ee8SDavid du Colombier 		{
113219b2ee8SDavid du Colombier 			$$ = an(OCTRUCT, $2, ZN);
114219b2ee8SDavid du Colombier 		}
115219b2ee8SDavid du Colombier 		;
116219b2ee8SDavid du Colombier 
117219b2ee8SDavid du Colombier zname		:
118219b2ee8SDavid du Colombier 		{ $$ = 0; }
119219b2ee8SDavid du Colombier 		| Tid
120219b2ee8SDavid du Colombier 		;
121219b2ee8SDavid du Colombier 
122bd389b36SDavid du Colombier slist		: stmnt
123bd389b36SDavid du Colombier 		| slist stmnt
124bd389b36SDavid du Colombier 		{
125bd389b36SDavid du Colombier 			$$ = an(OLIST, $1, $2);
126bd389b36SDavid du Colombier 		}
127bd389b36SDavid du Colombier 		;
128bd389b36SDavid du Colombier 
129bd389b36SDavid du Colombier stmnt		: zexpr ';'
130bd389b36SDavid du Colombier 		| '{' slist '}'
131bd389b36SDavid du Colombier 		{
132bd389b36SDavid du Colombier 			$$ = $2;
133bd389b36SDavid du Colombier 		}
134bd389b36SDavid du Colombier 		| Tif expr Tthen stmnt
135bd389b36SDavid du Colombier 		{
136bd389b36SDavid du Colombier 			$$ = an(OIF, $2, $4);
137bd389b36SDavid du Colombier 		}
138bd389b36SDavid du Colombier 		| Tif expr Tthen stmnt Telse stmnt
139bd389b36SDavid du Colombier 		{
140bd389b36SDavid du Colombier 			$$ = an(OIF, $2, an(OELSE, $4, $6));
141bd389b36SDavid du Colombier 		}
142bd389b36SDavid du Colombier 		| Tloop expr ',' expr Tdo stmnt
143bd389b36SDavid du Colombier 		{
144bd389b36SDavid du Colombier 			$$ = an(ODO, an(OLIST, $2, $4), $6);
145bd389b36SDavid du Colombier 		}
146bd389b36SDavid du Colombier 		| Twhile expr Tdo stmnt
147bd389b36SDavid du Colombier 		{
148bd389b36SDavid du Colombier 			$$ = an(OWHILE, $2, $4);
149bd389b36SDavid du Colombier 		}
150bd389b36SDavid du Colombier 		| Tret expr ';'
151bd389b36SDavid du Colombier 		{
152bd389b36SDavid du Colombier 			$$ = an(ORET, $2, ZN);
153bd389b36SDavid du Colombier 		}
154219b2ee8SDavid du Colombier 		| Tlocal idlist
155bd389b36SDavid du Colombier 		{
156219b2ee8SDavid du Colombier 			$$ = an(OLOCAL, $2, ZN);
157219b2ee8SDavid du Colombier 		}
158219b2ee8SDavid du Colombier 		| Tcomplex Tid name ';'
159219b2ee8SDavid du Colombier 		{
160219b2ee8SDavid du Colombier 			$$ = an(OCOMPLEX, $3, ZN);
161bd389b36SDavid du Colombier 			$$->sym = $2;
162bd389b36SDavid du Colombier 		}
163219b2ee8SDavid du Colombier 		;
164219b2ee8SDavid du Colombier 
165219b2ee8SDavid du Colombier idlist		: Tid
166bd389b36SDavid du Colombier 		{
167219b2ee8SDavid du Colombier 			$$ = an(ONAME, ZN, ZN);
168219b2ee8SDavid du Colombier 			$$->sym = $1;
169219b2ee8SDavid du Colombier 		}
170219b2ee8SDavid du Colombier 		| idlist ',' Tid
171219b2ee8SDavid du Colombier 		{
172219b2ee8SDavid du Colombier 			$$ = an(ONAME, $1, ZN);
173219b2ee8SDavid du Colombier 			$$->sym = $3;
174bd389b36SDavid du Colombier 		}
175bd389b36SDavid du Colombier 		;
176bd389b36SDavid du Colombier 
177bd389b36SDavid du Colombier zexpr		:
178bd389b36SDavid du Colombier 		{ $$ = 0; }
179bd389b36SDavid du Colombier 		| expr
180bd389b36SDavid du Colombier 		;
181bd389b36SDavid du Colombier 
182219b2ee8SDavid du Colombier expr		: castexpr
183bd389b36SDavid du Colombier 		| expr '*' expr
184bd389b36SDavid du Colombier 		{
185bd389b36SDavid du Colombier 			$$ = an(OMUL, $1, $3);
186bd389b36SDavid du Colombier 		}
187bd389b36SDavid du Colombier 		| expr '/' expr
188bd389b36SDavid du Colombier 		{
189bd389b36SDavid du Colombier 			$$ = an(ODIV, $1, $3);
190bd389b36SDavid du Colombier 		}
191bd389b36SDavid du Colombier 		| expr '%' expr
192bd389b36SDavid du Colombier 		{
193bd389b36SDavid du Colombier 			$$ = an(OMOD, $1, $3);
194bd389b36SDavid du Colombier 		}
195bd389b36SDavid du Colombier 		| expr '+' expr
196bd389b36SDavid du Colombier 		{
197bd389b36SDavid du Colombier 			$$ = an(OADD, $1, $3);
198bd389b36SDavid du Colombier 		}
199bd389b36SDavid du Colombier 		| expr '-' expr
200bd389b36SDavid du Colombier 		{
201bd389b36SDavid du Colombier 			$$ = an(OSUB, $1, $3);
202bd389b36SDavid du Colombier 		}
203bd389b36SDavid du Colombier 		| expr Trsh expr
204bd389b36SDavid du Colombier 		{
205bd389b36SDavid du Colombier 			$$ = an(ORSH, $1, $3);
206bd389b36SDavid du Colombier 		}
207bd389b36SDavid du Colombier 		| expr Tlsh expr
208bd389b36SDavid du Colombier 		{
209bd389b36SDavid du Colombier 			$$ = an(OLSH, $1, $3);
210bd389b36SDavid du Colombier 		}
211bd389b36SDavid du Colombier 		| expr '<' expr
212bd389b36SDavid du Colombier 		{
213bd389b36SDavid du Colombier 			$$ = an(OLT, $1, $3);
214bd389b36SDavid du Colombier 		}
215bd389b36SDavid du Colombier 		| expr '>' expr
216bd389b36SDavid du Colombier 		{
217bd389b36SDavid du Colombier 			$$ = an(OGT, $1, $3);
218bd389b36SDavid du Colombier 		}
219bd389b36SDavid du Colombier 		| expr Tleq expr
220bd389b36SDavid du Colombier 		{
221bd389b36SDavid du Colombier 			$$ = an(OLEQ, $1, $3);
222bd389b36SDavid du Colombier 		}
223bd389b36SDavid du Colombier 		| expr Tgeq expr
224bd389b36SDavid du Colombier 		{
225bd389b36SDavid du Colombier 			$$ = an(OGEQ, $1, $3);
226bd389b36SDavid du Colombier 		}
227bd389b36SDavid du Colombier 		| expr Teq expr
228bd389b36SDavid du Colombier 		{
229bd389b36SDavid du Colombier 			$$ = an(OEQ, $1, $3);
230bd389b36SDavid du Colombier 		}
231bd389b36SDavid du Colombier 		| expr Tneq expr
232bd389b36SDavid du Colombier 		{
233bd389b36SDavid du Colombier 			$$ = an(ONEQ, $1, $3);
234bd389b36SDavid du Colombier 		}
235bd389b36SDavid du Colombier 		| expr '&' expr
236bd389b36SDavid du Colombier 		{
237bd389b36SDavid du Colombier 			$$ = an(OLAND, $1, $3);
238bd389b36SDavid du Colombier 		}
239bd389b36SDavid du Colombier 		| expr '^' expr
240bd389b36SDavid du Colombier 		{
241bd389b36SDavid du Colombier 			$$ = an(OXOR, $1, $3);
242bd389b36SDavid du Colombier 		}
243bd389b36SDavid du Colombier 		| expr '|' expr
244bd389b36SDavid du Colombier 		{
245bd389b36SDavid du Colombier 			$$ = an(OLOR, $1, $3);
246bd389b36SDavid du Colombier 		}
247bd389b36SDavid du Colombier 		| expr Tandand expr
248bd389b36SDavid du Colombier 		{
249bd389b36SDavid du Colombier 			$$ = an(OCAND, $1, $3);
250bd389b36SDavid du Colombier 		}
251bd389b36SDavid du Colombier 		| expr Toror expr
252bd389b36SDavid du Colombier 		{
253bd389b36SDavid du Colombier 			$$ = an(OCOR, $1, $3);
254bd389b36SDavid du Colombier 		}
255bd389b36SDavid du Colombier 		| expr '=' expr
256bd389b36SDavid du Colombier 		{
257bd389b36SDavid du Colombier 			$$ = an(OASGN, $1, $3);
258bd389b36SDavid du Colombier 		}
259219b2ee8SDavid du Colombier 		| expr Tfmt
260219b2ee8SDavid du Colombier 		{
261219b2ee8SDavid du Colombier 			$$ = an(OFMT, $1, con($2));
262219b2ee8SDavid du Colombier 		}
263219b2ee8SDavid du Colombier 		;
264219b2ee8SDavid du Colombier 
265219b2ee8SDavid du Colombier castexpr	: monexpr
266219b2ee8SDavid du Colombier 		| '(' Tid ')' monexpr
267219b2ee8SDavid du Colombier 		{
268219b2ee8SDavid du Colombier 			$$ = an(OCAST, $4, ZN);
269219b2ee8SDavid du Colombier 			$$->sym = $2;
270219b2ee8SDavid du Colombier 		}
271bd389b36SDavid du Colombier 		;
272bd389b36SDavid du Colombier 
273bd389b36SDavid du Colombier monexpr		: term
274bd389b36SDavid du Colombier 		| '*' monexpr
275bd389b36SDavid du Colombier 		{
276bd389b36SDavid du Colombier 			$$ = an(OINDM, $2, ZN);
277bd389b36SDavid du Colombier 		}
278bd389b36SDavid du Colombier 		| '@' monexpr
279bd389b36SDavid du Colombier 		{
280bd389b36SDavid du Colombier 			$$ = an(OINDC, $2, ZN);
281bd389b36SDavid du Colombier 		}
282bd389b36SDavid du Colombier 		| '+' monexpr
283bd389b36SDavid du Colombier 		{
284*7c70c028SDavid du Colombier 			$$ = an(OADD, $2, ZN);
285bd389b36SDavid du Colombier 		}
286bd389b36SDavid du Colombier 		| '-' monexpr
287bd389b36SDavid du Colombier 		{
288bd389b36SDavid du Colombier 			$$ = con(0);
289bd389b36SDavid du Colombier 			$$ = an(OSUB, $$, $2);
290bd389b36SDavid du Colombier 		}
291bd389b36SDavid du Colombier 		| Tdec monexpr
292bd389b36SDavid du Colombier 		{
293bd389b36SDavid du Colombier 			$$ = an(OEDEC, $2, ZN);
294bd389b36SDavid du Colombier 		}
295bd389b36SDavid du Colombier 		| Tinc monexpr
296bd389b36SDavid du Colombier 		{
297bd389b36SDavid du Colombier 			$$ = an(OEINC, $2, ZN);
298bd389b36SDavid du Colombier 		}
299bd389b36SDavid du Colombier 		| Thead monexpr
300bd389b36SDavid du Colombier 		{
301bd389b36SDavid du Colombier 			$$ = an(OHEAD, $2, ZN);
302bd389b36SDavid du Colombier 		}
303bd389b36SDavid du Colombier 		| Ttail monexpr
304bd389b36SDavid du Colombier 		{
305bd389b36SDavid du Colombier 			$$ = an(OTAIL, $2, ZN);
306bd389b36SDavid du Colombier 		}
307bd389b36SDavid du Colombier 		| Tappend monexpr ',' monexpr
308bd389b36SDavid du Colombier 		{
309bd389b36SDavid du Colombier 			$$ = an(OAPPEND, $2, $4);
310bd389b36SDavid du Colombier 		}
311bd389b36SDavid du Colombier 		| Tdelete monexpr ',' monexpr
312bd389b36SDavid du Colombier 		{
313bd389b36SDavid du Colombier 			$$ = an(ODELETE, $2, $4);
314bd389b36SDavid du Colombier 		}
315bd389b36SDavid du Colombier 		| '!' monexpr
316bd389b36SDavid du Colombier 		{
317bd389b36SDavid du Colombier 			$$ = an(ONOT, $2, ZN);
318bd389b36SDavid du Colombier 		}
319bd389b36SDavid du Colombier 		| '~' monexpr
320bd389b36SDavid du Colombier 		{
321bd389b36SDavid du Colombier 			$$ = an(OXOR, $2, con(-1));
322bd389b36SDavid du Colombier 		}
323219b2ee8SDavid du Colombier 		| Teval monexpr
324219b2ee8SDavid du Colombier 		{
325219b2ee8SDavid du Colombier 			$$ = an(OEVAL, $2, ZN);
326219b2ee8SDavid du Colombier 		}
327bd389b36SDavid du Colombier 		;
328bd389b36SDavid du Colombier 
329bd389b36SDavid du Colombier term		: '(' expr ')'
330bd389b36SDavid du Colombier 		{
331bd389b36SDavid du Colombier 			$$ = $2;
332bd389b36SDavid du Colombier 		}
333bd389b36SDavid du Colombier 		| '{' args '}'
334bd389b36SDavid du Colombier 		{
335bd389b36SDavid du Colombier 			$$ = an(OCTRUCT, $2, ZN);
336bd389b36SDavid du Colombier 		}
337bd389b36SDavid du Colombier 		| term '[' expr ']'
338bd389b36SDavid du Colombier 		{
339bd389b36SDavid du Colombier 			$$ = an(OINDEX, $1, $3);
340bd389b36SDavid du Colombier 		}
341bd389b36SDavid du Colombier 		| term Tdec
342bd389b36SDavid du Colombier 		{
343bd389b36SDavid du Colombier 			$$ = an(OPDEC, $1, ZN);
344bd389b36SDavid du Colombier 		}
345bd389b36SDavid du Colombier 		| term '.' Tid
346bd389b36SDavid du Colombier 		{
347bd389b36SDavid du Colombier 			$$ = an(ODOT, $1, ZN);
348bd389b36SDavid du Colombier 			$$->sym = $3;
349bd389b36SDavid du Colombier 		}
350bd389b36SDavid du Colombier 		| term Tindir Tid
351bd389b36SDavid du Colombier 		{
352bd389b36SDavid du Colombier 			$$ = an(ODOT, an(OINDM, $1, ZN), ZN);
353bd389b36SDavid du Colombier 			$$->sym = $3;
354bd389b36SDavid du Colombier 		}
355bd389b36SDavid du Colombier 		| term Tinc
356bd389b36SDavid du Colombier 		{
357bd389b36SDavid du Colombier 			$$ = an(OPINC, $1, ZN);
358bd389b36SDavid du Colombier 		}
359bd389b36SDavid du Colombier 		| name '(' args ')'
360bd389b36SDavid du Colombier 		{
361bd389b36SDavid du Colombier 			$$ = an(OCALL, $1, $3);
362bd389b36SDavid du Colombier 		}
3630b459c2cSDavid du Colombier 		| Tbuiltin name '(' args ')'
3640b459c2cSDavid du Colombier 		{
3650b459c2cSDavid du Colombier 			$$ = an(OCALL, $2, $4);
3660b459c2cSDavid du Colombier 			$$->builtin = 1;
3670b459c2cSDavid du Colombier 		}
368bd389b36SDavid du Colombier 		| name
369bd389b36SDavid du Colombier 		| Tconst
370bd389b36SDavid du Colombier 		{
371bd389b36SDavid du Colombier 			$$ = con($1);
372bd389b36SDavid du Colombier 		}
373bd389b36SDavid du Colombier 		| Tfconst
374bd389b36SDavid du Colombier 		{
375bd389b36SDavid du Colombier 			$$ = an(OCONST, ZN, ZN);
376bd389b36SDavid du Colombier 			$$->type = TFLOAT;
377219b2ee8SDavid du Colombier 			$$->fmt = 'f';
378bd389b36SDavid du Colombier 			$$->fval = $1;
379bd389b36SDavid du Colombier 		}
380bd389b36SDavid du Colombier 		| Tstring
381bd389b36SDavid du Colombier 		{
382bd389b36SDavid du Colombier 			$$ = an(OCONST, ZN, ZN);
383bd389b36SDavid du Colombier 			$$->type = TSTRING;
384bd389b36SDavid du Colombier 			$$->string = $1;
385bd389b36SDavid du Colombier 			$$->fmt = 's';
386bd389b36SDavid du Colombier 		}
387219b2ee8SDavid du Colombier 		| Twhat zname
388219b2ee8SDavid du Colombier 		{
389219b2ee8SDavid du Colombier 			$$ = an(OWHAT, ZN, ZN);
390219b2ee8SDavid du Colombier 			$$->sym = $2;
391219b2ee8SDavid du Colombier 		}
392bd389b36SDavid du Colombier 		;
393bd389b36SDavid du Colombier 
394bd389b36SDavid du Colombier name		: Tid
395bd389b36SDavid du Colombier 		{
396bd389b36SDavid du Colombier 			$$ = an(ONAME, ZN, ZN);
397bd389b36SDavid du Colombier 			$$->sym = $1;
398bd389b36SDavid du Colombier 		}
399bd389b36SDavid du Colombier 		| Tid ':' name
400bd389b36SDavid du Colombier 		{
401bd389b36SDavid du Colombier 			$$ = an(OFRAME, $3, ZN);
402bd389b36SDavid du Colombier 			$$->sym = $1;
403bd389b36SDavid du Colombier 		}
404bd389b36SDavid du Colombier 		;
405bd389b36SDavid du Colombier 
4067dd7cddfSDavid du Colombier args		: zexpr
4077dd7cddfSDavid du Colombier 		| args ','  zexpr
408bd389b36SDavid du Colombier 		{
409bd389b36SDavid du Colombier 			$$ = an(OLIST, $1, $3);
410bd389b36SDavid du Colombier 		}
411bd389b36SDavid du Colombier 		;
412