flex是一个词法分析工具(以单词为单位),它能够识别文本中定义的单词pattern。github地址:https://github.com/westes/flex
GNU bison是语法分析工具,常和flex一起使用,来产生语法树。
具体使用方法可参考两篇博客:
LEX/FLEX词法分析器
flex&bison编写语法分析器
driver
\ cflexor.lex
\ cfparse_misc.h
\ cfparse.y
\ globals.h
\ iverilg.man.in
\ main.c
\ Mainfile.in
\ substit.c
driver目录是iverilog的可执行文件的源码。主要功能是接收命令行参数,启动子命令来实现编译。
我们注意到其中有cflexor.lex和cfparse.y两个特殊文件。cflexor.lex是flex的输入文件,定义了命令行参数格式,如+define+、-y、-f等。而cfparse.y是bison的输入文件,类似一个c语言的模板,经过bison处理后,得到完整的parser源码(cfparser.c)。可以从Makefile.in里得到确认:
cflexor.c: $(srcdir)/cflexor.lex
$(LEX) -s -t $< > $@
cfparse.c: $(srcdir)/cfparse.y
$(YACC) --verbose -t -p cf -d -o $@ $<
注:bison与YACC兼容,在YACC基础上做了改进。
开源仿真工具Icarus Verilog的工作原理
开源仿真工具Icarus Verilog中的命令行参数处理方法
开源仿真工具Icarus Verilog中的预处理ivlpp
开源仿真工具Icarus Verilog中的verilog parser