欢迎访问玛尊真服务平台,本站唯一网址:www.isodyi.com,未经明确书面许可,任何人不得擅自使用“玛尊真”等商标。
玛尊真ISO认证服务公司

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 <stdio.h>
%}
%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 = gcc
OUT = mul
OBJ = lex.yy.o y.tab.o
MUL_L = mul.l
MUL_Y = mul.y
build: $(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 $<
y.tab.c: $(MUL_Y)
    bison -vdty $<

执行:


[xdb@localhost mul]$ make run
./mul
23*3
result = 69

二、参考资料

Bison

上一篇:没有了
快速申请办理
称呼: *
电话: *

订单提交后,10分钟内,我们将安排工作人员和您联系!

热点资讯
联系我们
大悟县玛尊真商贸有限公司
电   话:0712-7218610

传   真:0712-7218610

谭经理:18980820575

王主任:135 1821 9792

邮   箱:631063699@qq.com

地   址:湖北省孝感市大悟县城关镇鄂北物流城13栋125号

微信二维码
扫一扫 关注我们
电话:

189-8208-1108

湖北省孝感市大悟县城关镇鄂北物流城13栋125号八戒云创空间-D1-430

ISO体系认证
iso认证
服务体系认证
有机产品认证
OHSAS18001
ITSS认证
信用评级
中国招标企业信用认证
资信等级
重合同守信用
企业信用认证
中国诚信供应商
质量、服务诚信认证
CMMI
CMMI1
CMMI2
CMMI3
CMMI4
CMMI5
系统集成
系统集成一级
信息系统集成二级
信息系统集成三级
信息系统集成四级
涉密信息系统集成
资质许可证
生产许可证认证
GS认证
CCC认证
中国节能认证
十环认证
知识产权

Copyright © 2002-2025

大悟县玛尊真商贸有限公司 版权所有

备案/许可证号:鄂ICP备2025140345号-7   网站建设创新互联
 
QQ在线咨询
客服咨询
咨询热线
189-8208-1108