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联合编译的过程。