Blame


1 5cedca1b 2004-05-15 devnull %{
2 5cedca1b 2004-05-15 devnull #include <stdio.h>
3 5cedca1b 2004-05-15 devnull #include <math.h>
4 5cedca1b 2004-05-15 devnull #include <stdlib.h>
5 5cedca1b 2004-05-15 devnull #include <string.h>
6 5cedca1b 2004-05-15 devnull #include "grap.h"
7 5cedca1b 2004-05-15 devnull
8 cbeb0b26 2006-04-01 devnull /*#define RAND_MAX 32767 /* if your rand() returns bigger, change this too */
9 5cedca1b 2004-05-15 devnull
10 5cedca1b 2004-05-15 devnull extern int yylex(void);
11 5cedca1b 2004-05-15 devnull extern int yyparse(void);
12 5cedca1b 2004-05-15 devnull
13 5cedca1b 2004-05-15 devnull %}
14 5cedca1b 2004-05-15 devnull
15 5cedca1b 2004-05-15 devnull %token <i> FRAME TICKS GRID LABEL COORD
16 5cedca1b 2004-05-15 devnull %token <i> LINE ARROW CIRCLE DRAW NEW PLOT NEXT
17 5cedca1b 2004-05-15 devnull %token <p> PIC
18 5cedca1b 2004-05-15 devnull %token <i> COPY THRU UNTIL
19 5cedca1b 2004-05-15 devnull %token <i> FOR FROM TO BY AT WITH
20 5cedca1b 2004-05-15 devnull %token <i> IF
21 5cedca1b 2004-05-15 devnull %token <p> GRAPH THEN ELSE DOSTR
22 5cedca1b 2004-05-15 devnull %token <i> DOT DASH INVIS SOLID
23 5cedca1b 2004-05-15 devnull %token <i> TEXT JUST SIZE
24 5cedca1b 2004-05-15 devnull %token <i> LOG EXP SIN COS ATAN2 SQRT RAND MAX MIN INT PRINT SPRINTF
25 5cedca1b 2004-05-15 devnull %token <i> X Y SIDE IN OUT OFF UP DOWN ACROSS
26 5cedca1b 2004-05-15 devnull %token <i> HEIGHT WIDTH RADIUS
27 5cedca1b 2004-05-15 devnull %token <f> NUMBER
28 5cedca1b 2004-05-15 devnull %token <op> NAME VARNAME DEFNAME
29 5cedca1b 2004-05-15 devnull %token <p> STRING
30 5cedca1b 2004-05-15 devnull %token <i> ST '(' ')' ','
31 5cedca1b 2004-05-15 devnull
32 5cedca1b 2004-05-15 devnull %right <f> '='
33 5cedca1b 2004-05-15 devnull %left <f> OR
34 5cedca1b 2004-05-15 devnull %left <f> AND
35 5cedca1b 2004-05-15 devnull %nonassoc <f> GT LT LE GE EQ NE
36 5cedca1b 2004-05-15 devnull %left <f> '+' '-'
37 5cedca1b 2004-05-15 devnull %left <f> '*' '/' '%'
38 5cedca1b 2004-05-15 devnull %right <f> UMINUS NOT
39 5cedca1b 2004-05-15 devnull %right <f> '^'
40 5cedca1b 2004-05-15 devnull
41 5cedca1b 2004-05-15 devnull %type <f> expr optexpr if_expr number assign
42 5cedca1b 2004-05-15 devnull %type <i> optop
43 5cedca1b 2004-05-15 devnull %type <p> optstring if
44 5cedca1b 2004-05-15 devnull %type <op> optname iterator name
45 5cedca1b 2004-05-15 devnull %type <pt> point
46 5cedca1b 2004-05-15 devnull %type <i> side optside numlist comma linetype drawtype
47 5cedca1b 2004-05-15 devnull %type <ap> linedesc optdesc stringlist string stringattr sattrlist exprlist
48 5cedca1b 2004-05-15 devnull %type <i> frameitem framelist coordlog
49 5cedca1b 2004-05-15 devnull %type <f> string_expr
50 5cedca1b 2004-05-15 devnull
51 5cedca1b 2004-05-15 devnull %%
52 5cedca1b 2004-05-15 devnull
53 5cedca1b 2004-05-15 devnull top:
54 5cedca1b 2004-05-15 devnull graphseq { if (codegen && !synerr) graph((char *) 0); }
55 5cedca1b 2004-05-15 devnull | /* empty */ { codegen = 0; }
56 5cedca1b 2004-05-15 devnull | error { codegen = 0; ERROR "syntax error" WARNING; }
57 5cedca1b 2004-05-15 devnull ;
58 5cedca1b 2004-05-15 devnull
59 5cedca1b 2004-05-15 devnull graphseq:
60 5cedca1b 2004-05-15 devnull statlist
61 5cedca1b 2004-05-15 devnull | graph statlist
62 5cedca1b 2004-05-15 devnull | graphseq graph statlist
63 5cedca1b 2004-05-15 devnull ;
64 5cedca1b 2004-05-15 devnull graph:
65 5cedca1b 2004-05-15 devnull GRAPH { graph($1); endstat(); }
66 5cedca1b 2004-05-15 devnull ;
67 5cedca1b 2004-05-15 devnull
68 5cedca1b 2004-05-15 devnull statlist:
69 5cedca1b 2004-05-15 devnull ST
70 5cedca1b 2004-05-15 devnull | stat ST { endstat(); }
71 5cedca1b 2004-05-15 devnull | statlist stat ST { endstat(); }
72 5cedca1b 2004-05-15 devnull ;
73 5cedca1b 2004-05-15 devnull
74 5cedca1b 2004-05-15 devnull stat:
75 5cedca1b 2004-05-15 devnull FRAME framelist { codegen = 1; }
76 5cedca1b 2004-05-15 devnull | ticks { codegen = 1; }
77 5cedca1b 2004-05-15 devnull | grid { codegen = 1; }
78 5cedca1b 2004-05-15 devnull | label { codegen = 1; }
79 5cedca1b 2004-05-15 devnull | coord
80 5cedca1b 2004-05-15 devnull | plot { codegen = 1; }
81 5cedca1b 2004-05-15 devnull | line { codegen = 1; }
82 5cedca1b 2004-05-15 devnull | circle { codegen = 1; }
83 5cedca1b 2004-05-15 devnull | draw
84 5cedca1b 2004-05-15 devnull | next { codegen = 1; }
85 5cedca1b 2004-05-15 devnull | PIC { codegen = 1; pic($1); }
86 5cedca1b 2004-05-15 devnull | for
87 5cedca1b 2004-05-15 devnull | if
88 5cedca1b 2004-05-15 devnull | copy
89 5cedca1b 2004-05-15 devnull | numlist { codegen = 1; numlist(); }
90 5cedca1b 2004-05-15 devnull | assign
91 5cedca1b 2004-05-15 devnull | PRINT expr { fprintf(stderr, "\t%g\n", $2); }
92 5cedca1b 2004-05-15 devnull | PRINT string { fprintf(stderr, "\t%s\n", $2->sval); freeattr($2); }
93 5cedca1b 2004-05-15 devnull | /* empty */
94 5cedca1b 2004-05-15 devnull ;
95 5cedca1b 2004-05-15 devnull
96 5cedca1b 2004-05-15 devnull numlist:
97 5cedca1b 2004-05-15 devnull number { savenum(0, $1); $$ = 1; }
98 5cedca1b 2004-05-15 devnull | numlist number { savenum($1, $2); $$ = $1+1; }
99 5cedca1b 2004-05-15 devnull | numlist comma number { savenum($1, $3); $$ = $1+1; }
100 5cedca1b 2004-05-15 devnull ;
101 5cedca1b 2004-05-15 devnull number:
102 5cedca1b 2004-05-15 devnull NUMBER
103 5cedca1b 2004-05-15 devnull | '-' NUMBER %prec UMINUS { $$ = -$2; }
104 5cedca1b 2004-05-15 devnull | '+' NUMBER %prec UMINUS { $$ = $2; }
105 5cedca1b 2004-05-15 devnull ;
106 5cedca1b 2004-05-15 devnull
107 5cedca1b 2004-05-15 devnull label:
108 5cedca1b 2004-05-15 devnull LABEL optside stringlist lablist { label($2, $3); }
109 5cedca1b 2004-05-15 devnull ;
110 5cedca1b 2004-05-15 devnull lablist:
111 5cedca1b 2004-05-15 devnull labattr
112 5cedca1b 2004-05-15 devnull | lablist labattr
113 5cedca1b 2004-05-15 devnull | /* empty */
114 5cedca1b 2004-05-15 devnull ;
115 5cedca1b 2004-05-15 devnull labattr:
116 5cedca1b 2004-05-15 devnull UP expr { labelmove($1, $2); }
117 5cedca1b 2004-05-15 devnull | DOWN expr { labelmove($1, $2); }
118 5cedca1b 2004-05-15 devnull | SIDE expr { labelmove($1, $2); /* LEFT or RIGHT only */ }
119 5cedca1b 2004-05-15 devnull | WIDTH expr { labelwid($2); }
120 5cedca1b 2004-05-15 devnull ;
121 5cedca1b 2004-05-15 devnull
122 5cedca1b 2004-05-15 devnull framelist:
123 5cedca1b 2004-05-15 devnull framelist frameitem
124 5cedca1b 2004-05-15 devnull | /* empty */ { $$ = 0; }
125 5cedca1b 2004-05-15 devnull ;
126 5cedca1b 2004-05-15 devnull frameitem:
127 5cedca1b 2004-05-15 devnull HEIGHT expr { frameht($2); }
128 5cedca1b 2004-05-15 devnull | WIDTH expr { framewid($2); }
129 5cedca1b 2004-05-15 devnull | side linedesc { frameside($1, $2); }
130 5cedca1b 2004-05-15 devnull | linedesc { frameside(0, $1); }
131 5cedca1b 2004-05-15 devnull ;
132 5cedca1b 2004-05-15 devnull side:
133 5cedca1b 2004-05-15 devnull SIDE
134 5cedca1b 2004-05-15 devnull ;
135 5cedca1b 2004-05-15 devnull optside:
136 5cedca1b 2004-05-15 devnull side
137 5cedca1b 2004-05-15 devnull | /* empty */ { $$ = 0; }
138 5cedca1b 2004-05-15 devnull ;
139 5cedca1b 2004-05-15 devnull
140 5cedca1b 2004-05-15 devnull linedesc:
141 5cedca1b 2004-05-15 devnull linetype optexpr { $$ = makeattr($1, $2, (char *) 0, 0, 0); }
142 5cedca1b 2004-05-15 devnull ;
143 5cedca1b 2004-05-15 devnull linetype:
144 5cedca1b 2004-05-15 devnull DOT | DASH | SOLID | INVIS
145 5cedca1b 2004-05-15 devnull ;
146 5cedca1b 2004-05-15 devnull optdesc:
147 5cedca1b 2004-05-15 devnull linedesc
148 5cedca1b 2004-05-15 devnull | /* empty */ { $$ = makeattr(0, 0.0, (char *) 0, 0, 0); }
149 5cedca1b 2004-05-15 devnull ;
150 5cedca1b 2004-05-15 devnull
151 5cedca1b 2004-05-15 devnull ticks:
152 5cedca1b 2004-05-15 devnull TICKS tickdesc { ticks(); }
153 5cedca1b 2004-05-15 devnull ;
154 5cedca1b 2004-05-15 devnull tickdesc:
155 5cedca1b 2004-05-15 devnull tickattr
156 5cedca1b 2004-05-15 devnull | tickdesc tickattr
157 5cedca1b 2004-05-15 devnull ;
158 5cedca1b 2004-05-15 devnull tickattr:
159 5cedca1b 2004-05-15 devnull side { tickside($1); }
160 5cedca1b 2004-05-15 devnull | IN expr { tickdir(IN, $2, 1); }
161 5cedca1b 2004-05-15 devnull | OUT expr { tickdir(OUT, $2, 1); }
162 5cedca1b 2004-05-15 devnull | IN { tickdir(IN, 0.0, 0); }
163 5cedca1b 2004-05-15 devnull | OUT { tickdir(OUT, 0.0, 0); }
164 5cedca1b 2004-05-15 devnull | AT optname ticklist { setlist(); ticklist($2, AT); }
165 5cedca1b 2004-05-15 devnull | iterator { setlist(); ticklist($1, AT); }
166 5cedca1b 2004-05-15 devnull | side OFF { tickoff($1); }
167 5cedca1b 2004-05-15 devnull | OFF { tickoff(LEFT|RIGHT|TOP|BOT); }
168 5cedca1b 2004-05-15 devnull | labattr
169 5cedca1b 2004-05-15 devnull ;
170 5cedca1b 2004-05-15 devnull ticklist:
171 5cedca1b 2004-05-15 devnull tickpoint
172 5cedca1b 2004-05-15 devnull | ticklist comma tickpoint
173 5cedca1b 2004-05-15 devnull ;
174 5cedca1b 2004-05-15 devnull tickpoint:
175 5cedca1b 2004-05-15 devnull expr { savetick($1, (char *) 0); }
176 5cedca1b 2004-05-15 devnull | expr string { savetick($1, $2->sval); }
177 5cedca1b 2004-05-15 devnull ;
178 5cedca1b 2004-05-15 devnull iterator:
179 5cedca1b 2004-05-15 devnull FROM optname expr TO optname expr BY optop expr optstring
180 5cedca1b 2004-05-15 devnull { iterator($3, $6, $8, $9, $10); $$ = $2; }
181 5cedca1b 2004-05-15 devnull | FROM optname expr TO optname expr optstring
182 5cedca1b 2004-05-15 devnull { iterator($3, $6, '+', 1.0, $7); $$ = $2; }
183 5cedca1b 2004-05-15 devnull ;
184 5cedca1b 2004-05-15 devnull optop:
185 5cedca1b 2004-05-15 devnull '+' { $$ = '+'; }
186 5cedca1b 2004-05-15 devnull | '-' { $$ = '-'; }
187 5cedca1b 2004-05-15 devnull | '*' { $$ = '*'; }
188 5cedca1b 2004-05-15 devnull | '/' { $$ = '/'; }
189 5cedca1b 2004-05-15 devnull | /* empty */ { $$ = ' '; }
190 5cedca1b 2004-05-15 devnull ;
191 5cedca1b 2004-05-15 devnull optstring:
192 5cedca1b 2004-05-15 devnull string { $$ = $1->sval; }
193 5cedca1b 2004-05-15 devnull | /* empty */ { $$ = (char *) 0; }
194 5cedca1b 2004-05-15 devnull ;
195 5cedca1b 2004-05-15 devnull
196 5cedca1b 2004-05-15 devnull grid:
197 5cedca1b 2004-05-15 devnull GRID griddesc { ticks(); }
198 5cedca1b 2004-05-15 devnull ;
199 5cedca1b 2004-05-15 devnull griddesc:
200 5cedca1b 2004-05-15 devnull gridattr
201 5cedca1b 2004-05-15 devnull | griddesc gridattr
202 5cedca1b 2004-05-15 devnull ;
203 5cedca1b 2004-05-15 devnull gridattr:
204 5cedca1b 2004-05-15 devnull side { tickside($1); }
205 5cedca1b 2004-05-15 devnull | X { tickside(BOT); }
206 5cedca1b 2004-05-15 devnull | Y { tickside(LEFT); }
207 5cedca1b 2004-05-15 devnull | linedesc { griddesc($1); }
208 5cedca1b 2004-05-15 devnull | AT optname ticklist { setlist(); gridlist($2); }
209 5cedca1b 2004-05-15 devnull | iterator { setlist(); gridlist($1); }
210 5cedca1b 2004-05-15 devnull | TICKS OFF { gridtickoff(); }
211 5cedca1b 2004-05-15 devnull | OFF { gridtickoff(); }
212 5cedca1b 2004-05-15 devnull | labattr
213 5cedca1b 2004-05-15 devnull ;
214 5cedca1b 2004-05-15 devnull
215 5cedca1b 2004-05-15 devnull line:
216 5cedca1b 2004-05-15 devnull LINE FROM point TO point optdesc { line($1, $3, $5, $6); }
217 5cedca1b 2004-05-15 devnull | LINE optdesc FROM point TO point { line($1, $4, $6, $2); }
218 5cedca1b 2004-05-15 devnull ;
219 5cedca1b 2004-05-15 devnull circle:
220 5cedca1b 2004-05-15 devnull CIRCLE RADIUS expr AT point { circle($3, $5); }
221 5cedca1b 2004-05-15 devnull | CIRCLE AT point RADIUS expr { circle($5, $3); }
222 5cedca1b 2004-05-15 devnull | CIRCLE AT point { circle(0.0, $3); }
223 5cedca1b 2004-05-15 devnull ;
224 5cedca1b 2004-05-15 devnull
225 5cedca1b 2004-05-15 devnull stringlist:
226 5cedca1b 2004-05-15 devnull string
227 5cedca1b 2004-05-15 devnull | stringlist string { $$ = addattr($1, $2); }
228 5cedca1b 2004-05-15 devnull ;
229 5cedca1b 2004-05-15 devnull string:
230 5cedca1b 2004-05-15 devnull STRING sattrlist { $$ = makesattr($1); }
231 5cedca1b 2004-05-15 devnull | SPRINTF '(' STRING ')' sattrlist
232 5cedca1b 2004-05-15 devnull { $$ = makesattr(sprntf($3, (Attr*) 0)); }
233 5cedca1b 2004-05-15 devnull | SPRINTF '(' STRING ',' exprlist ')' sattrlist
234 5cedca1b 2004-05-15 devnull { $$ = makesattr(sprntf($3, $5)); }
235 5cedca1b 2004-05-15 devnull ;
236 5cedca1b 2004-05-15 devnull exprlist:
237 5cedca1b 2004-05-15 devnull expr { $$ = makefattr(NUMBER, $1); }
238 5cedca1b 2004-05-15 devnull | exprlist ',' expr { $$ = addattr($1, makefattr(NUMBER, $3)); }
239 5cedca1b 2004-05-15 devnull ;
240 5cedca1b 2004-05-15 devnull sattrlist:
241 5cedca1b 2004-05-15 devnull stringattr
242 5cedca1b 2004-05-15 devnull | sattrlist stringattr
243 5cedca1b 2004-05-15 devnull | /* empty */ { $$ = (Attr *) 0; }
244 5cedca1b 2004-05-15 devnull ;
245 5cedca1b 2004-05-15 devnull stringattr:
246 5cedca1b 2004-05-15 devnull JUST { setjust($1); }
247 5cedca1b 2004-05-15 devnull | SIZE optop expr { setsize($2, $3); }
248 5cedca1b 2004-05-15 devnull ;
249 5cedca1b 2004-05-15 devnull
250 5cedca1b 2004-05-15 devnull coord:
251 5cedca1b 2004-05-15 devnull COORD optname coordlist { coord($2); }
252 5cedca1b 2004-05-15 devnull | COORD optname { resetcoord($2); }
253 5cedca1b 2004-05-15 devnull ;
254 5cedca1b 2004-05-15 devnull coordlist:
255 5cedca1b 2004-05-15 devnull coorditem
256 5cedca1b 2004-05-15 devnull | coordlist coorditem
257 5cedca1b 2004-05-15 devnull ;
258 5cedca1b 2004-05-15 devnull coorditem:
259 5cedca1b 2004-05-15 devnull coordlog { coordlog($1); }
260 5cedca1b 2004-05-15 devnull | X point { coord_x($2); }
261 5cedca1b 2004-05-15 devnull | Y point { coord_y($2); }
262 5cedca1b 2004-05-15 devnull | X optname expr TO expr { coord_x(makepoint($2, $3, $5)); }
263 5cedca1b 2004-05-15 devnull | Y optname expr TO expr { coord_y(makepoint($2, $3, $5)); }
264 5cedca1b 2004-05-15 devnull | X FROM optname expr TO expr { coord_x(makepoint($3, $4, $6)); }
265 5cedca1b 2004-05-15 devnull | Y FROM optname expr TO expr { coord_y(makepoint($3, $4, $6)); }
266 5cedca1b 2004-05-15 devnull ;
267 5cedca1b 2004-05-15 devnull coordlog:
268 5cedca1b 2004-05-15 devnull LOG X { $$ = XFLAG; }
269 5cedca1b 2004-05-15 devnull | LOG Y { $$ = YFLAG; }
270 5cedca1b 2004-05-15 devnull | LOG X LOG Y { $$ = XFLAG|YFLAG; }
271 5cedca1b 2004-05-15 devnull | LOG Y LOG X { $$ = XFLAG|YFLAG; }
272 5cedca1b 2004-05-15 devnull | LOG LOG { $$ = XFLAG|YFLAG; }
273 5cedca1b 2004-05-15 devnull ;
274 5cedca1b 2004-05-15 devnull
275 5cedca1b 2004-05-15 devnull plot:
276 5cedca1b 2004-05-15 devnull stringlist AT point { plot($1, $3); }
277 5cedca1b 2004-05-15 devnull | PLOT stringlist AT point { plot($2, $4); }
278 5cedca1b 2004-05-15 devnull | PLOT expr optstring AT point { plotnum($2, $3, $5); }
279 5cedca1b 2004-05-15 devnull ;
280 5cedca1b 2004-05-15 devnull
281 5cedca1b 2004-05-15 devnull draw:
282 5cedca1b 2004-05-15 devnull drawtype optname linedesc { drawdesc($1, $2, $3, (char *) 0); }
283 5cedca1b 2004-05-15 devnull | drawtype optname optdesc string { drawdesc($1, $2, $3, $4->sval); }
284 5cedca1b 2004-05-15 devnull | drawtype optname string optdesc { drawdesc($1, $2, $4, $3->sval); }
285 5cedca1b 2004-05-15 devnull ;
286 5cedca1b 2004-05-15 devnull drawtype:
287 5cedca1b 2004-05-15 devnull DRAW
288 5cedca1b 2004-05-15 devnull | NEW
289 5cedca1b 2004-05-15 devnull ;
290 5cedca1b 2004-05-15 devnull
291 5cedca1b 2004-05-15 devnull next:
292 5cedca1b 2004-05-15 devnull NEXT optname AT point optdesc { next($2, $4, $5); }
293 5cedca1b 2004-05-15 devnull
294 5cedca1b 2004-05-15 devnull copy:
295 5cedca1b 2004-05-15 devnull COPY copylist { copy(); }
296 5cedca1b 2004-05-15 devnull ;
297 5cedca1b 2004-05-15 devnull copylist:
298 5cedca1b 2004-05-15 devnull copyattr
299 5cedca1b 2004-05-15 devnull | copylist copyattr
300 5cedca1b 2004-05-15 devnull ;
301 5cedca1b 2004-05-15 devnull copyattr:
302 5cedca1b 2004-05-15 devnull string { copyfile($1->sval); }
303 5cedca1b 2004-05-15 devnull | THRU DEFNAME { copydef($2); }
304 5cedca1b 2004-05-15 devnull | UNTIL string { copyuntil($2->sval); }
305 5cedca1b 2004-05-15 devnull ;
306 5cedca1b 2004-05-15 devnull
307 5cedca1b 2004-05-15 devnull for:
308 5cedca1b 2004-05-15 devnull FOR name FROM expr TO expr BY optop expr DOSTR
309 5cedca1b 2004-05-15 devnull { forloop($2, $4, $6, $8, $9, $10); }
310 5cedca1b 2004-05-15 devnull | FOR name FROM expr TO expr DOSTR
311 5cedca1b 2004-05-15 devnull { forloop($2, $4, $6, '+', 1.0, $7); }
312 5cedca1b 2004-05-15 devnull | FOR name '=' expr TO expr BY optop expr DOSTR
313 5cedca1b 2004-05-15 devnull { forloop($2, $4, $6, $8, $9, $10); }
314 5cedca1b 2004-05-15 devnull | FOR name '=' expr TO expr DOSTR
315 5cedca1b 2004-05-15 devnull { forloop($2, $4, $6, '+', 1.0, $7); }
316 5cedca1b 2004-05-15 devnull ;
317 5cedca1b 2004-05-15 devnull
318 5cedca1b 2004-05-15 devnull if:
319 5cedca1b 2004-05-15 devnull IF if_expr THEN ELSE { $$ = ifstat($2, $3, $4); }
320 5cedca1b 2004-05-15 devnull | IF if_expr THEN { $$ = ifstat($2, $3, (char *) 0); }
321 5cedca1b 2004-05-15 devnull ;
322 5cedca1b 2004-05-15 devnull if_expr:
323 5cedca1b 2004-05-15 devnull expr
324 5cedca1b 2004-05-15 devnull | string_expr
325 5cedca1b 2004-05-15 devnull | if_expr AND string_expr { $$ = $1 && $3; }
326 5cedca1b 2004-05-15 devnull | if_expr OR string_expr { $$ = $1 || $3; }
327 5cedca1b 2004-05-15 devnull ;
328 5cedca1b 2004-05-15 devnull string_expr:
329 5cedca1b 2004-05-15 devnull STRING EQ STRING { $$ = strcmp($1,$3) == 0; free($1); free($3); }
330 5cedca1b 2004-05-15 devnull | STRING NE STRING { $$ = strcmp($1,$3) != 0; free($1); free($3); }
331 5cedca1b 2004-05-15 devnull ;
332 5cedca1b 2004-05-15 devnull
333 5cedca1b 2004-05-15 devnull point:
334 5cedca1b 2004-05-15 devnull optname expr comma expr { $$ = makepoint($1, $2, $4); }
335 5cedca1b 2004-05-15 devnull | optname '(' expr comma expr ')' { $$ = makepoint($1, $3, $5); }
336 5cedca1b 2004-05-15 devnull ;
337 5cedca1b 2004-05-15 devnull comma:
338 5cedca1b 2004-05-15 devnull ',' { $$ = ','; }
339 5cedca1b 2004-05-15 devnull ;
340 5cedca1b 2004-05-15 devnull
341 5cedca1b 2004-05-15 devnull optname:
342 5cedca1b 2004-05-15 devnull NAME { $$ = $1; }
343 5cedca1b 2004-05-15 devnull | /* empty */ { $$ = lookup(curr_coord, 1); }
344 5cedca1b 2004-05-15 devnull ;
345 5cedca1b 2004-05-15 devnull
346 5cedca1b 2004-05-15 devnull expr:
347 5cedca1b 2004-05-15 devnull NUMBER
348 5cedca1b 2004-05-15 devnull | assign
349 5cedca1b 2004-05-15 devnull | '(' string_expr ')' { $$ = $2; }
350 5cedca1b 2004-05-15 devnull | VARNAME { $$ = getvar($1); }
351 5cedca1b 2004-05-15 devnull | expr '+' expr { $$ = $1 + $3; }
352 5cedca1b 2004-05-15 devnull | expr '-' expr { $$ = $1 - $3; }
353 5cedca1b 2004-05-15 devnull | expr '*' expr { $$ = $1 * $3; }
354 5cedca1b 2004-05-15 devnull | expr '/' expr { if ($3 == 0.0) {
355 5cedca1b 2004-05-15 devnull ERROR "division by 0" WARNING; $3 = 1; }
356 5cedca1b 2004-05-15 devnull $$ = $1 / $3; }
357 5cedca1b 2004-05-15 devnull | expr '%' expr { if ((long)$3 == 0) {
358 5cedca1b 2004-05-15 devnull ERROR "mod division by 0" WARNING; $3 = 1; }
359 5cedca1b 2004-05-15 devnull $$ = (long)$1 % (long)$3; }
360 5cedca1b 2004-05-15 devnull | '-' expr %prec UMINUS { $$ = -$2; }
361 5cedca1b 2004-05-15 devnull | '+' expr %prec UMINUS { $$ = $2; }
362 5cedca1b 2004-05-15 devnull | '(' expr ')' { $$ = $2; }
363 5cedca1b 2004-05-15 devnull | LOG '(' expr ')' { $$ = Log10($3); }
364 5cedca1b 2004-05-15 devnull | EXP '(' expr ')' { $$ = Exp($3 * log(10.0)); }
365 5cedca1b 2004-05-15 devnull | expr '^' expr { $$ = pow($1, $3); }
366 5cedca1b 2004-05-15 devnull | SIN '(' expr ')' { $$ = sin($3); }
367 5cedca1b 2004-05-15 devnull | COS '(' expr ')' { $$ = cos($3); }
368 5cedca1b 2004-05-15 devnull | ATAN2 '(' expr ',' expr ')' { $$ = atan2($3, $5); }
369 5cedca1b 2004-05-15 devnull | SQRT '(' expr ')' { $$ = Sqrt($3); }
370 5cedca1b 2004-05-15 devnull | RAND '(' ')' { $$ = (double)rand() / (double)RAND_MAX; }
371 5cedca1b 2004-05-15 devnull | MAX '(' expr ',' expr ')' { $$ = $3 >= $5 ? $3 : $5; }
372 5cedca1b 2004-05-15 devnull | MIN '(' expr ',' expr ')' { $$ = $3 <= $5 ? $3 : $5; }
373 5cedca1b 2004-05-15 devnull | INT '(' expr ')' { $$ = (long) $3; }
374 5cedca1b 2004-05-15 devnull | expr GT expr { $$ = $1 > $3; }
375 5cedca1b 2004-05-15 devnull | expr LT expr { $$ = $1 < $3; }
376 5cedca1b 2004-05-15 devnull | expr LE expr { $$ = $1 <= $3; }
377 5cedca1b 2004-05-15 devnull | expr GE expr { $$ = $1 >= $3; }
378 5cedca1b 2004-05-15 devnull | expr EQ expr { $$ = $1 == $3; }
379 5cedca1b 2004-05-15 devnull | expr NE expr { $$ = $1 != $3; }
380 5cedca1b 2004-05-15 devnull | expr AND expr { $$ = $1 && $3; }
381 5cedca1b 2004-05-15 devnull | expr OR expr { $$ = $1 || $3; }
382 5cedca1b 2004-05-15 devnull | NOT expr { $$ = !($2); }
383 5cedca1b 2004-05-15 devnull ;
384 5cedca1b 2004-05-15 devnull assign:
385 5cedca1b 2004-05-15 devnull name '=' expr { $$ = setvar($1, $3); }
386 5cedca1b 2004-05-15 devnull ;
387 5cedca1b 2004-05-15 devnull
388 5cedca1b 2004-05-15 devnull name:
389 5cedca1b 2004-05-15 devnull NAME
390 5cedca1b 2004-05-15 devnull | VARNAME
391 5cedca1b 2004-05-15 devnull ;
392 5cedca1b 2004-05-15 devnull
393 5cedca1b 2004-05-15 devnull optexpr:
394 5cedca1b 2004-05-15 devnull expr
395 5cedca1b 2004-05-15 devnull | /* empty */ { $$ = 0.0; }
396 5cedca1b 2004-05-15 devnull ;