浅谈SQL编译 (1)词法分析

1.前端SQL编译介绍

  1. 词法分析,将 SQL 字符串拆分成包含关键词识别的字符段(Tokens)。
  2. 语法分析,利用自顶向下或自底向上的算法,将 Tokens 解析为 AST,可以手动,也可以自动。
  3. 错误检测、恢复、提示推断,都需要利用语法分析产生的 AST。
  4. 语义分析,做完这一步就可以执行 SQL 语句了,不过对前端而言,不需要深入到这一步,可以跳过。
2.词法分析:字符串分割

(1)Token分类
  • 注释。
  • 关键字(SELECT、CREATE)。
  • 操作符(+、-、>=)。
  • 开闭合标志((、CASE)。
  • 占位符(?)。
  • 空格。
  • 引号包裹的文本、数字、字段。
  • 方言语法(${variable})。
    在词法分析阶段,我们的 Tokens 不需要关心关键词是什么,只要识别是不是关键词即可,只要切分即可。因此,在语法分析阶段,才辨别Token是什么关键词;涉及到语义处理时要考虑上下文。
(2)常见分词方法: 正则表达式分词
    争对不同方言或Tokens,会有不同的分词函数。因此整体流程如下:
while (sqlStr) {
  //这里的函数每取一次 Token,都将取到的 Token 按长度丢掉,继续匹配剩下的字符串,直到字符串被切分完为止
  token = getTokenWhitespace(sqlStr, token) | getTokenBlockComment(sqlStr, token);
  sqlStr = sqlStr.substring(token.value.length);
  tokens.push(token);
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值