语法分析使用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