在我的日常工作中,我和团队中的其他人在Verilog-AMS中编写了许多硬件模型,这种语言主要由商业供应商和一些开源模拟器项目支持.支持彼此代码更有帮助的一件事是LINTER,它会检查我们的代码是否存在常见问题并协助实施共享代码格式化风格.我当然希望能够添加自己的规则,在我向自己证明自己的实用性之后,将它们提升给团队的其他成员.我不介意做必须完成的工作,但当然也是想利用其他现有项目的工作.
使用yacc或bison格式的允许语言语法是否能让我站起来?或者我应该将每个语言语句吮吸到perl字符串中,并使用模式匹配来查找我不喜欢的内容?
(大多数语法和编译错误很容易被商业工具捕获..但我们有一些自己的扩展.)
lex/flex和yacc/bison提供易于使用,易于理解的词法分析器和解析器生成器,我真的建议做类似的事情,而不是像Perl那样在程序上做.正则表达式是用于相对但不是完全固定的结构来撕开字符串的强大功能.使用任何真正的编程语言,只要没有Real Lexer/Parser(tm),状态机的大小就会变得无法管理.想象一下处理关键字,标识符,运算符,无关括号,无关分号以及Verilog AMS等允许的注释的所有可能交错,仅使用正则表达式和过程代码.
不可否认的是,那里有一个实质性的学习曲线,但是编写一个可以用于flex和bison的语法,并在从野牛出来的语法树上做一些有用的事情,将比你写一个更好的时间利用你的时间.大量的特殊情况字符串处理代码,首先使用语法树更自然地处理.另外,你学习用这种方式编写的内容将真正拓宽你的技能,以便编写一堆hacky Perl代码就不会,所以如果你有办法,我强烈推荐它;-)
另外,如果你很懒,请查看Eclipse插件,它们为Verilog和VHDL进行语法突出显示和基本重构.它们处于一种令人难以置信的原始状态,最后我检查了一下,但是它们可能有一些你正在寻找的代码,或者至少需要一段基线代码来更好地告知你自己的方法.