一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种实现图形化编程的方法及终端与流程

2022-03-13 22:51:50 来源:中国专利 TAG:


1.本发明涉及图形化编程技术领域,特别涉及一种实现图形化编程的方法及终端。


背景技术:

2.在进行机器人项目的研发过程中,需要使用unity引擎开发一套图形化编程应用,即要求图形化编程结果能够在unity上进行模拟运行。这是因为图形化编程能够生成python脚本类,可离线提供给实体机器人进行运行。
3.现有技术都是基于scratch或blockly(谷歌源码)的源码基础上进行拓展的产品,所采用的语言是js和html,无法和unity引擎完美兼容。由此生成的python代码,添加while循环和协程,在实际运行时容易发生错误,该代码未考虑实际业务场景的直接引用。同时生成python代码未体现全局变量和局部变量关系。


技术实现要素:

4.本发明所要解决的技术问题是:提供一种实现图形化编程的方法及终端,以完美兼容unity引擎。
5.为了解决上述技术问题,本发明采用的技术方案为:
6.一种实现图形化编程的方法,包括:
7.s1.获取预先设置的语言树,所述语言树为基础语法块作为树节点且根据c语言代码的原始逻辑对不同基础语法块进行关联之后所得到的树状结构,所述基础语法块是所述c语言代码所能拆解出来的独立代码片段;
8.s2.接收图形编程请求,获取所述图形编程请求中的图形积木组合和所需要生成的脚本语言种类;
9.s3.从所述语言树中找到与所述图形积木组合中每一积木相对应的树节点,将对应的树节点分别进行与所述脚本语言种类对应的代码转换,将转换后的代码按照所述语言树中的各树节点的关联关系进行拼接整合,得到并输出整合后的代码。
10.本发明的有益效果在于:一种实现图形化编程的方法及终端,用户使用c#编写语法块,对语法块进行拆分,构建一个语法树结构,使语法块对应语法树中的对应节点,客户端接收用户点击的图形请求事件代码,将图形请求事件的代码传入语法树中对应的语法块,根据用户所要选择转换的脚本语言种类,解析所述语法树中的节点,分别切换至对应的代码转换器进行语言转换,并将最终生成的代码输出。从而实现c#语言到lua/python语言的转换,将c#语言作为底层语言,属unity原生支持语言,可完美兼容unity引擎和大部分跨平台应用,且这样生成的lua/python语法考虑实际业务需求,在unity引擎和实体机器人是直接以生成脚本运行模拟,可确保语法的可用性。
附图说明
11.图1为本发明实施例的一种实现图形化编程的方法的主要流程图;
12.图2为本发明实施例的一种实现图形化编程的方法的节点构成图;
13.图3为本发明实施例的一种实现图形化编程的方法的成果展示图;
14.图4为本发明实施例的一种实现图形化编程的方法的所生成的python脚本;
15.图5为本发明实施例的一种实现图形化编程的方法的底层整体结构设计图;
16.图6为本发明实施例的一种实现图形化编程的方法的代码转换关系图;
17.图7为本发明实施例的一种实现图形化编程的方法的代码生成流程图;
18.图8为本发明实施例的一种实现图形化编程的方法的各模块关系图;
19.图9为本发明实施例的一种实现图形化编程的方法的用户行为跟语言树形成的示意图;
20.图10为本发明一种实现图形化编程的终端的结构示意图;
21.标号说明:
22.1、一种实现图形化编程的终端;2、处理器;3、存储器。
具体实施方式
23.为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
24.如图1至9所示,本发明提供一种实现图形化编程的方法,包括:
25.s1.获取预先设置的语言树,所述语言树为基础语法块作为树节点且根据c语言代码的原始逻辑对不同基础语法块进行关联之后所得到的树状结构,所述基础语法块是所述c语言代码所能拆解出来的独立代码片段;
26.s2.接收图形编程请求,获取所述图形编程请求中的图形积木组合和所需要生成的脚本语言种类;
27.s3.从所述语言树中找到与所述图形积木组合中每一积木相对应的树节点,将对应的树节点分别进行与所述脚本语言种类对应的代码转换,将转换后的代码按照所述语言树中的各树节点的关联关系进行拼接整合,得到并输出整合后的代码。
28.从上述描述可知,本发明的有益效果在于:用户使用c#编写语法块,对语法块进行拆分,构建一个语法树结构,使语法块对应语法树中的对应节点,客户端接收用户点击的图形请求事件代码,将图形请求事件的代码传入语法树中对应的语法块,根据用户所要选择转换的脚本语言种类,解析所述语法树中的节点,分别切换至对应的代码转换器进行语言转换,并将最终生成的代码输出。从而实现c#语言到lua/python语言的转换,将c#语言作为底层语言,属unity原生支持语言,可完美兼容unity引擎和大部分跨平台应用,且这样生成的lua/python语法考虑实际业务需求,在unity引擎和实体机器人是直接以生成脚本运行模拟,可确保语法的可用性。
29.进一步地,所述树节点具体为:
30.每个所述树节点包括节点属性和节点唯一名字,所述节点唯一名字用于在进行代码转换时找到对应的代码转换器;
31.每个所述树节点依据所述c语言代码的原始逻辑拆分成多个分叉,每个分叉上设置有分叉属性,每个所述树节点通过所述分叉属性与其他树节点关联。
32.由上述描述可知,每个所述树节点含有两个属性分别是节点的类型与节点唯一名
字,通过节点的唯一名字找到该节点的语法转换器。每个分叉设有分叉属性,有利于判断后续的节点是否可以组合在一起。
33.进一步地,所述脚本语言种类具体为lua脚本语言或python脚本语言。
34.由上述描述可知,可选择转换的脚本语言具有多种,可以是lua脚本语言或是python脚本语言。
35.进一步地,所述拼接整合具体为:
36.根据所述树节点的深度,生成代码片段并添加缩进深度,按照所述树节点下每一个分叉的分叉属性逐层递归进行语法解析,以将所有代码片段按照所述c语言代码的原始逻辑中的组织流程整合在一起,形成完整代码。
37.由上述描述可知,节点所在树的深度作为代码缩进的参照,更加有条理,不容易出错,且生成的代码更加符合规范。
38.进一步地,所述代码转换具体为:
39.所述树节点通过所述节点唯一名字和所需要生成的脚本语言种类获取对应的代码转换器去进行代码转换。
40.由上述描述可知,通过所述节点唯一名字和所需要生成的脚本语言种类获取对应的代码转换器去进行代码转换,使得不同树节点的内容分别进行代码转换后再通过节点之间的关系进行组装成完整代码,以提高代码转换效率。
41.如图10所示,一种实现图形化编程应用的终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
42.s1.获取预先设置的语言树,所述语言树为基础语法块作为树节点且根据c语言代码的原始逻辑对不同基础语法块进行关联之后所得到的树状结构,所述基础语法块是所述c语言代码所能拆解出来的独立代码片段;
43.s2.接收图形编程请求,获取所述图形编程请求中的图形积木组合和所需要生成的脚本语言种类;
44.s3.从所述语言树中找到与所述图形积木组合中每一积木相对应的树节点,将对应的树节点分别进行与所述脚本语言种类对应的代码转换,将转换后的代码按照所述语言树中的各树节点的关联关系进行拼接整合,得到并输出整合后的代码。
45.从上述描述可知,本发明的有益效果在于:用户使用c#编写语法块,对语法块进行拆分,构建一个语法树结构,使语法块对应语法树中的对应节点,服务端接收用户点击的图形请求事件代码,将图形请求事件的代码传入语法树中对应的语法块,根据用户所要选择转换的脚本语言种类,解析所述语法树中的节点,分别切换至对应的代码转换器进行语言转换,并将最终生成的代码输出。从而实现c#语言到lua/python语言的转换,将c#语言作为底层语言,属unity原生支持语言,可完美兼容unity引擎和大部分跨平台应用,且这样生成的lua/python语法考虑实际业务需求,在unity引擎和实体机器人是直接以生成脚本运行模拟,可确保语法的可用性。
46.进一步地,所述树节点具体为:
47.每个所述树节点包括节点属性和节点唯一名字,所述节点唯一名字用于在进行代码转换时找到对应的代码转换器;
48.每个所述树节点依据所述c语言代码的原始逻辑拆分成多个分叉,每个分叉上设置有分叉属性,每个所述树节点通过所述分叉属性与其他树节点关联。
49.由上述描述可知,每个所述树节点含有两个属性分别是节点的类型与节点唯一名字,通过节点的唯一名字找到该节点的语法转换器。每个分叉设有分叉属性,有利于判断后续的节点是否可以组合在一起。
50.进一步地,所述脚本语言种类具体为lua脚本语言或python脚本语言。由上述描述可知,可选择转换的脚本语言具有多种,可以是lua脚本语言或是python脚本语言。
51.进一步地,所述拼接整合具体为:
52.根据所述树节点的深度,生成代码片段并添加缩进深度,按照所述树节点下每一个分叉的分叉属性逐层递归进行语法解析,以将所有代码片段按照所述c语言代码的原始逻辑中的组织流程整合在一起,形成完整代码。
53.由上述描述可知,节点所在树的深度作为代码缩进的参照,更加有条理,不容易出错。
54.进一步地,所述代码转换具体为:
55.所述树节点通过所述节点唯一名字和所需要生成的脚本语言种类获取对应的代码转换器去进行代码转换。
56.由上述描述可知,通过所述节点唯一名字和所需要生成的脚本语言种类获取对应的代码转换器去进行代码转换,不容易内容转换错误。
57.请参照图1至9,本发明的实施例一为:
58.一种实现图形化编程的方法,包括:
59.s1.获取预先设置的语言树,所述语言树为基础语法块作为树节点且根据c语言代码的原始逻辑对不同基础语法块进行关联之后所得到的树状结构,所述基础语法块是所述c语言代码所能拆解出来的独立代码片段;
60.在本实施例中,用户将拆分好的节点,连接构建成一个语言树的结构(语言树:一个完整代码结构,所包含的代码片段构建的一种关联树状结构)。树节点连接时根据分叉设置属性,判断2个树节点是否可以连接在一起。整合多个树节点可以形成一个局部代码块逻辑。
61.其中,如图5所示,构建语言树包括以下步骤:
62.1、语言行为拆分—转换成树节点,
63.如:列表元素添加、列表是否包含元素、列表插入值、列表获取值、列表获取元素索引、方法表达式、布尔表达式、函数对比表达式、与或运算表达式、if逻辑表达式等。
64.2、树节点的属性包含有:
65.树节点分叉类型标记、树节点类型标记和树节点分叉可放置范围标记,其中,
66.树节点类型标记和树节点分叉可放置范围标记作为树节点是否可连接的判断。
67.3、树节点之间的操作如下:
68.树节点间的连接、树节点间的断开、树节点的可连接判断、树节点的分叉检索和树节点动态分叉的扩展。
69.由上述步骤,以此组成语言树。
70.s2.接收图形编程请求,获取所述图形编程请求中的图形积木组合和所需要生成
的脚本语言种类;
71.在本实施例中,如图3所示,用户在图形编程界面时,会进行图形积木组合并选择需要生成的脚本语言种类,然后发送图形编程请求,该脚本语言种类为lua脚本语言或是python脚本语言,如图4所示即最后生成的python脚本语言。如图9所示为用户行为与语言树形成的示意图。
72.s3.从所述语言树中找到与所述图形积木组合中每一积木相对应的树节点,将对应的树节点分别进行与所述脚本语言种类对应的代码转换,将转换后的代码按照所述语言树中的各树节点的关联关系进行拼接整合,得到并输出整合后的代码。
73.在本实施例中,语言树按照从根节点开始解析,每个节点切换至对应的代码转换器。根据节点的深度,生成代码片段添加缩进深度。最终将所有生成代码按照组织流程整合在一起,就形成了一个完整的代码片段。将代码以文本方式输出。
74.所述树节点具体为:
75.每个所述树节点包括节点属性和节点唯一名字,所述节点唯一名字用于在进行代码转换时找到对应的代码转换器;
76.每个所述树节点依据所述c语言代码的原始逻辑拆分成多个分叉,每个分叉上设置有分叉属性,每个所述树节点通过所述分叉属性与其他树节点关联。
77.具体,如图2所示,语法拆分:
78.1.1构建树节点
79.每个树节点表示一个带拆解的语法块。
80.其中,语法块为组成代码的片段,用户编写一些一段完整的代码包括很多个独立的元素。如代码中的判断逻辑:if(a==b)then
81.dosomething()
82.end
83.这里就可拆分多个语法块:
84.语法块1:if()then
85.end
86.语法块2:if的条件:xxx==xxx;
87.语法块3:条件中,a和b又可以作为变量语法块存在
88.语法快4:dosomething()
89.综上,语法块就是一系列组成代码片段。
90.树节点的分叉表示语法拆分出的对象。
91.其中,拆分即为本案例根据代码的组合规则,罗列每个语法块包含的元素内容。如语法快if()then
92.end
93.if的逻辑中拆分成2个分叉,if的执行条件为一个分叉,if的执行内容为一个分叉,都可以跟其它节点拼接。if继续拓展,内容还有elseif的分叉,else的分叉设定。
94.每个树节点通用2个属性,type(树节点类型),nodename(树节点唯一名字,语法生成时可通过该名字指定到该树节点的语法转换器);
95.其中,语法转换器即为转换成特定语言的接口:如if逻辑块节点,c#节点表现是
condition:xxx;content:xxx;生成lua有个对应的接口,内部编写if逻辑的生成表现,最终生成为:if(condition)then content end;生成python有个对应的接口,最终生成为:if(condition):content。
96.每个树节点可以拆分成多个分叉,分叉设定一个包含type,即分叉属性,判断后续节点的type是否可以组合在该分叉下。
97.其中,包含type即为设置的一个包含类型:如if逻辑块:存在2个分叉condition:xxx;content:xxx;if的判断条件condition,可以放置类型为bool变量,条件判断方法等;满足以上类型的树节点才能设置到该处。
98.由上所述的语法块拆分,提供以下实例进行参考:
99.无回调方法的拆分:
100.type:voidnode
101.nodename:voidfunc
102.分叉(3个):
103.functionname(方法名字)
104.params(方法参数)
105.body(方法内容实现)
106.1.2树节点的type
107.string(字符串)
108.number(数值,这里int,float都有该类型代替)
109.bool(布尔变量)
110.array(数组)
111.variable(变量)
112.color(颜色值)
113.null(空值)
114.voidfunc(方法)
115.dosomething(执行)
116.1.3节点树组合
117.通过给树节点分叉添加树节点来实现树节点的组合。
118.树节点的分叉可分3大类:
119.挂接叶子的分叉(设置值)
120.一般分叉(可设置节点)
121.动态分叉(分叉的数量动态扩充)
122.一般分叉就是固定数量的分叉,如上提到的if的条件和执行内容是固定存在的。
123.分叉:树节点身上的属性,如if节点可以划分的分叉为:
124.if的条件(一般分叉)
125.if的执行内容(一般分叉)
126.else的执行内容(一般分叉)
127.因为if逻辑的elseif是不固定的,可能存在多个elseif,elseif下的条件和执行内容被称为动态分叉。
128.其中,所述拼接整合具体为:
129.根据所述树节点的深度,生成代码片段并添加缩进深度,按照所述树节点下每一个分叉的分叉属性逐层递归进行语法解析,以将所有代码片段按照所述c语言代码的原始逻辑中的组织流程整合在一起,形成完整代码。
130.如图6为代码转换关系图,具体为:
131.a.树节点通过nodename和需要转换的语言类型(lua/python)的类。
132.这里描述的是每个语言块,如if逻辑,都有自己对应的lua和python转换器,代码转换是先找到每个树节点对应的代码转换器去生成代码片段,最后整合起来,就是一个完整的代码。
133.b.按照所设置的分叉属性,这里指的是如解析到if逻辑的条件,就会根据条件处连接的树节点,切换到条件相应的代码转换器去生成条件的代码片段,最后整合到if逻辑中;树节点的连接过程是图形化编程的用户行为,通过几个积木的连接去建立这种关联。逐层递归进行语法解析,如:解析到if逻辑的条件;if的条件是一个条件判定方法,就会走条件判定方法的代码生成器,条件判定方法中有可能存在变量节点,然后就是逐层深入到里面生成代码,最终整合成if逻辑的条件代码片段,被if逻辑用于拼接完整代码块。
134.c.节点所在树的深度作为代码缩进的参照。
135.如图7所示,代码生成的流程步骤为:
136.1、用户将拆分好的节点,连接构建成一个语言树的结构。
137.2、树节点连接时根据分叉设置属性,判定2个树节点是否可以连接在一起。
138.3、整合多个树节点可以形成一个局部代码块逻辑。
139.4、选择需要生成的脚本语言种类,lua/python。
140.5、语言树按从根节点开始解析,每个树节点切换至对应的代码转换器。
141.6、根据树节点的深度,生成代码片段添加缩进深度。
142.7、最终将所有生成代码按照组织流程整合在一起,就形成了一个完整的代码片段。
143.8、将代码以文本方式输出。
144.由此,如图8所示,本实施例中可以应用到以下场景:
145.1.图形化编程课程,用户使用图形化积木块,组合积木;组合在一起的积木通过本实施例生成lua语言,并unity加载,驱动unity中的场景,角色或者ai做编辑反馈。整除流程是积木组合,对应到语言树节点拼接行为,后续执行语言树的代码生成。所生成代码片段整合在一起,最终能够被unity加载运行。
146.2.组合生成python,会根据代码块所在节点的深度,表现代码逻辑的缩进深度;最终以文本生成在python文件,发送给机器人加载运行。
147.本发明的实施例二为:
148.一种实现图形化编程的终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述实施例一中的步骤。
149.综上所述,本发明提供的一种实现图形化编程的方法及终端,用户使用c#编写语法块,对语法块进行拆分,构建一个语法树结构,使语法块对应语法树中的对应节点,客户端接收用户点击的图形请求事件代码,将图形请求事件的代码传入语法树中对应的语法
块,根据用户所要选择转换的脚本语言种类,解析所述语法树中的节点,分别切换至对应的代码转换器进行语言转换,并将最终生成的代码输出。每个分叉设有分叉属性,有利于判断后续的节点是否可以组合在一起。以节点所在树的深度作为代码缩进的参照,更加有条理,不容易出错,且生成的代码更加符合规范。通过所述节点唯一名字和所需要生成的脚本语言种类获取对应的代码转换器去进行代码转换,使得不同树节点的内容分别进行代码转换后再通过节点之间的关系进行组装成完整代码,以提高代码转换效率。从而实现c#语言到lua/python语言的转换,将c#语言作为底层语言,属unity原生支持语言,可完美兼容unity引擎和大部分跨平台应用,且这样生成的lua/python语法考虑实际业务需求,在unity引擎和实体机器人是直接以生成脚本运行模拟,可确保语法的可用性。
150.以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献