1 #ifndef _CSGPARSER_HPP
2 #define _CSGPARSER_HPP
3 
4 
5 namespace netgen
6 {
7 
8   enum TOKEN_TYPE
9     {
10       TOK_MINUS = '-', TOK_LP = '(', OK_RP = ')', TOK_LSP = '[', TOK_RSP = ']',
11       TOK_EQU = '=', TOK_COMMA = ',', TOK_SEMICOLON = ';',
12       TOK_NUM = 100, TOK_STRING, TOK_NAMED_SOLID, TOK_PRIMITIVE,
13       TOK_OR, TOK_AND, TOK_NOT,
14       TOK_SINGULAR, TOK_EDGE, TOK_POINT, TOK_FACE, TOK_IDENTIFY, TOK_CLOSESURFACES,
15       TOK_CLOSEEDGES, TOK_PERIODIC,
16       TOK_SOLID, TOK_RECO, TOK_TLO, TOK_CURVE2D, TOK_CURVE3D, TOK_BOUNDINGBOX,
17       TOK_BOUNDARYCONDITION, TOK_BOUNDARYCONDITIONNAME,
18       TOK_DEFINE, TOK_CONSTANT,
19       TOK_END };
20 
21   struct kwstruct
22   {
23     TOKEN_TYPE kw;
24     const char * name;
25   };
26 
27   enum PRIMITIVE_TYPE
28     {
29       TOK_SPHERE = 1, TOK_CYLINDER, TOK_PLANE, TOK_ELLIPTICCYLINDER,
30       TOK_ELLIPSOID, TOK_CONE, TOK_ELLIPTICCONE,
31       TOK_ORTHOBRICK, TOK_POLYHEDRON,
32       TOK_TORUS,
33       TOK_TUBE, TOK_GENCYL, TOK_EXTRUSION, TOK_REVOLUTION,
34 
35       TOK_TRANSLATE, TOK_MULTITRANSLATE, TOK_ROTATE, TOK_MULTIROTATE
36     };
37 
38   struct primstruct
39   {
40     PRIMITIVE_TYPE kw;
41     const char * name;
42   };
43 
44 
45   class CSGScanner
46   {
47     TOKEN_TYPE token;
48     PRIMITIVE_TYPE prim_token;
49     double num_value;
50     string string_value;
51 
52     int linenum;
53     istream * scanin;
54 
55   public:
56 
57     CSGScanner (istream & ascanin);
58 
GetToken() const59     TOKEN_TYPE GetToken() const
60     { return token; }
61 
GetNumValue() const62     double GetNumValue() const
63     { return num_value; }
64 
GetStringValue() const65     const string & GetStringValue() const
66     { return string_value; }
67 
GetCharValue() const68     char GetCharValue() const
69     { return string_value[0]; }
70 
GetPrimitiveToken() const71     PRIMITIVE_TYPE GetPrimitiveToken() const
72     { return prim_token; }
73 
74     void ReadNext();
75 
76     /*
77     CSGScanner & Parse (char ch);
78     CSGScanner & Parse (int & i);
79     CSGScanner & Parse (double & d);
80     CSGScanner & Parse (Point<3> & p);
81     CSGScanner & Parse (Vec<3> & p);
82     */
83     void Error (const string & err);
84   };
85 
86 
87 
88   CSGScanner & operator>> (CSGScanner & scan, char ch);
89   CSGScanner & operator>> (CSGScanner & scan, double & d);
90   CSGScanner & operator>> (CSGScanner & scan, int & i);
91   CSGScanner & operator>> (CSGScanner & scan, Point<3> & p);
92   CSGScanner & operator>> (CSGScanner & scan, Vec<3> & v);
93 
94 
95 
96 }
97 
98 
99 
100 #endif
101 
102