PostgreSQL 源码解读(167)- 查询#87(基础知识-语法分析器Bison)
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,输入一条SQL语句,PostgreSQL如何解析输入的SQL,识别SQL类型以及基表/字段等信息?接下来的几节将逐一进行解析.本节介绍了开源工具语法分析器Bison.一、Bison基本概念Bison是
千家信息网最后更新 2025年01月23日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安全错误
数据库的锁怎样保障安全
数据库技术的发展过程
旅行社 数据库
阿里云服务器被锁定怎么解锁
太仓工业无线串口服务器
交通银行软件开发岗位笔试什么
网络安全工作网络舆情
远程服务器管理工具使用
油田公司网络安全ppt
数据库集群+访问层
好用的tftp服务器
网络技术上网日志
数据库扫描 python
网络安全机房工作日志
win7使用的数据库类型
实用网络技术书籍
ios 数据库地址
人脸识别如何保存到数据库
远程操作mysql数据库
贵州重点项目数据库
广东汽车软件开发报价
创建并配置单实例数据库
亲家网络技术好吗
山东中合汇富网络技术公司怎么样
区块链的分布式数据库的定义
AI算法怎么用于软件开发
99传奇服务器
国家网络安全央视宣传视频
利用网络技术收集各类信息
数据库中size的默认大小
计算机网络技术3加2学什么