2021SC@SDUSC
文章目录
Tokenizer功能介绍
当执行一个包含SQL语句的字符串时,接口程序要把这个字符串传递给Tokenizer。Tokenizer的任务是把原有字符串分成一个个标示符,并把这些标示符传递给剖析器。
当向SQLite提交SQL程序时,第一步是将源文本拆分为“tokens”。一个“token”可能是:
1.像“SELECT”或“UPDATE”这样的语言关键字。
2.表、列或变量的标识符。
3.像“,”或“==”或“;”这样的标点符号。
4.文字值:数值或字符串常量。
5.空白或评论。
空格和注释标记会被丢弃。所有其他令牌都被输入到LALR(1)解析器分析输入程序的结构,并生成一个抽象语法树(AST)输入程序。
代码分析
在fts3_Tokenizer.c文件中定义了下面的方法用于查找源文本中的“token”:
/* Find the start of the next token. */
int sqlite3Fts3IsIdChar(char c){
static const char isFtsIdChar[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x */
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1x */
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2x */
1, 1, 1, 1, 1,