2 564ca709 2004-04-19 devnull #include <u.h>
3 564ca709 2004-04-19 devnull #include <libc.h>
4 564ca709 2004-04-19 devnull #include <bio.h>
5 564ca709 2004-04-19 devnull #include <mach.h>
6 564ca709 2004-04-19 devnull #define Extern extern
7 564ca709 2004-04-19 devnull #include "acid.h"
12 564ca709 2004-04-19 devnull Node *node;
13 564ca709 2004-04-19 devnull Lsym *sym;
14 564ca709 2004-04-19 devnull ulong ival;
15 564ca709 2004-04-19 devnull float fval;
16 564ca709 2004-04-19 devnull String *string;
19 564ca709 2004-04-19 devnull %type <node> expr monexpr term stmnt name args zexpr slist
20 564ca709 2004-04-19 devnull %type <node> member members mname castexpr idlist
21 564ca709 2004-04-19 devnull %type <sym> zname
23 564ca709 2004-04-19 devnull %left ';'
24 564ca709 2004-04-19 devnull %right '='
25 564ca709 2004-04-19 devnull %left Tfmt
26 564ca709 2004-04-19 devnull %left Toror
27 564ca709 2004-04-19 devnull %left Tandand
28 564ca709 2004-04-19 devnull %left '|'
29 564ca709 2004-04-19 devnull %left '^'
30 564ca709 2004-04-19 devnull %left '&'
31 564ca709 2004-04-19 devnull %left Teq Tneq
32 564ca709 2004-04-19 devnull %left '<' '>' Tleq Tgeq
33 564ca709 2004-04-19 devnull %left Tlsh Trsh
34 564ca709 2004-04-19 devnull %left '+' '-'
35 564ca709 2004-04-19 devnull %left '*' '/' '%'
36 564ca709 2004-04-19 devnull %right Tdec Tinc Tindir '.' '[' '('
38 564ca709 2004-04-19 devnull %token <sym> Tid
39 564ca709 2004-04-19 devnull %token <ival> Tconst Tfmt
40 564ca709 2004-04-19 devnull %token <fval> Tfconst
41 564ca709 2004-04-19 devnull %token <string> Tstring
42 564ca709 2004-04-19 devnull %token Tif Tdo Tthen Telse Twhile Tloop Thead Ttail Tappend Tfn Tret Tlocal
43 564ca709 2004-04-19 devnull %token Tcomplex Twhat Tdelete Teval Tbuiltin
48 564ca709 2004-04-19 devnull | prog bigstmnt
51 564ca709 2004-04-19 devnull bigstmnt : stmnt
53 564ca709 2004-04-19 devnull /* hold on to current command for gc */
54 564ca709 2004-04-19 devnull mkvar("_thiscmd")->proc = $1;
55 564ca709 2004-04-19 devnull execute($1);
57 564ca709 2004-04-19 devnull if(interactive && nlcount){
58 564ca709 2004-04-19 devnull Bprint(bout, "acid; ");
59 564ca709 2004-04-19 devnull nlcount = 0;
62 564ca709 2004-04-19 devnull | Tfn Tid '(' args ')' zsemi '{' slist '}'
64 564ca709 2004-04-19 devnull $2->proc = an(OLIST, $4, $8);
66 564ca709 2004-04-19 devnull | Tfn Tid
68 564ca709 2004-04-19 devnull $2->proc = nil;
70 564ca709 2004-04-19 devnull | Tcomplex name '{' members '}' ';'
72 564ca709 2004-04-19 devnull defcomplex($2, $4);
77 564ca709 2004-04-19 devnull | ';' zsemi
79 564ca709 2004-04-19 devnull members : member
80 564ca709 2004-04-19 devnull | members member
82 564ca709 2004-04-19 devnull $$ = an(OLIST, $1, $2);
86 564ca709 2004-04-19 devnull mname : Tid
88 564ca709 2004-04-19 devnull $$ = an(ONAME, ZN, ZN);
89 564ca709 2004-04-19 devnull $$->sym = $1;
93 564ca709 2004-04-19 devnull member : Tconst Tconst mname ';'
95 564ca709 2004-04-19 devnull $3->store.u.ival = $2;
96 564ca709 2004-04-19 devnull $3->store.fmt = $1;
99 564ca709 2004-04-19 devnull | Tconst mname Tconst mname ';'
101 564ca709 2004-04-19 devnull $4->store.u.ival = $3;
102 564ca709 2004-04-19 devnull $4->store.fmt = $1;
103 564ca709 2004-04-19 devnull $4->right = $2;
104 564ca709 2004-04-19 devnull $$ = $4;
106 564ca709 2004-04-19 devnull | mname Tconst mname ';'
108 564ca709 2004-04-19 devnull $3->store.u.ival = $2;
109 564ca709 2004-04-19 devnull $3->left = $1;
110 564ca709 2004-04-19 devnull $$ = $3;
112 564ca709 2004-04-19 devnull | '{' members '}' ';'
114 564ca709 2004-04-19 devnull $$ = an(OCTRUCT, $2, ZN);
119 564ca709 2004-04-19 devnull { $$ = 0; }
123 564ca709 2004-04-19 devnull slist : stmnt
124 564ca709 2004-04-19 devnull | slist stmnt
126 564ca709 2004-04-19 devnull $$ = an(OLIST, $1, $2);
130 564ca709 2004-04-19 devnull stmnt : zexpr ';'
131 564ca709 2004-04-19 devnull | '{' slist '}'
133 564ca709 2004-04-19 devnull $$ = $2;
135 564ca709 2004-04-19 devnull | Tif expr Tthen stmnt
137 564ca709 2004-04-19 devnull $$ = an(OIF, $2, $4);
139 564ca709 2004-04-19 devnull | Tif expr Tthen stmnt Telse stmnt
141 564ca709 2004-04-19 devnull $$ = an(OIF, $2, an(OELSE, $4, $6));
143 564ca709 2004-04-19 devnull | Tloop expr ',' expr Tdo stmnt
145 564ca709 2004-04-19 devnull $$ = an(ODO, an(OLIST, $2, $4), $6);
147 564ca709 2004-04-19 devnull | Twhile expr Tdo stmnt
149 564ca709 2004-04-19 devnull $$ = an(OWHILE, $2, $4);
151 564ca709 2004-04-19 devnull | Tret expr ';'
153 564ca709 2004-04-19 devnull $$ = an(ORET, $2, ZN);
155 564ca709 2004-04-19 devnull | Tlocal idlist
157 564ca709 2004-04-19 devnull $$ = an(OLOCAL, $2, ZN);
159 564ca709 2004-04-19 devnull | Tcomplex Tid name ';'
161 564ca709 2004-04-19 devnull $$ = an(OCOMPLEX, $3, ZN);
162 564ca709 2004-04-19 devnull $$->sym = $2;
166 564ca709 2004-04-19 devnull idlist : Tid
168 564ca709 2004-04-19 devnull $$ = an(ONAME, ZN, ZN);
169 564ca709 2004-04-19 devnull $$->sym = $1;
171 564ca709 2004-04-19 devnull | idlist ',' Tid
173 564ca709 2004-04-19 devnull $$ = an(ONAME, $1, ZN);
174 564ca709 2004-04-19 devnull $$->sym = $3;
179 564ca709 2004-04-19 devnull { $$ = 0; }
183 564ca709 2004-04-19 devnull expr : castexpr
184 564ca709 2004-04-19 devnull | expr '*' expr
186 564ca709 2004-04-19 devnull $$ = an(OMUL, $1, $3);
188 564ca709 2004-04-19 devnull | expr '/' expr
190 564ca709 2004-04-19 devnull $$ = an(ODIV, $1, $3);
192 564ca709 2004-04-19 devnull | expr '%' expr
194 564ca709 2004-04-19 devnull $$ = an(OMOD, $1, $3);
196 564ca709 2004-04-19 devnull | expr '+' expr
198 564ca709 2004-04-19 devnull $$ = an(OADD, $1, $3);
200 564ca709 2004-04-19 devnull | expr '-' expr
202 564ca709 2004-04-19 devnull $$ = an(OSUB, $1, $3);
204 564ca709 2004-04-19 devnull | expr Trsh expr
206 564ca709 2004-04-19 devnull $$ = an(ORSH, $1, $3);
208 564ca709 2004-04-19 devnull | expr Tlsh expr
210 564ca709 2004-04-19 devnull $$ = an(OLSH, $1, $3);
212 564ca709 2004-04-19 devnull | expr '<' expr
214 564ca709 2004-04-19 devnull $$ = an(OLT, $1, $3);
216 564ca709 2004-04-19 devnull | expr '>' expr
218 564ca709 2004-04-19 devnull $$ = an(OGT, $1, $3);
220 564ca709 2004-04-19 devnull | expr Tleq expr
222 564ca709 2004-04-19 devnull $$ = an(OLEQ, $1, $3);
224 564ca709 2004-04-19 devnull | expr Tgeq expr
226 564ca709 2004-04-19 devnull $$ = an(OGEQ, $1, $3);
228 564ca709 2004-04-19 devnull | expr Teq expr
230 564ca709 2004-04-19 devnull $$ = an(OEQ, $1, $3);
232 564ca709 2004-04-19 devnull | expr Tneq expr
234 564ca709 2004-04-19 devnull $$ = an(ONEQ, $1, $3);
236 564ca709 2004-04-19 devnull | expr '&' expr
238 564ca709 2004-04-19 devnull $$ = an(OLAND, $1, $3);
240 564ca709 2004-04-19 devnull | expr '^' expr
242 564ca709 2004-04-19 devnull $$ = an(OXOR, $1, $3);
244 564ca709 2004-04-19 devnull | expr '|' expr
246 564ca709 2004-04-19 devnull $$ = an(OLOR, $1, $3);
248 564ca709 2004-04-19 devnull | expr Tandand expr
250 564ca709 2004-04-19 devnull $$ = an(OCAND, $1, $3);
252 564ca709 2004-04-19 devnull | expr Toror expr
254 564ca709 2004-04-19 devnull $$ = an(OCOR, $1, $3);
256 564ca709 2004-04-19 devnull | expr '=' expr
258 564ca709 2004-04-19 devnull $$ = an(OASGN, $1, $3);
260 564ca709 2004-04-19 devnull | expr Tfmt
262 564ca709 2004-04-19 devnull $$ = an(OFMT, $1, con($2));
266 564ca709 2004-04-19 devnull castexpr : monexpr
267 564ca709 2004-04-19 devnull | '(' Tid ')' monexpr
269 564ca709 2004-04-19 devnull $$ = an(OCAST, $4, ZN);
270 564ca709 2004-04-19 devnull $$->sym = $2;
274 564ca709 2004-04-19 devnull monexpr : term
275 564ca709 2004-04-19 devnull | '*' monexpr
277 564ca709 2004-04-19 devnull $$ = an(OINDM, $2, ZN);
279 564ca709 2004-04-19 devnull | '@' monexpr
281 564ca709 2004-04-19 devnull $$ = an(OINDC, $2, ZN);
283 564ca709 2004-04-19 devnull | '+' monexpr
285 4f2ac1b7 2005-01-23 devnull $$ = an(OUPLUS, $2, ZN);
287 564ca709 2004-04-19 devnull | '-' monexpr
289 564ca709 2004-04-19 devnull $$ = con(0);
290 564ca709 2004-04-19 devnull $$ = an(OSUB, $$, $2);
292 564ca709 2004-04-19 devnull | Tdec monexpr
294 564ca709 2004-04-19 devnull $$ = an(OEDEC, $2, ZN);
296 564ca709 2004-04-19 devnull | Tinc monexpr
298 564ca709 2004-04-19 devnull $$ = an(OEINC, $2, ZN);
300 564ca709 2004-04-19 devnull | Thead monexpr
302 564ca709 2004-04-19 devnull $$ = an(OHEAD, $2, ZN);
304 564ca709 2004-04-19 devnull | Ttail monexpr
306 564ca709 2004-04-19 devnull $$ = an(OTAIL, $2, ZN);
308 564ca709 2004-04-19 devnull | Tappend monexpr ',' monexpr
310 564ca709 2004-04-19 devnull $$ = an(OAPPEND, $2, $4);
312 564ca709 2004-04-19 devnull | Tdelete monexpr ',' monexpr
314 564ca709 2004-04-19 devnull $$ = an(ODELETE, $2, $4);
316 564ca709 2004-04-19 devnull | '!' monexpr
318 564ca709 2004-04-19 devnull $$ = an(ONOT, $2, ZN);
320 564ca709 2004-04-19 devnull | '~' monexpr
322 564ca709 2004-04-19 devnull $$ = an(OXOR, $2, con(-1));
324 564ca709 2004-04-19 devnull | Teval monexpr
326 564ca709 2004-04-19 devnull $$ = an(OEVAL, $2, ZN);
330 564ca709 2004-04-19 devnull term : '(' expr ')'
332 564ca709 2004-04-19 devnull $$ = $2;
334 564ca709 2004-04-19 devnull | '{' args '}'
336 564ca709 2004-04-19 devnull $$ = an(OCTRUCT, $2, ZN);
338 564ca709 2004-04-19 devnull | term '[' expr ']'
340 564ca709 2004-04-19 devnull $$ = an(OINDEX, $1, $3);
342 564ca709 2004-04-19 devnull | term Tdec
344 564ca709 2004-04-19 devnull $$ = an(OPDEC, $1, ZN);
346 564ca709 2004-04-19 devnull | term '.' Tid
348 564ca709 2004-04-19 devnull $$ = an(ODOT, $1, ZN);
349 564ca709 2004-04-19 devnull $$->sym = $3;
351 564ca709 2004-04-19 devnull | term Tindir Tid
353 564ca709 2004-04-19 devnull $$ = an(ODOT, an(OINDM, $1, ZN), ZN);
354 564ca709 2004-04-19 devnull $$->sym = $3;
356 564ca709 2004-04-19 devnull | term Tinc
358 564ca709 2004-04-19 devnull $$ = an(OPINC, $1, ZN);
360 564ca709 2004-04-19 devnull | name '(' args ')'
362 564ca709 2004-04-19 devnull $$ = an(OCALL, $1, $3);
364 564ca709 2004-04-19 devnull | Tbuiltin name '(' args ')'
366 564ca709 2004-04-19 devnull $$ = an(OCALL, $2, $4);
367 564ca709 2004-04-19 devnull $$->builtin = 1;
370 564ca709 2004-04-19 devnull | Tconst
372 564ca709 2004-04-19 devnull $$ = con($1);
374 564ca709 2004-04-19 devnull | Tfconst
376 564ca709 2004-04-19 devnull $$ = an(OCONST, ZN, ZN);
377 564ca709 2004-04-19 devnull $$->type = TFLOAT;
378 564ca709 2004-04-19 devnull $$->store.fmt = 'f';
379 564ca709 2004-04-19 devnull $$->store.u.fval = $1;
381 564ca709 2004-04-19 devnull | Tstring
383 564ca709 2004-04-19 devnull $$ = an(OCONST, ZN, ZN);
384 564ca709 2004-04-19 devnull $$->type = TSTRING;
385 564ca709 2004-04-19 devnull $$->store.u.string = $1;
386 564ca709 2004-04-19 devnull $$->store.fmt = 's';
388 564ca709 2004-04-19 devnull | Twhat zname
390 564ca709 2004-04-19 devnull $$ = an(OWHAT, ZN, ZN);
391 564ca709 2004-04-19 devnull $$->sym = $2;
395 564ca709 2004-04-19 devnull name : Tid
397 564ca709 2004-04-19 devnull $$ = an(ONAME, ZN, ZN);
398 564ca709 2004-04-19 devnull $$->sym = $1;
400 564ca709 2004-04-19 devnull | Tid ':' name
402 564ca709 2004-04-19 devnull $$ = an(OFRAME, $3, ZN);
403 564ca709 2004-04-19 devnull $$->sym = $1;
407 564ca709 2004-04-19 devnull args : zexpr
408 564ca709 2004-04-19 devnull | args ',' zexpr
410 564ca709 2004-04-19 devnull $$ = an(OLIST, $1, $3);