sharding jdbc之解析引擎

 

1. 解析引擎

解析过程分为词法解析语法解析。 解析引擎在 parsing 包下,包含两大组件:

  1. Lexer:词法解析器。
  2. Parser:SQL解析器。

词法解析器用于将SQL拆解为不可再分的原子符号,称为Token。并根据不同数据库方言所提供的字典,将其归类为关键字,表达式,字面量和操作符。 再使用语法解析器将SQL转换为抽象语法树。例如:

SELECT id, name FROM t_user WHERE status = 'ACTIVE' AND age > 18

解析成的抽象语法树如:

两者都是解析器,区别在于 Lexer 只做词法的解析,不关注上下文,将字符串拆解成 N 个分词。而 Parser 在 Lexer 的基础上,进一步理解 SQL表示的行为 。 

1.1 Lexer 词法解析器

作用:顺序解析 SQL,将sql字符串分解成 N 个分词(token)。那么每个分词该如何表示呢?

 

1.1.1 token 和 tokenType

 

token用于描述当前分解出的词法,包含3个属性:

 

  • TokenType type :词法标记类型
  • String literals :当前词法字面量
  • int endPosition :literals 在 SQL 字符串中的位置

 

TokenType 用于描述当前token的类型,分成 4 大类:

 

  • DefaultKeyword :词法关键词
  • Literals :词法字面量标记
  • Symbol :词法符号标记
  • Assist :词法辅助标记

 

 

 

 

 

 

 

1.1.2 词法解析器

由于不同数据库遵守的 SQL 规范有所不同,所以不同的数据库对应存在不同的 Lexer,维护了对应的dictionary。Lexer内部根据相应数据库的dictionary与sql语句生成一个Tokenizer分词器进行分词。

 

复制代码
public final class Tokenizer {     //输入    private final String input;      //字典    private final Dictionary dictionary;     //偏移量    private final int offset;    }
复制代码
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信