使用自动化语法分析工具BISON

BISON语言的分析,可以让我们把精力专注在语法规则上,而不是具体的分析函数编写上。对整个DBMS我们需要按照BISON),然后由BISON是编译程序的翻译器。BISON自由定义部分:
/*  语句 这部分被BISON 二.语法栈的联合(UNION) UNION {
 }
 
exp : exp ‘+’ exp
     | exp ‘/’ exp
;
 
是表达式,LT_INTEGER对应的,这个%{
};
 
用来描述被识别出的int只有两个字段;在DM个字段,也就是,大概有490上面定义了分析栈的字段名 
%type <lt_integer> lt_integer
UNION 改为 par_exp_t*  eeee;
那么对应的类型声明需要改为:
 
系统中,采用上面一致的写法。
语法分析的输入是连续的有确定意义的单词。下面需要声明分析程序支持的单词:
对于 SELECT, FROM, WHERE %token KW_SELECT, KW_FROM
%left ‘-‘ ‘+’
 
1 + 2 + 3  (1 + (2 + 3))
; 除了 %right, %nonassoc 的详细说明。
.  
这是语法最终需要规约的非终结符号。
. 这是语法分析程序的核心定义部分,用 exp : exp ‘+’ exp
     | exp ‘/’ exp
;
 
源代码
开始,定义.C给语法规则配上规约动作
 
如上例:
      $$->tag = 1;                   /* B */
 
     | ‘(‘ exp ‘)’
    }    
其中A, B, C, D 生成一个结构,   是一个bison new_node 是一个事先定义的常量。显然,对于不同的规则,需要定义不同的常量类型。象new_node 用来区分是哪个子规则规约的,这里用tag = 1 保留第一个子表达式;$1 保留第二个子表达式;$3 也占一个位置,  ,已经把相应的信息保存到$$ 它把$$ 就是语法树的根。
 
F: 赋给$$最终的函数yyparse()
()是   ,如果一切顺利,那么上例中的  
如果输入的字符串有语法错误,则分析器将停止分析,在退出 yyerror(char*s)<span courier="" new';="" mso-hansi-font-family:="" 'courier="" mso-bidi-font-family:="" new'"="" style="padding: 0px; margin: 0px; font-family: 宋体;">的函数,这个函数需要用户自己定义,以便能捕获一些用意义的信息,比如:语法错误出现的行号,附近的单词等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值