SimpleParser.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #ifndef ODBC_CODEGEN_SimpleParser_hpp
  14. #define ODBC_CODEGEN_SimpleParser_hpp
  15. #include <common/common.hpp>
  16. #include "Code_root.hpp"
  17. #include "Code_stmt.hpp"
  18. #include "Code_select.hpp"
  19. #include "Code_pred.hpp"
  20. #include "Code_pred_op.hpp"
  21. #include "Code_comp_op.hpp"
  22. #include "Code_expr_row.hpp"
  23. #include "Code_expr.hpp"
  24. #include "Code_expr_op.hpp"
  25. #include "Code_expr_func.hpp"
  26. #include "Code_expr_column.hpp"
  27. #include "Code_expr_const.hpp"
  28. #include "Code_expr_param.hpp"
  29. #include "Code_update.hpp"
  30. #include "Code_set_row.hpp"
  31. #include "Code_insert.hpp"
  32. #include "Code_dml_row.hpp"
  33. #include "Code_dml_column.hpp"
  34. #include "Code_delete.hpp"
  35. #include "Code_table_list.hpp"
  36. #include "Code_table.hpp"
  37. #include "Code_create_table.hpp"
  38. #include "Code_create_index.hpp"
  39. #include "Code_ddl_row.hpp"
  40. #include "Code_ddl_column.hpp"
  41. #include "Code_ddl_constr.hpp"
  42. #include "Code_data_type.hpp"
  43. #include "Code_drop_table.hpp"
  44. #include "Code_drop_index.hpp"
  45. #include "SimpleGram.tab.hpp"
  46. class StmtArea;
  47. class Plan_root;
  48. class SimpleParser : public yyFlexLexer {
  49. public:
  50.     SimpleParser(Ctx& ctx, StmtArea& stmtArea, Plan_root* root);
  51.     ~SimpleParser();
  52.     Ctx& ctx();
  53.     StmtArea& stmtArea();
  54.     Plan_root* root();
  55.     void yyparse(); // calls real yyparse
  56.     int yylex(); // generated by flex
  57.     YYSTYPE yylval();
  58.     void pushState(int sc); // push start condition
  59.     void popState(); // pop start condition
  60.     unsigned paramNumber() const;
  61.     void parseError(const char* msg);
  62.     // parser helpers - to avoid creating new Plan tree types
  63.     Plan_ddl_column* curr(Plan_ddl_column* p);
  64.     Plan_create_index* curr(Plan_create_index* p);
  65. protected:
  66.     virtual int LexerInput(char* buf, int max_size);
  67.     virtual void LexerOutput(const char* buf, int size);
  68.     virtual void LexerError(const char* msg);
  69. private:
  70.     Ctx& m_ctx;
  71.     StmtArea& m_stmtArea;
  72.     Plan_root* const m_root;
  73.     unsigned m_textPos; // position in sql text
  74.     unsigned m_parsePos; // parse position, to report error
  75.     YYSTYPE m_yylval; // token value
  76.     BaseString m_string; // storage for edited string token
  77.     unsigned m_stacksize; // state stack size
  78.     unsigned m_paramNumber; // parameter number
  79.     // parser helpers
  80.     Plan_ddl_column* m_ddl_column;
  81.     Plan_create_index* m_create_index;
  82. };
  83. extern int SimpleParser_yyparse(void* simpleParserPtr);
  84. #if YYDEBUG
  85. extern int SimpleParser_yydebug;
  86. #endif
  87. inline
  88. SimpleParser::SimpleParser(Ctx& ctx, StmtArea& stmtArea, Plan_root* root) :
  89.     m_ctx(ctx),
  90.     m_stmtArea(stmtArea),
  91.     m_root(root),
  92.     m_textPos(0),
  93.     m_parsePos(0),
  94.     m_stacksize(0),
  95.     m_paramNumber(0),
  96.     // parser helpers
  97.     m_ddl_column(0)
  98. {
  99. }
  100. inline Ctx&
  101. SimpleParser::ctx()
  102. {
  103.     return m_ctx;
  104. }
  105. inline StmtArea&
  106. SimpleParser::stmtArea()
  107. {
  108.     return m_stmtArea;
  109. }
  110. inline Plan_root*
  111. SimpleParser::root()
  112. {
  113.     return m_root;
  114. }
  115. inline YYSTYPE
  116. SimpleParser::yylval()
  117. {
  118.     return m_yylval;
  119. }
  120. inline unsigned
  121. SimpleParser::paramNumber() const
  122. {
  123.     return m_paramNumber;
  124. }
  125. // parser helpers
  126. inline Plan_ddl_column*
  127. SimpleParser::curr(Plan_ddl_column* p)
  128. {
  129.     if (p != 0)
  130. m_ddl_column = p;
  131.     ctx_assert(m_ddl_column != 0);
  132.     return m_ddl_column;
  133. }
  134. inline Plan_create_index*
  135. SimpleParser::curr(Plan_create_index* p)
  136. {
  137.     if (p != 0)
  138. m_create_index = p;
  139.     ctx_assert(m_create_index != 0);
  140.     return m_create_index;
  141. }
  142. #endif