海山数据库(He3DB)查询解析模块解析(一):词法分析scan.l解析

引言

词法分析是查询解析的第一步,主要工作是将输入的sql命令转化为带有属性的token,然后进入下一步的语法分析进行语法结构的匹配。本文首先介绍词法分析的基本原理,然后介绍海山数据库中使用的词法分析工具lex,最后对词法分析scan.l文件进行解析。

词法分析基本原理

词法分析的主要工作是识别出sql语句中的各个token,并确定其属性,如下图所示。

在这里插入图片描述

要理解该模块的工作原理,需要搞清楚以下几个问题:

1.如何来解析sql命令然后获得token;

2.属性有哪些,如何确定属性。

对于第一个问题,如何将sql语句转化为一组tokens。首先要定义一组模式,该模式表示token的可能表现形式,从sql语句中使用正则表达式进行匹配,提取出一个一个的token。在匹配过程中,有两个指针start_ptr和end_ptr,从初始位置开始扫描,使用状态转化图顺序解析,举一个例子,假设需要识别的模式有【<,>,=,<=,>=,<>】。

在初始时,可能的状态转化图如下图所示:

在这里插入图片描述

该图中,若读入的第一个符号是【<】,end_ptr指针往后读入一位,此时可能的状态有【<,<=,<>】,end_ptr指针再往后读入一位,若读到的是【=】,则返回【<=】,若读到的是>,则返回【<>】,若为其他字符,则end_ptr回退到前一位置,并返回【<】。

对于这个过程,可以简单总结一下,存在两个指针:start_ptr和end_ptr,两个指针用来表示当前读取的字符串,若当前的字符串可能与多种模式匹配到,则end_ptr继续向后读取,直到实现最大字符串的匹配或者进行回退消除歧义性。当确定一个token后,start_ptr更新当前位置,并开始下一阶段的匹配。

对于第二个问题,属性有哪些,如何确定其属性。在编译原理中,属性一般可分为以下几类:

属性 例子
标识符 表名,列名等
关键字 SELECT,UPDATE,DELETE,…
运算符 <,>,<=,>=…
常量 整型,浮点型…
界限符 ;,()…

token

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值