基于程序切片的JavaScript延续传递风格转化方法技术

技术编号:22166172 阅读:27 留言:0更新日期:2019-09-21 10:16
本发明专利技术公开了一种基于程序切片的JavaScript延续传递风格(Continuation‑passing style CPS)转化方法,包括根据直接风格的同步化代码步骤,完成程序切片步骤,执行转化过程步骤,在线显示转化结果步骤。首先以同步方式编写代码,以此来作为输入,利用额外参数来标记程序中的调用节点,然后根据刚才给出的callback变量对该点处进行程序前向切片,根据前向切片结果图寻找数据依赖关系,根据依赖关系来完成延续传递风格的自动转化,无需程序员手动转化,转化过后的代码尽可能的保持了原有程序的结构和变量名称,增加代码的可读性,方便后期进行测试维护。最后在Web端利用Bootstrap技术来布局,将转化过后的代码展示到页面上。

JavaScript Continuation Transfer Style Conversion Method Based on Program Slicing

【技术实现步骤摘要】
基于程序切片的JavaScript延续传递风格转化方法
本专利技术涉及函数式编程中延续传递风格和程序切片领域,具体涉及一种基于程序切片的JavaScript延续传递风格转化方法。
技术介绍
函数式编程的历史已经很悠久了,这两年随着React的火热,函数式编程的概念也开始流行起来。虽然当下流行的语言(如Java、C++等)并不支持函数式编程,但是函数式编程的概念在程序中发挥了很大的作用,解决许多难题,比如文中提及的延续传递风格(CPS)。和Lisp、Haskell不同,JavaScript并非纯函数式编程语言,但JavaScript属于一种多语言范式,也就是说可以在JavaScript中应用函数编程技术。如今的Web应用程序中,JavaScript中对远程服务的异步请求无所不在,这种非阻塞任务的延续表示为一个回调函数,接着使用请求的结果调用该函数。这种在连续函数中捕获计算的其余部分的编程风格称为延续传递风格。延续传递风格的代码也有缺点:一方面,不同于我们所常见的直接式编程风格,延续传递风格的代码比较隐晦,不利于正常的读写。另一方面,程序员手动将直接风格代码转化成延续传递风格比较费时费力,因此滋生了许多CPS转化的工具,但是不同转化工具翻译的代码质量也不一样,存在许多问题。比如,这些框架通常采用保守的方法,其中每个函数调用都转换为CPS,这样会导致原本两个相互独立互不影响的调用,转化之后会嵌套在一起,从而导致程序无法正确运行。本文提出一种基于程序切片的CPS转化方法,可以有效解决上述问题。MarkWeiser[1]在1979年首先给出了程序切片的概念:程序中的某个输出只与程序的部分语句有关系,删除其他的语句或控制谓词对这个输出没有任何影响。程序切片是程序的子集,其对在特定位置计算的值具有直接或间接影响。程序切片一般应用在在代码调试,软件维护等。程序切片大致可以分为前向切片和后向切片。简而言之,向后切片查找影响切片标准的语句,而向前切片查找受切片标准影响的所有语句。程序的前向切片是可能受该程序点处变量值影响的语句集合。前向切片会生成相应程序点处的控制依赖关系和数据依赖关系。其中数据依赖揭示了语句间存在的数据流方面的内在联系。公开于该
技术介绍
部分的信息仅仅旨在增加对本专利技术的总体背景的理解,而不应当被视为承认或以任何形式暗示该信息构成已为本领域一般技术人员所公知的现有技术。
技术实现思路
本专利技术的目的在于提供一种基于程序切片的JavaScript延续传递风格转化方法,主要是利用程序切片中数据依赖关系对程序进行延续传递风格的转化,以此来提高程序可读性、可维护性和响应性。从而克服上述现有技术中的缺陷。为实现上述目的,本专利技术提供了一种基于程序切片的JavaScript延续传递风格转化方法,包括以下步骤:步骤1:根据直接风格的同步化代码步骤:首先利用同步的方式(直接风格)编写预转化程序,利用额外参数callback来标志程序中需要转化的call节点(调用节点)。以同步的方式编写代码简化了程序员编写难度,为了后续的CPS转化做铺垫;步骤2:完成程序切片步骤:利用切片工具对用callback标记的调用点作出相应的前向切片,生成对应的受该程序点处变量值影响的语句集合。步骤3:执行转化过程步骤:步骤2中的程序前向切片的语句集合包含这点处的控制依赖关系和数据依赖关系,利用其中数据依赖关系在该点处进行CPS转换,即将调用节点转化为带有原始参数和一个回调参数的调用,其中回调参数返回一个带有结果的函数给调用者。步骤4:在线显示转化结果步骤:在Web端利用Bootstrap技术搭建一个界面,将程序代码转化过后的结果在网页中展示出来。本专利技术进一步限定的技术方案为:优选地,上述技术方案中,所述步骤1中根据直接风格的同步化代码具体步骤为:步骤1.1:根据一般的直接风格编写需要转化的程序代码,添加一个额外参数callback标记程序中需要转化的调用节点;步骤1.2:然后将这些调用节点放入一组集合{c1,c2,c3.....},备用两份。优选地,上述技术方案中,所述步骤2中完成程序切片具体步骤为:步骤2.1:遍历步骤1.2中的集合{c1,c2,c3.....},利用切片工具对其中调用节点c1进行前向切片,获得该节点处相应的控制依赖关系和数据依赖关系的集合;步骤2.2:将步骤2.1中该调用节点c1处的控制依赖关系从集合中去除,只留下数据依赖关系;步骤2.3:把c1从集合中删除,迭代步骤2.1和步骤2.2,直到集合为空为止。优选地,上述技术方案中,所述步骤3中执行转化过程具体步骤为:步骤3.1:遍历步骤1.2中的集合{c1,c2,c3.....},根据步骤2中的依赖关系过滤掉程序中不需要转化或者不相关的语句;步骤3.2:将调用节点c1转化为带有原始参数和一个回调参数的调用,即进行相应的CPS转化;步骤3.3:把c1从集合中删除,继续循环遍历集合,直到集合为空,全部完成转化为止。优选地,上述技术方案中,所述步骤4中在线显示转化结果具体步骤为:步骤4.1:在WEB端利用Bootstrap技术搭建一个界面,将程序代码转化过后的结果在网页中展示出来。与现有技术相比,本专利技术具有如下有益效果:(1)利用程序切片技术获取程序点的数据依赖关系,根据数据依赖关系来进行CPS转化,避免了原本相互独立的调用函数在转化之后嵌套在一起,提高转化的正确性。(2)转化过后的代码尽可能的保留了原始的变量名称和程序结构,提高了代码的可维护性和可读性,方便程序员后续进行测试和调试。附图说明:图1为JavaScript延续传递风格转化过程的整体流程图;图1.1为添加标记的代码示意图;图2为获取程序点的前向切片流程图。具体实施方式:下面对本专利技术的具体实施方式进行详细描述,但应当理解本专利技术的保护范围并不受具体实施方式的限制。除非另有其它明确表示,否则在整个说明书和权利要求书中,术语“包括”或其变换如“包含”或“包括有”等等将被理解为包括所陈述的元件或组成部分,而并未排除其它元件或其它组成部分。本专利技术涉及函数式编程中延续传递风格和程序切片领域,具体涉及一种基于程序切片的JavaScript延续传递风格转化方法。主要是利用程序切片中数据依赖关系对程序进行延续传递风格的转化,以此来提高程序可读性、可维护性和响应性。总体流程图如图1所示,具体步骤如下:步骤1:根据直接风格的同步化代码:步骤1.1:根据一般的直接风格编写需要转化的程序代码,添加一个额外参数callback标记程序中需要转化的调用节点,以一个异步请求城市温度再写入文件的程序为例,添加标记的代码如下图1.1所示;步骤1.2:然后将该程序中三个调用节点放入一组集合{c1,c2,c3}中,备用两份分别为集合1和集合2。步骤2:完成天气请求程序切片步骤:步骤2.1:遍历步骤1.2中的集合1{c1,c2,c3},利用切片工具对其中第一个调用节点c1进行前向切片,这样可以很容易得获得该节点处相应的控制依赖关系和数据依赖关系的集合;步骤2.2:将步骤2.1中该调用节点c1处的控制依赖关系从集合1中删除,只留下数据依赖关系,数据依赖是本篇CPS转化的关键之处;步骤2.3:把c1从集合1中删除,循环步骤2.1和步骤2.2,直到集合1为空为止。步骤3本文档来自技高网
...

【技术保护点】
1.一种基于程序切片的JavaScript延续传递风格转化方法,其特征在于:包括以下步骤:步骤1:根据直接风格的同步化代码步骤:首先利用直接风格同步的方式编写预转化程序,利用额外参数callback来标志程序中需要转化的call节点;步骤2:完成程序切片步骤:利用切片工具对用callback标记的call点作出相应的前向切片,生成对应的受该程序点处变量值影响的语句集合;步骤3:执行转化过程步骤:步骤2中的程序前向切片的语句集合包含这点处的控制依赖关系和数据依赖关系,利用其中数据依赖关系在该点处进行CPS转换,即将调用节点转化为带有原始参数和一个回调参数的调用,其中回调参数返回一个带有结果的函数给调用者;步骤4:在线显示转化结果步骤:在WEB端利用Bootstrap技术搭建一个界面,将程序代码转化过后的结果在网页中展示出来。

【技术特征摘要】
1.一种基于程序切片的JavaScript延续传递风格转化方法,其特征在于:包括以下步骤:步骤1:根据直接风格的同步化代码步骤:首先利用直接风格同步的方式编写预转化程序,利用额外参数callback来标志程序中需要转化的call节点;步骤2:完成程序切片步骤:利用切片工具对用callback标记的call点作出相应的前向切片,生成对应的受该程序点处变量值影响的语句集合;步骤3:执行转化过程步骤:步骤2中的程序前向切片的语句集合包含这点处的控制依赖关系和数据依赖关系,利用其中数据依赖关系在该点处进行CPS转换,即将调用节点转化为带有原始参数和一个回调参数的调用,其中回调参数返回一个带有结果的函数给调用者;步骤4:在线显示转化结果步骤:在WEB端利用Bootstrap技术搭建一个界面,将程序代码转化过后的结果在网页中展示出来。2.如权利要求1所述的基于程序切片的Javascript延续传递风格转化方法,其特征在于:所述步骤1中根据直接风格的同步化代码具体步骤为:步骤1.1:根据一般的直接风格编写需要转化的程序代码,添加一个额外参数callback标记程序中需要转化的...

【专利技术属性】
技术研发人员:张迎周黄秋月陈宏建傅建清肖雁冰
申请(专利权)人:南京邮电大学
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1