Skip to content

Latest commit

 

History

History
57 lines (37 loc) · 2.27 KB

miniob-sql-parser.md

File metadata and controls

57 lines (37 loc) · 2.27 KB

这部分内容会介绍一些如何对miniob中的词法语法分析模块进行开发与调试,以及依赖的工具。

如何编译词法分析和语法分析模块

词法分析代码lex_sql.l使用下面的命令生成C代码:

flex --header-file=lex.yy.h lex_sql.l

生成 lex.yy.clex.yy.h文件。

语法分析代码yacc_sql.y使用下面的命令生成C代码:

bison -d -b yacc_sql yacc_sql.y

将会生成代码yacc_sql.tab.c和yacc_sql.tab.h。

其中-b表示生成的源码文件前缀,-d表示生成一个头文件。

注意:flex 使用 2.5.35 版本测试通过,bison使用3.7版本测试通过(请不要使用旧版本,比如macos自带的bision)。

注意:当前没有把lex_sql.l和yacc_sql.y加入CMakefile.txt中,所以修改这两个文件后,需要手动生成c代码,然后再执行编译。

如何调试词法分析和语法分析模块

对于lex_sql.l,参考代码中的YYDEBUG宏,可以在lex_sql.l中增加调试代码和开启宏定义,也可以在编译时定义这个宏,比如直接修改lex.yy.c代码,在代码前面增加#define YYDEBUG 1。注意,lex.yy.c是自动生成代码,执行flex命令后,会把之前的修改覆盖掉。示例:

#include "yacc_sql.tab.h" 
extern int atoi(); 
extern double atof(); 
char * position = ""; 
#define YYDEBUG 1 // 可以在这里定义 YYDEBUG宏 
#ifdef YYDEBUG 
#define debug_printf  printf   // 也可以调整lex_sql.l代码,在定义YYDEBUG宏的时候,做更多事情 
#else 
#define debug_printf(...) 
#endif // YYDEBUG

对于yacc_sql.y,可以在yyerror中输出错误信息,或者直接使用调试工具设置断点跟踪。

如何手动安装bison

  1. 下载一个合适版本的bison源码 下载链接,比如 bison-3.7.tar.gz

  2. 在本地解压。tar xzvf bison-3.7.tar.gz,然后进入bison-3.7: cd bison-3.7;

  3. 执行 ./configure --prefix="your/bison/install/path"

  4. 执行 make install

  5. 安装完成

注意: 安装后的Bison在指定的安装目录的bin下,如果不调整PATH环境变量,无法直接使用到最新编译的bison二进制文件,需要写全路径使用,比如 your/bison/install/path/bin/bison。