CN114594960A - 一种递归函数解析执行方法、装置及存储介质 - Google Patents

一种递归函数解析执行方法、装置及存储介质 Download PDF

Info

Publication number
CN114594960A
CN114594960A CN202210213158.1A CN202210213158A CN114594960A CN 114594960 A CN114594960 A CN 114594960A CN 202210213158 A CN202210213158 A CN 202210213158A CN 114594960 A CN114594960 A CN 114594960A
Authority
CN
China
Prior art keywords
instruction
function
recursive function
recursive
sequence
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
CN202210213158.1A
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.)
NR Electric Co Ltd
NR Engineering Co Ltd
Original Assignee
NR Electric Co Ltd
NR Engineering 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 NR Electric Co Ltd, NR Engineering Co Ltd filed Critical NR Electric Co Ltd
Priority to CN202210213158.1A priority Critical patent/CN114594960A/zh
Publication of CN114594960A publication Critical patent/CN114594960A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/425Lexical analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02PCLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
    • Y02P90/00Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
    • Y02P90/02Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种递归函数解析执行方法、装置及存储介质,其方法包括:定义用于函数解析的指令集;识别ST结构化文本语言中的递归函数和非递归函数,并输出解释型指令序列;通过解析器解析解释型指令序列获取函数指令序列,所述函数指令序列包括递归函数指令和非递归函数指令;按照函数指令序列的顺序执行递归函数指令和非递归函数指令;其中,在执行递归函数指令时,基于递归函数指令的数据帧建立帧栈型数据结构的调用栈;基于调用栈的顺序依次从所述递归函数指令集中调用递归函数指令的处理函数进行执行,直至调用栈为空;本发明弥补了IEC61131‑3标准的结构化文本语言不支持递归调用的不足,提升了程序灵活性,满足复杂算法的使用需求。

Description

一种递归函数解析执行方法、装置及存储介质
技术领域
本发明涉及一种递归函数解析执行方法、装置及存储介质,属于指令解释执行技术领域。
背景技术
IEC61131-3标准定义的ST结构化文本语言,采用高度压缩的方式提供大量抽象语句来描述复制控制***的功能,特别为工业控制应用而开发,但该语言不支持递归函数调用,无法满足一些复杂算法的实现需求。在过程控制领域为了满足在线无扰更新的要求,通常采用解析执行的方法,需要支持递归函数的解析执行。
发明内容
本发明的目的在于克服现有技术中的不足,提供一种递归函数解析执行方法、装置及存储介质,支持递归函数调用执行,满足复杂算法应用开需求。
为达到上述目的,本发明是采用下述技术方案实现的:
第一方面,本发明提供了一种递归函数解析执行方法,包括:
定义用于函数解析的指令集,所述指令集包括递归函数指令集和非递归函数指令集;
识别ST结构化文本语言中的递归函数和非递归函数,并基于递归函数和非递归函数编译输出解释型指令序列;
通过解析器解析解释型指令序列获取函数指令序列,所述函数指令序列包括递归函数指令和非递归函数指令;
按照函数指令序列的顺序执行递归函数指令和非递归函数指令;
其中,在执行递归函数指令时,基于递归函数指令的数据帧建立帧栈型数据结构的调用栈;
基于调用栈的顺序依次从所述递归函数指令集中调用递归函数指令的处理函数进行执行,直至调用栈为空。
可选的,所述指令集为自定义虚拟机指令集,所述非递归函数指令集包括内存操作指令、算术运算指令、逻辑运算指令、位操作指令、比较操作指令、流程控制指令和非递归函数调用指令;所述递归函数指令集包括新建数据帧指令、删除数据帧指令、数据压栈指令、数据出栈指令、形参传递赋值指令和递归函数调用指令。
可选的,所述识别ST结构化文本语言中的递归函数和非递归函数包括:
对ST结构化文本语言进行词法分析、语法分析和语义分析,生成函数语义树;
基于函数语义树按深度优先次序遍历其子节点,将存在子节点回溯返回到函数语义树的首节点标记为递归函数,将不存在子节点回溯返回到函数语义树的首节点标记为非递归函数。
可选的,所述编译输出解释型指令序列包括:
在分配数据区的显式声明的变量区F.data增加1个输出变量,用于记录递归函数的返回值ret;
在序言部分增加形参传递的指令,将递归函数和非递归函数的初始源数据区复制到本地数据区;
对本地数据区中数据进行编译依次输出非递归函数语句指令或递归函数调用指令,并生成解释型指令序列;
其中,在编译过程中,判断是否遇到递归函数的递归调用处,若是,则输出递归函数调用指令,若否,则输出非递归函数语句指令。
可选的,所述函数指令序列采用链表管理,所述非递归函数指令的一帧数据采用向量数组管理,所述递归函数指令的数据帧采用栈管理。
可选的,所述从所述递归函数指令集中调用递归函数指令的处理函数进行执行包括:
缓存当前递归函数指令下标;
将当前递归函数指令下标置0;
根据递归函数的递归调用获取递归函数指令新分配的数据帧;
根据数据帧调用exec函数执行递归函数指令的处理函数;
恢复当前递归函数指令下标。
第二方面,本发明提供了一种递归函数解析执行装置,所述装置包括:
指令集定义模块,用于定义用于函数解析的指令集,所述指令集包括递归函数指令集和非递归函数指令集;
解释型指令序列获取模块,用于识别ST结构化文本语言中的递归函数和非递归函数,并基于递归函数和非递归函数编译输出解释型指令序列;
函数指令序列获取模块,用于通过解析器解析解释型指令序列获取函数指令序列,所述函数指令序列包括递归函数指令和非递归函数指令;
函数指令序列执行模块,用于按照函数指令序列的顺序执行递归函数指令和非递归函数指令;
其中,在执行递归函数指令时,基于递归函数指令的数据帧建立帧栈型数据结构的调用栈;
基于调用栈的顺序依次从所述递归函数指令集中调用递归函数指令的处理函数进行执行,直至调用栈为空。
第三方面,本发明提供了一种递归函数解析执行装置,包括处理器及存储介质;
所述存储介质用于存储指令;
所述处理器用于根据所述指令进行操作以执行根据上述述方法的步骤。
第四方面,本发明提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现上述方法的步骤。
与现有技术相比,本发明所达到的有益效果:
本发明提供了一种递归函数解析执行方法、装置及存储介质,通过识别递归函数,在上层程序调用递归函数时,采用非递归函数调用指令,传递数据形参,在递归函数内部调用自身时,采用递归函数调用指令,创建帧栈型数据结构,通过入栈、出栈操作缓存若干次调用的数据区并恢复调用前后的上下文,实现递归函数的正确解析执行,有效扩充了结构化文本语言的功能,满足了工业控制复杂算法的实现需求。
附图说明
图1是本发明实施例提供的一种递归函数解析执行方法的流程图;
图2是本发明实施例提供的递归函数指令输出的原理示意图;
图3是本发明实施例提供的递归函数数据帧栈的示例图;
图4是本发明实施例提供的递归函数解析实现的原理示意图;
图5是本发明实施例提供的递归函数解析验证的示例图。
具体实施方式
下面结合附图对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
实施例一:
如图1所示,本发明实施提供了一种递归函数解析执行方法,包括:
1、定义用于函数解析的指令集,所述指令集包括递归函数指令集和非递归函数指令集;
2、识别ST结构化文本语言中的递归函数和非递归函数,并基于递归函数和非递归函数编译输出解释型指令序列;
3、通过解析器解析解释型指令序列获取函数指令序列,所述函数指令序列包括递归函数指令和非递归函数指令;
4、按照函数指令序列的顺序执行递归函数指令和非递归函数指令;
其中,在执行递归函数指令时,基于递归函数指令的数据帧建立帧栈型数据结构的调用栈;
基于调用栈的顺序依次从所述递归函数指令集中调用递归函数指令的处理函数进行执行,直至调用栈为空。
(1)指令集为自定义虚拟机指令集,非递归函数指令集包括内存操作指令、算术运算指令、逻辑运算指令、位操作指令、比较操作指令、流程控制指令和非递归函数调用指令;递归函数指令集包括新建数据帧指令、删除数据帧指令、数据压栈指令、数据出栈指令、形参传递赋值指令和递归函数调用指令。
(2)递归函数指令都基于私有数据区进行操作,形参赋值和函数返回值值分别在序言和尾声阶段添加额外指令处理。
用于递归处理的指令助记符如表1所示:
表1:
Figure BDA0003532211680000051
(3)识别ST结构化文本语言中的递归函数包括:
对含有递归函数的ST结构化文本语言进行词法分析(基于flex工具)、语法分析(基于bison工具)和语义分析,生成函数语义树;
基于函数语义树按深度优先次序遍历其子节点,若回溯返回到函数语义树的首节点,则置递归函数标记。
(4)编译输出递归函数指令序列包括:
分配数据区且在显式声明的变量区F.data增加1个输出变量,用于记录递归函数的返回值ret;
在序言部分增加形参传递的指令,将函数初始源数据区复制到本地数据区;
在编译过程中,判断是否遇到递归调用处,若是,则输出递归函数指令,若否,则输出非递归函数指令;
根据输出的递归函数指令和非递归函数指令分别得到递归函数指令序列和非递归函数指令序列。
如图2所示,对编译输出递归函数和非递归函数指令序列包括:
a)分配数据区且在显式声明的变量区F.data增加1个输出变量,用于记录函数返回值ret;
b)在序言部分增加形参传递的指令,将函数初始源数据区复制到本地数据区;
c)输出非递归函数指令;
d)遇到递归调用处,输出递归函数指令;
e)输出非递归函数指令。
(5)如图3-4所示,帧栈型数据结构采用链表管理递归函数指令序列,采用向量数组管理一帧数据,采用栈管理递归函数调用的数据帧序列。
(6)如图4所示,指令序列采用顺序执行方式,当执行到递归函数类型指令时,根据递归函数类型编号获取对应的指令序列并创建帧栈型数据结构,并按照如下顺序执行递归函数:
a)缓存当前递归函数指令下标;
b)将当前递归函数指令下标置0;
c)获取新分配的数据帧;
d)调用exec执行递归函数;
e)恢复当前递归函数指令下标。
(7)在程序组织单元POU的程序中调用了递归函数时,递归函数首次使用的数据区在程序组织单元POU的数据区分配,在程序组织单元POU调用递归函数处的指令流输出步骤如下:
a)输出递归函数调用的形参传入语句指令;
b)输出非递归函数调用指令fcall;
c)输出递归函数返回值处理指令。
基于上述实施方式,如图5所示,以典型的Factorial函数为例,分别显示了对应的ST源代码、编译后的数据区、数据帧、反编译后的指令序列、执行的结果。结果表明,正确执行了递归函数,返回了正确的计算值。
实施例二:
本发明实施例提供了一种递归函数解析执行装置,装置包括:
指令集定义模块,用于定义适用于递归函数解析的指令集;
指令序列获取模块,用于识别ST结构化文本语言中的递归函数,并编译输出递归函数指令序列;
指令序列处理模块,用于通过解析器解析递归函数指令序列获取递归函数指令,并根据递归函数指令建立帧栈型数据结构的调用栈;
指令序列执行模块,用于基于调用栈依次调用对应指令集的处理函数完成递归函数的执行,直至调用栈为空。
实施例三:
本发明提供了一种递归函数解析执行装置,包括处理器及存储介质;
存储介质用于存储指令;
处理器用于根据指令进行操作以执行根据实施例一提供的方法的步骤。
实施例四:
本发明提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现实施例一提供的方法的步骤。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

Claims (9)

1.一种递归函数解析执行方法,其特征在于,包括:
定义用于函数解析的指令集,所述指令集包括递归函数指令集和非递归函数指令集;
识别ST结构化文本语言中的递归函数和非递归函数,并基于递归函数和非递归函数编译输出解释型指令序列;
通过解析器解析解释型指令序列获取函数指令序列,所述函数指令序列包括递归函数指令和非递归函数指令;
按照函数指令序列的顺序执行递归函数指令和非递归函数指令;
其中,在执行递归函数指令时,基于递归函数指令的数据帧建立帧栈型数据结构的调用栈;
基于调用栈的顺序依次从所述递归函数指令集中调用递归函数指令的处理函数进行执行,直至调用栈为空。
2.根据权利要求1所述的一种递归函数解析执行方法,其特征在于,所述指令集为自定义虚拟机指令集,所述非递归函数指令集包括内存操作指令、算术运算指令、逻辑运算指令、位操作指令、比较操作指令、流程控制指令和非递归函数调用指令;所述递归函数指令集包括新建数据帧指令、删除数据帧指令、数据压栈指令、数据出栈指令、形参传递赋值指令和递归函数调用指令。
3.根据权利要求1所述的一种递归函数解析执行方法,其特征在于,所述识别ST结构化文本语言中的递归函数和非递归函数包括:
对ST结构化文本语言进行词法分析、语法分析和语义分析,生成函数语义树;
基于函数语义树按深度优先次序遍历其子节点,将存在子节点回溯返回到函数语义树的首节点标记为递归函数,将不存在子节点回溯返回到函数语义树的首节点标记为非递归函数。
4.根据权利要求1所述的一种递归函数解析执行方法,其特征在于,所述编译输出解释型指令序列包括:
在分配数据区的显式声明的变量区F.data增加1个输出变量,用于记录递归函数的返回值ret;
在序言部分增加形参传递的指令,将递归函数和非递归函数的初始源数据区复制到本地数据区;
对本地数据区中数据进行编译依次输出非递归函数语句指令或递归函数调用指令,并生成解释型指令序列;
其中,在编译过程中,判断是否遇到递归函数的递归调用处,若是,则输出递归函数调用指令,若否,则输出非递归函数语句指令。
5.根据权利要求1所述的一种递归函数解析执行方法,其特征在于,所述函数指令序列采用链表管理,所述非递归函数指令的一帧数据采用向量数组管理,所述递归函数指令的数据帧采用栈管理。
6.根据权利要求1所述的一种递归函数解析执行方法,其特征在于,所述从所述递归函数指令集中调用递归函数指令的处理函数进行执行包括:
缓存当前递归函数指令下标;
将当前递归函数指令下标置0;
根据递归函数的递归调用获取递归函数指令新分配的数据帧;
根据数据帧调用exec函数执行递归函数指令的处理函数;
恢复当前递归函数指令下标。
7.一种递归函数解析执行装置,其特征在于,所述装置包括:
指令集定义模块,用于定义用于函数解析的指令集,所述指令集包括递归函数指令集和非递归函数指令集;
解释型指令序列获取模块,用于识别ST结构化文本语言中的递归函数和非递归函数,并基于递归函数和非递归函数编译输出解释型指令序列;
函数指令序列获取模块,用于通过解析器解析解释型指令序列获取函数指令序列,所述函数指令序列包括递归函数指令和非递归函数指令;
函数指令序列执行模块,用于按照函数指令序列的顺序执行递归函数指令和非递归函数指令;
其中,在执行递归函数指令时,基于递归函数指令的数据帧建立帧栈型数据结构的调用栈;
基于调用栈的顺序依次从所述递归函数指令集中调用递归函数指令的处理函数进行执行,直至调用栈为空。
8.一种递归函数解析执行装置,其特征在于,包括处理器及存储介质;
所述存储介质用于存储指令;
所述处理器用于根据所述指令进行操作以执行根据权利要求1-6任一项所述方法的步骤。
9.计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-6任一项所述方法的步骤。
CN202210213158.1A 2022-03-04 2022-03-04 一种递归函数解析执行方法、装置及存储介质 Pending CN114594960A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210213158.1A CN114594960A (zh) 2022-03-04 2022-03-04 一种递归函数解析执行方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210213158.1A CN114594960A (zh) 2022-03-04 2022-03-04 一种递归函数解析执行方法、装置及存储介质

Publications (1)

Publication Number Publication Date
CN114594960A true CN114594960A (zh) 2022-06-07

Family

ID=81815965

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210213158.1A Pending CN114594960A (zh) 2022-03-04 2022-03-04 一种递归函数解析执行方法、装置及存储介质

Country Status (1)

Country Link
CN (1) CN114594960A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114800530A (zh) * 2022-06-09 2022-07-29 中国科学技术大学 基于视觉的机器人的控制方法、设备及存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114800530A (zh) * 2022-06-09 2022-07-29 中国科学技术大学 基于视觉的机器人的控制方法、设备及存储介质
CN114800530B (zh) * 2022-06-09 2023-11-28 中国科学技术大学 基于视觉的机器人的控制方法、设备及存储介质

Similar Documents

Publication Publication Date Title
EP0204942A2 (en) Compiler for a source program, a method of making the same and its use
CN109491658A (zh) 计算机可执行代码数据的生成方法及装置
US11579856B2 (en) Multi-chip compatible compiling method and device
CN106547520B (zh) 一种代码路径分析方法及装置
CN106648681A (zh) 一种可编程语言编译装载***及方法
CN109614106A (zh) 一种c++程序编译方法和装置
CN108563561B (zh) 一种程序隐性约束提取方法及***
CN114594960A (zh) 一种递归函数解析执行方法、装置及存储介质
JP2009181446A (ja) プログラム生成装置およびブロック線図生成装置
CN110362792B (zh) 将rn文件转换为小程序文件的方法、装置及转换设备
CN111381828A (zh) 生成代码文件的语法树的方法、装置及电子设备
Westergaard et al. Efficient implementation of prioritized transitions for high-level Petri nets
Schulz Learning search control knowledge for equational theorem proving
JP2009169864A (ja) コンパイル方法およびコンパイルプログラム
CN109858204B (zh) 一种基于llvm的程序代码保护方法及装置
CN106649095A (zh) 一种面向目标代码的程序静态分析***
CN111381826A (zh) 生成代码文件的语法树的方法、装置及电子设备
CN107844535B (zh) 一种外部资源库调用方法及***
JP2007122187A (ja) プログラム・コード生成装置
CN106598839A (zh) 一种面向目标代码的程序静态分析方法
JP7059757B2 (ja) Api処理方法、端末、api処理プログラム
CN113050948A (zh) 动态库优化方法、装置、设备及存储介质
CN111381827A (zh) 生成代码文件的语法树的方法、装置及电子设备
CN111381814A (zh) 生成代码文件的语法树的方法、装置及电子设备
CN108133002A (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