parser.h
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:2k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // parser.h
  2. //
  3. // Copyright (C) 2001 Chris Laurel <claurel@shatters.net>
  4. //
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. #ifndef _PARSER_H_
  10. #define _PARSER_H_
  11. #include <vector>
  12. #include <map>
  13. #include <celmath/vecmath.h>
  14. #include <celmath/quaternion.h>
  15. #include <celutil/color.h>
  16. #include <celutil/basictypes.h>
  17. #include <celengine/tokenizer.h>
  18. class Value;
  19. typedef map<string, Value*>::const_iterator HashIterator;
  20. class AssociativeArray
  21. {
  22.  public:
  23.     AssociativeArray();
  24.     ~AssociativeArray();
  25.     Value* getValue(string) const;
  26.     void addValue(string, Value&);
  27.     bool getNumber(const std::string&, double&) const;
  28.     bool getNumber(const std::string&, float&) const;
  29.     bool getNumber(const std::string&, int&) const;
  30.     bool getNumber(const std::string&, uint32&) const;
  31.     bool getString(const std::string&, std::string&) const;
  32.     bool getBoolean(const std::string&, bool&) const;
  33.     bool getVector(const std::string&, Vec3d&) const;
  34.     bool getVector(const std::string&, Vec3f&) const;
  35.     bool getRotation(const std::string&, Quatf&) const;
  36.     bool getColor(const std::string&, Color&) const;
  37.     HashIterator begin();
  38.     HashIterator end();
  39.     
  40.  private:
  41.     map<string, Value*> assoc;
  42. };
  43. typedef vector<Value*> Array;
  44. typedef AssociativeArray Hash;
  45. class Value
  46. {
  47. public:
  48.     enum ValueType {
  49.         NumberType     = 0,
  50.         StringType     = 1,
  51.         ArrayType      = 2,
  52.         HashType       = 3,
  53.         BooleanType    = 4
  54.     };
  55.     Value(double);
  56.     Value(string);
  57.     Value(Array*);
  58.     Value(Hash*);
  59.     Value(bool);
  60.     ~Value();
  61.     ValueType getType() const;
  62.     double getNumber() const;
  63.     string getString() const;
  64.     Array* getArray() const;
  65.     Hash* getHash() const;
  66.     bool getBoolean() const;
  67. private:
  68.     ValueType type;
  69.     union {
  70.         string* s;
  71.         double d;
  72.         Array* a;
  73.         Hash* h;
  74.     } data;
  75. };
  76. class Parser
  77. {
  78. public:
  79.     Parser(Tokenizer*);
  80.     Array* readArray();
  81.     Hash* readHash();
  82.     Value* readValue();
  83. private:
  84.     Tokenizer* tokenizer;
  85. };
  86. #endif // _PARSER_H_