语法分析——Bison介绍以及Flex、Bison联合编译
? ? ? ? 语法分析使用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)? ? ? ? ??最后进行mian.c一起编译:gcc main.c syntax.tab.c -lfl -ly -o parser ? ? ? ??若想对一个测试文件test.c进行语法分析,则只需要在命令行中输入:./parser test.c 参考内容:许畅老师班的《指导攻略1》 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |