【手写数据库核心揭秘系列】第9节 可重入的SQL解析器,不断解析Structure Query Language,语言翻译好帮手
可重入的SQL解析器
文章目录
- 可重入的SQL解析器
- 一、概述
- 二、可重入解析器
- 2.1 可重入设置
- 2.2 记录状态的数据结构
- 2.3 节点数据类型定义
- 2.4 头文件引用
- 三、调整后的程序结构
- 四、总结
一、概述
现在就来修改之前sqlscanner.l和sqlgram.y程序,可以不断输入SQL语句,循环执行词法分析和语法分析动作。
当前的解析器已经可以解析一条SQL语句了,真正的数据库客户端可以在前一条执行完后,再输入SQL继续执行。
在做这样一个命令行的客户端之前,需要对当前的解析器改造为可重入,可以反复用来解析不同的SQL语句。
在默认情况下,flex和bison的解析状态定义为全局变量,重复执行时会继续使用上一次的状态,直到输入CTRL+D时,才认为输入结束,此时产生最终结果和清理过程中的状态信息。
二、可重入解析器
现在就来修改之前sqlscanner.l和sqlgram.y程序,可以不断输入SQL语句,循环执行词法分析和语法分析动作。
一个可重入的词法分析器和语法分析器,它的中间状态记录不再使用内部全局变量,而是记录到调用者初始化的数据结构当中,这样调用者在输入下一条SQL语句时,使用新