flex 和bison的安装和使用

1.在ubutu上安装 yacc的命令:

sudo apt-get install flex bison

flex:词法分析器 

   flex是一个词法分析器。用来将一个.l文件生成一个.c程序文件。即生成一个词法分析器。然后读取输入,和正则表达式匹配,再执行相应的动作,实现了程序的功能。

   我们可以发现flex实现在程序外部就可以接受输入的功能。

bison:语法分析器

   根据文法把一系列的记号转换成一个语法分析树。

把两者联合使用可以实现对sql语言的解析。

由于调用这些命令的时候会使用很多命令行语句,即编译过程复杂的时候,我们可以把这些命令行语句写在一个makefile中。

2.首先介绍使用flex的一个例子:

                                            

 第一步:首先我们写一个.l文件,文件中程序就是作图。该程序的功能就是计数器,单词的个数,字符个数,以及行数。

    程序中:分为三个部分。第一部分是%{%}中的部分,用来声明变量。

               第二部分是%%   %%中的部分。是指定的匹配规则。形式为正则表达式 加上 执行动作。其中,正则表达式用来匹配用户输入的内容,一旦匹配成功,则执行对应的动作。

               第三部分是c语言程序部分。调用flex提供的词法分析例程yylex()函数。执行,得到一个c程序。

第二步:在ubutu命令行终端中写入右图中命令。

    该命令的意思是:通过flex将一个.l文件生成一个lex.yy.c的程序。中间那两行文字是程序的输入,2,12,63是程序执行的结果。./a.out是将程序输出的结果保存在这个文件中。

总结:

3.bison的使用

 

     .y文件中的规则定义部分中。包含两部分内容:

    第一部分:终结符的声明。在sql语言中就是SELECT  FROM  WHERE 等这些。

    第二部分:定义了语法。即"ADD" 就是表示一个加法。

    http://www.cnblogs.com/me115/archive/2010/10/27/1862180.html 这个文章中对文法的讲解比较朴素易懂。

4.flex和bison联合编译的过程。

原文地址:https://www.cnblogs.com/lyr2015/p/6099687.html