sql解析之lex和yacc工具

lex和yacc是用来编写自己的语言和编译器的,所以我们可以用它来编写自己所定义的sql语言和编译器。
lex是lexical analyzar,yacc是yet another compiler complier
经过lex和yacc解析出来的是一棵树,在sql中,有常见的expression计算,比如select a+sum(b+c) from T group by a,这条语句在lex和yacc解析的时候a+sum(b+c)会解析为一棵树,这棵树为:根节点为+,+的左孩子为a,右孩子为sum,sum的孩子为第二个+,第二个+的左孩子为b,第二个+的右孩子为c。这不是一棵二叉树,其中有叶子节点(比如表的属性),有一元节点(比如sum),还有二元节点(比如+)。更加推广一点,整个select语句都是解析成了expression表示的,具体怎么做呢?下面分析代码:
SQL解析到查询执行中经过的几个关键函数为:ExecuteLogicalQueryPlan() -- parsetree2logicalplan() -- getIteratorTree执行物理计划。


(未完)

你可能感兴趣的:(database)