
Linux 一般来说,词法和语法解析都是通过 Flex 与 Bison 完成的;而在 MySQL 中,词法分析使用自己的程序,而语法分析使用的是 Bison;Bison 会根据 MySQL 定义的语法规则,进行语法解析。
完成语法解析后,会将解析结果生成的数据结构保存在 struct LEX 中,该结构体在 sql/sql_lex.h 文件中定义。
- struct LEX: public Query_tables_list
- {
- friend bool lex_start(THD *thd);
-
- SELECT_LEX_UNIT *unit; ///< Outer-most query expression /// @todo: select_lex can be replaced with unit->first-select() SELECT_LEX *select_lex; ///< First query block SELECT_LEX *all_selects_list; ///< List of all query blocks private:
- /* current SELECT_LEX in parsing */
- SELECT_LEX *m_current_select;
- ... ...
- }
优化器会根据这里的数据,生成相应的执行计划,最后调用存储引擎执行。