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: 宋体;">的函数,这个函数需要用户自己定义,以便能捕获一些用意义的信息,比如:语法错误出现的行号,附近的单词等。