PostgreSQL 源码解读(167)- 查询#87(基础知识-语法分析器Bison)
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,输入一条SQL语句,PostgreSQL如何解析输入的SQL,识别SQL类型以及基表/字段等信息?接下来的几节将逐一进行解析.本节介绍了开源工具语法分析器Bison.一、Bison基本概念Bison是
千家信息网最后更新 2026年11月03日PostgreSQL 源码解读(167)- 查询#87(基础知识-语法分析器Bison)
输入一条SQL语句,PostgreSQL如何解析输入的SQL,识别SQL类型以及基表/字段等信息?接下来的几节将逐一进行解析.
本节介绍了开源工具语法分析器Bison.
一、Bison
基本概念
Bison是一个语法分析器,和Flex配合使用,它可以将用户提供的语法规则转化成一个语法分析器。Flex生成token stream,Bison根据定义的产生式和动作表来解析token stream,从而解析句子.
Bison自定义语法文件,一般以.y作为文件扩展名,其格式如下:
%{Declarations%}Definitions%%Productions%%User subroutines其中Declarations(声明)和 User subroutines(用户自定义过程)和Flex的.l文件是一样的,Bison会将这些代码原样的拷贝到y.tab.c文件中;Definitions(定义)段和Flex类似,也是在这个段定义一些Bison专有的变量,稍后再解释这个文件中的这个段里的代码;最重要的是Productions 段,这里面是用户编写的语法产生式.
示例
下面用Flex和Bison实现一个简单的乘法器.
mul.l
词法文件
%{#include "y.tab.h"void yyerror(const char *msg);void undefined_char(char c);%}%%[0-9]+ { yylval = atoi(yytext); return T_NUMBER; }[*()\n] { return yytext[0]; }. { return 0; /* end when meet everything else */ }%%int yywrap(void) { return 1;}void undefined_char(char c) { char buf[32] = "Unrecognized character: ?"; buf[24] = c; yyerror(buf);}void yyerror(const char *msg) { printf("Error :%s\n", msg); exit(1);}mul.y
语法文件
%{#include %}%token T_NUMBER%left '*'%%S : S E '\n' { printf("result = %d\n", $2); } | /* empty */ { /* empty */ } ;E : E '*' E { $$ = $1 * $3; } | T_NUMBER { $$ = $1; } ;%%int main() { return yyparse();} makefile
CC = gccOUT = mulOBJ = lex.yy.o y.tab.oMUL_L = mul.lMUL_Y = mul.ybuild: $(OUT)run: $(OUT) ./$(OUT)clean: rm -f *.o lex.yy.c y.tab.c y.tab.h y.output $(OUT)$(OUT): $(OBJ) $(CC) -o $(OUT) $(OBJ)lex.yy.c: $(MUL_L) y.tab.c flex $执行:
[xdb@localhost mul]$ make run./mul23*3result = 69二、参考资料
Bison
语法
文件
分析器
分析
用户
代码
输入
重要
接下来
乘法
乘法器
信息
动作
原样
参考资料
变量
句子
字段
工具
扩展名
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
瑰夏咖啡
有格互联网科技
北京路客互联网科技有限公司
互联网科技保险
互联网与科技发展
网络科技有限互联网
互联网科技开发公司
互联网金融与金融科技
小马过河互联网科技
上海喔噻互联网科技
菲比寻常互联网科技
互联网科技网站
互联网科技公司名称
武汉健翔互联网络科技有限公司
想开互联网科技公司怎么样
科技类公司包括互联网吗
互联网科技公司营业执照怎么办理
长沙互联网科技
前海云享互联网科技
小牛互联网科技有限公司地址
互联网科技企业
百单网互联网科技有限公司
广州大一互联网络科技有限公司
狮子座互联网科技有限公司
易通互联网络科技有限公司
互联网科技博主是什么意思
工业互联网山东科技大学
宇信科技在杭州互联网排第几
广州智享互联网科技
陕西彩京云互联网科技有限公司