如何写一个短信?

时间:2008-09-16 09:26:08

标签: coding-style verilog syntax-checking

在我的日常工作中,我和团队中的其他人在Verilog-AMS中编写了许多硬件模型,这种语言主要由商业供应商和一些开源模拟器项目支持。 支持彼此代码更有帮助的一件事是LINTER,它会检查我们的代码是否存在常见问题,并协助强制执行共享代码格式化风格。 我当然希望能够添加自己的规则,在我向自己证明自己的实用程序之后,将它们提升给团队的其他成员。 我不介意做必须完成的工作,但当然也想利用其他现有项目的工作。

以yacc或bison格式使用允许的语言语法是否能让我站起来? 或者我应该将每个语言语句吮吸到perl字符串中,并使用模式匹配来查找我不喜欢的内容?

(大多数语法和编译错误很容易被商业工具捕获..但我们有一些自己的扩展。)

7 个答案:

答案 0 :(得分:15)

lex / flex和yacc / bison提供易于使用,易于理解的词法分析器和解析器生成器,我真的建议做类似的事情,而不是在程序上做这样的事情。 Perl的。正则表达式是用于相对但不是完全固定的结构来撕开字符串的强大功能。使用任何真正的编程语言,只要没有Real Lexer / Parser(tm),状态机的大小就会变得无法管理。想象一下处理关键字,标识符,运算符,无关括号,无关分号和Verilog AMS等允许的注释的所有可能交错,仅使用正则表达式和过程代码。

不可否认的是,那里有一个实质性的学习曲线,但是编写一个可以用于flex和bison的语法,并在从野牛出来的语法树上做一些有用的事情,将会更好地利用你的时间而不是编写大量特殊情况的字符串处理代码,这些代码首先使用语法树更自然地处理。另外,你学习用这种方式编写的内容将真正拓宽你的技能,编写一堆hacky Perl代码就不会,所以如果你有办法,我强烈推荐它; - )

另外,如果你很懒,请查看Eclipse插件,它们为Verilog和VHDL进行语法突出显示和基本重构。它们处于一种令人难以置信的原始状态,最后我检查过,但它们可能有一些你正在寻找的代码,或者至少需要一段基线代码来更好地告知你自己的方法。

答案 1 :(得分:2)

我已经编写了几个verilog解析器,如果您最喜欢的编程语言是C / C ++ / Java,我会建议使用PCCTS / ANTLR。您可以从PCCTS/ANTLR Verilog grammar开始。我最喜欢的解析器生成器是Zebu,它基于Common Lisp。

当然,最重要的工作是指定所有的掉毛规则。使用某种语言来指定linting规则也是有意义的。

答案 2 :(得分:2)

不要低估进入短绒的工作量。解析很容易,因为你有工具(bison,flex,ANTLR / PCCTS)来自动化大部分工具。

但是一旦你有一个解析,那么呢?您必须为设计构建语义树。根据输入的复杂程度,您必须详细说明Verilog-AMS设计(即解析参数,展开生成等等。如果您使用这些功能)。只有这样你才能尝试实施规则。

在编写linter之前,我会认真考虑其他可能的解决方案,除非用户数量和潜在的时间节省因此证明了开发时间的合理性。

答案 3 :(得分:0)

在试图找到我的答案时,我在ANTLR上找到了这个 - 可能是有用的

答案 4 :(得分:0)

如果你根本使用Java(以及IDEA),那么IDE的extensions for custom languages可能会被使用

答案 5 :(得分:0)

yacc / bison肯定会让你站起来,因为良好的linting需要解析程序。正则表达式(真正的正则表达式,至少)可能涵盖了琐碎的案例,但很容易编写正则表达式不匹配但仍然不好的样式。

答案 6 :(得分:0)

ANTLR看起来是更常见的替代路径(OK I 之前听说过)YACC / BISON方法,结果通常也使用LEX / FLEX作为前端。

快速阅读FLEX手册页让我觉得它可能是该正则表达式的理念的框架..

好的..我会让这个炖一点,然后看看我能够多快地在一个或另一个中构建一个原型解析器。

再多一点