My very first footprint in the GNU open-source community

What happens today deserves a record.

I had reported a small issue to the GNU Bison mail-list last week about some header guard conflicts.
The problem is so trivial that I don’t even except a serious response.
However, a bunch of emails pop up today telling me that the project maintainer decides to fix the problem and make a new patch. My name is now in the “THANKS”list. Ouch!

For the detail, see http://lists.gnu.org/archive/html/help-bison/2012-05/index.html

Preprocessor for Verilog HDL

现在做的博后需要设计一个异步电路综合软件,我选择Verilog作为设计输入,于是乎最近就生生扎入了编译器的无底深渊。

Verilog的Parser写的差不多了,大概需要的语法特性都能读入并转化为数据结构,但是宏处理和文件嵌入还没解决。传统上这是预处理的事,也就是将包含include的多文件合并成一个文件并将所有的宏都替换掉。

自己也能写,不过估计又得花很长时间,于是搜了搜。有人建议LLVM的CLang,不过看看之后还是觉得太大。后来找到了Verilog-Perl。这是Wilson Snyder用C++和Perl写的一个Perl软件包。其中包含一个支持Verilog和SystemVerilog的预处理,不过有一部分是Perl实现的。这位老哥写的程序还是很牛的,于是就准备用这个。

开始觉得很简单,可是看着看着就郁闷了。这位老哥成心不让人好过是咋地,程序里面类套类,用了无数C的遗留代码,更抓狂的是其中宏变量存储居然是用Perl实现的。就是说顶层是Perl,核心是C++和一部分C,但有调用了很多Perl。无奈的发现我需要把所有的Perl都替换掉。

我就不说整个过程是多么崩溃了,反正代码是彻底删改了两次。最后终于决定只做最小改动先把软件包用上再说(这位老哥应该是个实用主义者,代码没啥优雅的逻辑,完全是补丁满天飞,想看懂还真不太容易)。

改得差不多了。现在还有些小问题没解决,比如说他用的文件处理函数不能正确地读相对路径,不知道是我还没理解对还是本来就有问题。估计快搞定了。

代码放在https://github.com/wsong83/vpreproc了,有兴趣的可以瞧瞧。

我用了boost_filesystem和boost_program_options,所以编译需要boost library。