《flex&bison》之sql解析

本文介绍了通过flex和bison工具来理解和解析SQL语句的过程,尤其是对复杂的SELECT语句的解析。在MySQL中,SQL语法分析器生成语法树,而在《flex&bison》中生成逆波兰式代码。通过对SQL语法的分析,揭示了SELECT语句的结构和解析原理,以及table_references的复杂性,包括对嵌套SELECT的支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        大概上半年接了一本《深入理解MySQL》,看了个一知半解吧!这里不得不说这本书有点贪大求全了。什么存储引擎、sql解析、查询优化等等的内容都涉及。如果领悟能力高的话,可能对数据库有一种全局的把握。不然的话还是需要看看其他资料了。当时不懂sql编译原理(其实现在也不懂,这货太愁银了),以为sql解析应该是一个简单的事情。毕竟不需要生成最终机器代码嘛,其实不然呀!举个例子吧,使用flex和bison为ANSI C和SQL构建编译器。MySQL的SQL语法文件有一万多行,而ANSI C就几百行。我顿时感觉事情不是我想的那样了。SQL也不是吃素的呀!前面一直在啃《flex&bison》,虽说是讲工具的使用,但是毕竟是编译呀!尤其对我这样的原理爱好者,简直好折磨。不过一知半解怎么也比眼前一抹黑要好。
        在MySQL中,SQL语法分析器的输出是语法树;而在《flex&bison》中,分析器的输出是逆波兰式代码。不过大同小异吧,作用其实是一样的。这书里面主要实现了select语句,作者说select是SQL中最复杂的语句了,想想也是,数据库的最大的作用不就是提供查询服务嘛!
select_stmt: SELECT select_opts select_expr_list
                        { emit("SELECTNODATA %d %d", $2, $3); } ;
    | SELECT select_opts select_expr_list
     FROM table_references
     opt_where opt_groupby opt_having opt_orderby opt_limit
     opt_into_list { emit("SELECT %d %d %d", $2, $3, $5); } ;
;
        上面这段语法规则算是select语句的顶层规则了。第一个有不规则就不用看了,算是一个特例了。我们主要研究第二个规则。首先,SEL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值