Blame


1 5cedca1b 2004-05-15 devnull %{
2 5cedca1b 2004-05-15 devnull #include <stdio.h>
3 5cedca1b 2004-05-15 devnull #include "pic.h"
4 5cedca1b 2004-05-15 devnull #include <math.h>
5 5cedca1b 2004-05-15 devnull #include <stdlib.h>
6 5cedca1b 2004-05-15 devnull #include <string.h>
7 5cedca1b 2004-05-15 devnull
8 5cedca1b 2004-05-15 devnull YYSTYPE y;
9 5cedca1b 2004-05-15 devnull
10 5cedca1b 2004-05-15 devnull extern void yyerror(char *);
11 5cedca1b 2004-05-15 devnull extern int yylex(void);
12 5cedca1b 2004-05-15 devnull %}
13 5cedca1b 2004-05-15 devnull
14 5cedca1b 2004-05-15 devnull %token <i> BOX 1 /* DON'T CHANGE THESE! */
15 5cedca1b 2004-05-15 devnull %token <i> LINE 2
16 5cedca1b 2004-05-15 devnull %token <i> ARROW 3
17 5cedca1b 2004-05-15 devnull %token <i> CIRCLE 4
18 5cedca1b 2004-05-15 devnull %token <i> ELLIPSE 5
19 5cedca1b 2004-05-15 devnull %token <i> ARC 6
20 5cedca1b 2004-05-15 devnull %token <i> SPLINE 7
21 5cedca1b 2004-05-15 devnull %token <i> BLOCK 8
22 5cedca1b 2004-05-15 devnull %token <p> TEXT 9
23 5cedca1b 2004-05-15 devnull %token <p> TROFF 10
24 5cedca1b 2004-05-15 devnull %token <i> MOVE 11
25 5cedca1b 2004-05-15 devnull %token <i> BLOCKEND 12
26 5cedca1b 2004-05-15 devnull %token <i> PLACE 13
27 5cedca1b 2004-05-15 devnull %token <i> PRINT RESET THRU UNTIL
28 5cedca1b 2004-05-15 devnull %token <o> FOR IF COPY
29 5cedca1b 2004-05-15 devnull %token <p> THENSTR ELSESTR DOSTR PLACENAME VARNAME SPRINTF
30 5cedca1b 2004-05-15 devnull %token <st> DEFNAME
31 5cedca1b 2004-05-15 devnull %token <i> ATTR TEXTATTR
32 5cedca1b 2004-05-15 devnull %token <i> LEFT RIGHT UP DOWN FROM TO AT BY WITH HEAD CW CCW THEN
33 5cedca1b 2004-05-15 devnull %token <i> HEIGHT WIDTH RADIUS DIAMETER LENGTH SIZE
34 5cedca1b 2004-05-15 devnull %token <i> CORNER HERE LAST NTH SAME BETWEEN AND
35 5cedca1b 2004-05-15 devnull %token <i> EAST WEST NORTH SOUTH NE NW SE SW START END
36 5cedca1b 2004-05-15 devnull %token <i> DOTX DOTY DOTHT DOTWID DOTRAD
37 5cedca1b 2004-05-15 devnull %token <f> NUMBER
38 5cedca1b 2004-05-15 devnull %token <f> LOG EXP SIN COS ATAN2 SQRT RAND MIN MAX INT
39 5cedca1b 2004-05-15 devnull %token <i> DIR
40 5cedca1b 2004-05-15 devnull %token <i> DOT DASH CHOP FILL NOEDGE
41 5cedca1b 2004-05-15 devnull %token <o> ST /* statement terminator */
42 5cedca1b 2004-05-15 devnull
43 5cedca1b 2004-05-15 devnull %right <f> '='
44 5cedca1b 2004-05-15 devnull %left <f> OROR
45 5cedca1b 2004-05-15 devnull %left <f> ANDAND
46 5cedca1b 2004-05-15 devnull %nonassoc <f> GT LT LE GE EQ NEQ
47 5cedca1b 2004-05-15 devnull %left <f> '+' '-'
48 5cedca1b 2004-05-15 devnull %left <f> '*' '/' '%'
49 5cedca1b 2004-05-15 devnull %right <f> UMINUS NOT
50 5cedca1b 2004-05-15 devnull %right <f> '^'
51 5cedca1b 2004-05-15 devnull
52 5cedca1b 2004-05-15 devnull %type <f> expr if_expr asgn
53 5cedca1b 2004-05-15 devnull %type <p> name text
54 5cedca1b 2004-05-15 devnull %type <i> optop exprlist
55 5cedca1b 2004-05-15 devnull %type <o> if for copy
56 5cedca1b 2004-05-15 devnull
57 5cedca1b 2004-05-15 devnull /* this is a lie: picture and position are really the whole union */
58 5cedca1b 2004-05-15 devnull %type <o> leftbrace picture piclist position lbracket
59 5cedca1b 2004-05-15 devnull %type <o> prim place blockname
60 5cedca1b 2004-05-15 devnull %type <i> textlist textattr /* not a sensible value */
61 5cedca1b 2004-05-15 devnull %type <i> last type
62 5cedca1b 2004-05-15 devnull
63 5cedca1b 2004-05-15 devnull %%
64 5cedca1b 2004-05-15 devnull
65 5cedca1b 2004-05-15 devnull top:
66 5cedca1b 2004-05-15 devnull piclist
67 5cedca1b 2004-05-15 devnull | /* empty */
68 5cedca1b 2004-05-15 devnull | error { ERROR "syntax error" WARNING; }
69 5cedca1b 2004-05-15 devnull ;
70 5cedca1b 2004-05-15 devnull
71 5cedca1b 2004-05-15 devnull piclist:
72 5cedca1b 2004-05-15 devnull picture
73 5cedca1b 2004-05-15 devnull | piclist picture
74 5cedca1b 2004-05-15 devnull ;
75 5cedca1b 2004-05-15 devnull
76 5cedca1b 2004-05-15 devnull picture:
77 5cedca1b 2004-05-15 devnull prim ST { codegen = 1; makeiattr(0, 0); }
78 5cedca1b 2004-05-15 devnull | leftbrace piclist '}' { rightthing($1, '}'); $$ = $2; }
79 5cedca1b 2004-05-15 devnull | PLACENAME ':' picture { y.o=$3; makevar($1,PLACENAME,y); $$ = $3; }
80 5cedca1b 2004-05-15 devnull | PLACENAME ':' ST picture { y.o=$4; makevar($1,PLACENAME,y); $$ = $4; }
81 5cedca1b 2004-05-15 devnull | PLACENAME ':' position ST { y.o=$3; makevar($1,PLACENAME,y); $$ = $3; }
82 5cedca1b 2004-05-15 devnull | asgn ST { y.f = $1; $$ = y.o; $$ = makenode(PLACE, 0); }
83 5cedca1b 2004-05-15 devnull | DIR { setdir($1); $$ = makenode(PLACE, 0); }
84 5cedca1b 2004-05-15 devnull | PRINT expr ST { printexpr($2); $$ = makenode(PLACE, 0); }
85 5cedca1b 2004-05-15 devnull | PRINT position ST { printpos($2); $$ = makenode(PLACE, 0); }
86 5cedca1b 2004-05-15 devnull | PRINT text ST { printf("%s\n", $2); free($2); $$ = makenode(PLACE, 0); }
87 5cedca1b 2004-05-15 devnull | RESET varlist ST { resetvar(); makeiattr(0, 0); $$ = makenode(PLACE, 0); }
88 5cedca1b 2004-05-15 devnull | copy
89 5cedca1b 2004-05-15 devnull | for
90 5cedca1b 2004-05-15 devnull | if
91 5cedca1b 2004-05-15 devnull | ST
92 5cedca1b 2004-05-15 devnull ;
93 5cedca1b 2004-05-15 devnull
94 5cedca1b 2004-05-15 devnull varlist:
95 5cedca1b 2004-05-15 devnull /* empty */
96 5cedca1b 2004-05-15 devnull | VARNAME { makevattr($1); }
97 5cedca1b 2004-05-15 devnull | varlist VARNAME { makevattr($2); }
98 5cedca1b 2004-05-15 devnull | varlist ',' VARNAME { makevattr($3); }
99 5cedca1b 2004-05-15 devnull ;
100 5cedca1b 2004-05-15 devnull
101 5cedca1b 2004-05-15 devnull asgn:
102 5cedca1b 2004-05-15 devnull VARNAME '=' expr { $$=y.f=$3; makevar($1,VARNAME,y); checkscale($1); }
103 5cedca1b 2004-05-15 devnull ;
104 5cedca1b 2004-05-15 devnull
105 5cedca1b 2004-05-15 devnull copy:
106 5cedca1b 2004-05-15 devnull COPY copylist { copy(); }
107 5cedca1b 2004-05-15 devnull ;
108 5cedca1b 2004-05-15 devnull copylist:
109 5cedca1b 2004-05-15 devnull copyattr
110 5cedca1b 2004-05-15 devnull | copylist copyattr
111 5cedca1b 2004-05-15 devnull ;
112 5cedca1b 2004-05-15 devnull copyattr:
113 5cedca1b 2004-05-15 devnull text { copyfile($1); }
114 5cedca1b 2004-05-15 devnull | THRU DEFNAME { copydef($2); }
115 5cedca1b 2004-05-15 devnull | UNTIL text { copyuntil($2); }
116 5cedca1b 2004-05-15 devnull ;
117 5cedca1b 2004-05-15 devnull
118 5cedca1b 2004-05-15 devnull for:
119 5cedca1b 2004-05-15 devnull FOR name FROM expr TO expr BY optop expr DOSTR
120 5cedca1b 2004-05-15 devnull { forloop($2, $4, $6, $8, $9, $10); }
121 5cedca1b 2004-05-15 devnull | FOR name FROM expr TO expr DOSTR
122 5cedca1b 2004-05-15 devnull { forloop($2, $4, $6, '+', 1.0, $7); }
123 5cedca1b 2004-05-15 devnull | FOR name '=' expr TO expr BY optop expr DOSTR
124 5cedca1b 2004-05-15 devnull { forloop($2, $4, $6, $8, $9, $10); }
125 5cedca1b 2004-05-15 devnull | FOR name '=' expr TO expr DOSTR
126 5cedca1b 2004-05-15 devnull { forloop($2, $4, $6, '+', 1.0, $7); }
127 5cedca1b 2004-05-15 devnull ;
128 5cedca1b 2004-05-15 devnull
129 5cedca1b 2004-05-15 devnull if:
130 5cedca1b 2004-05-15 devnull IF if_expr THENSTR ELSESTR { ifstat($2, $3, $4); }
131 5cedca1b 2004-05-15 devnull | IF if_expr THENSTR { ifstat($2, $3, (char *) 0); }
132 5cedca1b 2004-05-15 devnull ;
133 5cedca1b 2004-05-15 devnull if_expr:
134 5cedca1b 2004-05-15 devnull expr
135 5cedca1b 2004-05-15 devnull | text EQ text { $$ = strcmp($1,$3) == 0; free($1); free($3); }
136 5cedca1b 2004-05-15 devnull | text NEQ text { $$ = strcmp($1,$3) != 0; free($1); free($3); }
137 5cedca1b 2004-05-15 devnull ;
138 5cedca1b 2004-05-15 devnull
139 5cedca1b 2004-05-15 devnull name:
140 5cedca1b 2004-05-15 devnull VARNAME { y.f = 0; makevar($1, VARNAME, y); }
141 5cedca1b 2004-05-15 devnull ;
142 5cedca1b 2004-05-15 devnull optop:
143 5cedca1b 2004-05-15 devnull '+' { $$ = '+'; }
144 5cedca1b 2004-05-15 devnull | '-' { $$ = '-'; }
145 5cedca1b 2004-05-15 devnull | '*' { $$ = '*'; }
146 5cedca1b 2004-05-15 devnull | '/' { $$ = '/'; }
147 5cedca1b 2004-05-15 devnull | /* empty */ { $$ = ' '; }
148 5cedca1b 2004-05-15 devnull ;
149 5cedca1b 2004-05-15 devnull
150 5cedca1b 2004-05-15 devnull
151 5cedca1b 2004-05-15 devnull leftbrace:
152 5cedca1b 2004-05-15 devnull '{' { $$ = leftthing('{'); }
153 5cedca1b 2004-05-15 devnull ;
154 5cedca1b 2004-05-15 devnull
155 5cedca1b 2004-05-15 devnull prim:
156 5cedca1b 2004-05-15 devnull BOX attrlist { $$ = boxgen(); }
157 5cedca1b 2004-05-15 devnull | CIRCLE attrlist { $$ = circgen($1); }
158 5cedca1b 2004-05-15 devnull | ELLIPSE attrlist { $$ = circgen($1); }
159 5cedca1b 2004-05-15 devnull | ARC attrlist { $$ = arcgen($1); }
160 5cedca1b 2004-05-15 devnull | LINE attrlist { $$ = linegen($1); }
161 5cedca1b 2004-05-15 devnull | ARROW attrlist { $$ = linegen($1); }
162 5cedca1b 2004-05-15 devnull | SPLINE attrlist { $$ = linegen($1); }
163 5cedca1b 2004-05-15 devnull | MOVE attrlist { $$ = movegen(); }
164 5cedca1b 2004-05-15 devnull | textlist attrlist { $$ = textgen(); }
165 5cedca1b 2004-05-15 devnull | TROFF { $$ = troffgen($1); }
166 5cedca1b 2004-05-15 devnull | lbracket piclist ']' { $<o>$=rightthing($1,']'); } attrlist
167 5cedca1b 2004-05-15 devnull { $$ = blockgen($1, $<o>4); }
168 5cedca1b 2004-05-15 devnull ;
169 5cedca1b 2004-05-15 devnull
170 5cedca1b 2004-05-15 devnull lbracket:
171 5cedca1b 2004-05-15 devnull '[' { $$ = leftthing('['); }
172 5cedca1b 2004-05-15 devnull ;
173 5cedca1b 2004-05-15 devnull
174 5cedca1b 2004-05-15 devnull attrlist:
175 5cedca1b 2004-05-15 devnull attrlist attr
176 5cedca1b 2004-05-15 devnull | /* empty */
177 5cedca1b 2004-05-15 devnull ;
178 5cedca1b 2004-05-15 devnull
179 5cedca1b 2004-05-15 devnull attr:
180 5cedca1b 2004-05-15 devnull ATTR expr { makefattr($1, !DEFAULT, $2); }
181 5cedca1b 2004-05-15 devnull | ATTR { makefattr($1, DEFAULT, 0.0); }
182 5cedca1b 2004-05-15 devnull | expr { makefattr(curdir(), !DEFAULT, $1); }
183 5cedca1b 2004-05-15 devnull | DIR expr { makefattr($1, !DEFAULT, $2); }
184 5cedca1b 2004-05-15 devnull | DIR { makefattr($1, DEFAULT, 0.0); }
185 5cedca1b 2004-05-15 devnull | FROM position { makeoattr($1, $2); }
186 5cedca1b 2004-05-15 devnull | TO position { makeoattr($1, $2); }
187 5cedca1b 2004-05-15 devnull | AT position { makeoattr($1, $2); }
188 5cedca1b 2004-05-15 devnull | BY position { makeoattr($1, $2); }
189 5cedca1b 2004-05-15 devnull | WITH CORNER { makeiattr(WITH, $2); }
190 5cedca1b 2004-05-15 devnull | WITH '.' PLACENAME { makeoattr(PLACE, getblock(getlast(1,BLOCK), $3)); }
191 5cedca1b 2004-05-15 devnull | WITH '.' PLACENAME CORNER
192 5cedca1b 2004-05-15 devnull { makeoattr(PLACE, getpos(getblock(getlast(1,BLOCK), $3), $4)); }
193 5cedca1b 2004-05-15 devnull | WITH position { makeoattr(PLACE, $2); }
194 5cedca1b 2004-05-15 devnull | SAME { makeiattr(SAME, $1); }
195 5cedca1b 2004-05-15 devnull | TEXTATTR { maketattr($1, (char *) 0); }
196 5cedca1b 2004-05-15 devnull | HEAD { makeiattr(HEAD, $1); }
197 5cedca1b 2004-05-15 devnull | DOT expr { makefattr(DOT, !DEFAULT, $2); }
198 5cedca1b 2004-05-15 devnull | DOT { makefattr(DOT, DEFAULT, 0.0); }
199 5cedca1b 2004-05-15 devnull | DASH expr { makefattr(DASH, !DEFAULT, $2); }
200 5cedca1b 2004-05-15 devnull | DASH { makefattr(DASH, DEFAULT, 0.0); }
201 5cedca1b 2004-05-15 devnull | CHOP expr { makefattr(CHOP, !DEFAULT, $2); }
202 5cedca1b 2004-05-15 devnull | CHOP { makefattr(CHOP, DEFAULT, 0.0); }
203 5cedca1b 2004-05-15 devnull | CHOP PLACENAME { makeattr(CHOP, PLACENAME, getvar($2)); }
204 5cedca1b 2004-05-15 devnull | FILL expr { makefattr(FILL, !DEFAULT, $2); }
205 5cedca1b 2004-05-15 devnull | FILL { makefattr(FILL, DEFAULT, 0.0); }
206 5cedca1b 2004-05-15 devnull | NOEDGE { makeiattr(NOEDGE, 0); }
207 5cedca1b 2004-05-15 devnull | textlist
208 5cedca1b 2004-05-15 devnull ;
209 5cedca1b 2004-05-15 devnull
210 5cedca1b 2004-05-15 devnull textlist:
211 5cedca1b 2004-05-15 devnull textattr
212 5cedca1b 2004-05-15 devnull | textlist textattr
213 5cedca1b 2004-05-15 devnull ;
214 5cedca1b 2004-05-15 devnull textattr:
215 5cedca1b 2004-05-15 devnull text { maketattr(CENTER, $1); }
216 5cedca1b 2004-05-15 devnull | text TEXTATTR { maketattr($2, $1); }
217 5cedca1b 2004-05-15 devnull | textattr TEXTATTR { addtattr($2); }
218 5cedca1b 2004-05-15 devnull ;
219 5cedca1b 2004-05-15 devnull text:
220 5cedca1b 2004-05-15 devnull TEXT
221 5cedca1b 2004-05-15 devnull | SPRINTF '(' text ')' { $$ = sprintgen($3); }
222 5cedca1b 2004-05-15 devnull | SPRINTF '(' text ',' exprlist ')' { $$ = sprintgen($3); }
223 5cedca1b 2004-05-15 devnull ;
224 5cedca1b 2004-05-15 devnull
225 5cedca1b 2004-05-15 devnull exprlist:
226 5cedca1b 2004-05-15 devnull expr { exprsave($1); $$ = 0; }
227 5cedca1b 2004-05-15 devnull | exprlist ',' expr { exprsave($3); }
228 5cedca1b 2004-05-15 devnull ;
229 5cedca1b 2004-05-15 devnull
230 5cedca1b 2004-05-15 devnull position: /* absolute, not relative */
231 5cedca1b 2004-05-15 devnull place
232 5cedca1b 2004-05-15 devnull | '(' position ')' { $$ = $2; }
233 5cedca1b 2004-05-15 devnull | expr ',' expr { $$ = makepos($1, $3); }
234 5cedca1b 2004-05-15 devnull | position '+' expr ',' expr { $$ = fixpos($1, $3, $5); }
235 5cedca1b 2004-05-15 devnull | position '-' expr ',' expr { $$ = fixpos($1, -$3, -$5); }
236 5cedca1b 2004-05-15 devnull | position '+' '(' expr ',' expr ')' { $$ = fixpos($1, $4, $6); }
237 5cedca1b 2004-05-15 devnull | position '-' '(' expr ',' expr ')' { $$ = fixpos($1, -$4, -$6); }
238 5cedca1b 2004-05-15 devnull | position '+' place { $$ = addpos($1, $3); }
239 5cedca1b 2004-05-15 devnull | position '-' place { $$ = subpos($1, $3); }
240 5cedca1b 2004-05-15 devnull | '(' place ',' place ')' { $$ = makepos(getcomp($2,DOTX), getcomp($4,DOTY)); }
241 5cedca1b 2004-05-15 devnull | expr LT position ',' position GT { $$ = makebetween($1, $3, $5); }
242 5cedca1b 2004-05-15 devnull | expr BETWEEN position AND position { $$ = makebetween($1, $3, $5); }
243 5cedca1b 2004-05-15 devnull ;
244 5cedca1b 2004-05-15 devnull
245 5cedca1b 2004-05-15 devnull place:
246 5cedca1b 2004-05-15 devnull PLACENAME { y = getvar($1); $$ = y.o; }
247 5cedca1b 2004-05-15 devnull | PLACENAME CORNER { y = getvar($1); $$ = getpos(y.o, $2); }
248 5cedca1b 2004-05-15 devnull | CORNER PLACENAME { y = getvar($2); $$ = getpos(y.o, $1); }
249 5cedca1b 2004-05-15 devnull | HERE { $$ = gethere(); }
250 5cedca1b 2004-05-15 devnull | last type { $$ = getlast($1, $2); }
251 5cedca1b 2004-05-15 devnull | last type CORNER { $$ = getpos(getlast($1, $2), $3); }
252 5cedca1b 2004-05-15 devnull | CORNER last type { $$ = getpos(getlast($2, $3), $1); }
253 5cedca1b 2004-05-15 devnull | NTH type { $$ = getfirst($1, $2); }
254 5cedca1b 2004-05-15 devnull | NTH type CORNER { $$ = getpos(getfirst($1, $2), $3); }
255 5cedca1b 2004-05-15 devnull | CORNER NTH type { $$ = getpos(getfirst($2, $3), $1); }
256 5cedca1b 2004-05-15 devnull | blockname
257 5cedca1b 2004-05-15 devnull | blockname CORNER { $$ = getpos($1, $2); }
258 5cedca1b 2004-05-15 devnull | CORNER blockname { $$ = getpos($2, $1); }
259 5cedca1b 2004-05-15 devnull ;
260 5cedca1b 2004-05-15 devnull
261 5cedca1b 2004-05-15 devnull blockname:
262 5cedca1b 2004-05-15 devnull last BLOCK '.' PLACENAME { $$ = getblock(getlast($1,$2), $4); }
263 5cedca1b 2004-05-15 devnull | NTH BLOCK '.' PLACENAME { $$ = getblock(getfirst($1,$2), $4); }
264 5cedca1b 2004-05-15 devnull | PLACENAME '.' PLACENAME { y = getvar($1); $$ = getblock(y.o, $3); }
265 5cedca1b 2004-05-15 devnull ;
266 5cedca1b 2004-05-15 devnull
267 5cedca1b 2004-05-15 devnull last:
268 5cedca1b 2004-05-15 devnull last LAST { $$ = $1 + 1; }
269 5cedca1b 2004-05-15 devnull | NTH LAST { $$ = $1; }
270 5cedca1b 2004-05-15 devnull | LAST { $$ = 1; }
271 5cedca1b 2004-05-15 devnull ;
272 5cedca1b 2004-05-15 devnull
273 5cedca1b 2004-05-15 devnull type:
274 5cedca1b 2004-05-15 devnull BOX
275 5cedca1b 2004-05-15 devnull | CIRCLE
276 5cedca1b 2004-05-15 devnull | ELLIPSE
277 5cedca1b 2004-05-15 devnull | ARC
278 5cedca1b 2004-05-15 devnull | LINE
279 5cedca1b 2004-05-15 devnull | ARROW
280 5cedca1b 2004-05-15 devnull | SPLINE
281 5cedca1b 2004-05-15 devnull | BLOCK
282 5cedca1b 2004-05-15 devnull ;
283 5cedca1b 2004-05-15 devnull
284 5cedca1b 2004-05-15 devnull expr:
285 5cedca1b 2004-05-15 devnull NUMBER
286 5cedca1b 2004-05-15 devnull | VARNAME { $$ = getfval($1); }
287 5cedca1b 2004-05-15 devnull | asgn
288 5cedca1b 2004-05-15 devnull | expr '+' expr { $$ = $1 + $3; }
289 5cedca1b 2004-05-15 devnull | expr '-' expr { $$ = $1 - $3; }
290 5cedca1b 2004-05-15 devnull | expr '*' expr { $$ = $1 * $3; }
291 5cedca1b 2004-05-15 devnull | expr '/' expr { if ($3 == 0.0) {
292 5cedca1b 2004-05-15 devnull ERROR "division by 0" WARNING; $3 = 1; }
293 5cedca1b 2004-05-15 devnull $$ = $1 / $3; }
294 5cedca1b 2004-05-15 devnull | expr '%' expr { if ((long)$3 == 0) {
295 5cedca1b 2004-05-15 devnull ERROR "mod division by 0" WARNING; $3 = 1; }
296 5cedca1b 2004-05-15 devnull $$ = (long)$1 % (long)$3; }
297 5cedca1b 2004-05-15 devnull | '-' expr %prec UMINUS { $$ = -$2; }
298 5cedca1b 2004-05-15 devnull | '+' expr %prec UMINUS { $$ = $2; }
299 5cedca1b 2004-05-15 devnull | '(' expr ')' { $$ = $2; }
300 5cedca1b 2004-05-15 devnull | place DOTX { $$ = getcomp($1, $2); }
301 5cedca1b 2004-05-15 devnull | place DOTY { $$ = getcomp($1, $2); }
302 5cedca1b 2004-05-15 devnull | place DOTHT { $$ = getcomp($1, $2); }
303 5cedca1b 2004-05-15 devnull | place DOTWID { $$ = getcomp($1, $2); }
304 5cedca1b 2004-05-15 devnull | place DOTRAD { $$ = getcomp($1, $2); }
305 5cedca1b 2004-05-15 devnull | PLACENAME '.' VARNAME { y = getvar($1); $$ = getblkvar(y.o, $3); }
306 5cedca1b 2004-05-15 devnull | last BLOCK '.' VARNAME { $$ = getblkvar(getlast($1,$2), $4); }
307 5cedca1b 2004-05-15 devnull | NTH BLOCK '.' VARNAME { $$ = getblkvar(getfirst($1,$2), $4); }
308 5cedca1b 2004-05-15 devnull | expr GT expr { $$ = $1 > $3; }
309 5cedca1b 2004-05-15 devnull | expr LT expr { $$ = $1 < $3; }
310 5cedca1b 2004-05-15 devnull | expr LE expr { $$ = $1 <= $3; }
311 5cedca1b 2004-05-15 devnull | expr GE expr { $$ = $1 >= $3; }
312 5cedca1b 2004-05-15 devnull | expr EQ expr { $$ = $1 == $3; }
313 5cedca1b 2004-05-15 devnull | expr NEQ expr { $$ = $1 != $3; }
314 5cedca1b 2004-05-15 devnull | expr ANDAND expr { $$ = $1 && $3; }
315 5cedca1b 2004-05-15 devnull | expr OROR expr { $$ = $1 || $3; }
316 5cedca1b 2004-05-15 devnull | NOT expr { $$ = !($2); }
317 5cedca1b 2004-05-15 devnull | LOG '(' expr ')' { $$ = Log10($3); }
318 5cedca1b 2004-05-15 devnull | EXP '(' expr ')' { $$ = Exp($3 * log(10.0)); }
319 5cedca1b 2004-05-15 devnull | expr '^' expr { $$ = pow($1, $3); }
320 5cedca1b 2004-05-15 devnull | SIN '(' expr ')' { $$ = sin($3); }
321 5cedca1b 2004-05-15 devnull | COS '(' expr ')' { $$ = cos($3); }
322 5cedca1b 2004-05-15 devnull | ATAN2 '(' expr ',' expr ')' { $$ = atan2($3, $5); }
323 5cedca1b 2004-05-15 devnull | SQRT '(' expr ')' { $$ = Sqrt($3); }
324 5cedca1b 2004-05-15 devnull | RAND '(' ')' { $$ = (float)rand() / 32767.0; /* might be 2^31-1 */ }
325 5cedca1b 2004-05-15 devnull | MAX '(' expr ',' expr ')' { $$ = $3 >= $5 ? $3 : $5; }
326 5cedca1b 2004-05-15 devnull | MIN '(' expr ',' expr ')' { $$ = $3 <= $5 ? $3 : $5; }
327 5cedca1b 2004-05-15 devnull | INT '(' expr ')' { $$ = (long) $3; }
328 5cedca1b 2004-05-15 devnull ;