Date: | 2010-12-14 23:50:53 (13 years 3 months ago) |
---|---|
Author: | Werner Almesberger |
Commit: | 68d5eff7cd3cf4ed29eb1b5f0b2abb0e3c71adf9 |
Message: | cameo: split numbers into dimensions and "bare" numbers - lang.l, lang.y (MIL2MM): moved unit conversion from lang.l to lang.y - lang.l, lang.y: instead of returning dimensions and numbers as NUMBER, return as NUM_EXP_<unit> for numbers with an explicit unit, and as NUM_IMP_<unit> if the unit is implied - lang.y (dimen): perform unit conversion as needed - lang.y (number): never convert and only accept implicit dimensions - lang.y: change all uses of NUMBER to "dimen", except for the multipliers in "array", where we can now use "number" - lang.y: removed comment about "array" only working in metric mode |
Files: |
cameo/lang.l (2 diffs) cameo/lang.y (6 diffs) |
Change Details
cameo/lang.l | ||
---|---|---|
24 | 24 | static int metric = 1; |
25 | 25 | static int file_name_follows = 0; |
26 | 26 | |
27 | ||
28 | #define MIL2MM(mil) ((mil)/1000*25.4) | |
29 | ||
30 | 27 | %} |
31 | 28 | |
32 | 29 | /* file name can contain any characters */ |
... | ... | |
69 | 66 | {NUM}mm { yylval.num = strtod(yytext, NULL); |
70 | 67 | if (file_name_follows) |
71 | 68 | BEGIN(FILENAME); |
72 | return NUMBER; } | |
73 | {NUM}mil { yylval.num = MIL2MM(strtod(yytext, NULL)); | |
69 | return NUM_EXP_MM; } | |
70 | {NUM}mil { yylval.num = strtod(yytext, NULL); | |
74 | 71 | if (file_name_follows) |
75 | 72 | BEGIN(FILENAME); |
76 | return NUMBER; } | |
73 | return NUM_EXP_MIL; } | |
77 | 74 | {NUM} { yylval.num = strtod(yytext, NULL); |
78 | if (!metric) | |
79 | yylval.num = MIL2MM(yylval.num); | |
80 | 75 | if (file_name_follows) |
81 | 76 | BEGIN(FILENAME); |
82 | return NUMBER; } | |
77 | return metric ? NUM_IMP_MM : NUM_IMP_MIL; } | |
83 | 78 | |
84 | 79 | <FILENAME>[^ \t\n]+([^\t\n]*[^ \t\n]+)? { |
85 | 80 | BEGIN(INITIAL); |
cameo/lang.y | ||
---|---|---|
26 | 26 | static struct path *paths = NULL; |
27 | 27 | |
28 | 28 | |
29 | #define MIL2MM(mil) ((mil)/1000*25.4) | |
30 | ||
31 | ||
29 | 32 | static void add_paths(struct path *new) |
30 | 33 | { |
31 | 34 | struct path **anchor = &paths; |
... | ... | |
118 | 121 | %token TOK_GERBER TOK_GNUPLOT TOK_WRITE |
119 | 122 | %token TOK_DOG |
120 | 123 | |
121 | %token <num> NUMBER REF | |
124 | %token <num> NUM_EXP_MIL NUM_EXP_MM NUM_IMP_MIL NUM_IMP_MM REF | |
122 | 125 | %token <str> STRING |
123 | 126 | |
124 | 127 | %type <str> opt_filename |
128 | %type <num> dimen number | |
125 | 129 | |
126 | 130 | %% |
127 | 131 | |
... | ... | |
130 | 134 | ; |
131 | 135 | |
132 | 136 | command: |
133 | TOK_ALIGN REF NUMBER NUMBER | |
137 | TOK_ALIGN REF dimen dimen | |
134 | 138 | { |
135 | 139 | align((int) $2, $3, $4); |
136 | 140 | } |
137 | | TOK_ALIGN REF NUMBER NUMBER NUMBER NUMBER | |
141 | | TOK_ALIGN REF dimen dimen dimen dimen | |
138 | 142 | { |
139 | 143 | int ref = $2; |
140 | 144 | double x, y; |
... | ... | |
147 | 151 | ref_pick_xy(ref, $3, $4, $5, $6, &x, &y); |
148 | 152 | align(ref, x, y); |
149 | 153 | } |
150 | | TOK_ARRAY NUMBER NUMBER NUMBER NUMBER | |
154 | | TOK_ARRAY dimen dimen number number | |
151 | 155 | { |
152 | 156 | double x = $2*$4; |
153 | 157 | double y = $3*$5; |
154 | 158 | |
155 | /* @@@ known bug: doesn't work if not in metric mode */ | |
156 | 159 | translate(x, y, 0); |
157 | 160 | } |
158 | 161 | | TOK_CLEAR |
... | ... | |
177 | 180 | { |
178 | 181 | tool_comp_paths(paths, 1); |
179 | 182 | } |
180 | | TOK_TRANSLATE NUMBER NUMBER | |
183 | | TOK_TRANSLATE dimen dimen | |
181 | 184 | { |
182 | 185 | translate($2, $3, 0); |
183 | 186 | xo += $2; |
184 | 187 | yo += $3; |
185 | 188 | } |
186 | | TOK_Z NUMBER | |
189 | | TOK_Z dimen | |
187 | 190 | { |
188 | 191 | zo += $2; |
189 | 192 | } |
190 | | TOK_Z NUMBER NUMBER | |
193 | | TOK_Z dimen dimen | |
191 | 194 | { |
192 | 195 | zo += $3-$2; |
193 | 196 | } |
194 | | TOK_GERBER NUMBER opt_filename | |
197 | | TOK_GERBER dimen opt_filename | |
195 | 198 | { |
196 | 199 | add_paths(gerber_read($3, $2/2)); |
197 | 200 | translate(xo, yo, 0); |
198 | 201 | } |
199 | | TOK_GNUPLOT NUMBER opt_filename | |
202 | | TOK_GNUPLOT dimen opt_filename | |
200 | 203 | { |
201 | 204 | add_paths(gnuplot_read($3, $2/2)); |
202 | 205 | translate(xo, yo, 0); |
... | ... | |
218 | 221 | $$ = $1; |
219 | 222 | } |
220 | 223 | ; |
224 | ||
225 | dimen: | |
226 | NUM_EXP_MM | |
227 | { | |
228 | $$ = $1; | |
229 | } | |
230 | | NUM_IMP_MM | |
231 | { | |
232 | $$ = $1; | |
233 | } | |
234 | | NUM_EXP_MIL | |
235 | { | |
236 | $$ = MIL2MM($1); | |
237 | } | |
238 | | NUM_IMP_MIL | |
239 | { | |
240 | $$ = MIL2MM($1); | |
241 | } | |
242 | ; | |
243 | ||
244 | number: | |
245 | NUM_IMP_MIL | |
246 | { | |
247 | $$ = $1; | |
248 | } | |
249 | | NUM_IMP_MM | |
250 | { | |
251 | $$ = $1; | |
252 | } | |
253 | ; |
Branches:
master