token.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #ifndef _token_h_
  2. #define _token_h_
  3. //////////////////////////////////////////////////////////////////////////////
  4. //
  5. // Translate escape sequences \?
  6. //
  7. //////////////////////////////////////////////////////////////////////////////
  8. int TranslateCharacter(const char*& pcc);
  9. int ReadHexNumber(const char*& pcc, int max = -1);
  10. //////////////////////////////////////////////////////////////////////////////
  11. //
  12. // Token
  13. //
  14. //////////////////////////////////////////////////////////////////////////////
  15. class TextTokenImpl {
  16. public:
  17. const int Null ;
  18. const int String;
  19. const int Number;
  20. const int Symbol;
  21. private:
  22. TMap<ZString, int> m_symbolMap;
  23. TMap<int, ZString> m_tokenMap;
  24. int m_idFree;
  25. int m_type;
  26. ZString m_string;
  27. float m_numberValue;
  28. int m_line;
  29. ZString m_strError;
  30. PCC m_pcc;
  31. PCC m_pccEnd;
  32. PCC m_pccLine;
  33. PCC m_pccStart;
  34. PCC m_pccExpressionStart;
  35. bool ReadNumber(bool bExponent = false);
  36. bool ReadExponent();
  37. bool ReadString(char);
  38. bool ReadSymbol();
  39. bool SkipWhite();
  40. int GetLineNumber();
  41. int GetLineCharNumber();
  42. int GetCharNumber();
  43. protected:
  44. TextTokenImpl(PCC pcc, int length);
  45. int AddSymbol(const ZString& str);
  46. int AddToken(const ZString& str);
  47. virtual bool IsSymbolChar(char ch);
  48. virtual int ParseToken(PCC& pcc);
  49. public:
  50. ~TextTokenImpl();
  51. //
  52. // IToken members
  53. //
  54. void SetError(const ZString& szerror);
  55. void SetErrorUnexpected();
  56. bool Error();
  57. void Next();
  58. bool MoreTokens();
  59. bool Is(int id, bool bError);
  60. bool IsSymbol(ZString& str, bool bError);
  61. bool IsString(ZString& str, bool bError);
  62. bool IsNumber(float& number, bool bError);
  63. };
  64. //////////////////////////////////////////////////////////////////////////////
  65. //
  66. // CommandLineToken
  67. //
  68. //////////////////////////////////////////////////////////////////////////////
  69. class CommandLineToken {
  70. private:
  71. PCC m_pcc;
  72. PCC m_pccEnd;
  73. void SkipWhite();
  74. bool ReadExponent(float& number);
  75. bool ReadNumber(float& number, bool bExponent = false);
  76. public:
  77. CommandLineToken(PCC& pcc, int length);
  78. bool MoreTokens();
  79. bool IsMinus(ZString& str);
  80. bool IsString(ZString& str);
  81. bool IsNumber(float& number);
  82. void Skip();
  83. };
  84. #endif