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