加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

语法分析——Bison介绍以及Flex、Bison联合编译

发布时间:2020-12-15 04:20:00 所属栏目:百科 来源:网络整理
导读:? ? ? ? 语法分析使用Bison,在前面的博文中提到一些如何在Windows下安装Bison,但是从语法分析开始,我还是在Linux下写实验的,安装了ubuntu,因此需要在Linux下安装Bison,这个安装是比较简单的,只需要在命令行中敲入如下命令: sudo apt-get install bis

? ? ? ? 语法分析使用Bison,在前面的博文中提到一些如何在Windows下安装Bison,但是从语法分析开始,我还是在Linux下写实验的,安装了ubuntu,因此需要在Linux下安装Bison,这个安装是比较简单的,只需要在命令行中敲入如下命令:sudo apt-get install bison,同样,安装Flax:sudo apt-get install flex

? ? ? ??如,写好的Bison代码文件名为syntax.y,则使用下面的语句进行编译:bison syntax.y

? ? ? ??那么,如何进行Flex和Bison的联合编译呢?首先需要在Bison代码文件syntax.y中引用lex.yy.c:#include "lex.yy.c"

? ? ? ??在Flex源代码中需要使规则部分的每一action都返回相应的词法单元,如:

? ? ? ??? ? ? ??? ? ? ??? ? ? ??? ? ? ??? ? ? ??%{

? ? ? ??? ? ? ??? ? ? ??? ? ? ??? ? ? ??? ? ? ???? ? ? ??#include "syntax.tab.h"

? ? ? ??? ? ? ??? ? ? ??? ? ? ??? ? ? ??? ? ? ??? ? ? ??...

? ? ? ??? ? ? ??? ? ? ??? ? ? ??? ? ? ??? ? ? ??%}

? ? ? ??? ? ? ??? ? ? ??? ? ? ??? ? ? ??? ? ? ??...

? ? ? ??? ? ? ??? ? ? ??? ? ? ??? ? ? ??? ? ? ??%%

? ? ? ??? ? ? ??? ? ? ??? ? ? ??? ? ? ??? ? ? ??"+" ? ? ? ??{return PLUS;}

? ? ? ??? ? ? ??? ? ? ??? ? ? ??? ? ? ??? ? ? ??"-" ? ? ? ??{return SUB;}

? ? ? ??编译Flex文件:flex lexical.l

? ? ? ??使用Bison编译代码时,需要加上"-d"的参数:bison -d syntax.y

? ? ? ??在main函数中需要调用yyparse()和yyrestart()函数

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??int main(int argc,char** argv)?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??{?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ??if (argc <= 1) return 1;?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ??FILE* f = fopen(argv[1],"r");?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ??if (!f)?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ??{?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ??? ? ? ??perror(argv[1]);?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ? ? ? ? ??return 1;?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ??}?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ??yyrestart(f);?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ??yyparse();?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ??return 0;?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??}

? ? ? ??最后进行mian.c一起编译:gcc main.c syntax.tab.c -lfl -ly -o parser

? ? ? ??若想对一个测试文件test.c进行语法分析,则只需要在命令行中输入:./parser test.c


参考内容:许畅老师班的《指导攻略1》

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读