Coding style 如何写一篇短文?

Coding style 如何写一篇短文?,coding-style,verilog,syntax-checking,Coding Style,Verilog,Syntax Checking,在我的日常工作中,我和团队中的其他人用Verilog AMS编写了许多硬件模型,Verilog AMS是一种主要由商业供应商和一些开源模拟器项目支持的语言。 有一件事会使相互支持的代码更加有用,那就是使用一个LINTER来检查我们的代码是否存在常见问题,并帮助实施共享代码格式样式。 我当然希望能够添加我自己的规则,在我向自己证明它们的实用性之后,将它们推广到团队的其他成员。。 我不介意做必须做的工作,但当然也希望利用其他现有项目的工作 在yacc或bison格式中使用允许的语言语法会给我带来帮助

在我的日常工作中,我和团队中的其他人用Verilog AMS编写了许多硬件模型,Verilog AMS是一种主要由商业供应商和一些开源模拟器项目支持的语言。 有一件事会使相互支持的代码更加有用,那就是使用一个LINTER来检查我们的代码是否存在常见问题,并帮助实施共享代码格式样式。 我当然希望能够添加我自己的规则,在我向自己证明它们的实用性之后,将它们推广到团队的其他成员。。 我不介意做必须做的工作,但当然也希望利用其他现有项目的工作

在yacc或bison格式中使用允许的语言语法会给我带来帮助吗? 或者我应该把每一个语言语句都吸收到一个perl字符串中,然后使用模式匹配来查找我不喜欢的东西吗


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

在试图找到我的答案时,我发现这一点-如果你使用Java(因此也有想法),IDE可能会有用

yacc
/
bison
肯定会给你一个支持,因为良好的linting需要解析程序。Regex(至少是真正的Regex)可能涵盖一些琐碎的情况,但编写Regex不匹配但风格仍然不好的代码很容易。

ANTLR看起来是更常见(我以前听说过)的YACC/BISON方法的另一种途径,它也通常使用LEX/FLEX作为前端

快速阅读FLEX手册页会让我觉得它可能是那种regex类型想法的框架

好的。。我会让这个过程持续一段时间,然后看看我能以多快的速度构建一个原型解析器


再长一点

lex/flex和yacc/bison提供了易于使用、易于理解的lexer和parser生成器,我真的建议这样做,而不是用Perl之类的程序来完成。正则表达式是分离结构相对固定但并非完全固定的字符串的强大工具。对于任何真正的编程语言,如果没有真正的Lexer/Parser(tm),状态机的大小都会变得难以管理。想象一下,处理关键字、标识符、运算符、无关括号、无关分号和注释的所有可能交错,这在Verilog AMS中是允许的,仅使用正则表达式和过程代码即可

不可否认,这里有一个实质性的学习曲线,但是编写一个可以用于flex和bison的语法,并在bison生成的语法树上做一些有用的事情,这将比编写大量的特殊大小写字符串处理代码更好地利用您的时间,而这些代码首先更自然地使用语法树进行处理。此外,您通过这种方式学习编写的内容将真正拓宽您的技能范围,而编写一堆乱七八糟的Perl代码是无法做到的,因此,如果您有办法,我强烈推荐;-)


此外,如果您懒惰,请查看Eclipse插件,这些插件为Verilog和VHDL进行语法突出显示和基本重构。上一次我检查时,它们处于一种难以置信的原始状态,但是它们可能有一些您正在寻找的代码,或者至少有一段基线代码需要查看,以便更好地为您自己的开发方法提供信息。

我已经编写了一些verilog解析器,如果您最喜欢的编程语言是C/C++/Java,我建议使用PCCTS/ANTLR。有一个你可以开始的方法。我最喜欢的解析器生成器是基于CommonLisp的


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

不要低估过梁的工作量。解析是很容易的部分,因为您有工具(bison、flex、ANTLR/PCCTS)来自动化大部分解析

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

<>我在写一个Link之前认真考虑其他可能的解决方案,除非用户的数量和潜在的节省时间来证明开发时间的合理性。

我的“IDE”是Cadence库管理器+ NeDIT,用(BuildIn)Verilog语法高亮显示,添加自己的模式来支持Verilog A和Verilog AMS。我认为Java对我正在做的工作没有多大价值。请参阅,了解超出解析范围的通用分析机制。DMS用于构造自定义工具。即便如此,为VerilogAMS构建一个Linter仍然是一个相当大的任务。