CN117111951A - 基于使用链的宏文本展开方法、电子设备和介质 - Google Patents
基于使用链的宏文本展开方法、电子设备和介质 Download PDFInfo
- Publication number
- CN117111951A CN117111951A CN202311066608.XA CN202311066608A CN117111951A CN 117111951 A CN117111951 A CN 117111951A CN 202311066608 A CN202311066608 A CN 202311066608A CN 117111951 A CN117111951 A CN 117111951A
- Authority
- CN
- China
- Prior art keywords
- macro
- code
- list
- line
- conflict
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 36
- 230000008569 process Effects 0.000 claims description 7
- 238000013507 mapping Methods 0.000 claims description 2
- 239000000758 substrate Substances 0.000 claims 4
- 239000000523 sample Substances 0.000 claims 1
- 238000007781 pre-processing Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000007480 spreading Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/423—Preprocessors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及计算机技术领域,尤其涉及一种基于使用链的宏文本展开方法、电子设备和介质,方法包括步骤S1、生成树形结构使用链;步骤S2、获取宏信息集合;步骤S3、生成冲突宏信息集合和非冲突宏信息集合;步骤S4、若待展开HFn和HLn位于冲突宏信息集合,则执行步骤S5;步骤S5、生成冲突Hn列表;步骤S6、移除代码行范围不为待展开HSn的Hn,若剩余数量为1,则执行步骤S8,否则,执行步骤S7;步骤S7、移除代码行范围不为待展开HOn的Hn,若剩余数量为1,则执行步骤S8;步骤S8、基于目标宏使用列表对所述待处理代码行执行宏文本展开操作。本发明能够在宏内容冲突时快速准确地解析出宏文本。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于使用链的宏文本展开方法、电子设备和介质。
背景技术
宏定义允许用户定义一个文本的别名,部分编程语言支持宏定义语法,例如System Verilog语言。在代码语义解析之前的预处理阶段,需要先用宏展开文本替换宏文本,从而能够正确的解析设计代码语义。预处理阶段的替换操作会改变用户的原始代码结构,而在代码编辑软件或者代码调试软件中,一般需要保持用户的原始代码结构,同时可以采取某些方式提供可以查看宏展开文本的方法。但在此之前,程序必须能够对宏的文本进行展开。
在基于文件和行号的宏定位体系中,如果加载同一个文件两次,而两次之间对同一个宏有不同的定义时,则会遇到宏内容互相冲突的场景,程序将无法准确的解析出宏文本内容,由此可知,如何实现在宏内容冲突时快速准确解析出宏文本成为亟待解决的技术问题。
发明内容
本发明目的在于,提供一种基于使用链的宏文本展开方法、电子设备和介质,能够在宏内容冲突时快速准确地解析出宏文本。
根据本发明第一方面,提供了一种基于使用链的宏文本展开方法,包括:
步骤S1、基于源代码生成树形结构使用链,所述树形结构使用链中的每个节点映射至源代码中一个代码行范围,所述代码行范围为连续代码行范围或离散代码行范围;
步骤S2、基于源代码和所述树形结构使用链,获取宏信息集合{H1,H2,…,Hn,…,HN},其中,Hn为第n个宏使用行对应的宏信息,n的取值范围为1到N,Hn=(HFn,HLn,HDn,HSn,HOn),HFn为Hn对应的宏使用处的文件名,HLn为Hn对应的宏使用处的行号,HDn为Hn对应的宏使用行的宏使用列表,宏使用列表包括Hn对应的宏使用行对应的按序排列的宏使用信息,HSn为HFn对应的代码行范围,HOn为HFn对应的在HSn中的偏移量;
步骤S3、遍历宏信息集合{H1,H2,…,Hn,…,HN},将HFn,HLn均相同的Hn存储在冲突宏信息集合中,将仅存在唯一HFn,HLn的Hn存储在非冲突宏信息集合中;
步骤S4、获取待处理代码行对应的宏使用处的待展开HFn和待展开HLn,若待展开HFn和待展开HLn的组合位于非冲突宏信息集合中,则将非冲突宏信息集合中待展开HFn和待展开HLn的组合对应的HDn确定为目标宏使用列表,执行步骤S8;若待展开HFn和待展开HLn的组合位于冲突宏信息集合中,则执行步骤S5;
步骤S5、从冲突宏信息集合中获取所有包含待展开HFn和待展开HLn的组合的Hn,生成冲突Hn列表;
步骤S6、基于所述树形结构使用链获取待处理代码行对应的待展开HSn,在冲突Hn列表中移除代码行范围不为待展开HSn的Hn,若当前冲突Hn列表中剩余的Hn数量为1,则将当前剩余的Hn对应的HDn确定为目标宏使用列表,则执行步骤S8,否则,执行步骤S7;
步骤S7、基于所述树形结构使用链获取待处理代码行在待展开HSn中对应的待展开HOn,在冲突Hn列表中移除代码行范围不为待展开HOn的Hn,若当前冲突Hn列表中剩余的Hn数量为1,则将当前剩余的Hn对应的HDn确定为目标宏使用列表,则执行步骤S8;
步骤S8、基于目标宏使用列表对所述待处理代码行执行宏文本展开操作。
根据本发明第二方面,提供一种电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被设置为用于执行本发明第一方面所述的方法。
根据本发明第三方面,提供一种计算机可读存储介质,存储有计算机可执行指令,所述计算机指令用于执行本发明第一方面所述的方法。
本发明与现有技术相比具有明显的优点和有益效果。借由上述技术方案,本发明提供的一种基于使用链的宏文本展开方法、电子设备和介质可达到相当的技术进步性及实用性,并具有产业上的广泛利用价值,其至少具有以下有益效果:
本发明通过构建形结构使用链,再基于源代码和所述树形结构使用链,获取宏信息集合,再进一步生成冲突宏信息集合和非冲突宏信息集合,对于存在冲突的待处理代码行,基于对应的代码行范围和偏移量来确定待处理代码行所对应的宏使用列表,从而能够在宏内容冲突时快速准确地解析出宏文本。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的基于使用链的宏文本展开方法流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种基于使用链的宏文本展开方法,如图1所示,包括:
步骤S1、基于源代码生成树形结构使用链,所述树形结构使用链中的每个节点映射至源代码中一个代码行范围,所述代码行范围为连续代码行范围或离散代码行范围。
可以理解的是,任何一个需要解析的宏使用文本,都属于对应代码行范围中对应的代码中的一部分。
步骤S2、基于源代码和所述树形结构使用链,获取宏信息集合{H1,H2,…,Hn,…,HN},其中,Hn为第n个宏使用行对应的宏信息,n的取值范围为1到N,Hn=(HFn,HLn,HDn,HSn,HOn),HFn为Hn对应的宏使用处的文件名,HLn为Hn对应的宏使用处的行号,HDn为Hn对应的宏使用行的宏使用列表,宏使用列表包括Hn对应的宏使用行对应的按序排列的宏使用信息,HSn为HFn对应的代码行范围,HOn为HFn对应的在HSn中的偏移量。
需要说明的是,由于源代码中可能存在多个文件,基于文件名以及对应的行号才能唯一确定一个代码行。在不同代码行中,相同宏名字的宏的赋值信息可能是不同的,通过Hn中的HFn,HLn,HDn的对应关系,可以明确HFn,HLn对应的代码行所对应的宏使用列表。Hn中的HSn和HOn能够明确Hn对应的使用链信息。
步骤S3、遍历宏信息集合{H1,H2,…,Hn,…,HN},将HFn,HLn均相同的Hn存储在冲突宏信息集合中,将仅存在唯一HFn,HLn的Hn存储在非冲突宏信息集合中。
需要说明的是,当存在多个相同的HFn,HLn时,说明在不同的位置调用了同一个宏定义文件,而不同位置的宏使用列表可能不同,因此,在进行宏文本展开时,可能出现宏内容互相冲突的情况。对于唯一存在的HFn,HLn则不会出现宏冲突。
步骤S4、获取待处理代码行对应的宏使用处的待展开HFn和待展开HLn,若待展开HFn和待展开HLn的组合位于非冲突宏信息集合中,则将非冲突宏信息集合中待展开HFn和待展开HLn的组合对应的HDn确定为目标宏使用列表,执行步骤S8;若待展开HFn和待展开HLn的组合位于冲突宏信息集合中,则执行步骤S5,可以理解的是,所述待处理代码行为包含宏的代码行,即宏使用行。
其中,若待展开HFn和待展开HLn的组合位于非冲突宏信息集合中,则说明不存在宏内容冲突问题,可以直接基于现有的宏文本展开的处理方式对待处理代码行执行宏文本展开操作。若待展开HFn和待展开HLn的组合位于冲突宏信息集合中,则需要先通过后续步骤解决宏内容冲突问题后再执行宏展开操作。
步骤S5、从冲突宏信息集合中获取所有包含待展开HFn和待展开HLn的组合的Hn,生成冲突Hn列表。
步骤S6、基于所述树形结构使用链获取待处理代码行对应的待展开HSn,在冲突Hn列表中移除代码行范围不为待展开HSn的Hn,若当前冲突Hn列表中剩余的Hn数量为1,则将当前剩余的Hn对应的HDn确定为目标宏使用列表,则执行步骤S8,否则,执行步骤S7。
其中,通过步骤S6先将与待处理代码行的代码行范围不同的Hn移除,若移除后,当前冲突Hn列表中剩余的Hn数量为1,则说明已解决宏内容冲突问题,即可通过步骤S8执行宏文本展开操作,否则,需要进一步通过步骤S7解决宏内容冲突问题。
步骤S7、基于所述树形结构使用链获取待处理代码行在待展开HSn中对应的待展开HOn,在冲突Hn列表中移除代码行范围不为待展开HOn的Hn,若当前冲突Hn列表中剩余的Hn数量为1,则将当前剩余的Hn对应的HDn确定为目标宏使用列表,则执行步骤S8。
其中,步骤S7将与待处理代码行位于相同代码行范围中,与待处理代码行在待展开HSn中对应的待展开HOn不同的代码行移除,正常情况下,此时,当前冲突Hn列表中剩余的Hn数量为1,若不为1,则说明处理过程存在异常。作为一种实施例,所述步骤S7中,若当前冲突Hn列表中剩余的Hn数量不为1,则生成错误提示信息。
步骤S8、基于目标宏使用列表对所述待处理代码行执行宏文本展开操作。
通过步骤S1-步骤S7解决宏内容冲突问题,可以明确待处理代码行对应的宏使用列表,进而可以准确展开待处理代码。
作为一种实施例,所述步骤S1包括:
步骤S11、将源代码划分为多个代码行范围,将每个节点映射至源代码中一个代码行范围,所述代码行范围为连续代码行范围或离散代码行范围。
步骤S12、将源代码对应的所有节点自顶向下生成一个树形结构使用链。
需要说明的是,步骤S11-步骤S22可以直接基于现有的编译软件来实现,在此不再赘述。
作为一种实施例,所述步骤S2包括:
步骤S21、在编译源代码的过程中,从源代码中获取当前编译的宏使用行所对应的HFn、HLn以及HDn。
需要说明的是,在编译源代码的过程中,通过编译软件能够从源代码中获取当前编译的宏使用行所对应的HFn、HLn以及HDn。
步骤S22、从所述树形结构使用链中获取当前编译的宏使用行所对应的HSn,HOn。
步骤S23、基于当前编译的宏使用行所对应的HFn、HLn、HDn、HSn,HOn生成当前编译的宏使用行所对应的Hn。
步骤S24、基于所有生成的Hn获取宏信息集合{H1,H2,…,Hn,…,HN}。
通过步骤S21-步骤S24能够生成源代码中所有Hn的集合。
本发明实施例通过构建形结构使用链,再基于源代码和所述树形结构使用链,获取宏信息集合,再进一步生成冲突宏信息集合和非冲突宏信息集合,对于存在冲突的待处理代码行,基于对应的代码行范围和偏移量来确定待处理代码行所对应的宏使用列表,从而能够在宏内容冲突时快速准确地解析出宏文本。
作为一种实施例,所述步骤S4中,可以直接基于现有的宏文本展开操作对待处理代码行执行宏文本展开操作,也可以基于本发明实施例所提出的方式对待处理代码行执行宏文本展开操作,具体的,所述步骤S4中,直接对待处理代码行执行宏文本展开操作,包括:
步骤S81、判断当前宏使用行展开列表中是否包括待处理代码行的宏展开文本,若包括,则将当前宏使用行展开列表中待处理代码行对应的宏定义展开文本确定为目标展开文本,结束流程,否则,获取待处理代码行的原始代码设置在代码存储单元中,执行步骤S3,所述宏使用行展开列表初始为空。
需要说明的是,本发明实施例对于使用行的宏文本是按需动态展开的,因此,宏使用行展开列表初始为空。通过设置宏使用行展开列表,存储已展开的宏使用行对应的宏展开文本,使得每一宏使用行仅需展开一次。
步骤S82、基于待处理代码行对应的目标宏使用列表确定当前待展开宏,在代码存储单元中展开当前待展开宏。
其中,基于宏使用列表确定待处理代码行中宏展开的顺序,在存储单元中按序注意展开待处理代码行中的宏。
步骤S83、基于待处理代码行对应的目标宏使用列表判断待处理代码行的宏是否全部展开,若是,则将当前代码存储单元中存储的代码确定为目标宏展开文本,并将待处理代码行和目标宏展开文本存储至宏展开列表中,结束流程,否则,返回执行步骤S82。
本发明基于使用行进行宏文本展开,采用动态的方式生成宏全展开文本,极大程度的降低了存储空间和计算资源的需求。
作为一种实施例,宏使用列表包括宏使用行对应的按序排列的每一宏对应的空进入开始列、宏原本值和宏第一层展开值。具体的,所述方法还包括:
步骤S10、在源代码编译阶段,输出源代码中出现的宏使用行标识以及生成宏使用行对应的宏使用列表,其中,第x个宏使用行标识Lx对应的宏使用列表为(A1 x,A2 x,…,Ai x,…,Af(x) x),Ai x为Lx的第i个宏使用信息,i的取值范围为1到f(x),f(x)为Lx对应的宏使用数量,x的取值范围为1到X,X为源代码中宏使用行总数,A1 x,A2 x,…,Ai x,…,Af(x) x按照宏出现的顺序排列,Ai x={Bi x,Ci x,Di x},Bi x为Ai x对应的宏进入开始列,Ci x为Ai x对应的宏原本值,Di x为Ai x对应的宏第一层展开值。
其中,源代码编译阶段,通过编译软件能够输出源代码中出现的宏使用行标识以及每一宏使用行中每一宏对应的进入开始列、宏原本值和宏第一层展开值。需要说明的是,一些宏中可能会嵌套一层或多层其他的宏,但被嵌套的宏与源代码代码进入被嵌套宏对应的开始列均相同,均为源代码中对应宏所在的列。宏原本值为宏展开前的原本值,宏第一层展开值为宏展开一次的展开值。一些宏展开之后还包括其他宏,但多层直接展开的话对编译器要求过高,因此,仅设置宏第一层展开值即可。
作为一种实施例,所述宏使用行标识基于宏使用行所在的文件名称和行号生成。需要说明的是,源代码中通常包括多个文件,每一文件中每行代码具有对应的行号,因此需要宏使用行所在的文件名称和行号结合才能准确定位到宏使用行。
作为一种实施例,所述步骤S82包括:
步骤S821、初始设置i=1。
需要说明的是,本发明实施例按照待处理代码行对应的目标宏使用列表中宏出现的顺序来逐个展开宏,因此,i是从1开始取值。
步骤S822、基于目标Lx和目标Lx对应的目标Bi x确定当前待展开宏对应的当前Ci x和当前Di x。
其中,通过目标Lx能够确定对应的(A1 x,A2 x,…,Ai x,…,Af(x) x),通过当前i的取值,能够确定目标Lx对应的目标Bi x,然后基于目标Bi x进一步确定当前Ci x和当前Di x。
步骤S823、将当前代码存储单元中待处理代码行Lx和Bi x对应位置处的当前Ci x替换为当前Di x。
其中,通过将当前代码存储单元中待处理代码行Lx和Bi x对应位置处的当前Ci x替换为当前Di x实现在代码存储单元中展开当前待展开宏。
所述步骤S83包括:
步骤S831、若i=f(x),则确定待处理代码行的宏全部展开,否则,设置i=i+1,返回执行步骤S822。
通过步骤S821-步骤S823,以及步骤S831,实现了按照待处理代码行宏出现的顺序逐一展开宏文本。
作为一种实施例,所述步骤S822之后还包括:
步骤S8221、判断当前Ci x是否为预设的无需展开宏,若是,则直接执行步骤S83,否则,执行步骤S823,其中,所述预设的无需展开宏为设置在“`ifdef”、“`ifndef”、“`elsif”语句等语句之后的宏。
需要说明的是,设置在“`ifdef”、“`ifndef”、“`elsif”语句等语句之后的宏实质上为预处理阶段的宏,并非真正的宏使用,因此,可以通过步骤S8221进行判断,若当前Ci x为预设的无需展开宏,则不对当前Ci x执行宏展开操作。
作为一种实施例,所述步骤S83包括:
步骤S832、判断所述目标宏展开文本是否等于待处理代码行的原始代码,若是,则将待处理代码行确定为非含宏代码行,若存在该待处理代码行对应的目标宏使用列表,则将该待处理代码行对应的目标宏使用列表删除。
需要说明的是,经过步骤S81-步骤S83之后,若所述目标宏展开文本等于待处理代码行的原始代码,说明目标宏展开文本并且有包含宏,因此,待处理代码行确定为非含宏代码行。当确定待处理代码行为非含宏代码行之后,若存在该待处理代码行对应的目标宏使用列表,说明该待处理代码行对应的目标宏使用列表有误,将该待处理代码行对应的目标宏使用列表删除,相当于对待处理代码行对应的目标宏使用列表进行了二次校验,提高了基于使用行的宏定义文本展开的准确性。
本发明实施例通过宏使用列表动态展开宏使用行,且能通过宏使用行展开列表复用已经展开过的宏使用行的宏展开文本,支持动态生成宏展开文本,节省了宏文本展开的内存和计算资源消耗。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中使用的术语只是为了描述具体的实施方式的目的,不是旨在于限制本发明。
需要说明的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各步骤的顺序可以被重新安排。当其操作完成时处理可以被终止,但是还可以具有未包括在附图中的附加步骤。处理可以对应于方法、函数、规程、子例程、子程序等等。
本发明实施例还提供一种电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被设置为用于执行本发明实施例所述的方法。
本发明实施例还提供一种计算机可读存储介质,存储有计算机可执行指令,所述计算机指令用于执行本发明实施例所述的方法。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
Claims (8)
1.一种基于使用链的宏文本展开方法,包括:
步骤S1、基于源代码生成树形结构使用链,所述树形结构使用链中的每个节点映射至源代码中一个代码行范围,所述代码行范围为连续代码行范围或离散代码行范围;
步骤S2、基于源代码和所述树形结构使用链,获取宏信息集合{H1,H2,…,Hn,…,HN},其中,Hn为第n个宏使用行对应的宏信息,n的取值范围为1到N,Hn=(HFn,HLn,HDn,HSn,HOn),HFn为Hn对应的宏使用处的文件名,HLn为Hn对应的宏使用处的行号,HDn为Hn对应的宏使用行的宏使用列表,宏使用列表包括Hn对应的宏使用行对应的按序排列的宏使用信息,HSn为HFn对应的代码行范围,HOn为HFn对应的在HSn中的偏移量;
步骤S3、遍历宏信息集合{H1,H2,…,Hn,…,HN},将HFn,HLn均相同的Hn存储在冲突宏信息集合中,将仅存在唯一HFn,HLn的Hn存储在非冲突宏信息集合中;
步骤S4、获取待处理代码行对应的宏使用处的待展开HFn和待展开HLn,若待展开HFn和待展开HLn的组合位于非冲突宏信息集合中,则将非冲突宏信息集合中待展开HFn和待展开HLn的组合对应的HDn确定为目标宏使用列表,执行步骤S8;若待展开HFn和待展开HLn的组合位于冲突宏信息集合中,则执行步骤S5;
步骤S5、从冲突宏信息集合中获取所有包含待展开HFn和待展开HLn的组合的Hn,生成冲突Hn列表;
步骤S6、基于所述树形结构使用链获取待处理代码行对应的待展开HSn,在冲突Hn列表中移除代码行范围不为待展开HSn的Hn,若当前冲突Hn列表中剩余的Hn数量为1,则将当前剩余的Hn对应的HDn确定为目标宏使用列表,则执行步骤S8,否则,执行步骤S7;
步骤S7、基于所述树形结构使用链获取待处理代码行在待展开HSn中对应的待展开HOn,在冲突Hn列表中移除代码行范围不为待展开HOn的Hn,若当前冲突Hn列表中剩余的Hn数量为1,则将当前剩余的Hn对应的HDn确定为目标宏使用列表,则执行步骤S8;
步骤S8、基于目标宏使用列表对所述待处理代码行执行宏文本展开操作。
2.根据权利要求1所述的方法,其特征在于,
所述步骤S1包括:
步骤S11、将源代码划分为多个代码行范围,将每个节点映射至源代码中一个代码行范围,所述代码行范围为连续代码行范围或离散代码行范围;
步骤S12、将源代码对应的所有节点自顶向下生成一个树形结构使用链。
3.根据权利要求1所述的方法,其特征在于,
所述步骤S2包括:
步骤S21、在编译源代码的过程中,从源代码中获取当前编译的宏使用行所对应的HFn、HLn以及HDn;
步骤S22、从所述树形结构使用链中获取当前编译的宏使用行所对应的HSn,HOn;
步骤S23、基于当前编译的宏使用行所对应的HFn、HLn、HDn、HSn,HOn生成当前编译的宏使用行所对应的Hn;
步骤S24、基于所有生成的Hn获取宏信息集合{H1,H2,…,Hn,…,HN}。
4.根据权利要求1所述的方法,其特征在于,
所述步骤S7中,若当前冲突Hn列表中剩余的Hn数量不为1,则生成错误提示信息。
5.根据权利要求1所述的方法,其特征在于,
所述步骤S8包括:
步骤S81、判断当前宏使用行展开列表中是否包括待处理代码行的宏展开文本,若包括,则将当前宏使用行展开列表中待处理代码行对应的宏定义展开文本确定为目标展开文本,结束流程,否则,获取待处理代码行的原始代码设置在代码存储单元中,执行步骤S3,所述宏使用行展开列表初始为空;
步骤S82、基于待处理代码行对应的目标宏使用列表确定当前待展开宏,在代码存储单元中展开当前待展开宏;
步骤S83、基于待处理代码行对应的目标宏使用列表判断待处理代码行的宏是否全部展开,若是,则将当前代码存储单元中存储的代码确定为目标宏展开文本,并将待处理代码行和目标宏展开文本存储至宏展开列表中,结束流程,否则,返回执行步骤S82。
6.根据权利要求5所述的方法,其特征在于,
宏使用列表包括宏使用行对应的按序排列的每一宏对应的空进入开始列、宏原本值和宏第一层展开值。
7.一种电子设备,其特征在于,包括:
至少一个处理器;
以及,与所述至少一个处理器通信连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被设置为用于执行前述权利要求1-6任一项所述的方法。
8.一种计算机可读存储介质,其特征在于,存储有计算机可执行指令,所述计算机可执行指令用于执行前述权利要求1-6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311066608.XA CN117111951B (zh) | 2023-08-23 | 2023-08-23 | 基于使用链的宏文本展开方法、电子设备和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311066608.XA CN117111951B (zh) | 2023-08-23 | 2023-08-23 | 基于使用链的宏文本展开方法、电子设备和介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117111951A true CN117111951A (zh) | 2023-11-24 |
CN117111951B CN117111951B (zh) | 2024-03-15 |
Family
ID=88810467
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311066608.XA Active CN117111951B (zh) | 2023-08-23 | 2023-08-23 | 基于使用链的宏文本展开方法、电子设备和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117111951B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117762889A (zh) * | 2024-02-20 | 2024-03-26 | 成都融见软件科技有限公司 | 同文件多窗口状态同步方法、电子设备和介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030145282A1 (en) * | 2001-10-31 | 2003-07-31 | Metacyber.Net | Computer-based method for parsing and hashing source information including a combined grammar |
US20050246693A1 (en) * | 2003-09-15 | 2005-11-03 | Plum Thomas S | Automated safe secure techniques for eliminating undefined behavior in computer software |
JP2011113147A (ja) * | 2009-11-24 | 2011-06-09 | Nomura Research Institute Ltd | ソース解析プログラム、プリプロセッサ、レキサ、および構文木解析プログラム |
CN105843661A (zh) * | 2016-03-24 | 2016-08-10 | 中国农业银行股份有限公司 | 一种面向主机系统的代码重定位方法及其系统 |
CN113326047A (zh) * | 2021-06-10 | 2021-08-31 | 南京大学 | 基于静态分析的c语言代码依赖关系提取方法 |
CN115454437A (zh) * | 2022-08-01 | 2022-12-09 | 峰岧科技(上海)有限公司 | 代码编译方法、装置、设备及介质 |
US20230115334A1 (en) * | 2021-10-11 | 2023-04-13 | International Business Machines Corporation | Identifying computer instructions enclosed by macros and conflicting macros at build time |
CN116756103A (zh) * | 2023-08-23 | 2023-09-15 | 北京云枢创新软件技术有限公司 | 基于使用行的宏定义文本展开方法、电子设备和介质 |
-
2023
- 2023-08-23 CN CN202311066608.XA patent/CN117111951B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030145282A1 (en) * | 2001-10-31 | 2003-07-31 | Metacyber.Net | Computer-based method for parsing and hashing source information including a combined grammar |
US20050246693A1 (en) * | 2003-09-15 | 2005-11-03 | Plum Thomas S | Automated safe secure techniques for eliminating undefined behavior in computer software |
JP2011113147A (ja) * | 2009-11-24 | 2011-06-09 | Nomura Research Institute Ltd | ソース解析プログラム、プリプロセッサ、レキサ、および構文木解析プログラム |
CN105843661A (zh) * | 2016-03-24 | 2016-08-10 | 中国农业银行股份有限公司 | 一种面向主机系统的代码重定位方法及其系统 |
CN113326047A (zh) * | 2021-06-10 | 2021-08-31 | 南京大学 | 基于静态分析的c语言代码依赖关系提取方法 |
US20230115334A1 (en) * | 2021-10-11 | 2023-04-13 | International Business Machines Corporation | Identifying computer instructions enclosed by macros and conflicting macros at build time |
CN115454437A (zh) * | 2022-08-01 | 2022-12-09 | 峰岧科技(上海)有限公司 | 代码编译方法、装置、设备及介质 |
CN116756103A (zh) * | 2023-08-23 | 2023-09-15 | 北京云枢创新软件技术有限公司 | 基于使用行的宏定义文本展开方法、电子设备和介质 |
Non-Patent Citations (4)
Title |
---|
ANDREAS SAEBJOERNSEN: "Static Validation of C Preprocessor Macros", 《2009 IEEE/ACM INTERNATIONAL CONFERENCE ON AUTOMATED SOFTWARE ENGINEERING》, 18 March 2010 (2010-03-18), pages 1 - 10 * |
ORANGECLOUDY: "151day(宏定义的原样展开和树形选择排序,堆排序)", pages 1 - 6, Retrieved from the Internet <URL:《https://blog.csdn.net/orangecloudy/article/details/79512851》> * |
刘文倩: "基于深度学习和代码覆盖引导的模糊测试技术研究", 《中国优秀硕士学位论文全文数据库 (信息科技辑)》, 15 April 2022 (2022-04-15), pages 139 - 72 * |
高其胜: "探析宏定义的基本架构", 《科技资讯》, 7 July 2006 (2006-07-07), pages 97 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117762889A (zh) * | 2024-02-20 | 2024-03-26 | 成都融见软件科技有限公司 | 同文件多窗口状态同步方法、电子设备和介质 |
CN117762889B (zh) * | 2024-02-20 | 2024-04-19 | 成都融见软件科技有限公司 | 同文件多窗口状态同步方法、电子设备和介质 |
Also Published As
Publication number | Publication date |
---|---|
CN117111951B (zh) | 2024-03-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN117111951B (zh) | 基于使用链的宏文本展开方法、电子设备和介质 | |
JP5005510B2 (ja) | ソフトウェアの設計支援方法、設計支援装置及び設計支援プログラム | |
CN111597243B (zh) | 基于数据仓库抽象数据加载的方法及系统 | |
Schulze et al. | Refactoring delta-oriented software product lines | |
CN108228187B (zh) | 一种数值程序的全局优化方法 | |
CN116756103B (zh) | 基于使用行的宏定义文本展开方法、电子设备和介质 | |
Jongeling et al. | Towards consistency checking between a system model and its implementation | |
CN110069455B (zh) | 一种文件合并方法及装置 | |
Toth et al. | Using version control history to follow the changes of source code elements | |
CN111142877A (zh) | Rom芯片补丁的接口函数及参数类型自动化提取方法、系统及存储介质 | |
EP2037373A2 (en) | A method and a system for automatic extraction of requirements | |
JP2015069400A (ja) | ソフトウェアテストシステム | |
CN117112730B (zh) | 基于宏展开文本的目标文本搜索方法、电子设备和介质 | |
CN113448982A (zh) | Ddl语句的解析方法、装置、计算机设备及存储介质 | |
CN109144564B (zh) | 一种基于历史修改模式的修改影响分析推荐方法及其系统 | |
CN117111950B (zh) | 基于常量宏定义的宏文本展开方法、电子设备和介质 | |
GB2420638A (en) | Method of substituting code fragments in Internal Representation | |
Landhäußer et al. | Synchronizing domain models with natural language specifications | |
JP2005352894A (ja) | 性能解析プログラム及び性能解析プログラムの生成方法 | |
CN115562649B (zh) | 一种计算机混合程序语言源代码辅助编写方法及系统 | |
JP2019139268A (ja) | プログラム解析方法、プログラム解析装置およびプログラム解析プログラム | |
CN112818628B (zh) | 集成电路制造工艺设计规则的自动化开发方法及其系统 | |
CN118012763A (zh) | 逐层展开宏文本的方法、电子设备和介质 | |
US20240202522A1 (en) | Device and method for generating deep learning model graph and abstract syntax tree for integrated compiler | |
JP3394353B2 (ja) | 機械語命令スケジューリング装置 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |