首页 功能单元最大行数模板

功能单元最大行数模板

举报
开通vip

功能单元最大行数模板文档名称:作者:日期:1分析功能单元这里指的是函数,即整个项目中所有.C文件的函数的最大有效行数,针对找到的开源工具,有个可以利用:CandC++CodeCounter和makeheaders其中CandC++CodeCounter在《功能单元最大扇入扇出工具分析》中已经介绍,其中有这样的功能,即列出所有函数的LOCMakeheaders能够把.c文件中的全局变量和函数定义抽取出来,自动生成头文件。因此一种思路是根据makeheaders和CandC++CodeCounter的代码抽取出来,在此基础上进行字符串的匹...

功能单元最大行数模板
文档名称:作者:日期:1 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 功能单元这里指的是函数,即整个项目中所有.C文件的函数的最大有效行数,针对找到的开源工具,有个可以利用:CandC++CodeCounter和makeheaders其中CandC++CodeCounter在《功能单元最大扇入扇出工具分析》中已经介绍,其中有这样的功能,即列出所有函数的LOCMakeheaders能够把.c文件中的全局变量和函数定义抽取出来,自动生成头文件。因此一种思路是根据makeheaders和CandC++CodeCounter的代码抽取出来,在此基础上进行字符串的匹配,这种思路虽然可以实现,但是不如解析c的语法来实现可靠。第二种 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 即是基于c的语法分析来实现。本文的主要目的就是介绍搜集到的常用的c的解析器。cscope2.1简介度量工具名称cscope网址HYPERLINK"http://cscope.sourceforge"http://cscope.sourceforge.net/操作方式命令行实现语言C++适用的操作系统Linux可以度量的属性LOCMVCCOMLOC/COMMVG/COMFan-outFan-inHKSNOMWMCREJ备注开源,有源代码,可分析后在基础上修改Cscope的功能通过它的子命令“find”来实现。csfindc|d|e|g|f|i|s|tnames:查找C代码符号g:查找本定义d:查找本函数调用的函数・c:查找调用本函数的函数t:查找本字符串«e:查找本egrep模式f:查找本文件i:查找包含本文件的文件2.2工具优缺点总结Cscope是AT&T官方发布的Unix的一部分,cscope是一个C语言的浏览工具,通过这个工具可以很方便地找到某个函数或变量的定义位置、被调用的位置等信息。目前支持C和C++。cscope自身带一个基于文本的用户界面,不过gvim提供了cscope接口,因此可以在gvim中调用cscope方便快捷地浏览源代码。也可以使用单独的命令行。缺点:linux平台下使用。在HYPERLINK"http://iamphet.nm.ru/cscope%e6%9c%89"http://iamphet.nm.ru/cscope有SergeyKhorev预编译的一个Win32版本的cscope这个版本的cscope可以很好的与windows版本的vim搭配使用。2.3实例下面是一个最简单的将Cscope跑起来的例子。Cscope安装./configuremakemakeinstall建立符号数据库cscope-Rbq运行cscope,出现下面菜单:FindthisCsymbol:Findthisfunctiondefinition:Findfunctionscalledbythisfunction:Findfunctionscallingthisfunction:Findthistextstring:Changethistextstring:Findthisegreppattern:Findthisfile:Findfiles#includingthisfile:Flex+Bison3.1简介度量工具名称Flex+Bison网址HYPERLINK"http://www.g"http://www.gnu.org/software/bison/操作方式命令行实现语言C适用的操作系统Linux可以度量的属性备注一些介绍本工具的网址:HYPERLINK"http://www.cppblog.com/woaido"http://www.cppblog.com/woaidongmao/archive/2008/11/23/67635.htmlHYPERLINK"http://www.cppblog.com/woaido"http://www.cppblog.com/woaidongmao/archive/2008/11/30/68226.html3.1.1FLEX是一个自动化工具,可以按照定义好的规则自动生成一个C函数yylex(),也成为扫描器(Scanner)。这个C函数把文本串作为输入,按照定义好的规则分析文本串中的字符,找到符合规则的一些字符序列后,就执行在规则中定义好的动作(Action)。例如在规则中可以这样定义:如果遇到一个换行字符\n,那么就把行计数器的值加一。*1Flex文件就是一个文本文件, 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 包括定义好的一系列词法规则。文件的命名习惯上以小写字母l(L)来作为文件后缀。如果为了清晰,也可以用.fix或者.flex作为文件的后缀名。Flex文件完成后,就执行下列命令:$flexexample.flex这个命令执行后将生成一个C文件,默认文件名为lex.yy.c。这个C文件主要内容就是函数yylex()的定义。如果要直接将这个文件编译成为一个可执行程序,还有一些要注意的地方。如果在Flex文件中没有提供main()函数的定义,那么这个C文件中不会有main()函数。此时单独编译这个C文件的时候,一定要加上-lfl的连接库参数;若提供了main()函数,就不必要提供这个连接库参数了。连接库libfl提供了一个缺省的main函数。缺省的main()函数中只是简单地调用yyflex()函数,而自己提供的main()函数则可以根据需要加入许多其他的处理代码。3.1.2Bisonbison是替代yacc的语法分析程序生成器.yacc是YetAnotherCompilerCompiler的缩写.bison又是什么呐是一个生成可以分析文本文件结构的程序的程序.用户不用直接编写程序而只用确定好如何分析这些文本文件的规则就可以了.这种文本结构应用的例子举不胜举,其中一个就是计算器(calculator).给定一个字符串:1+2*3人可以马上计算出结果是7。为什么呢?因为结构。我们的大脑知道如何解释这个字符串。但是,计算机并不知道,Bison就是一个通过将这个字串用如下方法提供给编译器以帮助计算机理解工具:+/\从数的底部开始,遇到数2和3,它们通过乘法符号连接在一起,于是计算机将2和3进行乘积运算。计算结果暂时存储起来,然后计算机发现2*3的结果与数1通过加法符号连接在一起。将前面的结果再加1就得到了7。在计算过程中,无论多复杂的计算也都能够分解成树形结构,计算机只需要从底层开始,一级一级地向上计算,直到计算到最顶层就可以得到正确的答案。下面根据bison手册中的 说明 关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书 ,给出一个完整的中缀符号计算器”的bison输入文件语法规则文件(包括了词法分析器):calc.y*//*Infixnotationcalculator.%{#defineYYSTYPEdouble#include#include#include#includeintyylex(void);voidyyerror(charconst*);%}/*Bisondeclarations.*/%tokenNUM%left'-''+'%left'*''/'%leftNEG/*negation--unaryminus*/%right'A'/*exponentiation*/%%/*Thegrammarfollows.*/input:/*empty*/|inputlineline:J'\n'|exp'\n'{printf("\t%.1Og\n",$1);}exp:NUM{$$=$1;}|exp'+'exp{$$=$1+$3;}|exp'-'exp{$$=$1-$3;}|exp'*'exp{$$=$1*$3;}|exp'/'exp{$$=$1/$3;}|'-'exp%precNEG{$$=-$2;}|exp'A'exp{$$=pow($1,$3);}1'('exp')'{$$=$2;}J%%//词法分析器intyylex(void){intc;/*Skipwhitespace.*/while((c=getchar())==''||c=='\t')/*Processnumbers.*/if(c=='.'||isdigit(c)){ungetc(c,stdin);scanf("%lf",&yylval);returnNUM;}/*Returnend-of-input.*/if(c==EOF)return0;/*Returnasinglechar.*/returnc;}intmain(void){returnyyparse();}voidyyerror(charconst*s){fprintf(stderr,"%s\n",s);}根据上面的语法规则文件(包括词法分析器),用bison生成计算器的代码:bisoncalc.y会产生calc.tab.c文件,编译calc.tab.c文件:cc-lm-ocalccalc.tab.c就产生了calc可执行文件,运行示例如下:$./calc4+4.5-(34/(8*3+-3))6.880952381-56+2-543.2工具优缺点总结优点:功能强大,可以实现大所属的静态分析,而且具有很高的精度。资料齐全。缺点:比较复杂,掌握起来有一些难度。3.3实例创建一个简单的扫描器下列例子来自于Flex的手册。并在Windows+Cygwin+bison+flex+gcc的环境下编译运行。(1)编辑Flex语法文件。/*name:example.flex*/intnum_lines=0,num_chars=0;%%\n++num_lines;++num_chars;.++num_chars;%%intmain()yylex();printf("#oflines=%d,#ofchars=%d\n",num_lines,num_chars);return0;}(2)生成扫描器的C文件$flexexample.flexTheoutputislex.yy.cLemon4.1简介度量工具名称Lemon网址HYPERLINK"http://www.hwaci.com/sw/lem"http://www.hwaci.com/sw/lemon/lemon.html操作方式命令行实现语言C适用的操作系统Linux可以度量的属性备注Lemon是一个C或者C++语言的语法分析器生成器。它和“bison”与“yacc”的功能是一样的,但它不是“bison”或者“yacc”的简单复制。为了减少编写代码的错误,它使用了一种不同的语法。Lemon使用了一种更为高级的分析引擎,运行速度比“bison”与“yacc”要更快,并且该引擎是可重入的和线程安全的。更进一步的,Lemon实现了能够消除资源泄漏的特性,适合于长时间运行的程序例如GUI或者嵌入式控制器中。下面是对lemon语法分析生成器的一个简介。操作的原理lemon的主要目标是把一个特定语言的上下文无关文法(CFG翻译成C语言实现的该语言的语法分析器。程序有两个输入:语法规范分析器模板文件典型的,程序员只需提供语法规范即可。Lemon自带了一个语法分析器模板,这对大多数的应用足够了。如果需要的话,用户可以替换一个新的分析器模板文件。根据命令行参数,Lemon会产生下面文件中的一个到三个:分析器的C语言代码;一个头文件,为每个终结符定义了一个整型ID;描述产生的语法分析器的状态的信息文件。默认情况下,上面的三个文件都会产生。如果使用了“-n”选项,则不会产生头文件;如果使用“-q”选项,信息文件则不会产生。语法规范文件是一个以“.y”为后缀的文件。在文档的例子中,设定规范文件的名称是“gram.y”。典型的使用方式是:>lemongram.y上面的命令会产生“gram.c”、“gram.h”、“gram.out”三个文件。第一个就是语法分析器,第二个就是为所有的终结符定义了数值的头文件,最后一个是分析器使用的状态自动机的说明。完整的源代码包含在两个文件中,lemon.c本身就是产生器本身。一个单独的文件lempar.c是lemon产生语法分析子程序需要的模板文件。也可获取lemon的有关文档。4.2工具优缺点总结同Flex+Bison。4.3实例makeheaders5.1简介度量工具名称makeheaders网址HYPERLINK"http://www.hwaci.com/sw/mkhdr/"http://www.hwaci.com/sw/mkhdr/操作方式命令行实现语言C++适用的操作系统windows可以度量的属性备注根据.c文件,自动生成包含全局变量和函数 声明 无利益冲突声明中华医学会杂志社职业健康检查不够规范教育部留学服务中心亲友住房声明 的头文件。4.2工具优缺点总结此工具可以定位到.c文件中的所有函数,因此这部分代码可以利用,这是此工具的最大利用价值。只有一个源代码文件,因此比较简单。下面代码是针对找到的函数定义进行处理:staticintProcessMethodDef(Token*pFirst,Token*pLast,intflags){Token*pCode;Token*pClass;char*zDecl;Decl*pDecl;Stringstr;inttype;Illiprintf("\ntestxxxx'n");IllipCode=pLast;pLast=pLast->pPrev;while(pFirst->zText[O]==P){intrc=1;switch(pFirst->nText){case6:rc=strncmp(pFirst->zText,"PUBLIC",6);break;case7:rc=strncmp(pFirst->zText,"PRIVATE",7);break;case9:rc=strncmp(pFirst->zText,"PROTECTED",9);break;default:break;}if(rc)break;pFirst=pFirst->pNext;}pCIass=FindDeclName(pFirst,pLast);if(pCIass==0){fprintf(stderr,"%s:%d:Unabletofindtheclassnameforthismethod\n",zFilename,pFirst->nLine);return1;}pDecl=FindDecl(pClass->zText,pClass->nText);if(pDecl==0||(pDecl->flags&TY_Class)!=TY_Class){pDecl=CreateDecl(pClass->zText,pClass->nText);DeclSetProperty(pDecl,TY_Class);}Stringlnit(&str);if(pDecl->zExtra){StringAppend(&str,pDecl->zExtra,0);SafeFree(pDecl->zExtra);pDecl->zExtra=0;}type=flags&PS_PPP;if(pDecl->extraType!=type){if(type&PS_Public){StringAppend(&str,"public:\n",0);pDecl->extraType=PS_Public;}elseif(type&PS_Protected){StringAppend(&str,"protected:\n",0);pDecl->extraType=PS_Protected;}elseif(type&PS_Private){StringAppend(&str,"private:\n",0);pDecl->extraType=PS_Private;}}StringAppend(&str,"",0);zDecl=TokensToString(pFirst,pLast,";\n",pClass,2);/////printf("\n%d\n",pClass->nLine);/////StringAppend(&str,zDecl,0);SafeFree(zDecl);pDecl->zExtra=StrDup(StringGet(&str),0);StringReset(&str);return0;4.3实例Rtc.cintmax(inta,intb){intc;c=a;}intmin(inta,intb){intc;c=a;}自动生成头文件rtc.h:/*Thisfilewasautomaticallygenerated.Donotedit!*/intmin(inta,intb);intmax(inta,intb);6其他clang是苹果公司开发的C语言、C++ObjectiveC、ObjectiveC++语言的轻量级编译器。源代码发布于BSD协议下。TheRigiC-LanguageParser满足要求,但未找到下载链接。HYPERLINK"http://www.softlab"http://www.softlab.ntua.gr/~kkontog/rigiparse.htmlParserGeneratorParserGenerator是一款在windows下编写lex/yacc程序的工具.可以到HYPERLINK"http://www.bumblebeesoftware.com/dow"http://www.bumblebeesoftware.com/downloads.htm下载。7总结若要精确的对代码进行静态分析,则最好使用语法解析器,但这些语法解析器都是运行在linux下的。若要自己写代码,可以利用makeheaders中代码,然后自行编写代码确定函数边界。
本文档为【功能单元最大行数模板】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_769254
暂无简介~
格式:doc
大小:25KB
软件:Word
页数:0
分类:
上传时间:2018-05-18
浏览量:0