Branch data Line data Source code
1 : : /* -*-c++-*- */
2 : :
3 : : %{
4 : : /*
5 : : * parse_mdl.y - parser for an IC-CAP MDL data file
6 : : *
7 : : * Copyright (C) 2006 Stefan Jahn <stefan@lkcc.org>
8 : : *
9 : : * This is free software; you can redistribute it and/or modify
10 : : * it under the terms of the GNU General Public License as published by
11 : : * the Free Software Foundation; either version 2, or (at your option)
12 : : * any later version.
13 : : *
14 : : * This software is distributed in the hope that it will be useful,
15 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 : : * GNU General Public License for more details.
18 : : *
19 : : * You should have received a copy of the GNU General Public License
20 : : * along with this package; see the file COPYING. If not, write to
21 : : * the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
22 : : * Boston, MA 02110-1301, USA.
23 : : *
24 : : * $Id$
25 : : *
26 : : */
27 : :
28 : : #if HAVE_CONFIG_H
29 : : # include <config.h>
30 : : #endif
31 : :
32 : : #include <stdio.h>
33 : : #include <stdlib.h>
34 : : #include <string.h>
35 : : #include <ctype.h>
36 : :
37 : : #define YYERROR_VERBOSE 42
38 : : #define YYDEBUG 1
39 : : #define YYMAXDEPTH 1000000
40 : :
41 : : #define __NOEXTENSIONS__ 1
42 : :
43 : : #include "object.h"
44 : : #include "complex.h"
45 : : #include "vector.h"
46 : : #include "check_mdl.h"
47 : :
48 : : using namespace qucs;
49 : :
50 : : %}
51 : :
52 : : %name-prefix="mdl_"
53 : :
54 : : %token LINK
55 : : %token Identifier
56 : : %token String
57 : : %token InvalidCharacter
58 : : %token Real
59 : : %token t_LINK
60 : : %token t_VIEW
61 : : %token t_TABLE
62 : : %token t_PSTABLE
63 : : %token t_CNTABLE
64 : : %token t_OPTIMEDIT
65 : : %token t_BLKEDIT
66 : : %token t_HYPTABLE
67 : : %token t_ELEMENT
68 : : %token t_DATA
69 : : %token t_DATASET
70 : : %token t_DATASIZE
71 : : %token t_POINT
72 : : %token t_MEMBER
73 : : %token t_LIST
74 : : %token t_PLOTOPTIMIZEROPT
75 : : %token t_PLOTOPTIMIZERTRACESET
76 : : %token t_PLOTOPTIMIZERTRACEREGSET
77 : : %token t_PLOTOPTIMIZERTRACENATREGSET
78 : : %token t_PLOTERROR
79 : : %token t_TYPE
80 : : %token t_CIRCUITDECK
81 : : %token t_PARAM
82 : : %token t_RANGE
83 : : %token t_CONNPAIR
84 : : %token t_CALDATA
85 : : %token t_CALSET
86 : : %token t_TERM
87 : : %token t_APPLIC
88 : : %token t_SUBAPP
89 : : %token t_EDITSIZE
90 : : %token t_PLOTSIZE
91 : : %token t_OPTRANGE
92 : :
93 : : %union {
94 : : char * ident;
95 : : double f;
96 : : struct mdl_point_t * point;
97 : : struct mdl_dataset_t * dset;
98 : : struct mdl_datasize_t * dsize;
99 : : struct mdl_link_t * link;
100 : : struct mdl_data_t * data;
101 : : struct mdl_dcontent_t * dcontent;
102 : : struct mdl_lcontent_t * lcontent;
103 : : struct mdl_element_t * element;
104 : : struct mdl_hyptable_t * hyptable;
105 : : struct mdl_table_t * table;
106 : : }
107 : :
108 : : %type <ident> Identifier t_LINK String TYPE_Line
109 : : %type <point> POINT_Line PointList Point
110 : : %type <f> Real
111 : : %type <dset> DSContent DATASET_Definition
112 : : %type <link> LINK_Definition LinkList
113 : : %type <lcontent> LinkContent LinkContentList
114 : : %type <dcontent> DataContent DataContentList
115 : : %type <data> DATA_Definition
116 : : %type <dsize> DATASIZE_Line
117 : : %type <element> ELEMENT_Line HypTableContent HypTableContentList
118 : : %type <element> TableContent TableContentList
119 : : %type <hyptable> HYPTABLE_Definition
120 : : %type <table> TABLE_Definition
121 : :
122 : : %%
123 : :
124 : : Input:
125 : : LinkList {
126 : 0 : mdl_root = $1;
127 : : }
128 : : ;
129 : :
130 : 0 : LinkList: /* nothing */ { $$ = NULL; }
131 : : | LINK_Definition LinkList {
132 : 0 : $1->next = $2;
133 : 0 : $$ = $1;
134 : : }
135 : : ;
136 : :
137 : : TableContent:
138 : : VIEW_Line {
139 : 0 : $$ = NULL;
140 : : }
141 : : | ELEMENT_Line {
142 : 0 : $$ = $1;
143 : : }
144 : : | TABLE_Definition {
145 : 0 : $$ = NULL;
146 : : }
147 : : ;
148 : :
149 : 0 : TableContentList: /* nothing */ { $$ = NULL; }
150 : : | TableContent TableContentList {
151 [ # # ]: 0 : if ($1) {
152 : 0 : $1->next = $2;
153 : 0 : $$ = $1;
154 : : } else {
155 : 0 : $$ = $2;
156 : : }
157 : : }
158 : : ;
159 : :
160 : : HypTableContent:
161 : : VIEW_Line {
162 : 0 : $$ = NULL;
163 : : }
164 : : | ELEMENT_Line {
165 : 0 : $$ = $1;
166 : : }
167 : : ;
168 : :
169 : 0 : HypTableContentList: /* nothing */ { $$ = NULL; }
170 : : | HypTableContent HypTableContentList {
171 [ # # ]: 0 : if ($1) {
172 : 0 : $1->next = $2;
173 : 0 : $$ = $1;
174 : : } else {
175 : 0 : $$ = $2;
176 : : }
177 : : }
178 : : ;
179 : :
180 : : ConnTableContent:
181 : : CONNPAIR_Line
182 : : ;
183 : :
184 : : ConnTableContentList: /* nothing */ { }
185 : : | ConnTableContent ConnTableContentList {
186 : : }
187 : : ;
188 : :
189 : : OptEditContent:
190 : : VIEW_Line
191 : : | TABLE_Definition
192 : : ;
193 : :
194 : : OptEditContentList: /* nothing */ { }
195 : : | OptEditContent OptEditContentList {
196 : : }
197 : : ;
198 : :
199 : : LinkContent:
200 : : VIEW_Line {
201 : 0 : $$ = NULL;
202 : : }
203 : : | APPLIC_Line {
204 : 0 : $$ = NULL;
205 : : }
206 : : | SUBAPP_Line {
207 : 0 : $$ = NULL;
208 : : }
209 : : | LIST_Line {
210 : 0 : $$ = NULL;
211 : : }
212 : : | MEMBER_Line {
213 : 0 : $$ = NULL;
214 : : }
215 : : | TABLE_Definition {
216 : 0 : $$ = (struct mdl_lcontent_t *) calloc (sizeof (struct mdl_lcontent_t), 1);
217 : 0 : $$->type = t_TABLE;
218 : 0 : $$->table = $1;
219 : : }
220 : : | LINK_Definition {
221 : 0 : $$ = (struct mdl_lcontent_t *) calloc (sizeof (struct mdl_lcontent_t), 1);
222 : 0 : $$->type = t_LINK;
223 : 0 : $$->link = $1;
224 : : }
225 : : | DATA_Definition {
226 : 0 : $$ = (struct mdl_lcontent_t *) calloc (sizeof (struct mdl_lcontent_t), 1);
227 : 0 : $$->type = t_DATA;
228 : 0 : $$->data = $1;
229 : : }
230 : : ;
231 : :
232 : 0 : LinkContentList: /* nothing */ { $$ = NULL; }
233 : : | LinkContent LinkContentList {
234 [ # # ]: 0 : if ($1) {
235 : 0 : $1->next = $2;
236 : 0 : $$ = $1;
237 : : } else {
238 : 0 : $$ = $2;
239 : : }
240 : : }
241 : : ;
242 : :
243 : : DataContent:
244 : : PLOTOPTIMIZEROPT_Line {
245 : 0 : $$ = NULL;
246 : : }
247 : : | PLOTOPTIMIZERTRACESET_Line {
248 : 0 : $$ = NULL;
249 : : }
250 : : | PLOTOPTIMIZERTRACEREGSET_Line {
251 : 0 : $$ = NULL;
252 : : }
253 : : | PLOTOPTIMIZERTRACENATREGSET_Line {
254 : 0 : $$ = NULL;
255 : : }
256 : : | PLOTERROR_Line {
257 : 0 : $$ = NULL;
258 : : }
259 : : | EDITSIZE_Line {
260 : 0 : $$ = NULL;
261 : : }
262 : : | PLOTSIZE_Line {
263 : 0 : $$ = NULL;
264 : : }
265 : : | TABLE_Definition {
266 : 0 : $$ = NULL;
267 : : }
268 : : | PSTABLE_Definition {
269 : 0 : $$ = NULL;
270 : : }
271 : : | CNTABLE_Definition {
272 : 0 : $$ = NULL;
273 : : }
274 : : | OPTIMEDIT_Definition {
275 : 0 : $$ = NULL;
276 : : }
277 : : | CALSET_Definition {
278 : 0 : $$ = NULL;
279 : : }
280 : : | HYPTABLE_Definition {
281 : 0 : $$ = (struct mdl_dcontent_t *) calloc (sizeof (struct mdl_dcontent_t), 1);
282 : 0 : $$->type = t_HYPTABLE;
283 : 0 : $$->hyptable = $1;
284 : : }
285 : : | DATASET_Definition {
286 : 0 : $$ = (struct mdl_dcontent_t *) calloc (sizeof (struct mdl_dcontent_t), 1);
287 : 0 : $$->type = t_DATASET;
288 : 0 : $$->data = $1;
289 : : }
290 : : | BLKEDIT_Definition {
291 : 0 : $$ = NULL;
292 : : }
293 : : | CIRCUITDECK_Definition {
294 : 0 : $$ = NULL;
295 : : }
296 : : ;
297 : :
298 : 0 : DataContentList: /* nothing */ { $$ = NULL; }
299 : : | DataContent DataContentList {
300 [ # # ]: 0 : if ($1) {
301 : 0 : $1->next = $2;
302 : 0 : $$ = $1;
303 : : } else {
304 : 0 : $$ = $2;
305 : : }
306 : : }
307 : : ;
308 : :
309 : : PSContent:
310 : : PARAM_Line
311 : : | RANGE_Line
312 : : | OPTRANGE_Line
313 : : ;
314 : :
315 : : PSContentList: /* nothing */ { }
316 : : | PSContent PSContentList {
317 : : }
318 : : ;
319 : :
320 : : DSContent:
321 : : DATASIZE_Line TYPE_Line PointList {
322 : 0 : $$ = (struct mdl_dataset_t *) calloc (sizeof (struct mdl_dataset_t), 1);
323 : 0 : $$->dsize = $1;
324 : 0 : $$->type1 = $2;
325 : 0 : $$->data1 = $3;
326 : : }
327 : : | DATASIZE_Line TYPE_Line PointList TYPE_Line PointList {
328 : 0 : $$ = (struct mdl_dataset_t *) calloc (sizeof (struct mdl_dataset_t), 1);
329 : 0 : $$->dsize = $1;
330 : 0 : $$->type1 = $2;
331 : 0 : $$->data1 = $3;
332 : 0 : $$->type2 = $4;
333 : 0 : $$->data2 = $5;
334 : : }
335 : : ;
336 : :
337 : : Point:
338 : : POINT_Line
339 : : ;
340 : :
341 : 0 : PointList: /* nothing */ { $$ = NULL; }
342 : : | Point PointList {
343 : 0 : $1->next = $2;
344 : 0 : $$ = $1;
345 : : }
346 : : ;
347 : :
348 : : ELEMENT_Line:
349 : : t_ELEMENT Real String String String {
350 : 0 : $$ = (struct mdl_element_t *) calloc (sizeof (struct mdl_element_t), 1);
351 : 0 : $$->number = (int) $2;
352 : 0 : $$->name = $3;
353 : 0 : $$->value = $4;
354 : 0 : $$->attr = $5;
355 : : }
356 : : | t_ELEMENT Real String String {
357 : 0 : $$ = (struct mdl_element_t *) calloc (sizeof (struct mdl_element_t), 1);
358 : 0 : $$->number = (int) $2;
359 : 0 : $$->name = $3;
360 : 0 : $$->value = $4;
361 : : }
362 : : | t_ELEMENT String String {
363 : 0 : $$ = (struct mdl_element_t *) calloc (sizeof (struct mdl_element_t), 1);
364 : 0 : $$->name = $2;
365 : 0 : $$->value = $3;
366 : : }
367 : : ;
368 : :
369 : : VIEW_Line:
370 : : t_VIEW Identifier Real String {
371 : 0 : free ($2);
372 : 0 : free ($4);
373 : : }
374 : : ;
375 : :
376 : : TABLE_Definition:
377 : : t_TABLE String '{' TableContentList '}' {
378 : 0 : $$ = (struct mdl_table_t *) calloc (sizeof (struct mdl_table_t), 1);
379 : 0 : $$->name = $2;
380 : 0 : $$->data = $4;
381 : : }
382 : : | t_TABLE String Real '{' TableContentList '}' {
383 : 0 : $$ = (struct mdl_table_t *) calloc (sizeof (struct mdl_table_t), 1);
384 : 0 : $$->name = $2;
385 : 0 : $$->data = $5;
386 : : }
387 : : | t_TABLE '{' '}' {
388 : 0 : $$ = (struct mdl_table_t *) calloc (sizeof (struct mdl_table_t), 1);
389 : : }
390 : : ;
391 : :
392 : : LINK_Definition:
393 : : LINK t_LINK String '{' LinkContentList '}' {
394 : 0 : $$ = (struct mdl_link_t *) calloc (sizeof (struct mdl_link_t), 1);
395 : 0 : $$->name = $3;
396 : 0 : $$->type = $2;
397 : 0 : $$->content = $5;
398 : : }
399 : : ;
400 : :
401 : : DATA_Definition:
402 : : t_DATA '{' DataContentList '}' {
403 : 0 : $$ = (struct mdl_data_t *) calloc (sizeof (struct mdl_data_t), 1);
404 : 0 : $$->content = $3;
405 : : }
406 : : ;
407 : :
408 : : PSTABLE_Definition:
409 : : t_PSTABLE String '{' PSContentList '}' {
410 : 0 : free ($2);
411 : : }
412 : : ;
413 : :
414 : : CIRCUITDECK_Definition:
415 : : t_CIRCUITDECK '{' '}'
416 : : ;
417 : :
418 : : BLKEDIT_Definition:
419 : : t_BLKEDIT String '{' '}' {
420 : 0 : free ($2);
421 : : }
422 : : ;
423 : :
424 : : CNTABLE_Definition:
425 : : t_CNTABLE String '{' ConnTableContentList '}' {
426 : 0 : free ($2);
427 : : }
428 : : ;
429 : :
430 : : OPTIMEDIT_Definition:
431 : : t_OPTIMEDIT '{' OptEditContentList '}' {
432 : : }
433 : : ;
434 : :
435 : : CALSET_Definition:
436 : : t_CALSET String '{' CalSetContent '}' {
437 : 0 : free ($2);
438 : : }
439 : : ;
440 : :
441 : : CalSetContent:
442 : : Identifier Real Identifier Real Identifier Real
443 : : CALDATA_Definition {
444 : : }
445 : : ;
446 : :
447 : : CALDATA_Definition:
448 : : t_CALDATA '{' CalDataContentList '}' {
449 : : }
450 : : ;
451 : :
452 : : CalDataContentList: /* nothing */ { }
453 : : | CalDataContent CalDataContentList {
454 : : }
455 : : ;
456 : :
457 : : CalDataContent:
458 : : TERM_Line PointList {
459 : : }
460 : : ;
461 : :
462 : : TERM_Line:
463 : : t_TERM Real {
464 : : }
465 : : ;
466 : :
467 : : APPLIC_Line:
468 : : t_APPLIC String Real Real Real {
469 : 0 : free ($2);
470 : : }
471 : : ;
472 : :
473 : : SUBAPP_Line:
474 : : t_SUBAPP String Real {
475 : 0 : free ($2);
476 : : }
477 : : ;
478 : :
479 : : HYPTABLE_Definition:
480 : : t_HYPTABLE String '{' HypTableContentList '}' {
481 : 0 : $$ = (struct mdl_hyptable_t *) calloc (sizeof (struct mdl_hyptable_t), 1);
482 : 0 : $$->name = $2;
483 : 0 : $$->data = $4;
484 : : }
485 : : ;
486 : :
487 : : DATASET_Definition:
488 : : t_DATASET '{' DSContent '}' {
489 : 0 : $$ = $3;
490 : : }
491 : : ;
492 : :
493 : : DATASIZE_Line:
494 : : t_DATASIZE Identifier Real Real Real {
495 : 0 : $$ = (struct mdl_datasize_t *) calloc (sizeof (struct mdl_datasize_t), 1);
496 : 0 : $$->type = $2;
497 : 0 : $$->size = (int) $3;
498 : 0 : $$->x = (int) $4;
499 : 0 : $$->y = (int) $5;
500 : : }
501 : : ;
502 : :
503 : : TYPE_Line:
504 : : t_TYPE Identifier {
505 : 0 : $$ = $2;
506 : : }
507 : : ;
508 : :
509 : : POINT_Line:
510 : : t_POINT Real Real Real Real Real {
511 : 0 : $$ = (struct mdl_point_t *) calloc (sizeof (struct mdl_point_t), 1);
512 : 0 : $$->n = (int) $2;
513 : 0 : $$->x = (int) $3;
514 : 0 : $$->y = (int) $4;
515 : 0 : $$->r = $5;
516 : 0 : $$->i = $6;
517 : : }
518 : : ;
519 : :
520 : : LIST_Line:
521 : : t_LIST t_LINK String {
522 : 0 : free ($2);
523 : 0 : free ($3);
524 : : }
525 : : ;
526 : :
527 : : PLOTOPTIMIZEROPT_Line:
528 : : t_PLOTOPTIMIZEROPT Identifier Real {
529 : 0 : free ($2);
530 : : }
531 : : ;
532 : :
533 : : PLOTOPTIMIZERTRACESET_Line:
534 : : t_PLOTOPTIMIZERTRACESET String String String {
535 : 0 : free ($2);
536 : 0 : free ($3);
537 : 0 : free ($4);
538 : : }
539 : : | t_PLOTOPTIMIZERTRACESET String String {
540 : 0 : free ($2);
541 : 0 : free ($3);
542 : : }
543 : : ;
544 : :
545 : : PLOTOPTIMIZERTRACEREGSET_Line:
546 : : t_PLOTOPTIMIZERTRACEREGSET String Real String String String String {
547 : 0 : free ($2);
548 : 0 : free ($4);
549 : 0 : free ($5);
550 : 0 : free ($6);
551 : 0 : free ($7);
552 : : }
553 : : ;
554 : :
555 : : PLOTOPTIMIZERTRACENATREGSET_Line:
556 : : t_PLOTOPTIMIZERTRACENATREGSET String Real String String String String {
557 : 0 : free ($2);
558 : 0 : free ($4);
559 : 0 : free ($5);
560 : 0 : free ($6);
561 : 0 : free ($7);
562 : : }
563 : : ;
564 : :
565 : : PLOTERROR_Line:
566 : : t_PLOTERROR Identifier Real {
567 : 0 : free ($2);
568 : : }
569 : : ;
570 : :
571 : : EDITSIZE_Line:
572 : : t_EDITSIZE Real Real {
573 : : }
574 : : ;
575 : :
576 : : PLOTSIZE_Line:
577 : : t_PLOTSIZE Real Real {
578 : : }
579 : : ;
580 : :
581 : : MEMBER_Line:
582 : : t_MEMBER t_LINK String {
583 : 0 : free ($2);
584 : 0 : free ($3);
585 : : }
586 : : ;
587 : :
588 : : PARAM_Line:
589 : : t_PARAM Identifier String {
590 : 0 : free ($2);
591 : 0 : free ($3);
592 : : }
593 : : ;
594 : :
595 : : RANGE_Line:
596 : : t_RANGE Identifier String String {
597 : 0 : free ($2);
598 : 0 : free ($3);
599 : 0 : free ($4);
600 : : }
601 : : ;
602 : :
603 : : OPTRANGE_Line:
604 : : t_OPTRANGE Identifier String String {
605 : 0 : free ($2);
606 : 0 : free ($3);
607 : 0 : free ($4);
608 : : }
609 : : ;
610 : :
611 : : CONNPAIR_Line:
612 : : t_CONNPAIR String String {
613 : 0 : free ($2);
614 : 0 : free ($3);
615 : : }
616 : : ;
617 : :
618 : : %%
619 : :
620 : 0 : int mdl_error (const char * error) {
621 : 0 : fprintf (stderr, "line %d: %s\n", mdl_lineno, error);
622 : 0 : return 0;
623 : : }
|