Mini SQL 总体设计(二):Token分割

本文主要探讨Mini SQL的Token分割设计,指出句法分析的复杂性,并分享使用正则表达式进行简单有效的Token分割方法,强调Tokenizer应仅负责基本的分词任务,将逻辑复杂度转移至后续的Router处理。
摘要由CSDN通过智能技术生成

之前那篇博文Mini SQL 总体设计(一) 中在提到Tokens分割的时候试图进行句法分析,这个问题就相当复杂了。

看了指针1 实现的Token分割之后,我发现我有个地方搞错了。我试图将SQL语句中充当不同成分的部分提取出来,就像分析主谓宾一样,这实际上是句法分析。对于正则表达式来说未免任务过重。

而且JS正则表达式不具有平衡组,也无法进行无限深度的括号平衡匹配。

应该把Tokens分割地更细,然后将逻辑复杂度转移到Token分割之后的Router里。


其实问题应该是很简单的:

/\w+|[^\s]/g

用这个正则去匹配SQL语句就可以了。
除了要匹配正常的字符串\w+,还要保留除了空白字符\s 之外的各种符号:如括号\( \)、逗号,、引号' "等号=、以及分号; 等等;
保留除了空白符的部分来提示之后的路由分配,保证信息无损传递。

tokenizer = (sql) => sql.match(/\w+|[^\s]/g);
tokenizer('create table t(a int, b varchar(20));');  // ["create", "table", "t", "(", "a", "int", ",", "b", "varchar", 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值