System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及编译语言扩展,尤其是涉及一种融合语法糖的st语言扩展方法、系统、设备及介质。
技术介绍
1、iec61131-3标准是国际电工委员会发布的一项关于可编程逻辑控制器(plc)编程的国际标准。该标准定义了五种plc编程语言,包括指令表(il)、结构化文本(st)、梯形图(ld)、顺序功能图(sfc)、功能块图(fbd)。其中,结构化文本(st)语言是一种类似于c语言的文本编程语言,它支持面向过程和面向对象的编程方式,被广泛应用于处理复杂的逻辑和大量数据。
2、随着plc及其外设逐渐向着大型化和复杂化方向发展,plc程序中的变量数量也呈现出快速增长的趋势。在这种情况下,数组作为iec61131-3标准中唯一的集合类数据结构,在plc程序中得到了广泛的使用。因此,数组元素的遍历和访问处理、数组间的互操作,在实现控制逻辑时发挥着重要的作用。
3、然而,目前st语言支持的数组操作相对较为低级,这导致了编写过程繁琐,并且易发生访问越界的问题。
4、根据iec61131-3标准,使用st(结构化文本)语言遍历数组时只能使用迭代语句或穷举方式,穷举方式会产生大量相似代码,使用较少。st语言迭代语句包括for、while、repeat,在遍历数组时三者区别不大。如需遍历一个一维bool类型数组统计值为true的元素的数量,以for语句为例,需执行下述操作(假设数组名为arr_of_bool_4_10,数组起止索引为[4,10]):定义for循环控制索引变量idx;定义存储统计结果的变量count;在
5、上述操作存在以下问题:(1)st语言不支持局部作用域变量,需提前定义循环控制索引变量和统计变量,代码较繁琐;(2)需手动设置循环控制索引变量起、止索引值,且需确保起、止索引在数组有效索引范围内。重构代码时如涉及调整数组定义,数组访问操作时极易出现数组访问越界问题。
6、单数组操作问题尚且可控,在实际plc应用中存在大量与外部设备批量交互数据的需求,对应的代码需实现对两个数组元素进行批量处理,与处理单数组相比所需变量更多、代码更繁琐、数组越界隐患更大。
7、前述只是遍历数组元素进行简单的操作,如果需在遍历过程综合运用元素筛选过滤、数值处理、统计等操作,代码会更加繁琐、产生问题的隐患更大,此外不同的开发人员能力不同,为实现同样功能所写代码差异较大,质量参差不齐,不利于代码维护及复用。
8、st(结构化文本)语言的case语句(类似java语言的switch语句)仅支持使用any_int类型变量,不支持字符串类型,实际需要使用字符串变量进行多分支比对处理时,要么使用if语句代替,要么通过设置字符串与数值的映射关系,曲线救国,实现比较繁琐。
9、在实际plc(可编程逻辑控制器)应用中涉及着大量布尔变量,在与外设交互及内部处理过程中,由于需要节约存储空间并受限于外部交互格式等因素,通常会出现大量针对any_int(任意整数类型)、any_byte(任意字节类型)类型变量的布尔操作。然而,当前plc标准(如st语言)并未直接提供对any_int、any_byte类型变量进行位读写的功能。因此,要实现相应功能,通常只能依赖于plc开发软件所提供的功能扩展,这种做法不仅功能实现不便,还限制了代码在在不同开发软件间的复用性。
10、针对st语言在实际plc应用中存在的问题,多数plc软件厂商通过不同方式对st(结构化文本)语言进行了功能扩展。尽管这些扩展语法和底层实现原理存在差异,但均与其编译器甚至plc运行时环境绑定在一起,不具备在不同plc软件间移植和代码复用能力。
技术实现思路
1、基于此,有必要针对上述问题,提供一种融合语法糖的st语言扩展方法、系统、设备及介质。
2、第一方面,本专利技术提供了一种融合语法糖的st语言扩展方法,该方法包括以下步骤:
3、s1、读取使用扩展语法特性的st源文件,并生成词法符号流;
4、s2、读取词法符号流,生成基于扩展st语法的扩展语法树;
5、s3、遍历扩展语法树,更新扩展语法树各节点类型信息;
6、s4、基于预设代码检测规则,对扩展语法树进行有效性检测;
7、s5、再次遍历扩展语法树,将使用扩展语法的代码重写为标准代码;
8、s6、输出使用标准代码编写的具有相同语义的代码。
9、进一步的,读取使用扩展语法特性的st源文件,并生成词法符号流包括以下步骤:
10、s11、参考java语法糖实现机制,定义语法扩展规则,对st语言进行语法扩展,读取使用扩展st语法特性的st源文件;
11、s12、采用词法分析器对st源文件中的源码进行词法分析,生成词法符号流。
12、进一步的,语法扩展规则包括基于范围和自动类型推导的数组迭代规则、数据流处理规则、数组间批量处理规则、分支判断规则及直接位操作规则。
13、进一步的,遍历扩展语法树,更新扩展语法树各节点类型信息包括以下步骤:
14、s31、加载使用标准st语言编写的用于辅助实现扩展语法功能的扩展库文件;
15、s32、利用语义分析器结合扩展库文件,多趟遍历扩展语法树,依次生成符号表,更新扩展语法树各节点类型信息,并将各扩展语法树节点类型与数据类型信息填充至符号表与节点上。
16、进一步的,基于预设代码检测规则,对扩展语法树进行有效性检测包括以下步骤:
17、s41、设定代码检测规则,其中,代码检测规则包括基于标准定义的语法规则与扩展语法规则;
18、s42、按照检测规则对扩展语法树进行有效性检测,其中,有效性检测的检测内容包括类型有效性检测与程序组织单元调用有效性检测;
19、s43、若扩展语法树检测为无效则输出错误信息,终止处理,若检测为有效则继续执行步骤s5。
20、进一步的,类型有效性检测表示通过比对扩展语法树节点内期望数据类型和实际数据类型是否兼容,若兼容则检测为有效,若不兼容则检测为无效;
21、程序组织单元调用有效性检测表示通过查找符号表中是否存在指定名称和参数列表的程序组织单元,若存在则检测为有效,若不存在则检测为无效。
22、进一步的,再次遍历扩展语法树,将使用扩展语法的代码重写为标准代码包括以下步骤:
23、s51、遍历扩展语法树,识别扩展语法树中各个扩展语法节点;
24、s52、将各语法扩展规则对应的代码转换为使用标准st语言且具备同等语义的标准代码,并记录对各个扩展库的引用信息。
25、第二方面,本专利技术还提供了一种融合语法糖的st语言扩展系统,该系统包括:
26、词法本文档来自技高网...
【技术保护点】
1.一种融合语法糖的ST语言扩展方法,其特征在于,该方法包括以下步骤:
2.根据权利要求1所述的一种融合语法糖的ST语言扩展方法,其特征在于,所述读取使用扩展语法特性的ST源文件,并生成词法符号流包括以下步骤:
3.根据权利要求2所述的一种融合语法糖的ST语言扩展方法,其特征在于,所述语法扩展规则包括基于范围和自动类型推导的数组迭代规则、数据流处理规则、数组间批量处理规则、分支判断规则及直接位操作规则。
4.根据权利要求1所述的一种融合语法糖的ST语言扩展方法,其特征在于,所述遍历扩展语法树,更新扩展语法树各节点类型信息包括以下步骤:
5.根据权利要求1所述的一种融合语法糖的ST语言扩展方法,其特征在于,所述基于预设代码检测规则,对扩展语法树进行有效性检测包括以下步骤:
6.根据权利要求5所述的一种融合语法糖的ST语言扩展方法,其特征在于,所述类型有效性检测表示通过比对扩展语法树节点内期望数据类型和实际数据类型是否兼容,若兼容则检测为有效,若不兼容则检测为无效;
7.根据权利要求1所述的一种融合语法糖的ST语
8.一种融合语法糖的ST语言扩展系统,用于实现权利要求1-7中任一项所述融合语法糖的ST语言扩展方法,其特征在于,该系统包括:
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
...【技术特征摘要】
1.一种融合语法糖的st语言扩展方法,其特征在于,该方法包括以下步骤:
2.根据权利要求1所述的一种融合语法糖的st语言扩展方法,其特征在于,所述读取使用扩展语法特性的st源文件,并生成词法符号流包括以下步骤:
3.根据权利要求2所述的一种融合语法糖的st语言扩展方法,其特征在于,所述语法扩展规则包括基于范围和自动类型推导的数组迭代规则、数据流处理规则、数组间批量处理规则、分支判断规则及直接位操作规则。
4.根据权利要求1所述的一种融合语法糖的st语言扩展方法,其特征在于,所述遍历扩展语法树,更新扩展语法树各节点类型信息包括以下步骤:
5.根据权利要求1所述的一种融合语法糖的st语言扩展方法,其特征在于,所述基于预设代码检测规则,对扩展语法树进行有效性检测包括以下步骤:
6.根据权利要求5所述的一种融合语...
【专利技术属性】
技术研发人员:朱继伟,董元康,李从飞,倪维东,刘国炜,邓华,钱威,郑泽,
申请(专利权)人:国电南京自动化股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。