BISON语法分析工具.doc

BISON语法分析工具.doc

ID:49761932

大小:46.00 KB

页数:9页

时间:2020-03-04

BISON语法分析工具.doc_第1页
BISON语法分析工具.doc_第2页
BISON语法分析工具.doc_第3页
BISON语法分析工具.doc_第4页
BISON语法分析工具.doc_第5页
资源描述:

《BISON语法分析工具.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、.自动语法分析工具Bison (2015-01-3012:42:55)转载▼标签: 杂谈    BISON用于语法分析器的自动生成,它可以很方便地生成一个所谓的抽象语法树, 树的每一个子树都代表了一个特定的语法成分,便于后期处理。这个工具可以在网上下载获得。化点时间学习这个工具的用法,并用于SQL语言的分析,可以让我们把精力专注在语法规则上,而不是具体的分析函数编写上。对整个DBMS来说,使用自动化工具进行语言处理程序的自动生成,使得语言分析模块成为最可靠最方便维护的模块之一。BISON源文件的结构     我们需要按照BISO

2、N的要求,书写BISON的源程序(gramma.y)。遵循它的规则是必须的,BISON会把它的源文件翻译为C文件。因此,BISON是编译程序的翻译器。BISON的源文件通常由八个部分组成:一.    自由定义部分:%{页脚.%}这部分被BISON原封不动地复制到输出的.C文件中。通常用于定义一些在规则程序中需要使用的一些常量,函数原形等。 二.语法栈的联合(UNION)结构语法分析程序使用一个堆栈来存放规约到的各个语法成分,堆栈用一个数组表示,这个数组的每个元素需要能够描述每一个语法成分,所以采用一个UNION:%union{}

3、 Union中的每一个项,都是一个语法规则的每一个非终结符;以整数四则表达式为例:exp:exp‘’exp    

4、exp‘-‘exp    

5、exp‘*’exp    

6、exp‘/’exp    

7、‘(‘exp‘)’    

8、lt_integer;lt_integer:LT_INTEGER;页脚.这里有两个语法规则,对应了两个非终结符号:exp 是表达式, lt_integer表示整数常量(LT_INTEGER表示词法分析程序返回的一个确认为整数的单词)。对应的,这个union可以书写为: %{ par_exp_t*     

9、 exp; int             lt_integer;}; 其中par_exp_t用来描述被识别出的exp的信息,int存放被识别出的整数的值。上面的例子很简单,所以union只有两个字段;在DM6的语法分析程序中,这个UNION大约有490个字段,也就是,大概有490个语法规则产生式。当然你也可以不采用这个UNION, 那么每一个规约出来的语法成分都是一个C指针, 需要上层做类型转换来解释。 三.非终结符的类型声明上面定义了分析栈的UNION类型, 还需要把字段名与语法非终结符号对应起来:%type<字段名>  非

10、终结符号 如上例,这部分应该写为:%typeexp%typelt_integer页脚. 看上去似乎有点多余,每一行都是一个简单的重复。但前面一个表示的是UNION中对应的字段名,后一个是语法符号;如果我们把UNION改为: %{par_exp_t* eeee;int         iiii;}; 那么对应的类型声明需要改为:%typeexp%typelt_integer; 这种不一致的写法,事实上会造成混乱,所以应该采用上面一致的写法。 四:单词(token)声明语法分

11、析的输入是连续的有确定意义的单词。下面需要声明分析程序支持的单词:%tokenLT_INTEGER对于SQL语法,关键字如:SELECT,FROM,WHERE等,都可以定义为单词: %tokenKW_SELECT,KW_FROM%tokenKW_WHERE页脚. 五. 确定运算符的优先级%left‘-‘‘’%left‘*’‘/’%left‘(‘‘)’%left表示是左结合的,表示先规约左边的产生式,反应到表达式计算中:123 别识别为:((12) 3), 而不是 (1(23)) 优先级低的符号列在前面,高有限级的符号列在后面;同

12、一行的表示优先级相同。所以上面的书写方式, 符合“先乘除,后加减,括号最优先”的原则。 除了%left以后,还有%right,%nonassoc等用来只是右结合,或者不结合等说明符号,可查看bison的详细说明。 六.声明语法的开始符号%startexp这是告知bison, 这是语法最终需要规约的非终结符号。 七.语法规则定义页脚.这是语法分析程序的核心定义部分,用%%开始, 前面已经列出了关于表达式的语法规则:%%exp:exp‘’exp    

13、exp‘-‘exp    

14、exp‘*’exp    

15、exp‘/’exp   

16、 

17、‘(‘exp‘)’    

18、lt_integer lt_integer:LT_INTEGER; 八.自由添加的C源代码 在语法规则定义部分的后面,可以用%%开始,定义C的辅助代码。这部分代码将被原封不动地复制到输出的.C文件中。 给语法规则配上规约动作规约动

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。