版权归原作者所有,如有侵权,请联系我们

[科普中国]-风格检查

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

风格检查主要是检查在程序设计风格方面发现的问题,包括命名规则、变量说明、程序格式、注释的使用结构化程序设计、基本控制结构的使用。

高级综合前的检查和转化Talent2000中VHDL文件的编译中间结果用于综合和模拟,VHDL是面向模拟的语言,并不是所有的VHDL语句都可以综合,在一个实用化高级综合系统中,除了根据可综合子集检VHDL源描述之外,还要求可综合VHDL描述具有一定的风格。在进行高级综合前,必须对VHDL文件编译的中间结果进行处理,包括语句可综合性检查、VHDL描述的可综合性风格检查、循环语句展开和子程序内联。给出了要求VHDL描述具有可综合性风格的原因,实现了面向高级综合的检查、循环语句的展开和子程序内联。1

根据可综合子集的检查VHDL是一种面向模拟的硬件描述语言,它有一些语法现象不能够进行综合,例如对文件的操作,有一些语法现象,在综合的时候可以忽略,比如断言语句。根据VHDL语言的可综合子集,在综合之前对用户的源描述进行检查。

首先定义一个包括综合检查信息的结构,这个结构包括可忽略的语句;表达式和不可综合的语句;表达式的个数。表达式是一个树状结构,每一个节点是一个表达式项或者表达式,表达式项可以是变量、信号、常量、操作符和函数调用。在表达式和每个表达式项中增加caIUnsynCount方法 ,这个方法根据可综合子集检查表达式的可综合性信息。变量、信号和常量根据它们的类型进行综合性检查,操作符根据它们的类型和操作数进行综合性检查,对于函数调用,要对函数体进行综合性检查 。1

综合风格检查一些实用的综合系统对VHDL源描述的风格都有一定限制,在高级综合系统中的这些限制主要来源于VHDL源描述再综合之中的表达和模拟和综合一致性。高级综合的可综合性风格应用于条件语句、分支语句和循环语句。在VHDL语言中,wait语句是一个非常重要的语句,因为wait语句表达了状态、同步和时序信息,VHDL源描述必须保持模拟和综合的一致性,Talent2000高级综合系统中使用状态表示循环、一部分条件和分支语句。1

源代码风格检测工具的实现给出了评价C/C++源代码风格的规则分类和检查工具的总体结构,阐述了代码检查工具的核心技术---扩展词法分析和扩展语法分析,给出了代码检测工具的应用实例。2

代码风格对于软件质量的好处软件质量控制应该贯穿软件的整个生命周期。对于编码的质量控制,虽然有代码风格的要求,但具体的实施却困难重重---没有足够的人力和时间进行代码风格的检查。事实上,软件是人来编制的,许多BUG是人引入的,许多BUG都可以通过代码风格的严格检查来避免。好的代码风格对于软件质量的好处在于:

(1) 可以加快软件开发进度。

(2) 提高软件的可移植性。例如,好的程序风格可以定义宏使得数据类型与操作系统平台无关,提高了软件的 可移植性。

(3) 增加了代码的可维护性。

好的代码风格是由一套编程时所遵循的代码规范来保证的。尽管一个开发小组遵循相同的代码规范,但小组各个成员编码的结果差异仍然很大。人工阅读源代码,检查代码风格,无论是在人力还是时间上都是不可容忍的,一个高效的自动检测工具就成为迫切的需要。Codeclear就是这样一个C/C++源代码风格检查工具,其定义的 C/C++源代码规范包括以下类型:

( 1) 布局类规则:源源代码的头部信息,如代码作者、日期、功能描述等;

( 2) 注释类规则:包括注释位置、数量、哪些变量常量要注释等;

( 3) 命名类规则:包括函数的命名、变量的命名等;

( 4) 表达式和语句类规则;

( 5) 函数类规则;

( 6) 可靠性相关规则;

( 7) 测试性相关规则 。2

代码检测工具总体结构C/C++代码检测工具的总统结构,其主要具有以下主要功能模块:

(1) GUI:用户接口模块;

(2) Profiles Man:规则配置文件管理模块,一 个规则 配置文件定义了一套规则,代码检测工程文件可以通过指定不同的规则配置文件来检测不同的代码规范;

( 3) Project Man:检测工程管理模块,一个检测工程文件定义了一批源代码和用于检测这些源代码的规则配置文件;

( 4) Rules Man:规则管理模块,提供规则的扩展性;

( 5) Violate Info Man:违规信息管理模块。通过该模块,用户可以定制违规信息的报表,如违规信息的 级别等;

( 6) Hooking Files Sys:在线检测模块。提供实时的源代码的监控,一旦用户保存了编辑的源代码,该模块自动对其进行代码风格的检测;

( 7) Analyzer:分析器,是C/C++代码检测工具的核心模块。2

本词条内容贡献者为:

王慧维 - 副研究员 - 西南大学