这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天,今天把昨天没学完的扫了一下尾,都是很高级的内容,还需要在实践中慢慢学习
SQL语言:
1974年IBM的Ray Boyce和Don Chamberlin将Codd关系数据库的12条准则的数学定义以简单的关键字语法表现出来,里程碑式地提出了SQL(Structured Query Language)语言。
语法风格接近自然语言;
高度非过程化;
面向集合的操作方式;
语言简洁,易学易用。
SQL引擎- Parser:
解析器(Parser)一般分为词法分析(Lexical analysis)、语法分析(Syntax analysis)、语义分析(Semantic analyzer)等步骤。
SQL Parser 的功能是把一条 SQL 解析为抽象语法树(AST),SQL Parser 需要编译原理相关的知识,简单介绍一下。
SQL Parser 包含词法解析(Lexer)和语法解析(Parser),词法解析的作用是把一个 SQL 分割成一个一个不可分割的单元
上下文无关语法和相关术语的定义:
终结符集合 T(terminal set)
一个有限集合,其元素称为 终结符(terminal)。
非终结符集合 N(non-terminal set)
一个有限集合,与 T 无公共元素,其元素称为 非终结符(non-terminal)。
符号集合 V(alphabet)
T 和 N 的并集,其元素称为 符号(symbol)。因此终结符和非终结符都是符号。符号可用字母:A,B,C,a,b,c 等表示。
符号串(a string of symbols)
一串符号,如 X1 X2 ... Xn 。只有终结符的符号串称为句子(sentence)。空串 (不含任何符号)也是一个符号串,用 ε 表示。符号串一般用小写字母 u, v, w 表示。
产生式(production)
一个描述符号串如何转换的规则。对于上下文本无关语法,其固定形式为:A -> u ,其中 A 为非终结符, u 为一个符号串。
产生式集合 P(production)
一个由有限个产生式组成的集合。
展开 (expand)
一个动作:将一个产生式 A -> u 应用到一个含有 A 的符号串 vAw 上,用 u 代替该符号串中的 A ,得到一个新的符号串 vuw 。
折叠 (reduce)
一个动作:将一个产生式 A -> u 应用到一个含有 u 的符号串 vuw 上,用 A 代替该符号串中的 u ,得到一个新的符号串 vAw。
起始符号 S(start symbol)
N 中的一个特定的元素。
推导(derivate)
一个过程:从一个符号串 u 开始,应用一系列的产生式,展开到另一个的符号串 v,若 v 可以由 u 推导得到,则可写成:u => v。
上下文本无关语法 G (context-free grammar, CFG)
一个 4 元组:(T,N,P,S) ,其中 T 为终结符集合, N 为非终结符集合, P 为产生式集合, S 为起始符号。一个句子如果能从语法 G 的 S 推导得到,可以直接称此句子由语法 G 推导得到,也可称此句子符合这个语法,或者说此句子属于 G 语言。G 语言 (G language) 就是语法 G 推导出来的所有句子的集合,有时也用 G 代表这个集合。
解析(parse)
也称为分析,是一个过程:给定一个句子 s 和语法 G ,判断 s 是否属于 G ,如果是,则找出从起始符号推导得到 s 的全过程。推导过程中的任何符号串(包括起始符号和最终的句子)都称为 中间句子(working string)。