CN110597501B - 一种基于强静态脚本语言的自然语言编程方法及装置 - Google Patents
一种基于强静态脚本语言的自然语言编程方法及装置 Download PDFInfo
- Publication number
- CN110597501B CN110597501B CN201910738817.1A CN201910738817A CN110597501B CN 110597501 B CN110597501 B CN 110597501B CN 201910738817 A CN201910738817 A CN 201910738817A CN 110597501 B CN110597501 B CN 110597501B
- Authority
- CN
- China
- Prior art keywords
- script
- editor
- renderer
- information
- meta
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- 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)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于强静态脚本语言的自然语言编程方法及装置,该方法包括:前端编译器从数据库中获取第一脚本以及元信息,将第一脚本编译成装载后的编辑器渲染器,并根据元信息校验编辑器渲染器里的内容,其中,元信息至少包括类型信息;通过编辑校验后的编辑器渲染器,生成第二脚本,并将第二脚本存储至数据库中;后端解释器从数据库中获取第二脚本以及元信息,将第二脚本编译成运行时对象,并根据元信息对运行时对象进行校验。本发明采用自然语言编辑器,提高函数或脚本的可读性,帮助非专业编程人员快速、正确地编写业务逻辑程序,引入函数功能提高了规则逻辑的复用性,赋予非编程人员灵活且强大程序编辑能力,且更加易于理解以及安全。
Description
技术领域
本发明涉及信息技术和计算机软件产品技术领域,特别涉及一种基于强静态脚本语言的自然语言编程方法及装置。
背景技术
在规则的配置过程中,通常需要对数据进行整理,或进行一些逻辑判断,这使得规则引擎需要一定程度的编程能力。并且为了提高复用性,在规则的配置过程中,通常还需要使用编程的方式对固定的逻辑结构提炼成相关的函数、参数或规则。
对于上述问题,本领域常规的做法是使用第三方语言实现这种编程能力,如groovy脚本,但这种方式首先最大的问题是对业务人员(尤其是非专业编程人员)非常不友好(如不易理解,且不易使用,需要较高的编程能力等),其次由于使用非定制语言,需要开发人员在序列化、线程安全等方面围绕第三方语言做相应的扩展,增加开发人员的难度以及工作量。
虽然也有像drools这种开源实现,可以使用自定义的语言Rule Language,但是该方式由于缺乏面向非编程人员的语言编辑器,业务人员需要深度依赖开发人员的帮助才能实现相关规则的编写,同样不太友好(如不易理解,且不易使用,需要较高的编程能力等)。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种基于强静态脚本语言的自然语言编程方法及装置,以克服现有技术中编程语言不易理解,且不易使用,需要较高的编程能力,规则落地周期长,配置工作量大等问题。
为解决上述一个或多个技术问题,本发明采用的技术方案是:
一方面,提供了一种基于强静态脚本语言的自然语言编程方法,该方法包括如下步骤:
前端编译器从数据库中获取第一脚本以及元信息,将所述第一脚本编译成装载后的编辑器渲染器,并根据所述元信息校验所述编辑器渲染器里的内容,其中,所述元信息至少包括类型信息;
通过编辑校验后的所述编辑器渲染器,将所述编辑器渲染器生成第二脚本,并将所述第二脚本存储至所述数据库中;
后端解释器从所述数据库中获取第二脚本以及所述元信息,将所述第二脚本编译成运行时对象,并根据所述元信息对所述运行时对象进行校验。
进一步的,所述方法还包括:
通过语法分析工具,将语法规则文件生成前端语法解析器;
使用所述前端语法解析器作为核心进行实现及封装,实现所述前端编译器。
进一步的,所述方法还包括:
通过语法分析工具,将语法规则文件生成后端语法解析器;
使用所述后端语法解析器作为核心进行实现及封装,实现所述后端解释器。
进一步的,所述方法还包括:
使用只读渲染器将所述运行时对象生成对应国家或语言的自然语言展示,作为所述第二脚本的预先渲染。
进一步的,所述通过编辑校验后的所述编辑器渲染器,将所述编辑器渲染器生成第二脚本具体包括:
在所述编辑器渲染器内,通过槽和模板相组合的方式编辑校验后的所述编辑器渲染器,将所述编辑器渲染器生成第二脚本。
另一方面,提供了一种基于强静态脚本语言的自然语言编程装置,所述装置包括:
前端编译器,用于从数据库中获取第一脚本以及元信息,将所述第一脚本编译成装载后的编辑器渲染器,并根据所述元信息校验所述编辑器渲染器里的内容,其中,所述元信息至少包括类型信息;
编辑器渲染器,用于通过编辑校验后的所述编辑器渲染器,将所述编辑器渲染器生成第二脚本,并将所述第二脚本存储至所述数据库中;
后端解释器,用于从所述数据库中获取第二脚本以及所述元信息,将所述第二脚本编译成运行时对象,并根据所述元信息对所述运行时对象进行校验;
数据库,用于存储所述第一脚本、所述第二脚本以及所述元信息。
进一步的,所述装置还包括:
语法分析工具,用于将语法规则文件生成前端语法解析器;
前端语法解析器,用于使用所述前端语法解析器作为核心进行实现及封装,实现所述前端编译器。
进一步的,所述语法分析工具还用于将语法规则文件生成后端语法解析器;
所述装置还包括:
后端语法解析器,用于使用所述后端语法解析器作为核心进行实现及封装,实现所述后端解释器。
进一步的,所述装置还包括:
只读渲染器,用于将所述运行时对象生成对应国家或语言的自然语言展示,作为所述第二脚本的预先渲染。
进一步的,所述编辑器渲染器具体用于:
在所述编辑器渲染器内,通过槽和模板相组合的方式编辑校验后的所述编辑器渲染器,将所述编辑器渲染器生成第二脚本。
本发明实施例提供的技术方案带来的有益效果是:
1、本发明实施例提供的基于强静态脚本语言的自然语言编程方法及装置,前端采用自然语言编辑器,提高编写函数的可读性,帮助业务人员及产品人员等非编程人员快速、正确地编写业务逻辑程序,且函数功能的引入提高了规则逻辑的复用性,赋予非编程人员灵活且强大程序编辑能力,相对于groovy脚本编写来说更加易用、易于理解和更加安全;
2、本发明实施例提供的基于强静态脚本语言的自然语言编程方法及装置,引入函数模块替代了groovy在决策引擎中的扮演的角色,降低了运行时缓存的难度,提高了缓存的数据一致性,天然的线程安全特性也无需像groovy一样使用同步锁,进一步提高并发环境下的执行速度,并且统一的函数前后端模块,降低了新开发函数相关功能的难度,提高了用户体验的一致性;
3、本发明实施例提供的基于强静态脚本语言的自然语言编程方法及装置,增加规则引擎的基本功能点,提高引擎标准,缩短规则落地周期,实现规则落地,加强风险精准拦截,减少决策系统配置人力。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据一示例性实施例示出的基于强静态脚本语言的自然语言编程方法的流程图;
图2是根据一示例性实施例示出的编辑器渲染器渲染过程的流程图;
图3是根据一示例性实施例示出的一个空槽的示意图;
图4是根据一示例性实施例示出的动作选项的示意图;
图5是根据一示例性实施例示出的模板选项的示意图;
图6是根据一示例性实施例示出的基于强静态脚本语言的自然语言编程装置的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供的基于强静态脚本语言的自然语言编程方法及装置,实现了一整套从前端(配置)到后端(运行)的规则可编程方案,针对开发人员,由于采用通用化的模块设计,开箱即用,后端序列化和线程安全特性使得开发者无需任何同步或锁就可实现多线程高并发的调用执行,而针对业务/产品等非专业人士,前端采用自然语言编辑器,提高编写函数的可读性,能够帮助非专业人士快速、正确地编写业务逻辑程序。
图1是根据一示例性实施例示出的基于强静态脚本语言的自然语言编程方法的流程图,参照图1所示,该方法包括如下步骤:
S1:前端编译器从数据库中获取第一脚本以及元信息,将所述第一脚本编译成装载后的编辑器渲染器,并根据所述元信息校验所述编辑器渲染器里的内容,其中,所述元信息至少包括类型信息。
具体的,前端编译器将从数据库中获取第一脚本解析、渲染成与第一脚本内容对应的自然语言的脚本编辑器渲染器。上述过程中还需要从数据库读取相关的元信息,实现语法的校验、语法的提示、类型的校验、类型推断等重要的辅助功能,校验编辑器渲染器里的内容。其中,元信息包括类型信息、函数信息(包括自定义和系统内置的函数签名信息)以及全局变量信息(包括变量名、变量编码及变量类型)。具体实施时,可以通过设置元信息服务实现从数据库中读取或向数据库中存储元信息。
具体的,脚本通过前端编译器被解析成编辑器渲染器(Renderer),编辑器渲染器的内部,将对应脚本的各组件的HTML片段组合,嵌入到容器(container)中,在浏览器内渲染,并绑定(bind)各个组件的on<change>事件,最后从父组件向下子组件依次做语法和类型检查,当用户修改界面的内容时,编辑器渲染器会重新渲染DOM模型并重新执行语法和类型检查。由于编辑器渲染器的内部将被链接(link)成Revealable对象,因此可以将渲染出的内容重新以脚本的形式输出。其中,Revealable对象是用来将前端编译器编译出来的粗加工对象重新恢复成编译前的脚本内容,可运行对象Evalable是继承这个Revealable对象的,换句话说可运行对象就是Revealable对象。这里需要说明的是,解析、渲染、绑定事件的过程中的组件可由任意技术实现,可以是Angular、React或Vue这样的MVVM框架,抑或是Jquery库甚至是原生的es+dom实现。
S2:通过编辑校验后的所述编辑器渲染器,将所述编辑器渲染器生成第二脚本,并将所述第二脚本存储至所述数据库中。
具体的,该编辑器渲染器是自然语言的,提高函数或脚本的可读性,非专业编程人员也可以快速理解及操作。这里需要说明的是,函数是抽象出来的具有通用性的逻辑块,是脚本概念的一个子集。
图2是根据一示例性实施例示出的编辑器渲染器渲染过程的流程图,参照图2所示,在无限制编辑模式下,已知后端传输初始脚本(即第一脚本):
if(a>1){
a=1
}
其中,这里的a变量是一个整形(Int)的全局变量。
1、前端编译器将脚本解析成对应的组件-If组件(If Component)。
2、一般组件由子组件、事件及渲染函数组成,如If组件的子组件有条件分支-布尔表达式组件(Predicate Expression Component)、“那么”块组件(ThenBlock)及可选的“否则”块组件(Else Block)等组件组成。本示例中“那么”块又由一个赋值表达式组件(Assignment Expression Component)组成,而赋值表达式组件又由其他子组件构成。
3、渲染函数(render)负责将组件转换为HTML,在浏览器上渲染成对应的编辑内容,并将渲染内容的触发事件(通过按钮、选择等浏览器元素)绑定到各组件的对应的事件函数上。
4、当用户在界面上触发动作,会调用到已绑定的函数,执行函数,检查类型信息,并将整个组件及子组件通过render函数重新渲染。
5、用户在界面上修改完毕后,可将界面内容重新生成MiniScript脚本(即第二脚本)并保存到后端数据库中。
S3:后端解释器从所述数据库中获取第二脚本以及所述元信息,将所述第二脚本编译成运行时对象,并根据所述元信息对所述运行时对象进行校验。
具体的,使用后端解释器将第二脚本编译出具有具有可序列化、可持久化、线程安全的Java运行时对象。这里需要说明的是,本发明实施例中,上述运行时对象是可序列化的,可将对象缓存到内存或远程服务器上,然后客户端再从缓存服务器上获取下来,无需重新编译。即该运行时对象可以辅助渲染只读模式的脚本的静态页面,节约前端渲染的时间。运行时对象进行校验包括控制流校验、类型校验等。校验过程中同样需要从数据库读取相关的元信息,实现语法的校验、语法的提示、类型的校验、类型推断等重要的辅助功能。
作为一种较优的实施方式,本发明实施例中,后端解释器的运行主要分为以下几个步骤:
1、解析:通过后端语法解析器(Parser)将脚本初步解析成Revealable对象,该对象可以反方向转换为脚本。
2、类型校验:Revealable对象执行check方法进行校验,并递归执行子语法树(即子Revealable对象)的check方法,check方法校验包括但不限于以下语法与类型的信息:
break\continue必须在循环内
return必须在函数体内
break\continue\return之后不允许有额外的语句
函数定义校验
本地变量类型校验
参数校验
自定义类型校验
函数调用校验
类属性校验
这里需要说明的是,上述子语法树是由前端编译器或解释器生成的,具体是由不同的可运行对象嵌套成的,但由于还在检查中,这里的可运行对象还不能运行,运行可能会产生意料不到的错误,因此,递归执行子语法树的check方法。
3、识别出标识符(Identity),识别其是本地变量、参数、函数、函数参数还是属性,并将相应的如何从上下文(NgContext)或元数据(可通过元数据服务(NgCoreServiceProvider)从数据库获取)中获取相关信息的解析器(Resolver)注入到对应的Evaluable对象中去。
这里需要说明的是,后端解释器接口(MiniCompiler)的声明方法主要有以下几种方式,本发明实施例中的后端解释器接口可以采用以下方式中的一种:
编译函数签名(compileFunSign)
编译函数(compileFun)
编译`右`函数,实际上是一个只有一个参数的短函数,通常用于决策树分支函数的配置(compileRightFun)
编译布尔表达式(compileBoolExpr)
编译Statements(compileStatements)
编译任意表达式(compileExpr)
解析类型(parseType)
本发明实施例中,并不限制后端编译器的具体实现,作为一种示例,后端编译器聚合了抽象语法树构建器AstBuilder,AstBuilder使用的是基于antlr生成的解析器包lang.parser,用来生成Revealable/可执行对象(Evaluable对象)。
具体的,本发明实施例中运行时对象,即可执行对象(Evaluable)的接口Evaluable继承了接口Revealable和TypeCheck接口。接口Evaluable及其核心eval方法是对象求值方法,函数运行的堆栈是建立在传入的上下文对象中。其中,接口Revealable主要是用来反转回脚本(toScriptText)和辅助前端以静态自然语言形式渲染脚本(toLocaleText)。接口TypeCheck是用来初步解析完脚本生成Revealable对象后做进一步的语法校验和类型校验。
所有的实体对象都继承自抽象类,一元表达式基类(UnaryExpr)、二元表达式基类(BinaryExpr)以及控制流基类(Statement)。这些基类及其实现类都继承自Serializable接口,其所有的属性也是可序列化的,这保证了可执行对象的可持久化。其中,所有的可运行对象都继承自这个Serializable接口,Serializable接口是java的底层接口,用于对象的序列化。另外所有的可执行对象是不可变的(Immutable)及运行时堆栈建立在传入的上下文中(NgContext),这使得运行时对象对于不同的上下文或请求是线程安全的。
作为一种较优的实施方式,本发明实施例中,所述方法还包括:
通过语法分析工具,将语法规则文件生成前端语法解析器;
使用所述前端语法解析器作为核心进行实现及封装,实现所述前端编译器。
具体的,这里需要说明的是,本发明实施例中,语法规则文件采用MiniScriptGrammar文件,语法规则文件使用antlr的语法规则书写。这是一门语法简单,支持范型的强静态类型的脚本。MiniScript是本发明实施例的核心之一,前后端主要通过脚本文本的形式交互,脚本语言的规范规定了脚本的语法规则,约束并简化了前后端交互的形式,但不对前后端具体方案作任何约束,这意味着针对该语言规范可以有多种前后端实施方案,即并不局限于本发明实施例提供的方案。
语言语法解析工具可以采用antlr工具集或者第三方工具,将语法规则文件生成前端语法解析器,其中,作为一种较优的实施方式,前端语法解析器可以是基于Javascript/Typescript语法解析器。然后,将前端语法解析器作为核心进一步进行实现及封装,实现所述前端编译器。
作为一种较优的实施方式,本发明实施例中,所述方法还包括:
通过语法分析工具,将语法规则文件生成后端语法解析器;
使用所述后端语法解析器作为核心进行实现及封装,实现所述后端解释器。
具体的,同样的,可以使用antlr工具将语法规则文件生成后端语法解析器,其中,后端语法解析器可以是基于Java平台的语法解析器。然后,使用后端语法解析器作为核心进一步进行实现及封装,实现后端解释器。
作为一种较优的实施方式,本发明实施例中,所述方法还包括:
使用只读渲染器将所述运行时对象生成对应国家或语言的自然语言展示,作为所述第二脚本的预先渲染。
具体的,运行时对象可以辅助渲染只读模式的脚本的静态页面,节约前端渲染的时间。即在只读模式下,将编译好的后端运行时对象生成对应国家/语言的自然语言展示,作为第二脚本的预先渲染,无需使用脚本重新编译成编辑器渲染器,在界面上有多个脚本需要渲染时可以非常有效的节约页面整体渲染的时间。
作为一种较优的实施方式,本发明实施例中,所述通过编辑校验后的所述编辑器渲染器,将所述编辑器渲染器生成第二脚本具体包括:
在所述编辑器渲染器内,通过槽和模板相组合的方式编辑校验后的所述编辑器渲染器,将所述编辑器渲染器生成第二脚本。
具体的,本发明实施例中,编辑器渲染器采用国际化的易读模式,所有的关键字、函数名称、全局变量名称等都可以根据不同的地区/语言做国际化展示。通过槽(slot)和模板(template)的相互配合方式让用户做选择,而非编写,简化操作,降低非编程人员编写脚本的难度。
作为一种较优的示例,可以设置槽点击后第一级菜单主要是动作类菜单(折叠/展开、修改、删除、新增),选择动作后如修改、新增会触发第二级菜单模板的选择。模版和MiniScript的语法规则一一对应,即有“如果…那么…”、“for循环迭代器”、“while循环”等模版。
槽(slot)和模板(template)的关系是:
一个槽可以且只可以插入一个模板
一个模板可能包含有零个、一个或多个子槽
槽中可选择的模板根据槽的类型、槽的期待类型、槽所在的模板、用户权限等情况产生变化。
本发明实施例中,前端编辑器渲染器模式包括但不局限于以下几种方式:
1、自定义函数体编辑,给定函数签名下,对应函数体的编辑模式;
2、表达式编辑,该模式下一般会指定任意表达式的返回类型;
3、常规布尔表达式编辑(b模式下的一个特例),通常用于判断分支的内容编辑;
4、无限制脚本编辑模式,该模式下没有任何上下文限制的编辑。
以下为举例说明:
图3是根据一示例性实施例示出的一个空槽的示意图,参照图3所示,常规的脚本开始于一个空的槽。
图4是根据一示例性实施例示出的动作选项的示意图,参照图4所示,点击槽可出现动作选项,动作选项包括折叠/展开、修改、删除、新增等。
图5是根据一示例性实施例示出的模板选项的示意图,参照图5所示,点击修改、新增按钮可选择要修改或新增的模版。
假设选择的是“如果…那么…”模板,然后这个槽被该模板填充,并且这个模板自身又带有需填充的子槽,其中包括不能为空或类型校验失败的子槽,用户需要重新填充模板,直到所有的子槽被填充且没有类型校验失败。设置模板中的包括按钮扩展按钮(用符号“+”表示),是模板的可选项,例如在这个示例中,“如果…那么…”模板的可扩展选项是包括“否则”分支,点击“+”按钮可以添加“否则”分支。
图6是根据一示例性实施例示出的基于强静态脚本语言的自然语言编程装置的结构示意图,参照图6所示,该装置包括:
前端编译器,用于从数据库中获取第一脚本以及元信息,将所述第一脚本编译成装载后的编辑器渲染器,并根据所述元信息校验所述编辑器渲染器里的内容,其中,所述元信息至少包括类型信息;
编辑器渲染器,用于通过编辑校验后的所述编辑器渲染器,将所述编辑器渲染器生成第二脚本,并将所述第二脚本存储至所述数据库中;
后端解释器,用于从所述数据库中获取第二脚本以及所述元信息,将所述第二脚本编译成运行时对象,并根据所述元信息对所述运行时对象进行校验;
数据库,用于存储所述第一脚本、所述第二脚本以及所述元信息。
作为一种较优的实施方式,本发明实施例中,所述装置还包括:
语法分析工具,用于将语法规则文件生成前端语法解析器;
前端语法解析器,用于使用所述前端语法解析器作为核心进行实现及封装,实现所述前端编译器。
作为一种较优的实施方式,本发明实施例中,所述语法分析工具还用于将语法规则文件生成后端语法解析器;
所述装置还包括:
后端语法解析器,用于使用所述后端语法解析器作为核心进行实现及封装,实现所述后端解释器。
作为一种较优的实施方式,本发明实施例中,所述装置还包括:
只读渲染器,用于将所述运行时对象生成对应国家或语言的自然语言展示,作为所述第二脚本的预先渲染。
作为一种较优的实施方式,本发明实施例中,所述编辑器渲染器具体用于:
在所述编辑器渲染器内,通过槽和模板相组合的方式编辑校验后的所述编辑器渲染器,将所述编辑器渲染器生成第二脚本。
综上所述,本发明实施例提供的技术方案带来的有益效果是:
1、本发明实施例提供的基于强静态脚本语言的自然语言编程方法及装置,前端采用自然语言编辑器,提高编写函数的可读性,帮助业务人员及产品人员等非编程人员快速、正确地编写业务逻辑程序,且函数功能的引入提高了规则逻辑的复用性,赋予非编程人员灵活且强大程序编辑能力,相对于groovy脚本编写来说更加易用、易于理解和更加安全;
2、本发明实施例提供的基于强静态脚本语言的自然语言编程方法及装置,引入函数模块替代了groovy在决策引擎中的扮演的角色,降低了运行时缓存的难度,提高了缓存的数据一致性,天然的线程安全特性也无需像groovy一样使用同步锁,进一步提高并发环境下的执行速度,并且统一的函数前后端模块,降低了新开发函数相关功能的难度,提高了用户体验的一致性;
3、本发明实施例提供的基于强静态脚本语言的自然语言编程方法及装置,增加规则引擎的基本功能点,提高引擎标准,缩短规则落地周期,实现规则落地,加强风险精准拦截,减少决策系统配置人力。
需要说明的是:上述实施例提供的基于强静态脚本语言的自然语言编程装置在触发编程业务时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的基于强静态脚本语言的自然语言编程装置与基于强静态脚本语言的自然语言编程方法实施例属于同一构思,即该装置是基于该基于强静态脚本语言的自然语言编程方法的,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于强静态脚本语言的自然语言编程方法,其特征在于,所述方法包括如下步骤:
前端编译器从数据库中获取第一脚本以及元信息,将所述第一脚本编译成装载后的编辑器渲染器,并根据所述元信息校验所述编辑器渲染器里的内容,其中,所述元信息至少包括类型信息;
通过编辑校验后的所述编辑器渲染器,将所述编辑器渲染器生成第二脚本,并将所述第二脚本存储至所述数据库中;
后端解释器从所述数据库中获取第二脚本以及所述元信息,将所述第二脚本编译成运行时对象,并根据所述元信息对所述运行时对象进行校验。
2.根据权利要求1所述的基于强静态脚本语言的自然语言编程方法,其特征在于,所述方法还包括:
通过语法分析工具,将语法规则文件生成前端语法解析器;
使用所述前端语法解析器作为核心进行实现及封装,实现所述前端编译器。
3.根据权利要求1或2所述的基于强静态脚本语言的自然语言编程方法,其特征在于,所述方法还包括:
通过语法分析工具,将语法规则文件生成后端语法解析器;
使用所述后端语法解析器作为核心进行实现及封装,实现所述后端解释器。
4.根据权利要求1或2所述的基于强静态脚本语言的自然语言编程方法,其特征在于,所述方法还包括:
使用只读渲染器将所述运行时对象生成对应国家或语言的自然语言展示,作为所述第二脚本的预先渲染。
5.根据权利要求1或2所述的基于强静态脚本语言的自然语言编程方法,其特征在于,所述通过编辑校验后的所述编辑器渲染器,将所述编辑器渲染器生成第二脚本具体包括:
在所述编辑器渲染器内,通过槽和模板相组合的方式编辑校验后的所述编辑器渲染器,将所述编辑器渲染器生成第二脚本。
6.一种基于强静态脚本语言的自然语言编程装置,其特征在于,所述装置包括:
前端编译器,用于从数据库中获取第一脚本以及元信息,将所述第一脚本编译成装载后的编辑器渲染器,并根据所述元信息校验所述编辑器渲染器里的内容,其中,所述元信息至少包括类型信息;
编辑器渲染器,用于通过编辑校验后的所述编辑器渲染器,将所述编辑器渲染器生成第二脚本,并将所述第二脚本存储至所述数据库中;
后端解释器,用于从所述数据库中获取第二脚本以及所述元信息,将所述第二脚本编译成运行时对象,并根据所述元信息对所述运行时对象进行校验;
数据库,用于存储所述第一脚本、所述第二脚本以及所述元信息。
7.根据权利要求6所述的基于强静态脚本语言的自然语言编程装置,其特征在于,所述装置还包括:
语法分析工具,用于将语法规则文件生成前端语法解析器;
前端语法解析器,用于使用所述前端语法解析器作为核心进行实现及封装,实现所述前端编译器。
8.根据权利要求7所述的基于强静态脚本语言的自然语言编程装置,其特征在于,所述语法分析工具还用于将语法规则文件生成后端语法解析器;
所述装置还包括:
后端语法解析器,用于使用所述后端语法解析器作为核心进行实现及封装,实现所述后端解释器。
9.根据权利要求6或7所述的基于强静态脚本语言的自然语言编程装置,其特征在于,所述装置还包括:
只读渲染器,用于将所述运行时对象生成对应国家或语言的自然语言展示,作为所述第二脚本的预先渲染。
10.根据权利要求6或7所述的基于强静态脚本语言的自然语言编程装置,其特征在于,所述编辑器渲染器具体用于:
在所述编辑器渲染器内,通过槽和模板相组合的方式编辑校验后的所述编辑器渲染器,将所述编辑器渲染器生成第二脚本。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910738817.1A CN110597501B (zh) | 2019-08-09 | 2019-08-09 | 一种基于强静态脚本语言的自然语言编程方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910738817.1A CN110597501B (zh) | 2019-08-09 | 2019-08-09 | 一种基于强静态脚本语言的自然语言编程方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110597501A CN110597501A (zh) | 2019-12-20 |
CN110597501B true CN110597501B (zh) | 2022-10-18 |
Family
ID=68853935
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910738817.1A Active CN110597501B (zh) | 2019-08-09 | 2019-08-09 | 一种基于强静态脚本语言的自然语言编程方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110597501B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111273984A (zh) * | 2020-01-20 | 2020-06-12 | 深圳震有科技股份有限公司 | 一种数值控件的扩展方法、存储介质及终端设备 |
CN111562910B (zh) * | 2020-05-08 | 2023-06-02 | 上海泛微网络科技股份有限公司 | 一种封装方法及相关设备 |
CN113553070B (zh) * | 2021-07-07 | 2023-07-14 | 北京计算机技术及应用研究所 | 一种基于浏览器插件的应用集成方法 |
CN113687872B (zh) * | 2021-07-19 | 2024-03-29 | 三六零数字安全科技集团有限公司 | 选择组件控制方法、设备、存储介质及装置 |
CN114675831B (zh) * | 2022-03-09 | 2023-10-31 | 韩济澎 | 一种编程语言的编译系统及方法 |
CN115617322A (zh) * | 2022-09-29 | 2023-01-17 | 联通智网科技股份有限公司 | 定制脚本运行方法和装置 |
CN115437620B (zh) * | 2022-11-09 | 2023-03-28 | 广东省科技基础条件平台中心 | 一种自然语言编程方法、装置、设备及存储介质 |
CN116009836B (zh) * | 2022-12-28 | 2024-04-30 | 苏州峰之鼎信息科技有限公司 | 基于脚本语言的rpa编程方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102063324A (zh) * | 2010-12-31 | 2011-05-18 | 杭州依赛通信有限公司 | 一种实现自动化编程的方法及系统 |
CN110134386A (zh) * | 2019-04-04 | 2019-08-16 | 成都娄外科技有限公司 | 一种程序编辑方法和装置 |
CN110347378A (zh) * | 2019-07-12 | 2019-10-18 | 北京明略软件系统有限公司 | 项目开发环境的搭建方法及装置 |
-
2019
- 2019-08-09 CN CN201910738817.1A patent/CN110597501B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102063324A (zh) * | 2010-12-31 | 2011-05-18 | 杭州依赛通信有限公司 | 一种实现自动化编程的方法及系统 |
CN110134386A (zh) * | 2019-04-04 | 2019-08-16 | 成都娄外科技有限公司 | 一种程序编辑方法和装置 |
CN110347378A (zh) * | 2019-07-12 | 2019-10-18 | 北京明略软件系统有限公司 | 项目开发环境的搭建方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110597501A (zh) | 2019-12-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110597501B (zh) | 一种基于强静态脚本语言的自然语言编程方法及装置 | |
US9086931B2 (en) | System for translating diverse programming languages | |
US9965259B2 (en) | System for translating diverse programming languages | |
Rumpe et al. | Monticore 5 language workbench. edition 2017 | |
Voelter et al. | mbeddr: Instantiating a language workbench in the embedded software domain | |
Groenewegen et al. | Integration of data validation and user interface concerns in a DSL for web applications | |
US20050065953A1 (en) | System and method for changing defined elements in a previously compiled program using a description file | |
Bolin | Closure: The definitive guide: Google tools to add power to your JavaScript | |
Burmako | Unification of compile-time and runtime metaprogramming in Scala | |
Roldán | React Design Patterns and Best Practices: Design, build and deploy production-ready web applications using standard industry practices | |
Kühn et al. | Piggyback IDE support for language product lines | |
Wielemaker et al. | Why It's Nice to be Quoted: Quasiquoting for Prolog | |
Judd et al. | Beginning Groovy and Grails | |
Huang et al. | Domain-specific languages and program generation with meta-AspectJ | |
Lazar et al. | Using a fUML Action Language to construct UML models | |
Gargantini et al. | A metamodel-based simulator for ASMs | |
Kramer et al. | Reflection in attribute grammars | |
Bock | . NET Development Using the Compiler API | |
Mráz | Component-based UI Web Development | |
Kara | Design and implementation of the modelicaml code generator using acceleo 3. x | |
Renggli | Dynamic Language Embedding | |
Herron | Learning Cython Programming | |
Gustedt | Modular C | |
Harmanen | Polyglot Programming in Web Development | |
Sobkuliak | A programming language presented in graphics |
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 |