CN112231278A - 项目工程文件的分析方法、装置、设备及存储介质 - Google Patents

项目工程文件的分析方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN112231278A
CN112231278A CN202011208298.7A CN202011208298A CN112231278A CN 112231278 A CN112231278 A CN 112231278A CN 202011208298 A CN202011208298 A CN 202011208298A CN 112231278 A CN112231278 A CN 112231278A
Authority
CN
China
Prior art keywords
header file
attribute
project
file
information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202011208298.7A
Other languages
English (en)
Inventor
孟晨
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Baidu International Technology Shenzhen Co ltd
Original Assignee
Baidu International Technology Shenzhen Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Baidu International Technology Shenzhen Co ltd filed Critical Baidu International Technology Shenzhen Co ltd
Priority to CN202011208298.7A priority Critical patent/CN112231278A/zh
Publication of CN112231278A publication Critical patent/CN112231278A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • G06F16/164File meta data generation
    • G06F16/166File name conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/10Office automation; Time management
    • G06Q10/103Workflow collaboration or project management

Landscapes

  • Engineering & Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • Theoretical Computer Science (AREA)
  • Strategic Management (AREA)
  • Human Resources & Organizations (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Physics & Mathematics (AREA)
  • Entrepreneurship & Innovation (AREA)
  • Economics (AREA)
  • Human Computer Interaction (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Marketing (AREA)
  • Operations Research (AREA)
  • Quality & Reliability (AREA)
  • Tourism & Hospitality (AREA)
  • General Business, Economics & Management (AREA)
  • Stored Programmes (AREA)

Abstract

本公开提供了一种基于计算机语言的项目工程文件的分析方法,涉及软件工程领域,具体的,涉及软件测试与优化领域。基于计算机语言的项目工程文件包括至少一个头文件,该分析方法包括:根据项目工程的工程路径获取至少一个头文件;对至少一个头文件中的每个头文件的内容进行解析,以获取每个头文件中所声明的属性信息和方法信息;以及输出所获取的属性信息和方法信息。本公开还提供了一种基于计算机语言的项目工程文件的分析装置、设备和存储介质。

Description

项目工程文件的分析方法、装置、设备及存储介质
技术领域
本公开涉及软件工程领域,具体的,涉及软件测试与优化领域,更具体的,涉及一种基于计算机语言的项目工程文件的分析方法、装置、设备及存储介质。
背景技术
软件越来越成为影响产品品质的主要方面,运行高速、性能可靠、轻量级且低成本的软件能够显著提升产品的价值。随着软件开发的不断深入,基于计算机语言的项目工程的项目工程文件也随之增大,这使得在针对项目工程文件进行深度分析以对项目工程进行优化时遇到了挑战。
发明内容
有鉴于此,本公开提供了一种基于计算机语言的项目工程文件的分析方法、装置、设备及存储介质。
本公开的第一方面提供了一种基于计算机语言的项目工程文件的分析方法,所述基于计算机语言的项目工程文件包括至少一个头文件,所述分析方法包括:
根据项目工程的工程路径获取所述至少一个头文件;
对所述至少一个头文件中的每个头文件的内容进行解析,以获取每个头文件中所声明的属性信息和方法信息;以及
输出所获取的属性信息和方法信息。
本公开的第二方面提供了一种基于计算机语言的项目工程文件的分析装置,所述基于计算机语言的项目工程文件包括至少一个头文件,所述分析装置包括:
文件获取模块,配置为根据项目工程的工程路径获取所述至少一个头文件;
文件解析模块,配置为对所述至少一个头文件中的每个头文件的内容进行解析,以获取每个头文件中所声明的属性信息和方法信息;以及
信息输出模块,配置为输出所获取的属性信息和方法信息。
本公开的第三方面提供了一种信息投放设备,包括:
存储器,存储有程序指令;以及
处理器,被配置为执行所述程序指令,以执行本公开第一方面所提供的基于计算机语言的项目工程文件的分析方法。
本公开的第四方面提供了一种计算机可读存储介质,存储有计算机可执行指令,所述指令在被执行时用于实现本公开第一方面所提供的基于计算机语言的项目工程文件的分析方法。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的基于计算机语言的项目工程文件的分析方法的流程图;
图2A至图2C示意性示出了根据本公开实施例的获取头文件的方式;
图3示意性示出了根据本公开实施例的对头文件的内容进行解析的状态转换图;
图4示意性示出了根据本公开实施例的待分析的头文件的示例;
图5示意性示出了根据本公开实施例的用于存储分析内容的链表结构;
图6示意性示出了根据本公开实施例的经分析的头文件的输出的示例;
图7示意性示出了根据本公开另一实施例的基于计算机语言的项目工程文件的分析方法的流程图;
图8示意性示出了图7所示的基于计算机语言的项目工程文件的分析方法的示例过程;
图9示意性示出了根据本公开实施例的基于计算机语言的项目工程文件的分析装置的框图;
图10示意性示出了根据本公开实施例的适于执行基于计算机语言的项目工程文件的分析的电子设备的框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。
在下面所描述的本公开的实施例中,将以使用面向对象的语言Objective-C开发的项目工程为例进行说明,本领域技术人员应当理解,这些实施例仅为示例,可以将本公开实施例中的方法应用于使用其它语言开发的项目工程中。
图1示意性示出了根据本公开实施例的基于计算机语言的项目工程文件的分析方法100的流程图。如图1所示,分析方法100包括以下步骤:
在步骤S110中,根据项目工程的工程路径获取至少一个头文件。
在步骤S120中,对至少一个头文件中的每个头文件的内容进行解析,以获取每个头文件中所声明的属性信息和方法信息。
在步骤S130中,输出所获取的属性信息和方法信息。
根据本公开实施例的分析方法100可以应用于针对不同计算机语言的开发环境中,用于对在开发环境中所建立的项目工程文件进行分析。项目工程文件一般包括源文件和头文件。其中,源文件是包含开发人员根据开发目的和开发要求所编写的实现一定功能的源代码的文件。头文件是包含可以在源文件中进行调用的功能块的声明的文件。例如,针对不同的计算机语言,头文件中可以包含功能函数的声明、类的声明、数据类型的声明、数据接口的声明等。头文件可以是计算机语言的开发环境(或开发平台)所提供的,其中声明的内容一般根据不同的计算机语言的标准或不同的开发平台而不同。头文件中声明的内容也可以是由其他开发人员在先前开发中所编写的。在本公开的实施例中,在步骤S110中,根据项目工程的工程路径获取至少一个头文件。进一步地,根据实施例,根据项目工程的工程路径获取工程路径下的所有具有预设后缀的文件。例如获取后缀为“.h”的头文件。
接下来,在步骤S120中,对所获取的至少一个头文件中的每个头文件的内容分别进行解析。根据实施例,可以获取每个文件中所包括的字符或包含多个字符的字符串,并对所获取的字符或字符串的含义进行分析。根据实施例,在基于Objective-C语言的头文件中,可以包括类的声明、分类的声明以及类或分类中的属性和方法的声明。因此,通过对所获取的至少一个头文件中的每个头文件的内容分别进行解析,可以分别获取每个头文件中所声明的属性信息和方法信息。
接下来,在步骤S130中,可以按照预定的格式输出所获取的属性信息和方法信息。根据实施例,属性信息可以包括属性关键字、属性类型和属性名称,方法信息可以包括方法名称、方法返回值和方法参数。开发人员可以借助于属性关键字、属性类型和属性名称等属性信息以及方法名称、方法返回值和方法参数等方法信息,容易地获取到头文件中所声明的信息。
根据本公开的实施例,可以在不进入引用有头文件的源文件的情况下对源文件所引用的头文件进行分析,获取头文件所包括的属性信息和方法信息,从而在开发源文件的过程中,能够更好的理解代码的含义,并可以根据头文件对所有项目工程文件进行深度分析,由此提高所开发的项目的整体性能。
现有的软件开发过程中,只能通过手动分析或侵入式分析来获取头文件中的声明内容。手动分析头文件需要开发人员对头文件进行手动查看、分析和记录。这种分析方式的时间成本非常高,效率较低并且记录结果可能有偏差。侵入式分析头文件需要开发人员在源代码文件中嵌入特别编写的代码,该特别编写的代码需要与源代码一起编译运行,因此输出成本非常高。此外,侵入式分析是在在系统库基础上进行的开发,因此需要对系统返回数据进行冗余数据格式重构以及冗余数据清洗,效率低下成本高。进一步地,侵入式分析对于开发环境不具有普遍的适用性,即针对一个开发环境或一台设备(例如一台计算机)所嵌入的特别编写的代码对于另一个开发环境或另一台设备往往是不适用的,因此必须针对不同的开发环境进行代码的编写,这进一步增加了分析的成本。
根据本公开的实施例,无需对源文件中的源代码进行修改,仅根据项目工程路径来直接获取头文件,因此降低了修改源代码来进行分析的成本,并且对各种开发环境或不同的设备均具有通用性,可以针对各种开发环境和各种设备自动地执行头文件的分析,成本低且分析结果的准确性更高。
根据实施例,在获取至少一个头文件时,可以单独获取工程路径下后缀为“.h”的单个头文件、逐个获取工程路径下后缀为“.h”的多个头文件或同时获取工程路径下后缀为“.h”的多个头文件。图2A至图2C示意性示出了根据本公开实施例的获取头文件的方式。根据实施例,基于Objective-C语言的头文件,可以是其中包含单个类声明的头文件,也可以是其中包括多个类声明的头文件。
图2A示出了其中包含单个类声明的头文件。如图2A所示,在该头文件中,声明了类NSSting的分类aaa,其中NSString为类的名称,aaa为分类的名称。接下来,在aaa分类中,利用关键字@property声明了分类的两个属性,其中NSString*和NSInteger分别为属性类型,name和age分别为属性名称。括号中的nonatomic和strong以及nonatomic和assign分别为属性关键字。接下来,在aaa分类中,声明了三个对象方法和三个类方法。其中,对象方法的声明以“-”开始,包括不带参数不带返回值的对象方法log,带参数不带返回值的对象方法log1和带参数带返回值的对象方法log2。log、log1和log2分别为对象方法的名称。方法名称之前括号中的字符串表示方法的返回值,其中void表示返回值为空,即无返回值。方法名称由“:”指示的部分是方法的参数,其中括号中的NSString*是方法参数的类型,name是方法参数的名称。在aaa中,还以“+”开始声明了三个类方法,包括不带参数不带返回值的类方法log3,带参数不带返回值的类方法log4和带参数带返回值的类方法log5。log3、log4和log5分别为类方法的名称。类方法的方法返回值和方法参数的定义可以参见对象方法,此处不再赘述。即在图2A中,仅声明了一个类NSSting的分类aaa。图2B示出了其中包含多个类声明的头文件。如图2B所示,在该头文件中,同时声明了类NSSting的分类bbb和分类ccc。
根据实施例,在对头文件进行解析时,将针对单个头文件中的单个分类进行解析,但在获取头文件时,可以分别获取每个头文件,也可以同时获取多个头文件,并且头文件可以是包含单个类声明的头文件,也可以是包含多个类声明的头文件。图2C示出了获取的头文件的列表信息。如图2C所示,同时获取到项目工程下的多个头文件,可以显著缩短分析的时间,提高分析的效率。
根据实施例,在对至少一个头文件中的每个头文件的内容进行解析可以包括,对每个头文件的内容进行逐行逐字符扫描以获得头文件所包括的字符,以及将所获得的字符与多个关键词词表中的关键词字符进行匹配以确定头文件中所声明的类、分类以及分类的属性信息和方法信息。图3示意性示出了根据本公开实施例的对头文件的内容进行解析的状态转换图,图4示意性示出了根据本公开实施例的待分析的头文件的示例,下面结合图3所示的状态转换图和图4所示的头文件示例说明上述过程。
根据实施例,在内存中创建字符串变量用于临时存储从头文件中读出的字符。逐行逐字符遍历头文件来获取头文件中的内容,在读取过程中,通过将字符或字符串与预定的关键词词表进行比较来确定字符或字符串的含义。
根据实施例,可以预先设置多个关键词词表以用于头文件的识别。在本公开的实施例中,所创建的关键词词表包括类声明作用域开始关键词表、类声明作用域结束关键词表、类名称终止符表、分类名称起始符表、分类名称终止符表、方法开始关键词表、属性开始关键词表以及属性和方法结束关键词表。
根据实施例,类声明作用域开始关键词表包括关键词字符串“@interface”。类声明作用域结束关键词表包括关键词字符串“@end”。在扫描得到“@interface”之后,表明其后是关于类或分类的声明。在扫描得到“@end”之后,表明关于一个类或分类的声明结束。根据实施例,类名称终止符表可以包括例如“(”、“+”和“-”等。分类名称起始符表包括“(”,分类名称终止符表包括“)”。其中,在类名称后面的“(”表示分类名称的声明。也可能不声明分类名称,直接进行方法的声明,分别由“+”和“-”开始类方法和对象方法的声明,因此可以用于指示类名称的结束。根据实施例,方法开始关键词表包括“+”和“-”,属性开始关键词表包括“@property”。
容易理解的是,在识别过程中所采用的关键词词表以及各关键词词表中的具体内容可以根据不同的计算机语言的相关规定进行设置,上述实施例仅为示例,并不构成对本公开的限定。
根据实施例,先对头文件中所声明的类进行识别,具体的步骤可以包括:将所获得的字符依次存储在临时字符串变量中,并将依次存储而累积得到的字符串与类声明作用域开始关键词表中的关键词字符进行匹配,在匹配成功的情况下,清空临时字符串变量中所存储的字符,并继续从头文件中读取字符,并依次存储在临时字符串变量中。接下来,将所存储的字符与类名称终止符表中的关键词字符进行匹配,并在匹配到与类名称终止符表中的关键词字符相同的字符的情况下,记录临时字符串变量中除匹配的字符以外的字符作为类的名称,并清空临时字符串变量中所存储的字符。由此识别得到头文件中所声明的类的名称。根据实施例,可以利用状态机来控制读取和比较的过程。如图3所示,实现该识别过程的状态机包括状态S0、S1和S2。
在图3中,状态机的初始状态为S0待识别字符或字符串的状态。在该状态下,通过逐行逐字符遍历头文件不断地从头文件中读取字符并将所读取的字符存储在临时字符串变量中,同时将存储在临时字符串变量中的字符串与类声明作用域开始关键词表①进行匹配,如图3中的“匹配①”所示。在匹配成功之后,清空临时字符串变量中所存储的字符,并且状态机由初始状态S0切换至状态S1开始识别类名称的状态。接下来,继续从头文件中读取字符并存储在临时字符串变量中,将读取到的字符与类名称终止符表②进行匹配,如图3中的“匹配②”所示。在匹配成功之后,清空临时字符串变量中所存储的字符,并且状态机由状态S1开始识别类名称的状态切换至状态S2待识别分类名称的状态。
参见图4所示的头文件示例,从头文件中依次读取字符“@”、“i”、“n”、“t”……“e”至临时字符串变量中,当累积字符得到字符串“@interface”时,识别其后字符串应该为类的名称。清空临时字符串变量,继续从头文件中依次读取字符“(空格字符)”、“N”、“S”……“(”至临时字符串变量中,当识别出字符“(”之后,确认在字符“(”之前的字符串为类的名称,即NSString。然后清空临时字符串变量。
需要说明的是,在本公开的实施例中,由于分类名称起始符表(包括“(”)是类名称终止符表(包括例如“(”、“+”和“-”等)的一个子集,因此,在将字符与类名称终止符表进行匹配的过程中,就相当于完成了将字符与分类名称起始符表的匹配,因此,如果在将字符与类名称终止符表进行匹配的过程中匹配到了字符“(”,则清空临时字符串变量中所存储的字符,并且状态机由状态S2待识别分类名称的状态切换至状态S3开始识别分类名称的状态,如图3中的“匹配③”所示。
根据实施例,在识别得到类的名称之后,继续对分类进行识别。具体的步骤可以包括:将所获得的字符依次存储在临时字符串变量中,并将所存储的字符与分类名称终止符表中的关键词字符进行匹配,在匹配到与分类名称终止符表中的关键词字符相同的字符的情况下,记录临时字符串变量中除匹配的字符以外的字符作为分类的名称,并清空临时字符串变量中所存储的字符。由此识别得到头文件中所声明的分类的名称。如图3所示,实现该识别过程的状态机包括状态S2、S3和S4。
在图3中,继续从头文件中读取字符并存储在临时字符串变量中,将读取到的字符与分类名称终止符表④进行匹配,如图3中的“匹配④”所示。在匹配成功之后,清空临时字符串变量中所存储的字符,并且状态机由状态S3开始识别分类名称的状态切换至状态S4待识别方法/属性的状态。
参见图4所示的头文件示例,在从状态S2切换至状态S3之后,继续从头文件中依次读取字符“d”和“)”至临时字符串变量中,当识别出字符“)”之后,确认在字符“)”之前的字符串为分类的名称,即声明了类NSString的分类d。然后清空临时字符串变量。
根据实施例,在识别得到分类名称之后,继续对分类的属性和方法进行识别。具体的步骤可以包括:继续将所获得的字符依次存储在临时字符串变量中,并将所存储的字符与方法开始关键词表或属性开始关键词表中的关键词字符进行匹配,在匹配到与方法开始关键词表中的关键词字符相同的字符的情况下,清空临时字符串变量中所存储的字符,并开始进行方法的识别,在匹配到与属性和方法结束关键词表中的关键词字符相同的字符的情况下,结束方法的识别。在匹配到与属性开始关键词表中的关键词字符相同的字符的情况下,清空临时字符串变量中所存储的字符,并开始进行属性的识别,在匹配到与属性和方法结束关键词表中的关键词字符相同的字符的情况下,结束属性的识别。由于一个类的声明中可能包括多个方法和多个属性,因此,可以多次执行方法识别和属性识别的过程来获取多个方法和多个属性。由此识别得到头文件中所声明的全部方法信息和全部属性信息。如图3所示,实现该识别过程的状态机包括状态S4、S5和S6。
在图3中,继续通过逐行逐字符遍历头文件不断地从头文件中读取字符并将所读取的字符存储在临时字符串变量中,同时将存储在临时字符串变量中的字符串与方法开始关键词表⑤和属性开始关键词表⑦分别进行匹配。在与方法开始关键词表⑤匹配成功之后,清空临时字符串变量中所存储的字符,并且状态机由状态S4待识别方法/属性的状态切换至状态S5开始识别方法的状态,如图3中的“匹配⑤”所示。在与属性开始关键词表⑦匹配成功之后,清空临时字符串变量中所存储的字符,并且状态机由状态S4待识别方法/属性的状态切换至状态S7开始识别属性的状态,如图3中的“匹配⑦”所示。进入识别方法的状态或识别属性的状态之后,于状态S5或状态S7处,将存储在临时字符串变量中的字符与属性和方法结束关键词表⑥进行匹配,若匹配成功,则退出识别方法的状态或识别属性的状态,清空临时字符串变量中所存储的字符,并且状态机由状态S5开始识别方法的状态或状态S7开始识别属性的状态切换至状态S4待识别方法/属性的状态,如3中的“匹配⑥”所示。
根据实施例,在属性识别中,首先基于正则表达式对属性的闭包类型(Block)属性进行筛选,并根据筛选结果记录属性是否为闭包状态。然后继续通过逐行逐字符遍历头文件不断地从头文件中读取字符并将所读取的字符存储在临时字符串变量中,同时通过属性关键字起始符“(”和终止符“)”以及属性关键词表来识别属性关键字,通过属性类型分隔符“(空格字符)”来识别属性类型,通过匹配到属性和方法结束关键词表中的字符来识别属性名称。在上面的每一步识别之后,需要清空临时字符串变量。根据实施例,属性关键词表可以包括“nonatomic”、“atomic”、“assign”、“weak”、“strong”、“copy”、“readonly”、“readwrite”等。
根据实施例,在方法识别中,首先根据匹配到“+”还是“-”来识别方法是类方法(“+”)还是对象方法(“-”)。清空临时字符串变量并继续读取字符至临时字符串变量中,通过匹配返回值起始符“(”和终止符“)”来识别方法的返回值并记录返回值。清空临时字符串变量并继续读取字符至临时字符串变量中,根据方法名称终止符“:”来识别方法名称。清空临时字符串变量并继续读取字符至临时字符串变量中,根据方法参数的类型起始符“(”和终止符“)”以及括号匹配检测算法来识别方法参数。根据实施例,括号匹配检测算法首先在内存中创建临时堆栈变量,在获取到左括号“(”时,将堆栈中包括“(”在内的“(”之后的字符出栈。然后,当堆栈的内容不为空时,记录堆栈中的内容,当堆栈的内容为空时,停止记录。所记录的内容即为方法参数的类型的名称。通过这种方式,能够检测出任何自定义的参数类型。
参见图4所示的头文件示例,从头文件中继续读取字符“@”、“p”、“r”、“o”……“y”至临时字符串变量中,当累积字符得到字符串“@property”时,识别其后字符串应该为属性,因此开始属性识别。从头文件中继续读取字符“(空格字符)”和“(”至临时字符串变量中,识别出“(”,则确定其后为属性关键字的声明。清空临时字符串变量,继续从头文件中继续读取字符“n”、“o”、“a”……“c”,通过匹配属性关键词表识别得到属性关键字“nonatomic”,并以同样的方法识别属性关键字“strong”。然后通过匹配属性类型分隔符“(空格字符)”来识别出空格字符后为属性类型,并以此识别识别出属性类型NSString*和属性名称name。在匹配到字符“;”之后,清空临时字符串变量,状态机由状态S6切换回状态S4。从头文件中继续读取字符“-”至临时字符串变量中,通过匹配“-”识别出其后是对象方法的声明,清空临时字符串变量,状态机由状态S4切换至状态S5。接下来,根据前述实施例中的方法对方法的方法名称、方法返回值(如果有的话)和方法参数(如果有的话)进行识别。在匹配到字符“;”之后,清空临时字符串变量,状态机由状态S5切换回状态S4。然后通过多次执行上述操作方法,依次识别出方法log2和log3。
如图4所示,在完成对“+(void)log3;”的识别之后。从头文件中继续读取字符“@”、“e”、“n”和“d”,通过匹配类声明作用域结束关键词表可知,类(分类)的声明结束,如图3中的“匹配⑧”所示。
根据本公开实施例的对头文件进行解析的方法,可以针对头文件的内容特点进行解析,执行速度快且可靠性高。
根据实施例,在输出所获取的属性信息和方法信息的步骤中,还包括:将属性信息和方法信息存储为链表结构,其中,所述链表结构中的每个节点是一个分类,以及基于链表结构输出所获取的属性信息和方法信息。
图5示意性示出了根据本公开实施例的用于存储分析内容的链表结构。可以在识别完成一个类(分类)之后,根据识别出的类(分类)的内容创建一个节点变量,然后,将解析后的变量节点聚合成链表。如图5所示,用于存储分析内容的链表结构包括多个节点变量,例如包含识别得到的类名称、分类名称、方法变量节点、属性变量节点。其中,方法变量节点可以进一步包括方法返回值、方法名称、方法参数名列表、方法参数类型列表、是否是类方法等。属性变量节点可以进一步包括属性关键字、属性名称、属性类型等。每个节点变量通过指针指向下一个节点变量来形成链表。
图6示意性示出了根据本公开实施例的经分析的头文件的输出的示例。图6所示的是根据前述实施例的待分析的头文件的示例所做的分析结果。可以从图6所示的分析结果中更好地掌握头文件中声明的内容,可以在不必阅读并理解头文件的内容的基础上掌握头文件的具体信息。
在充分掌握头文件的具体信息的基础上,可以根据所获取的关于头文件的属性信息和方法信息来基于计算机语言的项目工程文件进行优化。图7示意性示出了根据本公开另一实施例的基于计算机语言的项目工程文件的分析方法700的流程图。如图7所示,分析方法700包括以下步骤:
在步骤S710中,根据项目工程的工程路径获取至少一个头文件。
在步骤S720中,对至少一个头文件中的每个头文件的内容进行解析,以获取每个头文件中所声明的属性信息和方法信息。
在步骤S730中,输出所获取的属性信息和方法信息。
在步骤S740中,根据属性信息和方法信息确定头文件中重复的属性和重复的方法。
在步骤S750中,修改所确定的重复的属性的名称和重复的方法的名称,以使属性的名称和方法的名称均彼此不同。
在上述分析方法700中,步骤S710、步骤S720和步骤S730的操作可以参考前述实施例中分析方法100的步骤S110、步骤S120和步骤S130的操作,此处不再赘述。
在步骤S740中,检测并确定头文件中重复的属性和重复的方法。在基于计算机语言的项目工程中,一般要求不同的属性和不同方法各自使用不同的命名。如果使用相同的命名,在编译时将不能通过,由此保证命名的唯一性。但有一种情况是,在不同的头文件,或不同的类(分类)中声明了完全相同的属性或完全相同的方法。例如对于属性,属性关键字、属性类型和属性名称完全相同。对于方法,方法名称、方法返回值和方法参数完全相同。这种情况下,在编译时将不会报错,即不能发现完全相同命名的属性和方法。这样,如果在程序运行过程改变了具有相同命名的属性或方法其中之一。例如,使具有相同命名的两个方法中一个方法的返回值进行了修改,则将导致不同的方法具有相同的命名的问题。这种情况是不能通过编译来发现该错误的。
根据本公开的实施例,可以通过获取头文件中声明的属性信息和方法信息,找出这种完全相同的属性和方法。接下来,在步骤S750中,可以通过将重复的属性的名称和重复的方法的名称修改为彼此不同来避免上述错误的发生。
根据实施例,也可以在根据属性信息和方法信息确定头文件中重复的属性和重复的方法之后,对所获取的重复的属性和重复的方法进行输出显示,由开发人员评估是否需要修改命名,或者也可以通过对源代码进行修改来避免在程序的运行过程中发生错误。
根据实施例,根据属性信息和方法信息确定头文件中重复的属性和重复的方法还可以包括:根据属性关键字、属性类型和属性名称的组合以及方法名称、方法返回值和方法参数的组合构建哈希表,以及利用哈希表对属性信息和方法信息进行筛选以确定头文件中重复的属性和重复的方法。通过使用哈希表进行筛选,可以显著地提高筛选速度,在大型项目工程中,可以显著地降低时间成本。
图8示意性示出了图7所示的基于计算机语言的项目工程文件的分析方法的示例过程。如图8所示,该示例分析方法由多个不同的功能模块共同实现,并可以通过封装在一起而形成独立的插件,应用于各种软件开发环境。如图8所示,该示例分析方法具体包括输入模块81、数据读取模块82、词法分析模块83、输出显示模块84和数据检测模块85。其中,输入模块81可以录入工程路径,并通过工程路径获取头文件。数据读取模块82可以用于将所获取的头文件读取到内存中,可以进行单文件单类型读取、单文件多类型读取以及多文件的共同读取。词法分析模块83可以用于实现各种词法分析功能。如图8所示,可以分别针对在类(分类)声明的属性和方法分别进行分析。在进行属性分析时,可以分析属性关键字、是否是闭包属性、属性类型和属性的名称。在进行方法分析时,可以分析是类方法还是对象方法、方法的返回值、方法参数的类型、参数名称以及方法名称。输出显示模块84可以用于对分析得到的结果进行格式化存储,并将格式化存储的结果进行输出显示。数据检测模块可以用于根据输出的属性信息和方法信息进行检索,例如确定重复的属性和方法,并且可以根据预先设定的操作或根据接收的指令,对重复的属性和方法进行重新命名。
在该实施例中,每个功能模块相互独立,各自实现不同的功能,可以通过对各功能模块的扩展,方便地增加分析能力。例如,可以在词法分析模块83中增加对自定义数据类型的进一步分析。根据本公开实施例的分析方法易于扩展且适用范围广。
图9示意性示出了根据本公开实施例的基于计算机语言的项目工程文件的分析装置900的框图。如图9所示,基于计算机语言的项目工程文件的分析装置900包括文件获取模块910、文件解析模块920和信息输出模块930。
根据实施例,文件获取模块910被配置为根据项目工程的工程路径获取至少一个头文件。文件解析模块920被配置为对至少一个头文件中的每个头文件的内容进行解析,以获取每个头文件中所声明的属性信息和方法信息。信息输出模块930被配置为输出所获取的属性信息和方法信息。
以上各功能模块的具体操作可以参考前述实施例中的基于计算机语言的项目工程文件的分析方法100的操作步骤来获取,此处不再赘述。
图10示意性示出了根据本公开实施例的适于执行基于计算机语言的项目工程文件的分析的电子设备1000的框图。可以利用图10所示的电子设备1000来执行根据本公开实施例的基于计算机语言的项目工程文件的分析方法。
如图10所示,根据本公开实施例的电子设备1000包括处理器1001和存储器1002。处理器1001可以根据存储在存储器1002中的程序或指令来执行各种适当的动作和处理。处理器1001例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC))等。处理器1001还可以包括用于缓存用途的板载存储器。处理器1001可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
处理器1001与存储器1002通过总线彼此相连。处理器1001通过执行存储器1002中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除存储器1002以外的一个或多个存储设备中。处理器1001也可以通过执行存储在所述一个或多个存储设备中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,电子设备1000还可以包括输入装置1003和输出装置1004,输入装置1003和输出装置1004也连接至总线。此外,电子设备1000还可以包括以下部件中的一项或多项:包括键盘、鼠标等的输入部分;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分;包括硬盘等的存储部分;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分。
根据本公开的实施例,根据本公开实施例的方法流程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分从网络上被下载和安装,和/或从可拆卸介质被安装。在该计算机程序被处理器1001执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被处理器1001执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读存储介质可以是计算机非易失性的计算机可读存储介质,例如可以可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

Claims (14)

1.一种基于计算机语言的项目工程文件的分析方法,所述基于计算机语言的项目工程文件包括至少一个头文件,所述分析方法包括:
根据项目工程的工程路径获取所述至少一个头文件;
对所述至少一个头文件中的每个头文件的内容进行解析,以获取每个头文件中所声明的属性信息和方法信息;以及
输出所获取的属性信息和方法信息。
2.根据权利要求1所述的方法,其中,所述属性信息包括属性关键字、属性类型和属性名称中的至少之一,所述方法信息包括方法名称、方法返回值和方法参数中的至少之一。
3.根据权利要求2所述的方法,还包括:
根据所述属性信息和所述方法信息确定所述头文件中重复的属性和重复的方法;以及
输出所获取的重复的属性和重复的方法。
4.根据权利要求3所述的方法,其中,所述根据所述属性信息和所述方法信息确定所述头文件中重复的属性和重复的方法包括:
根据所述属性关键字、属性类型和属性名称的组合以及所述方法名称、方法返回值和方法参数的组合构建哈希表;以及
利用所述哈希表对所述属性信息和所述方法信息进行筛选以确定所述头文件中重复的属性和重复的方法。
5.根据权利要求3或4所述的方法,还包括:
修改所确定的重复的属性的名称,以使所述属性的名称彼此不同;以及
修改所确定的重复的方法的名称,以使所述方法的名称彼此不同。
6.根据权利要求1所述的方法,其中,所述对所述至少一个头文件中的每个头文件的内容进行解析包括:
对所述每个头文件的内容进行逐行逐字符扫描以获得所述头文件所包括的字符;以及
将所获得的字符与多个关键词词表中的关键词字符进行匹配以确定所述头文件中所声明的类、分类以及所述分类的属性信息和方法信息。
7.根据权利要求6所述的方法,其中,所述多个关键词词表包括类声明作用域开始关键词表、类声明作用域结束关键词表、类名称终止符表、分类名称起始符表、分类名称终止符表、方法开始关键词表、属性开始关键词表、属性和方法结束关键词表以及属性关键词表。
8.根据权利要求1所述的方法,其中,所述根据项目工程的工程路径获取所述至少一个头文件包括:
逐个获取所述工程路径下具有预设后缀的多个头文件或同时获取所述工程路径下具有预设后缀的多个头文件。
9.根据权利要求1所述的方法,其中,输出所获取的属性信息和方法信息包括:
将所述属性信息和方法信息存储为链表结构,其中,所述链表结构中的每个节点是一个分类;以及
基于所述链表结构输出所获取的属性信息和方法信息。
10.根据权利要求1至9中任一项所述的方法,其中,所述项目工程文件是基于Objective-C语言的项目工程文件。
11.根据权利要求1至9中任一项所述的方法,其中,所述项目工程文件还包括至少一个源文件。
12.一种基于计算机语言的项目工程文件的分析装置,所述基于计算机语言的项目工程文件包括至少一个头文件,所述分析装置包括:
文件获取模块,配置为根据项目工程的工程路径获取所述至少一个头文件;
文件解析模块,配置为对所述至少一个头文件中的每个头文件的内容进行解析,以获取每个头文件中所声明的属性信息和方法信息;以及
信息输出模块,配置为输出所获取的属性信息和方法信息。
13.一种基于计算机语言的项目工程文件的分析设备,包括:
存储器,存储有程序指令;以及
处理器,被配置为执行所述程序指令,以执行如权利要求1至11中任一项所述的基于计算机语言的项目工程文件的分析方法。
14.一种计算机可读存储介质,存储有计算机可执行指令,所述指令在被执行时用于实现权利要求1至11中任一项所述的基于计算机语言的项目工程文件的分析方法。
CN202011208298.7A 2020-11-03 2020-11-03 项目工程文件的分析方法、装置、设备及存储介质 Pending CN112231278A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011208298.7A CN112231278A (zh) 2020-11-03 2020-11-03 项目工程文件的分析方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011208298.7A CN112231278A (zh) 2020-11-03 2020-11-03 项目工程文件的分析方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN112231278A true CN112231278A (zh) 2021-01-15

Family

ID=74122681

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011208298.7A Pending CN112231278A (zh) 2020-11-03 2020-11-03 项目工程文件的分析方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN112231278A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113504896A (zh) * 2021-07-12 2021-10-15 云南腾云信息产业有限公司 一种应用程序的业务数据处理方法、装置及移动终端

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5854932A (en) * 1995-08-17 1998-12-29 Microsoft Corporation Compiler and method for avoiding unnecessary recompilation
CN108549535A (zh) * 2018-03-16 2018-09-18 北京大学 一种基于文件依赖关系的高效程序解析方法和系统

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5854932A (en) * 1995-08-17 1998-12-29 Microsoft Corporation Compiler and method for avoiding unnecessary recompilation
CN108549535A (zh) * 2018-03-16 2018-09-18 北京大学 一种基于文件依赖关系的高效程序解析方法和系统

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113504896A (zh) * 2021-07-12 2021-10-15 云南腾云信息产业有限公司 一种应用程序的业务数据处理方法、装置及移动终端
CN113504896B (zh) * 2021-07-12 2023-08-18 云南腾云信息产业有限公司 一种应用程序的业务数据处理方法、装置及移动终端

Similar Documents

Publication Publication Date Title
US9208057B2 (en) Efficient model checking technique for finding software defects
US9798648B2 (en) Transitive source code violation matching and attribution
US10229042B2 (en) Detection of meaningful changes in content
US6928393B2 (en) Method and system for supporting negative testing in combinatorial test case generators
US9122540B2 (en) Transformation of computer programs and eliminating errors
CN109062794B (zh) 一种软件测评结果的确定方法、装置及电子设备
US10055399B2 (en) Method and system for linear generalized LL recognition and context-aware parsing
US11513794B2 (en) Estimating indirect interface implementation before load time based on directly implemented methods
CN111694746A (zh) 面向编译型语言AS3的Flash缺陷模糊测评工具
Pottier Reachability and error diagnosis in LR (1) parsers
Tassarotti et al. A formal proof of PAC learnability for decision stumps
CN108427580B (zh) 配置对命名重复的检测方法、存储介质和智能设备
CN112231278A (zh) 项目工程文件的分析方法、装置、设备及存储介质
Negrini et al. Twinning automata and regular expressions for string static analysis
CN116842042A (zh) 异化数据库的通用方法、装置、电子设备及存储介质
CN111258562A (zh) Java代码质量检查方法、装置、设备和存储介质
CN114968817A (zh) 代码改动影响范围的评估方法、装置、设备及存储介质
CN111736848B (zh) 包冲突定位方法、装置、电子设备及可读存储介质
CN112631944A (zh) 基于抽象语法树的源码检测方法及装置、计算机存储介质
Lester et al. Information flow analysis for a dynamically typed language with staged metaprogramming
WO2022254487A1 (ja) 情報処理プログラム、情報処理方法および情報処理装置
CN117891737A (zh) 一种关系数据库管理系统的合规性检测方法、装置及设备
CN111427769A (zh) 一种代码质量检测方法、设备、服务器及可读存储介质
CN117909152A (zh) 一种接口向下兼容检测方法、系统、计算机及存储介质
CN117113347A (zh) 一种大规模代码数据特征提取方法及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination