CN114138425A - 一种基于公式生成表单的方法及装置 - Google Patents
一种基于公式生成表单的方法及装置 Download PDFInfo
- Publication number
- CN114138425A CN114138425A CN202210115555.5A CN202210115555A CN114138425A CN 114138425 A CN114138425 A CN 114138425A CN 202210115555 A CN202210115555 A CN 202210115555A CN 114138425 A CN114138425 A CN 114138425A
- Authority
- CN
- China
- Prior art keywords
- formula
- value
- association
- syntax tree
- generating
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45529—Embedded in an application, e.g. JavaScript in a Web browser
-
- 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/38—Creation or generation of source code for implementing user interfaces
-
- 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
-
- 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/425—Lexical analysis
-
- 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/43—Checking; Contextual analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于公式生成表单的方法及装置,该方法包括:基于表单元素描述协议构建多个表单元素,多个所述表单元素均含有对应的表单元素ID,多个所述表单元素包括对应的关联公式;其中,所述关联公式包括回调函数;根据预设的语法编译将所述关联公式和相应的所述表单元素ID转换成语法树;当表单元素的值改变时,遍历所述语法树,查找所述表单元素ID并调用相应的所述回调函数,根据所述回调函数生成表单。本发明基于公式构建语法树并生成表单,提高了表单的维护效率,避免了复杂的代码逻辑。
Description
技术领域
本发明涉及web前端技术领域,尤其涉及一种基于公式生成表单的方法及装置。
背景技术
随着互联网的飞速发展,网站技术的广泛应用,各大行业企业对于web客户端的要求也越来越高,web客户端也用于展示更多信息,对表单的展示方式也变得多样,表单内的组件总类变得多样化,表单在实现一些特殊功能时,存在大量的组件表单展示和大量的表单元素之间的逻辑,大量的表单元素之间的元素的逻辑容易导致表单代码难以维护迭代。
现有的浏览器在表单元素的使用上存在缺陷,随着表单元素表单组件的不断增多,表单元素不仅只有输入输出值一种状态,以往表单元素必填、只读、隐藏、标题等多种静态属性,如今在很多场景中都变为了动态属性,即对表单的一些其他元素的状态进行修改,但是实现这种复杂的表单会让代码非常臃肿及难以维护。
发明内容
本发明的目的在于提供一种基于公式生成表单的方法及装置,以解决现有技术中通过修改底层代码来实现多种表单设计而造成系统难以维护的问题。
为实现上述目的,本发明提供一种基于公式生成表单的方法,包括:
基于表单元素描述协议构建多个表单元素,多个所述表单元素均含有对应的表单元素ID,多个所述表单元素包括对应的关联公式;其中,所述关联公式包括回调函数;
根据预设的语法编译将所述关联公式和相应的所述表单元素ID转换成语法树;
当表单元素的值改变时,遍历所述语法树,查找所述表单元素ID并调用相应的所述回调函数,根据所述回调函数生成表单。
优选地,多个所述关联公式包括值公式、属性公式以及标题公式;其中,所述值公式、所述属性公式和所述标题公式包含相应的回调函数;
根据所述值公式、所述属性公式和所述标题公式构建语法树的节点;
遍历所述语法树,查找多个所述表单元素的表单元素ID,通过javascript解析所述语法树的节点并调用回调函数。
优选地,所述根据预设的语法编译将所述关联公式和相应的所述表单元素ID转换成语法树,包括:
所述关联公式包括标点符号、运算符以及括号;
遍历所述关联公式,定位标点符号的位置、运算符的位置以及括号的位置,并基于所述标点符号的位置、所述运算符的位置以及所述括号的位置进行词法分析处理,获取分词结构;
根据所述分词结构创建语法树结构,所述语法树结构根据name函数名和arguments形参表示确定;
根据所述表单元素ID、所述name函数名和所述arguments形参表示构建所述语法树。
优选地,在所述当表单元素的值改变时,遍历所述语法树,查找所述表单元素ID并调用相应的所述回调函数之后,还包括:
根据预设的校验模式对语法树中的关联公式进行校验。
本发明还提供一种基于公式生成表单的装置,包括:
第一构建模块,用于基于表单元素描述协议构建多个表单元素,多个所述表单元素均含有对应的表单元素ID,多个所述表单元素包括对应的关联公式;其中,所述关联公式包括回调函数;
第二构建模块,用于根据预设的语法编译将所述关联公式和相应的所述表单元素ID转换成语法树;
生成模块,用于当表单元素的值改变时,遍历所述语法树,查找所述表单元素ID并调用相应的所述回调函数,根据所述回调函数生成表单。
优选地,所述的基于公式生成表单的装置,还包括第一子构建模块,所述第一子构建模块,用于:
多个所述关联公式包括值公式、属性公式以及标题公式;其中,所述值公式、所述属性公式和所述标题公式包含相应的回调函数;
根据所述值公式、所述属性公式和所述标题公式构建语法树的节点;
遍历所述语法树,查找多个所述表单元素的表单元素ID,通过javascript解析所述语法树的节点并调用回调函数。
优选地,所述第二构建模块,还用于:
所述关联公式包括标点符号、运算符以及括号;
遍历所述关联公式,定位标点符号的位置、运算符的位置以及括号的位置,并基于所述标点符号的位置、所述运算符的位置以及所述括号的位置进行词法分析处理,获取分词结构;
根据所述分词结构创建语法树结构,所述语法树结构根据name函数名和arguments形参表示确定;
根据所述表单元素ID、所述name函数名和所述arguments形参表示构建所述语法树。
优选地,所述的基于公式生成表单的装置,还包括校验模块,所述校验模块,用于:
根据预设的校验模式对语法树中的关联公式进行校验。
本发明还提供一种终端设备,包括:
一个或多个处理器;
存储器,与所述处理器耦接,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上任一项所述的基于公式生成表单的方法。
本发明还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述的基于公式生成表单的方法。
相对于现有技术,本发明的有益效果在于:
本发明基于表单元素描述协议构建多个表单元素,多个所述表单元素均含有对应的表单元素ID,多个所述表单元素包括对应的关联公式;其中,所述关联公式包括回调函数;根据预设的语法编译将所述关联公式和相应的所述表单元素ID转换成语法树;当表单元素的值改变时,遍历所述语法树,查找所述表单元素ID并调用相应的所述回调函数,根据所述回调函数生成表单。本发明基于公式构建语法树并生成表单,提高了表单的维护效率,避免了复杂的代码逻辑。
进一步的引入校验模式来对关联公式进行校验,避免逻辑错误且及时给与用户提醒,提高效率。
附图说明
为了更清楚地说明本发明的技术方案,下面将对实施方式中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明某一实施例提供的基于公式生成表单的方法的流程示意图;
图2是本发明又一实施例提供的基于公式生成表单的方法的流程示意图;
图3是本发明另一实施例提供的基于公式生成表单的方法的流程示意图;
图4是本发明某一实施例提供的基于公式计算的复杂表单装置的流程图;
图5是本发明某一实施例提供的基于公式生成表单的装置的结构示意图;
图6是本发明某一实施例提供的终端设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,文中所使用的步骤编号仅是为了方便描述,不对作为对步骤执行先后顺序的限定。
应当理解,在本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
请参阅图1,本发明某一实施例提供一种基于公式生成表单的方法。如图1所示,该基于公式生成表单的方法包括步骤S10至步骤S30。各步骤具体如下:
S10:基于表单元素描述协议构建多个表单元素,多个所述表单元素均含有对应的表单元素ID,多个所述表单元素包括对应的关联公式;其中,所述关联公式包括回调函数。
具体的,表单元素描述协议包括一个或多个表单元素且每一个表单元素都拥有一个唯一键值(表单元素ID)用于查询,一个表单元素的描述由值和属性组成,属性值包括例如:元素标题、元素是否必填、元素是否隐藏、元素是否被禁止输入等。这些表单元素的值或属性都可以用一个关联公式来表示。例子:如描述一个表单元素C的值为:表单元素A的值+表单元素B的值,且当表单元素A的值和表单元素B的值都不为空时,表单元素C禁止输入,键入过程如下:
{
"表单元素A": {
"值": "0",
"是否被禁止输入": "FALSE" // FALSE表示假值,即表单元素可以输入(不变禁止输入)
},
"表单元素B": {
"值": "0",
"是否被禁止输入": "FALSE"
},
"表单元素C": {
"值": "ElEM(表单元素A).value + ElEM(表单元素B).value",
"是否被禁止输入": "NOT(AND(ISEMPTY(ElEM(表单元素A).value) +ISEMPTY(ElEM(表单元素B).value)))"
}
}
关联公式的设计可以由规范值(数字值、字符串值、布尔值,规范值集合)、数学运算符(+,-,*,/等)、函数 (类似于编程语言或者excel公式函数的用于各种复杂计算的方法)、括号(先运行括号内的子公式)、表单的值及属性(只读属性、必填属性、隐藏属性等)组成。
多个关联公式包括值公式、属性公式以及标题公式;其中,值公式、属性公式和标题公式包含相应的回调函数;根据值公式、属性公式和标题公式构建语法树的节点;遍历语法树,查找多个表单元素的表单元素ID,通过javascript解析语法树的节点并调用回调函数。通过输入一系列规范值进行数学计算解决复杂的数学计算,因此,回调函数支持的例子如表1所示。
表1 相关函数
多个关联公式包括值公式、属性公式以及标题公式;其中,值公式、属性公式和标题公式包含相应的回调函数,根据值公式、属性公式和标题公式构建语法树的节点;遍历语法树,查找多个表单元素的表单元素ID,通过javascript解析语法树的节点并调用回调函数。
回调函数支持例子:输入一系列规范值进行数学计算解决复杂的数学计算,表单的值及属性表示,表单元素值或属性使用一个函数表达式来获取,如“ELEM(ID,ATTRNAME)”, ID表示表单元素的唯一标记,ATTRNAME表示需要表单元素返回的值或属性的名称,表2给出一些获取表单元素值的例子。
表2 获取表单元素值的例子
S20:根据预设的语法编译将所述关联公式和相应的所述表单元素ID转换成语法树。
具体的,该关联公式可以通过语法编译转换成一个树形结构并能够通过javascript语言来解析每一个节点所需要通过程序执行的步骤。且最终能够返回一个规范值(数字值、字符串值、布尔值,规范值集合)。
需要把关联公式转换成一个树形结构(也称为语法树),方便javascript编程语言来理解公式的运行逻辑, 下面给出一个具体例子解析关联公式编译过程,如下:
如用户填写了以下公式:
ROUND(ELEM(“表单元素A”, “value”) * 100, 2)。
该公式计算返回表单元素A的值乘以100并保留两位小数。
请参阅图2,在一具体的实施例中,步骤S20还包括以下子步骤:
S21:所述关联公式包括标点符号、运算符以及括号;遍历所述关联公式,定位标点符号的位置、运算符的位置以及括号的位置,并基于所述标点符号的位置、所述运算符的位置以及所述括号的位置进行词法分析处理,获取分词结构。
具体的关联公式编译过程,对公式做词法分析处理,根据标点符号,运算符,括号的位置进行分词,分词的类型包括变量标记,运算符,得出分词结构,具体的编译过程如下:
[
{
"type": "Identifier", // 识别单词
"value": "ROUND"
},
{
"type": "Punctuator", // 运算符
"value": "("
},
{
"type": "Punctuator",
"value": "("
},
{
"type": "Identifier",
"value": "ELEM"
},
{
"type": "Punctuator",
"value": "("
},
{
"type": "String", // 字符串值
"value": "\"表单元素A\""
},
{
"type": "Punctuator",
"value": ","
},
{
"type": "String",
"value": "\"value\""
},
{
"type": "Punctuator",
"value": ")"
},
{
"type": "Punctuator",
"value": "*"
},
{
"type": "Numeric", // 数字值
"value": "10"
},
{
"type": "Punctuator",
"value": ")"
},
{
"type": "Punctuator",
"value": ","
},
{
"type": "Numeric",
"value": "2"
},
{
"type": "Punctuator",
"value": ")"
}
]。
S22:根据所述分词结构创建语法树结构,所述语法树结构根据name函数名和arguments形参表示确定。
具体的,根据词法分析结果输出语法树结构,该树形结构的基本属性包括name函数名和arguments形参表示,这种树形结构的描述非常方便编译语言理解公式要表达的含义,只需要判断对象中是否有name和arguments属性就表示它是一个函数调用或者是一、二元运算,根据如下的过程获取公式树形结构的结果。
{
"name": "ROUND", // ROUND函数
"arguments": [
{ // ROUND函数的第一个参数
"name": "MULTI", // MULTI表示乘法运算
"arguments": [
{ // 乘法*的左边
"name": "ELEM", // 获取元素值的方法
"arguments": [
"表单元素A", // ELEM函数的第一个参数
"value" // ELEM函数的第二个参数
]
},
10 // 乘法*的右边
]
},
2 // ROUND函数的第二个参数
]
}
S23:根据所述表单元素ID、所述name函数名和所述arguments形参表示构建所述语法树。
S30:当表单元素的值改变时,遍历所述语法树,查找所述表单元素ID并调用相应的所述回调函数,根据所述回调函数生成表单。
具体的,当表单元素值改变时,事件被触发,计算机执行以下步骤:
1.计算机把关联公式编译成抽象语法树。
2.计算机遍历抽象语法树中查找该表单元素的ID,如果可以找到,证明计算公式依赖表单元素,会在表单元素值改变事件回调函数,该函数调用时会重新运行计算公式得出新的计算结果。
3.表单元素值改变时调用所有的2步骤中表单元素值改变事件回调函数,计算所有与该表单元素依赖的公式,得出新的表单。
协议解析并为表单元素注册值改变事件:在拥有了表单元素描述的协议后,使用javascript语言对协议进行解析,对协议上每一个带有公式的表单元素值和属性进行运行解析,在解析公式的过程中,如果该公式中有其他的表单元素值或属性参与计算,则需要对参与计算的表单元素注册值改变事件,当触发值改变事件时要再次运行公式重新计算表单的值或属性,形成关联计算。
在一具体的实施例中,以表单协议中表单元素C的例子进行举例。
1、按照词法解析的步骤进行词法解释获得语法树结构。
2、创建一个变量shouldCreateListener作为开关,表示是否开启表单元素ID的收集记录,因为表单元素ID的收集只需要收集一次,再创建集合IDMAP作为记录表,表示在公式运行执行ELEM(ID, ”value”)函数时,收集并记录ELEM函数执行中的ID,用于查找该公式中依赖的表单元素。
3、把shouldCreateListener设置成true,表示开启表单元素ID的记录。
4、解析公式的语法树结构运行相应的函数计算,如果运行到ElEM函数而且shouldCreateListener为true,则把其ID值记录到集合IDMAP当中,在例子中公式运算后会收集到表单元素A和表单元素B的ID值。
5、把shouldCreateListener设置成false,表单元素ID收集完成后关闭收集过程。
6、根据IDMAP中收集到的表单元素ID值查找相应的表单元素实例,并注册值改变事件,当值改变时再次执行公式并向被绑定的表单元素中的值或属性进行赋值操作,完成响应式计算,在例子中表单元素A和表单元素B都会注册值改变的事件,当表单元素A或表单元素B的值发生改变时,都会再次运行公式”ElEM(表单元素A).value + ElEM(表单元素B).value“并把运算值赋给表单元素C。
请参阅图3,在一具体的实施例中,在步骤S30之后,还包括以下步骤:
S40:根据预设的校验模式对语法树中的关联公式进行校验。
具体的,针对逻辑错误的关联公式进行校验提醒:设计者在表单元素描述协议中设计出了逻辑错误的关联公式,则给与设计者提醒。例如:A表单元素的值输入的关联公式为:“B表单元素值 + 1”,B表单元素的值输入的关联公式为:“A表单元素值 + 1”,此时A表单元素的值与B表单元素的值形成相互依赖,会导致表单元素的值一直在更新并触发值改变事件,会在关联公式运行的过程中形成死循环。此时在关联公式运行的过程中必须给与提醒。
实现方案:通过关联公式计算设置值时,结果值连同因为关联公式中被依赖的表单元素的引用记录在一个映射表中变量中,在所有被联动的关联公式都计算完毕后释放映射表,例如A表单元素的值输入的公式为:“B表单元素值 + 1”,当B表单元素值发生改变时,会触发A表单元素的值绑定的公式运行B表单元素值 + 1,此时以A表单元素的引用关联一个映射表,把B表单元素的引用放入映射表。B表单元素的值绑定关联公式“A表单元素值 +1”,因为A表单元素的值发生改变再一次触发B表单元素的值的改变,但因为关联公式的联动计算还没有结束,A表单元素关联的映射表中已经存在了B表单元素的引用,可证明A表单元素的值绑定关联公式和B表单元素的值绑定的关联公式运行时会形成死循环,需要弹出错误提示告诉用户其设计的关联公式存在死循环。
表单元素对关联公式计算后的返回值进行约束,不同表单元素的值或属性都有对应的有效值,针对关联公式计算后的值也必须是该表单元素的值的有效值,比如表单元素:数字输入框的有效值是数字值,它的其他属性如“该元素是否被禁止输入”的有效值是布尔值,“表单元素标题”的有效值是字符串。针对表单元素的有效值给予自动类型转换方便用户设计公式。针对不同类型的表单元素值和属性,计算中自动给与类型转换,如下:
1.布尔值转换数字值。
True->1:真值转换成数字1。
False->0:假值转换成数字0。
2.布尔值转换字符串值。
True->”True”:真值转换成字符串“True”。
False->”False”:假值转换成字符串“False”。
3.数字值转换布尔值。
100->True,0-> False: 数字值为0时转换为假值,其他值转换为真值。
4.数字值转换字符串值。
100->“100”:数字值转换成字符串对应的数字值。
5.字符串值转换布尔值。
“hello”->True, “”->False:字符串不为空转换为真值,为空字符串时转换为假值。
6.字符串值转换数字值。
“100” -> 100 :如果字符串都是数字组成的,直接转换成数字值。
“hello”-> 0:如果字符串中存在非数字,转换成数字0。
结合表单元素协议及公式的设计标准及对各种计算异常的解决方案,设计出完整的基于公式计算的复杂表单装置的流程图。
请参阅图4,在一具体的实施例中,表单协议包括多个表单元素(分别为A、B、C),在表单元素中还包含了值公式、必填属性公式以及标题公式。进而将多个表单元素的参数输入表单引擎,表单引擎包括公式解析引擎、公式检验引擎、值转换引擎以及表单渲染引擎,根据该表单引擎生成真实表单,真实表单即表单元素A、表单元素B以及表单元素C。
1.根据需求制定表单元素描述协议:协议包括有一个或多个表单元素且每一个表单元素都拥有一个唯一键值用于查询,一个表单元素的描述由值和属性组成,属性值包括例如:元素标题、元素是否必填、元素是否隐藏、元素是否被禁止输入等。这些表单元素的值或属性都可以用一个计算公式来表示。
2.表单协议作为入参提交给表单引擎,协议解析并为表单元素注册值改变事件:在拥有了表单元素描述的协议后,使用javascript语言对协议进行解析,对协议上每一个带有公式的表单元素值和属性进行运行解析,在解析公式的过程中,如果该公式中有其他的表单元素值或属性参与计算,则需要对参与计算的表单元素注册值改变事件,当触发值改变事件时要再次运行公式重新计算表单的值或属性,形成关联计算。
3.表单引擎在会针对逻辑错误的公式进行校验提醒:设计者在表单元素描述协议中设计出了逻辑错误的公式,则给与设计者提醒。
4.表单元素对公式计算后的返回值进行约束,不同表单元素的值或属性都有对应的有效值,针对公式计算后的值也必须是该表单元素的值的有效值,比如表单元素:数字输入框的有效值是数字值,它的其他属性如“该元素是否被禁止输入”的有效值是布尔值,“表单元素标题”的有效值是字符串。针对表单元素的有效值给予自动类型转换方便用户设计公式。
5.表单引擎经过一系列入参及校验后,最终渲染生成真实表单页面。
相较于现有技术,本发明的有益效果在于:
本发明使用javascript技术,设计一套通用公式计算字符串值、数字值、布尔值,通过公式来管理表单元素在不同使用场景下的值或属性,有利于表单设计者维护理解表单的逻辑,也不需要关心表单逻辑的底层实现。就可以设计出各种各样在复杂场景下的表单。不需要更改底层的代码,通过表单元素值或属性绑定公式,让用户更容易设计管理维护高复杂度的表单,不必控制大量复杂的代码逻辑,维护表单元素值或属性上的公式即可。表单元素值或属性绑定的公式中提供大量数学逻辑函数,辅助用户设计各种计算公式。针对逻辑错误的公式能够给与用户提醒。针对不同类型的表单元素值和属性,计算中自动给与类型转换。
请参阅图5,本发明另一实施例提供一种基于公式生成表单的装置,包括:
第一构建模块11,用于基于表单元素描述协议构建多个表单元素,多个所述表单元素均含有对应的表单元素ID,多个所述表单元素包括对应的关联公式;其中,所述关联公式包括回调函数。
第二构建模块12,用于根据预设的语法编译将所述关联公式和相应的所述表单元素ID转换成语法树。
生成模块13,用于当表单元素的值改变时,遍历所述语法树,查找所述表单元素ID并调用相应的所述回调函数,根据所述回调函数生成表单。
优选地,所述的基于公式生成表单的装置,还包括第一子构建模块,所述第一子构建模块,用于:
多个所述关联公式包括值公式、属性公式以及标题公式;其中,所述值公式、所述属性公式和所述标题公式包含相应的回调函数;
根据所述值公式、所述属性公式和所述标题公式构建语法树的节点;
遍历所述语法树,查找多个所述表单元素的表单元素ID,通过javascript解析所述语法树的节点并调用回调函数。
优选地,所述第二构建模块,还用于:
所述关联公式包括标点符号、运算符以及括号;
遍历所述关联公式,定位标点符号的位置、运算符的位置以及括号的位置,并基于所述标点符号的位置、所述运算符的位置以及所述括号的位置进行词法分析处理,获取分词结构;
根据所述分词结构创建语法树结构,所述语法树结构根据name函数名和arguments形参表示确定;
根据所述表单元素ID、所述name函数名和所述arguments形参表示构建所述语法树。
优选地,所述的基于公式生成表单的装置,还包括校验模块,所述校验模块,用于:
根据预设的校验模式对语法树中的关联公式进行校验。
关于基于公式生成表单的装置的具体限定可以参见上文中对于基于公式生成表单的方法的限定,在此不再赘述。上述基于公式生成表单的装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
请参阅图6,本发明某一实施例提供一种终端设备,包括:
一个或多个处理器;
存储器,与所述处理器耦接,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上所述的基于公式生成表单的方法。
处理器用于控制该终端设备的整体操作,以完成上述的基于公式生成表单的方法的全部或部分步骤。存储器用于存储各种类型的数据以支持在该终端设备的操作,这些数据例如可以包括用于在该终端设备上操作的任何应用程序或方法的指令,以及应用程序相关的数据。该存储器可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,简称EPROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。
在一示例性实施例中,终端设备可以被一个或多个应用专用集成电路(Application Specific 1ntegrated Circuit,简称AS1C) 、数字信号处理器(DigitalSignal Processor,简称DSP) 、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD) 、现场可编程门阵列(Field Programmable Gate Array ,简称FPGA) 、控制器、微控制器、微处理器或其他电子元件实现,用于执行如上述任一项实施例所述的基于公式生成表单的方法,并达到如上述方法一致的技术效果。
在另一示例性实施例中,还提供一种包括计算机程序的计算机可读存储介质,该计算机程序被处理器执行时实现如上述任一项实施例所述的基于公式生成表单的方法的步骤。例如,该计算机可读存储介质可以为上述包括计算机程序的存储器,上述计算机程序可由终端设备的处理器执行以完成如上述任一项实施例所述的基于公式生成表单的方法,并达到如上述方法一致的技术效果。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。
Claims (10)
1.一种基于公式生成表单的方法,其特征在于,包括:
基于表单元素描述协议构建多个表单元素,多个所述表单元素均含有对应的表单元素ID,多个所述表单元素包括对应的关联公式;其中,所述关联公式包括回调函数;
根据预设的语法编译将所述关联公式和相应的所述表单元素ID转换成语法树;
当表单元素的值改变时,遍历所述语法树,查找所述表单元素ID并调用相应的所述回调函数,根据所述回调函数生成表单。
2.根据权利要求1所述的基于公式生成表单的方法,其特征在于,
多个所述关联公式包括值公式、属性公式以及标题公式;其中,所述值公式、所述属性公式和所述标题公式包含相应的回调函数;
根据所述值公式、所述属性公式和所述标题公式构建语法树的节点;
遍历所述语法树,查找多个所述表单元素的表单元素ID,通过javascript解析所述语法树的节点并调用回调函数。
3.根据权利要求1所述的基于公式生成表单的方法,其特征在于,所述根据预设的语法编译将所述关联公式和相应的所述表单元素ID转换成语法树,包括:
所述关联公式包括标点符号、运算符以及括号;
遍历所述关联公式,定位标点符号的位置、运算符的位置以及括号的位置,并基于所述标点符号的位置、所述运算符的位置以及所述括号的位置进行词法分析处理,获取分词结构;
根据所述分词结构创建语法树结构,所述语法树结构根据name函数名和arguments形参表示确定;
根据所述表单元素ID、所述name函数名和所述arguments形参表示构建所述语法树。
4.根据权利要求1所述的基于公式生成表单的方法,其特征在于,在所述当表单元素的值改变时,遍历所述语法树,查找所述表单元素ID并调用相应的所述回调函数之后,还包括:
根据预设的校验模式对语法树中的关联公式进行校验。
5.一种基于公式生成表单的装置,其特征在于,包括:
第一构建模块,用于基于表单元素描述协议构建多个表单元素,多个所述表单元素均含有对应的表单元素ID,多个所述表单元素包括对应的关联公式;其中,所述关联公式包括回调函数;
第二构建模块,用于根据预设的语法编译将所述关联公式和相应的所述表单元素ID转换成语法树;
生成模块,用于当表单元素的值改变时,遍历所述语法树,查找所述表单元素ID并调用相应的所述回调函数,根据所述回调函数生成表单。
6.根据权利要求5所述的基于公式生成表单的装置,其特征在于,还包括第一子构建模块,所述第一子构建模块,用于:
多个所述关联公式包括值公式、属性公式以及标题公式;其中,所述值公式、所述属性公式和所述标题公式包含相应的回调函数;
根据所述值公式、所述属性公式和所述标题公式构建语法树的节点;
遍历所述语法树,查找多个所述表单元素的表单元素ID,通过javascript解析所述语法树的节点并调用回调函数。
7.根据权利要求5所述的基于公式生成表单的装置,其特征在于,所述第二构建模块,还用于:
所述关联公式包括标点符号、运算符以及括号;
遍历所述关联公式,定位标点符号的位置、运算符的位置以及括号的位置,并基于所述标点符号的位置、所述运算符的位置以及所述括号的位置进行词法分析处理,获取分词结构;
根据所述分词结构创建语法树结构,所述语法树结构根据name函数名和arguments形参表示确定;
根据所述表单元素ID、所述name函数名和所述arguments形参表示构建所述语法树。
8.根据权利要求5所述的基于公式生成表单的装置,其特征在于,还包括校验模块,所述校验模块,用于:
根据预设的校验模式对语法树中的关联公式进行校验。
9.一种终端设备,其特征在于,包括:
一个或多个处理器;
存储器,与所述处理器耦接,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-4任一项所述的基于公式生成表单的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-4任一项所述的基于公式生成表单的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210115555.5A CN114138425B (zh) | 2022-02-07 | 2022-02-07 | 一种基于公式生成表单的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210115555.5A CN114138425B (zh) | 2022-02-07 | 2022-02-07 | 一种基于公式生成表单的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114138425A true CN114138425A (zh) | 2022-03-04 |
CN114138425B CN114138425B (zh) | 2022-06-10 |
Family
ID=80381842
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210115555.5A Active CN114138425B (zh) | 2022-02-07 | 2022-02-07 | 一种基于公式生成表单的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114138425B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6518979B1 (en) * | 1997-04-30 | 2003-02-11 | Geodesic Systems, Incorporated | Automatically-maintained customizable user interfaces |
CN102201009A (zh) * | 2011-06-21 | 2011-09-28 | 深圳市凯立德科技股份有限公司 | 一种表单生成方法和装置 |
CN102682126A (zh) * | 2012-05-16 | 2012-09-19 | 深圳市凯立德科技股份有限公司 | 一种表单数据的存取方法及装置 |
CN108170427A (zh) * | 2017-12-19 | 2018-06-15 | 中山大学 | 一种基于测试的网页构件抽取与复用方法 |
CN110442816A (zh) * | 2019-07-12 | 2019-11-12 | 平安科技(深圳)有限公司 | 网页表单配置方法、装置及计算机可读存储介质 |
CN110457662A (zh) * | 2019-07-23 | 2019-11-15 | 武汉宏途科技有限公司 | 一种基于表达式来实现数据交互的方法 |
CN112230952A (zh) * | 2020-09-24 | 2021-01-15 | 微民保险代理有限公司 | 表单更新方法、装置、计算机设备和存储介质 |
CN112433799A (zh) * | 2020-11-25 | 2021-03-02 | 平安普惠企业管理有限公司 | 页面生成方法、装置、设备及介质 |
CN113126990A (zh) * | 2021-04-22 | 2021-07-16 | 北京京东振世信息技术有限公司 | 一种页面开发方法、装置、设备及存储介质 |
US20220035996A1 (en) * | 2020-07-28 | 2022-02-03 | Intuit Inc. | Generating machine renderable representations of forms using machine learning |
-
2022
- 2022-02-07 CN CN202210115555.5A patent/CN114138425B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6518979B1 (en) * | 1997-04-30 | 2003-02-11 | Geodesic Systems, Incorporated | Automatically-maintained customizable user interfaces |
CN102201009A (zh) * | 2011-06-21 | 2011-09-28 | 深圳市凯立德科技股份有限公司 | 一种表单生成方法和装置 |
CN102682126A (zh) * | 2012-05-16 | 2012-09-19 | 深圳市凯立德科技股份有限公司 | 一种表单数据的存取方法及装置 |
CN108170427A (zh) * | 2017-12-19 | 2018-06-15 | 中山大学 | 一种基于测试的网页构件抽取与复用方法 |
CN110442816A (zh) * | 2019-07-12 | 2019-11-12 | 平安科技(深圳)有限公司 | 网页表单配置方法、装置及计算机可读存储介质 |
CN110457662A (zh) * | 2019-07-23 | 2019-11-15 | 武汉宏途科技有限公司 | 一种基于表达式来实现数据交互的方法 |
US20220035996A1 (en) * | 2020-07-28 | 2022-02-03 | Intuit Inc. | Generating machine renderable representations of forms using machine learning |
CN112230952A (zh) * | 2020-09-24 | 2021-01-15 | 微民保险代理有限公司 | 表单更新方法、装置、计算机设备和存储介质 |
CN112433799A (zh) * | 2020-11-25 | 2021-03-02 | 平安普惠企业管理有限公司 | 页面生成方法、装置、设备及介质 |
CN113126990A (zh) * | 2021-04-22 | 2021-07-16 | 北京京东振世信息技术有限公司 | 一种页面开发方法、装置、设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
戴维: "Web页中动态级联表单元素对象的设计与优化", 《软件研发与应用》 * |
漆钰: "AST语法树", 《简书》 * |
Also Published As
Publication number | Publication date |
---|---|
CN114138425B (zh) | 2022-06-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112100054B (zh) | 一种面向数据管控的程序静态分析方法和系统 | |
Bąk et al. | Feature and meta-models in clafer: Mixed, specialized, and coupled | |
CN106648662B (zh) | 基于工程造价计算描述语言bcl的报表生成装置及生成方法 | |
Kirby | Reflection and hyper-programming in persistent programming systems | |
Syme et al. | Expert F♯ 3.0 | |
Mottu et al. | Static analysis of model transformations for effective test generation | |
Sen et al. | Towards domain-specific model editors with automatic model completion | |
Hooimeijer et al. | StrSolve: solving string constraints lazily | |
Gargantini et al. | A semantic framework for metamodel-based languages | |
Dong et al. | WebRobot: web robotic process automation using interactive programming-by-demonstration | |
Culpepper | Fortifying macros | |
Arnoldus et al. | Code generation with templates | |
van Der Storm et al. | The design and implementation of Object Grammars | |
Sekerinski et al. | Translating statecharts to B | |
Khurshid | Generating structurally complex tests from declarative constraints | |
Reis et al. | An on-the-fly grammar modification mechanism for composing and defining extensible languages | |
CN114138425B (zh) | 一种基于公式生成表单的方法及装置 | |
Anderson et al. | Supporting analysis of SQL queries in PHP AiR | |
Galeotti et al. | Dynalloy as a formal method for the analysis of java programs | |
Gonçalves et al. | ReFlO: An interactive tool for pipe-and-filter domain specification and program generation | |
Söderberg | Contributions to the Construction of Extensible Semantic Editors | |
Caballero et al. | Two type extensions for the constraint modeling language MiniZinc | |
Nödler et al. | A flexible framework for quality assurance of software artefacts with applications to Java, UML, and TTCN-3 test specifications | |
Tateishi et al. | DHTML accessibility checking based on static JavaScript analysis | |
Schönberg et al. | Verifying the consistency of web-based technical documentations |
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 |