PARSER.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:2k
源码类别:

Windows编程

开发平台:

Visual C++

  1. #ifndef __PARSER_H
  2. #define __PARSER_H
  3. class CMtoProvCommand;
  4. class CParser
  5. {
  6. enum ParamStates
  7. {
  8. moreParams,
  9. eop,
  10. errorState
  11. };
  12. public:
  13. BOOL HasRetval();
  14. int CParamsWORetval();
  15. LPCTSTR GetMethod();
  16. CParser(CMtoProvCommand* pCommand)
  17. {
  18. m_pCommand = pCommand;
  19. m_fRequiresInit     = TRUE;
  20. m_fRetVal           = FALSE;
  21. m_szMethod          = NULL;
  22. m_cBindableParams   = 0;
  23. m_cByValParams      = 0;
  24. }
  25. ~CParser()
  26. {
  27. if (NULL != m_szMethod)
  28. delete [] m_szMethod;
  29. }
  30. BOOL        FParseSQLCall(LPCTSTR szSQL);
  31. int         CBindableParameters();
  32. protected:
  33. int              m_cBindableParams;
  34. int              m_cByValParams;
  35. BOOL             m_fRetVal;
  36. BOOL             m_fRequiresInit;
  37. TCHAR*           m_szCall;
  38. TCHAR*           m_szParamMarker;
  39. TCHAR*           m_szMethod;
  40. CMtoProvCommand* m_pCommand;
  41. BOOL        FInit();
  42. void        RemoveWhiteSpace(LPCTSTR sz, int& ich);
  43. void        FindNextWhiteSpace(LPCTSTR sz, int& ich);
  44. void        FindEndParam(LPCTSTR sz, int& ich);
  45. void        FindEndMethod(LPCTSTR sz, int& ich, BOOL fIsQuoted);
  46. BOOL        FParseCallParams(LPCTSTR sz, int& ich, BOOL fCallOpen);
  47. BOOL        FCopyByValParam(LPCTSTR sz, int& ich);
  48. };
  49. inline void CParser::RemoveWhiteSpace(LPCTSTR sz, int& ich)
  50. {
  51. while(isspace(sz[ich]))
  52. ich++;
  53. }
  54. inline void CParser::FindNextWhiteSpace(LPCTSTR sz, int& ich)
  55. {
  56. while(NULL != sz[ich] && !isspace(sz[ich]))
  57. ich++;
  58. }
  59. inline void CParser::FindEndParam(LPCTSTR sz, int& ich)
  60. {
  61. while('' != sz[ich] && !isspace(sz[ich]) && ',' != sz[ich] &&
  62.   ')' != sz[ich])
  63. ich++;
  64. }
  65. inline void CParser::FindEndMethod(LPCTSTR sz, int& ich, BOOL fIsQuoted)
  66. {
  67. if (fIsQuoted)
  68. {
  69. while('' != sz[ich] && ',' != sz[ich] && '"' != sz[ich] &&
  70.   ')' != sz[ich])
  71. ich++;
  72. }
  73. else
  74. {
  75. while('' != sz[ich] && !isspace(sz[ich]) && ',' != sz[ich] &&
  76.   ')' != sz[ich])
  77. ich++;
  78. }
  79. }
  80. inline int CParser::CBindableParameters()
  81. {
  82. return (m_fRetVal) ? m_cBindableParams + 1 : m_cBindableParams;
  83. }
  84. inline LPCTSTR CParser::GetMethod()
  85. {
  86. return m_szMethod;
  87. }
  88. inline int CParser::CParamsWORetval()
  89. {
  90. return m_cBindableParams + m_cByValParams;
  91. }
  92. inline BOOL CParser::HasRetval()
  93. {
  94. return m_fRetVal;
  95. }
  96. #endif //__PARSER_H