CN1855052A - 一种从树型结构数据和一组代码片断结构体生成目标源代码的方法 - Google Patents
一种从树型结构数据和一组代码片断结构体生成目标源代码的方法 Download PDFInfo
- Publication number
- CN1855052A CN1855052A CN 200510025345 CN200510025345A CN1855052A CN 1855052 A CN1855052 A CN 1855052A CN 200510025345 CN200510025345 CN 200510025345 CN 200510025345 A CN200510025345 A CN 200510025345A CN 1855052 A CN1855052 A CN 1855052A
- Authority
- CN
- China
- Prior art keywords
- code snippet
- node
- value
- pending
- groove
- 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.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种从树型结构数据和一组代码片断结构体生成目标源代码的方法,目标源代码可以是C++,Java等结构化高级语言。本发明利用代码片断结构体的待处理代码片断内嵌有特征标记,经过标记替换来构造最终的目标源代码。而标记名称迭代地对应于代码片断结构体的名称,因而只需要支持第一个标记名称,使生成引擎的编写和代码片断的编写高度分离。在替换时,并非所有同名的代码片断结构体都不加区别地并列展开,而是通过模式匹配来选择。这样,克服了内嵌脚本指令的生成方法的代码片断编写与引擎编写混合起来的复杂和无统一结构的缺点,给代码片断的编写提供统一的组织方法和生成逻辑控制,进而易于可视化组织。
Description
发明领域
本发明涉及一种生成目标源代码的方法,特别是通过一组代码片断和树型结构数据生成目标源代码的方法。
背景技术
在编程辅助工具中,特别是建模工具中,根据用户建立的可视化模型生成Java或C++等结构化高级语言源代码的功能用到目标源代码生成技术。这一技术有两个源:用户建立的模型数据和代码片断。具有生成目标源代码功能的软件程序常常成为源代码生成引擎,以下简称生成引擎。目前一些生成手段被广泛使用:
I字符串替换。例如代码片断:
DBQueryl->FieldByName(“主键字段”)->AsString=”1”;把“主键字段”字符串替换成“ID”即得到目标源代码:
DBQueryl->FieldByName(“ID”)->AsString=”1”;
II标记替换。例如代码片断:
class/*<%类名%>*/
{
};
上述两边的符号“/*<%”和“%>*/”是对标记附加特征,称为有特征标记,其中间的部分称为标记名称。有的生成引擎简化为“%类名”,标记名称的前面是百分号,后面为空格或回车(即空白)。生成引擎在用户建立的模型中找到合适的关于类的对应的数据,并把类的名称(例如是’MyClass’)替换上述标记“/*<%类名%>*/”,得到目标源代码:
class MyClass
{
};
III并列展开。例如有两个代码片断:
public String Name;和
public int Count;经过并列展开就得到一个临时目标源代码:
public String Name;
public int Count;
IV内嵌脚本指令。例如用ASP语法写成的代码片断:
class<%=ClassName%>
{
<%=WriteMembers()%>
};如果变量ClassName已经赋值,例如是“MyClass”,而方法WriteMembers()通过编写合适的指令代码,输出所有该类的成员,例如是:
public String Name;
public int Count;就能得到完整的目标源代码(空格和回车经过整理):
class MyClass
{
public String Name;
public int Count;
};
上述的第II种方法中,编写代码片断时所用到的标记在传统的生成引擎内都需要得到支持,甚至有一部分代码片断出现在引擎内部,才能生成有效的目标源代码,因而导致生成引擎和代码片断结合过于紧密,而且标记的数量总是受限于生成引擎的功能支持,不适合在不能修改生成引擎的情况下扩展功能,大大限制了代码片断编写的灵活性及应用范围,导致使用者只限于个别内容的调整。使用第IV种方法的生成引擎其实没有完成任何专门的生成工作,脚本编写代替了生成引擎编写,使得代码片断的编写和生成引擎编写混在一起完成,并且没有统一的方法进行有效组织,虽然功能可以做得非常强大,但是没有给代码片断的组织和编写带来便利。
发明内容
本发明的目标之一是,使生成引擎的编写和代码片断的编写高度分离。
本发明的目标之二是,给代码片断的编写提供统一的组织方法和生成逻辑控制,进而易于可视化地组织代码片断,如图1。
实现本发名目的的技术方案包括两个方面,第一方面把所涉及的两个源分别进行统一结构:
1把第一个源即用户建立的模型数据组织成树型结构,并且每个节点有一个必须的域:类型名称,此外,有若干属性及其对应的值,称为“属性-值对”,如图2。
2把第二个源即代码片断组织成代码片断结构体,这个结构体含有以下信息:(a)名称;(b)模式匹配语句序列;(c)待处理代码片断,该片断允许内嵌0个或多个有特征标记;(d)保存文件标志及文件名;(e)树型结构数据的节点组织指令;(f)把待处理代码片断作为字符串进行替换的指令序列;(g)把文件名作为字符串进行替换的指令。
上述的模式匹配指令序列,体现了本发明的先进性之一,其匹配规则表示了本代码片断适用于何种类型、何种属性的节点,进而对待处理代码段进行相应的字符串替换得到可用的目标源代码片断,通过本发明的其他展开方式可以得到完整的目标源代码。其指令可以是:
(i)逻辑表达式、算数表达式、赋值表达式、产生式规则匹配表达式的0次或多次迭代形成的语句。
上述的产生式规则,是一个命名为“类型属性值”的规则,该规则包括三个槽:(1)“类型名称”槽;(2)“属性”槽;(3)“值”槽,其匹配值可含有通配符。为便于说明,该规则表示成自然语言是:“类型名称”的“属性”为“值”,例如:“成员函数”的“返回值类型”为“int”。
产生式规则匹配表达式表示的是存在性判断,这里是“类型属性值”规则,其求值方法是:本表达式中的“类型属性值”规则的匹配值与同规则事实断言与对应槽的约束值进行字符串比较或通配苻匹配,如果比较相同或匹配成功,则返真;如果不成功,则结合“属于(x,y)”谓词函数约束而来的事实断言进行推理,即如果“属于(x,y)”谓词函数约束而来的事实断言中x的约束值和“类型属性值”规则事实断言的“类型名称”槽的约束值相同,则给“类型属性值”规则的各个槽分别约束为y的约束值、属性”槽的约束值和“值”槽的约束值得到新的事实断言,迭代执行本方法,直到推理没有得到新的事实断言为止,如果此时仍未返回真,则返回假。
所谓的对应槽匹配,举例来说,编写“类型属性值”规则:“成员函数”的“返回值”为“?*”。其中通配苻“?”表示1个字符,“*”表示0个或多个字符,而“?*”表示了1个或多个字符,即不为空的情况。如果在所有的事实断言中有这样一条“成员函数”的“返回值”为“int”的事实断言,则匹配成功,产生式规则匹配表达式的值为真,而“成员函数”的“返回值”为“”的事实断言(用户在填写该节点的数据时没有填写内容)则本次匹配不成功。
上述的推理,举例来说,如果有“成员函数”属于“成员”的事实断言和“成员函数”的“访问类型”为“public”的事实断言,它们分别约束“类型属性值”规则和“属于(x,y)”谓词函数所得,则推理得出“成员”的“访问类型”为“public”的事实断言,如果有规则:“成员”的“访问类型”为“?*”,那么上述产生式规则匹配表达式得到匹配成功,返回真。这样做的好处是,在编写代码片断的时候,可能该代码片断是为上位概念编写的,那么下位概念都能使用该代码片断了。例如成员包括成员函数和成员数据,而它们的访问类型的代码写法是一样的。那么对访问类型的代码片断只为成员编写,就可以应用于成员函数和成员数据这两种情况了。这一点是体现本发明的先进性的另一方面。
(ii)对“属于(x,y)”谓词函数约束为“类型名称1”和“类型名称2”的事实断言语句。该谓词函数表示x属于y。通过谓词逻辑的推广规则推理,使模式匹配更灵活。例如“属于(开始状态,状态)”,其表示开始状态属于状态;又如“属于(普通状态,状态)”,其表示“普通状态”属于“状态”。这个谓词函数及其事实断言专为上述的推理而存在。
(iii)返回语句。此语句的结果就是本序列是否匹配成功的结果。
技术方案的第二方面是,利用代码片断结构体的待处理代码片断内嵌有特征标记,经过标记替换来构造最终的目标源代码。本发明相对于简单的标记替换有创造性的是,标记名称迭代地对应于代码片断结构体的名称,因而只需要支持第一个标记名称,例如’main’,使生成引擎的编写和代码片断的编写高度分离,达到第一个目标。在替换的方法中,被替换的内容自然是有特征标记,替换的内容则是同名的经过迭代处理的待处理代码片断的并列展开。但是并非所有同名的代码片断结构体都不加区别地并列展开,而是通过模式匹配来选择。同时看到,该处理方法统一了代码片断的组织方法和生成逻辑控制,即达到了第二个目标。
通过以下的附图说明和具体实施方式进一步描述本发明是如何达到各种目标的。
附图说明
图1是代码片断可视化组织编辑,其展示了一个类的产生过程。
图2是树型结构数据。“属性-值对”用“属性=’值’”来表示,如果要完整地说明就是“类型名称.属性=’值’”。“工程”、“类”、“成员函数”和“成员数据”都是节点的类型名称。括号内的是“属性-值对”。
图3(a)-(c)是代码片断结构体的组织结构及其部分待处理代码片断内容。
图4提取展开方法流程循环开始处的TRUE表示无穷循环,用循环结束处检查有没有未处理有特征标记,如果没有,则结束循环。由于循环内有迭代和重入,所以特别说明了参数的构成。
图5同构匹配展开方法流程由于是循环内有迭代和重入,所以特别说明了参数的构成。图中的上面的“ALL”表示所有符合条件的结构体,下面的“ALL”表示所有待处理节点。
具体实施方式
一、本发明开始的时候,读入一个所需要的树型结构数据(例如图2)和一组代码片断结构体(例如图3)。
作为启动,构造一个待处理代码片断,该待处理代码片断只有一个特定的名称的有特征标记。例如:标记名称“main”,加入识别特征后得到有特征标记“/*<%main%>*/”就是这个待处理代码片断的全部内容。然后设树型结构数据的根节点为当前节点。
根据当前节点执行提取展开方法去处理上述构造的待处理代码片断的内容。所谓的“根据…执行”,从编程角度来说是用实参调用相关的函数(或叫方法)。
二、提取展开方法,如图4,其步骤包括:
1)在被处理的待处理代码片断内寻找有特征标记,提取标记名称。
实例中,第一次执行本方法的时候是“/*<%main%>*/”,所提取的标记名称是“main”。
2)根据标记名称和当前节点执行同构匹配展开方法,把该方法所返回的内容替换步骤1)找到的有特征标记。
3)重复步骤1)-2)直到被处理的待处理代码片断中没有有特征标记为止。
三、同构匹配展开方法,如图5,其步骤是:
1)申请待返回缓冲区并清空其内容。
2)申请临时待处理代码片断缓冲区并清空其内容。
3)对所有名称为所提取的标记名称的代码片断结构体,其中被选定的代码片断结构体称为当前代码片断结构体,循环执行:
(2-a)在本方法的入口处的当前节点的基础上对当前代码片断结构体执行节点组织指令,得到待处理节点列表。例如“组织子节点”指令,实例中第一次进入本方法的当前节点是根节点,即“工程”节点,执行“组织子节点”指令后待处理节点列表是所有“类”节点。然后
(2-b)对所有待处理节点列表的节点,其中被选定的节点称为有效节点,循环执行:
(2-b-i)把有效节点的类型名称,“属性-值对”的属性和值分别约束“类型属性值”规则的3个槽,每一“属性-值对”都得到一个相应的事实断言,如果已经有“类型名称”槽、“属性”槽相同的断言,则覆盖之;然后
(2-b-ii)执行模式匹配语句序列,如果返回值为真或非0,则拷贝当前代码片断结构体的待处理代码片断到上述申请的临时待处理代码片断缓冲区,对该缓冲区执行把待处理代码片断作为字符进行串替换的指令序列,根据该临时待处理代码片断和有效节点迭代执行提取展开方法去处理该临时待处理代码片断缓冲区的内容;然后检查保存文件标志,如果为真,则执行当前结构体的把待处理代码片断作为字符串进行替换的指令序列,按所得的文件名保存临时待处理代码片断的内容,清空临时待处理代码片断。
上述的字符串替换中,被替换的字符自然是待处理代码片断中可能出现的字符,而替换的字符来源于3处:(a)替换操作本身带的常量;(b)由事实断言组成的变量值,例如事实断言“类”的“名称”为“MyClass”,那么如果替换的变量是“类.名称”,则用“MyClass”作为替换的字符;(c)上述常量和变量经过字符串串接、求子串等操作而成的字符串。
(2-b-iii)追加临时待处理代码片断的内容至待返回缓冲区。
4)返回待返回缓冲区的内容。
虽然在上述描述的过程中借助了树型结构数据是类的简单例子,且所生成的目标源代码是C++语言,但是改变树型结构数据的表达内容和目标源代码的语言种类并不脱离本发明的范围。例如树型结构数据的内容是传统(标准)流程图表达函数的执行过程的情况下生成C#的目标源代码。因此本发明的范围应由权利要求书限定。
Claims (9)
1 一种从树型结构数据和一组代码片断结构体生成目标源代码的方法。
2 根据权利要求1所述的树型结构数据,其特征在于每个节点包含:(a)类型名称;(b)0个或多个“属性—值对”。
3 根据权利要求1所述的代码片断结构体,其特征在于包含:(a)名称;(b)模式匹配语句序列;(c)待处理代码片断;(d)保存文件标志及文件名;(e)树型结构数据的节点组织指令;(f)把待处理代码片断作为字符进行串替换的指令序列;(g)把文件名作为字符串进行替换的指令。
4 根据权利要求3所述的(b),其特征是,指令包括:(i)逻辑表达式、算数表达式、赋值表达式、产生式规则匹配表达式的0次或多次迭代组成的语句;(ii)对“属于(x,y)”谓词函数约束为“类型名称1”和“类型名称2”的事实断言语句;(iii)返回语句。
5 根据权利要求4所述的产生式规则,是一个“类型属性值”规则,该规则的特征是包括三个槽:(1)“类型名称”槽;(2)“属性”槽;(3)“值”槽,其匹配值可含有通配符。
6 根据权利要求1所述的方法,其特征是,步骤包括:
1)读入所需的树型结构数据和所需的代码片断结构体。
2)构造一个待处理代码片断,该片断的构造方法是:把特定的名称加入识别特征后成为有特征标记而得到。
3)设置树型结构数据的根节点为当前节点。
4)根据当前节点执行提取展开方法去处理上述构造的待处理代码片断的内容。
7 根据权利要求6所述的提取展开方法,其特征是,步骤包括:
1)在被处理的待处理代码片断内寻找有特征标记,提取标记名称。
2)根据标记名称和当前节点执行同构匹配展开方法,把该方法所返回的内容替换步骤1)找到的有特征标记。
3)重复步骤1)-2)直到被处理的待处理代码片断中没有有特征标记为止。
8 根据权利要求7步骤2)所述的同构匹配展开方法,其特征是,步骤包括:
1)申请待返回缓冲区并清空其内容。
2)申请临时待处理代码片断缓冲区并清空其内容。
3)对所有名称为所提取的标记名称的代码片断结构体,其中被选定的代码片断结构体称为当前代码片断结构体,循环执行:
(2-a)在本方法的入口处的当前节点的基础上对当前代码片断结构体执行权利要求3所述的(e),得到待处理节点列表,然后
(2-b)对所有待处理节点列表的节点,其中被选定的节点称为有效节点,循环执行:
(2-b-i)把有效节点的类型名称,“属性—值对”的属性和值分别约束“类型属性值”规则的3个槽,每一“属性—值对”都得到一个相应的事实断言,如果已经有“类型名称”槽、“属性”槽相同的断言,则覆盖之;然后
(2-b-ii)执行权利要求3所述的(b),如果返回值为真或非0,则拷贝当前代码片断结构体的待处理代码片断到上述申请的临时待处理代码片断缓冲区,对该缓冲区执行权利要求3所述的(f)方法,根据该临时待处理代码片断和有效节点迭代执行权利要求7所述的提取展开方法去处理该临时待处理代码片断缓冲区的内容;然后检查保存文件标志,如果为真,则执行权利要求3所述的(h),按所得的文件名保存临时待处理代码片断的内容,清空临时待处理代码片断。
(2-b-iii)追加临时待处理代码片断的内容至待返回缓冲区。
4)返回待返回缓冲区的内容。
9 根据权利要求4所述的产生式规则匹配表达式,是关于“类型属性值”规则的匹配与否的表达式,其特征是,其求值方法是:本表达式中的“类型属性值”规则的匹配值与同规则事实断言与对应槽的约束值进行字符串比较或通配苻匹配,如果比较相同或匹配成功,则返真;如果不成功,则结合“属于(x,y)”谓词函数约束而来的事实断言进行推理,即如果“属于(x,y)”谓词函数约束而来的事实断言中x的约束值和“类型属性值”规则事实断言的“类型名称”槽的约束值相同,则给“类型属性值”规则的各个槽分别约束为y的约束值、属性”槽的约束值和“值”槽的约束值得到新的事实断言,迭代执行本方法,直到推理没有得到新的事实断言为止,如果此时仍未返回真,则返回假。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200510025345 CN1855052A (zh) | 2005-04-25 | 2005-04-25 | 一种从树型结构数据和一组代码片断结构体生成目标源代码的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200510025345 CN1855052A (zh) | 2005-04-25 | 2005-04-25 | 一种从树型结构数据和一组代码片断结构体生成目标源代码的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1855052A true CN1855052A (zh) | 2006-11-01 |
Family
ID=37195239
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200510025345 Pending CN1855052A (zh) | 2005-04-25 | 2005-04-25 | 一种从树型结构数据和一组代码片断结构体生成目标源代码的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1855052A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105808263A (zh) * | 2016-03-11 | 2016-07-27 | 浪潮通信信息系统有限公司 | 一种系统运行时可视化代码片断搭建前端系统的方法 |
CN106462399A (zh) * | 2014-06-30 | 2017-02-22 | 微软技术许可有限责任公司 | 代码推荐 |
CN107562615A (zh) * | 2017-07-21 | 2018-01-09 | 北京航空航天大学 | 基于目标符合性评审论证树模型的适航符合性测试方法 |
CN104866320B (zh) * | 2011-09-02 | 2018-02-23 | 微软技术许可有限责任公司 | 具有脚本代码的标记内容的快速呈现方法 |
US10481876B2 (en) | 2017-01-11 | 2019-11-19 | Microsoft Technology Licensing, Llc | Methods and systems for application rendering |
CN110879710A (zh) * | 2019-07-24 | 2020-03-13 | 中信银行股份有限公司 | 一种rpg程序自动转成java程序的方法 |
-
2005
- 2005-04-25 CN CN 200510025345 patent/CN1855052A/zh active Pending
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104866320B (zh) * | 2011-09-02 | 2018-02-23 | 微软技术许可有限责任公司 | 具有脚本代码的标记内容的快速呈现方法 |
US10466989B2 (en) | 2011-09-02 | 2019-11-05 | Microsoft Technology Licensing, Llc. | Fast presentation of markup content having script code |
US11288048B2 (en) | 2011-09-02 | 2022-03-29 | Microsoft Technology Licensing, Llc. | Fast presentation of markup content having script code |
CN106462399A (zh) * | 2014-06-30 | 2017-02-22 | 微软技术许可有限责任公司 | 代码推荐 |
CN106462399B (zh) * | 2014-06-30 | 2019-10-18 | 微软技术许可有限责任公司 | 代码推荐 |
CN105808263A (zh) * | 2016-03-11 | 2016-07-27 | 浪潮通信信息系统有限公司 | 一种系统运行时可视化代码片断搭建前端系统的方法 |
US10481876B2 (en) | 2017-01-11 | 2019-11-19 | Microsoft Technology Licensing, Llc | Methods and systems for application rendering |
CN107562615A (zh) * | 2017-07-21 | 2018-01-09 | 北京航空航天大学 | 基于目标符合性评审论证树模型的适航符合性测试方法 |
CN110879710A (zh) * | 2019-07-24 | 2020-03-13 | 中信银行股份有限公司 | 一种rpg程序自动转成java程序的方法 |
CN110879710B (zh) * | 2019-07-24 | 2023-07-07 | 中信银行股份有限公司 | 一种rpg程序自动转成java程序的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111309757B (zh) | 一种HBase的SQL解释器和优化方法 | |
CN1299489A (zh) | 利用相关数据库实现非循环定向图形结构的方法 | |
CN1509433A (zh) | 把传统软件应用程序转换为现代面向对象系统的方法和系统 | |
CN1519751A (zh) | 生成结构模式候选对象的方法、系统和程序 | |
CN1278231C (zh) | 将抽象句法表示法1数据模型化成对象模型的方法及系统 | |
CN1806241A (zh) | 数据库查询用户界面 | |
US20070233645A1 (en) | System and Method for Building an XQuery Using a Model-Based XQuery Building Tool | |
CN1224875A (zh) | 数据库管理系统的动态修改 | |
CN1653448A (zh) | 搜索数据源的系统和方法 | |
CN1855052A (zh) | 一种从树型结构数据和一组代码片断结构体生成目标源代码的方法 | |
CN1841379A (zh) | 将文件系统模型映射到数据库对象 | |
CN1855009A (zh) | 可搜索控制模板功能的基于任务的界面 | |
CN1711522A (zh) | 图形用户接口建模系统 | |
CN1821957A (zh) | 关系建模 | |
CN1908935A (zh) | 一种自然语言的搜索方法及系统 | |
CN1790335A (zh) | Xml文件数据存取的方法 | |
CN1667607A (zh) | 用于文档浏览的个性化分类处理方法及系统 | |
CN1410918A (zh) | 基于信息抽取技术的搜索引擎 | |
CN1592908A (zh) | 具有异种对象类型的数据库系统 | |
CN1130658C (zh) | 规律性析取的系统方法 | |
CN1645372A (zh) | 一种实时内存数据库通用约束的实现方法 | |
CN1506875A (zh) | 语言本地化中特征字符串的提取与替换方法 | |
Cartright et al. | Galago: A Modular Distributed Processing and Retrieval System. | |
US8495055B2 (en) | Method and computer program for evaluating database queries involving relational and hierarchical data | |
CN1658159A (zh) | 可配置和可动态更改的对象模型 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C57 | Notification of unclear or unknown address | ||
DD01 | Delivery of document by public notice |
Addressee: Luo Diping Document name: Notice of application for publication of patent for invention and entry into the substantive examination procedure |
|
C57 | Notification of unclear or unknown address | ||
DD01 | Delivery of document by public notice |
Addressee: Luo Diping Document name: Notice of first review |
|
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |