add wraparound support to C2 physics
[openc2e.git] / catalogue.ypp
blob13a0535a3271416e9aaabf9e8a31f222e65dcc82
1 %{
2     #include "Catalogue.h"
3     #include "exceptions.h"
4     #include <list>
5     #include <string>
7     extern Catalogue *parsing_cat;
8     int catalex(void) { return Catalogue::catalex(); }
9         void cataerror(const char *err) {
10                 Catalogue::catalogueParseError(err);
11         }
14 %union {
15     std::string *string;
16     int number;
18     bool boolean_v;
19     std::list<std::string> *list;
22 %token CTOK_TAG
23 %token CTOK_ARRAY
24 %token CTOK_OVERRIDE
25 %token <string> CTOK_STR
26 %token <number> CTOK_INT
28 %type <list> strings
29 %type <boolean_v> maybeOverride
33 root: cgroup {}
34     | root cgroup {}
35     ;
37 cgroup:
38     CTOK_TAG maybeOverride CTOK_STR strings
39     { parsing_cat->addVals(*$3, $2, -1, *$4);
40       delete $4; delete $3;
41     }
42   | CTOK_ARRAY maybeOverride CTOK_STR CTOK_INT strings
43     { parsing_cat->addVals(*$3, $2, $4, *$5);
44       delete $5; delete $3;
45     }
46   ;
48 maybeOverride:
49     CTOK_OVERRIDE { $$ = true;  }
50   |               { $$ = false; }
51   ;
53 strings:
54     CTOK_STR strings
55     { $2->push_front(*$1); delete $1; $$ = $2; }
56   | { $$ = new std::list<std::string>(); }
57   ;