ExASIC
分享让工作更轻松

开源仿真工具Icarus Verilog中的命令行参数处理方法

flex和bison介绍

flex是一个词法分析工具(以单词为单位),它能够识别文本中定义的单词pattern。github地址:https://github.com/westes/flex

GNU bison是语法分析工具,常和flex一起使用,来产生语法树。

具体使用方法可参考两篇博客:
LEX/FLEX词法分析器
flex&bison编写语法分析器

Icarus Verilog中的实现

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

阅读数:
更多文章:文章目录
解惑专区
(支持markdown插入源代码)
欢迎使用ExASIC订阅服务
仅用于ExASIC最新文章通知,方便及时阅读。
友情链接: IC技术圈问答ReCclayCrazyFPGA