CN107111503A - 用于将呈第一编程语言的源代码编译为呈第二编程语言的程序代码的方法 - Google Patents
用于将呈第一编程语言的源代码编译为呈第二编程语言的程序代码的方法 Download PDFInfo
- Publication number
- CN107111503A CN107111503A CN201480084317.6A CN201480084317A CN107111503A CN 107111503 A CN107111503 A CN 107111503A CN 201480084317 A CN201480084317 A CN 201480084317A CN 107111503 A CN107111503 A CN 107111503A
- Authority
- CN
- China
- Prior art keywords
- programming language
- specific
- node
- symbol
- class
- 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
Classifications
-
- 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/51—Source to source
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
一种用于将呈第一编程语言的源代码编译为呈第二编程语言的程序代码的方法(1500),其包含:(1501)基于所述源代码产生图,所述图对应于所述源代码的第一编程语言特定的中间表示;(1502)将所述图从所述第一编程语言特定的中间表示变换为第二编程语言特定的中间表示;以及(1503)基于所述图的所述第二编程语言特定的中间表示产生所述程序代码。
Description
技术领域
本发明涉及一种用于将呈第一编程语言的源代码编译为呈第二编程语言的程序代码的方法,所述第一编程语言具体来说是域特定语言(domain specific language,DSL),所述第二编程语言具体来说是模型特定语言(model specific language,MSL),本发明还涉及一种第一编程语言特定的专门化器,具体来说,涉及一种域特定的专门化器(domain specific specializer,DSS)。本发明进一步涉及用于域特定语言的实施方法。所述方法可用于提供在处理器上运行的可执行程序。
背景技术
许多应用需要高性能计算。为了满足这一需求,程序员依赖于低级且通常架构特定的编程模型(例如,用于对称多处理器系统(symmetrical multiprocessor system,SMP)的OpenMP、用于图形处理单元(graphics processing unit,GPU)的CUDA、用于集群的MPI)。使用这些框架的编程通常需要对特定编程模型和目标架构两者的深度理解。有前景的替代方案是如由“Kevin J.Brown、Arvind K.Sujeeth、Hyouk Joong Lee、Tiark Rompf、HassanChafi、Martin Odersky和Kunle Olukotun;用于域特定语言的异构并行框架(AHeterogeneous Parallel Framework for Domain-Specific Languages);PACT中,第89到100页,2011”所描述的编译后域特定语言(Domain-Specific Language,DSL)的开发。编译程序允许将问题特定的抽象化直接映射到低级架构特定的编程模型。然而,开发DSL本身困难,且编译后DSL由于其需要开发作为关键组件的编译程序而更为困难。在单个应用程序中同时使用多个DSL由于现有编译后方案不能同时编写因而也是困难的。“ArvindK.Sujeeth、Tiark Rompf、Kevin J.Brown、HyoukJoong Lee、Hassan Chafi、VictoriaPopic、Michael Wu、Aleksandar Prokopec、Vojin Jovanovic、Martin Odersky、KunleOlukotun;通过编译后域特定语言的编写和再使用(Composition and Reuse withCompiled Domain-Specific Languages),ECOOP'13”也认识到此问题。
开发用于特定域的专用语言的任务历史悠久,且至少追溯到“P.J.Landin,1966,未来编程语言七百种(The next 700programming languages),ACM通讯(Commun.ACM)9,3(1966年3月)”和“Paul Hudak,建筑领域特定的嵌入语言(Building Domain-SpecificEmbedded Languages),ACM计算概观(ACM Comput.Surv.),28(4):196,1996”。图1中示出DSL开发系统100的目前先进技术的架构。DSL开发系统100包含使用DSL开发框架103的应用程序101,所述DSL开发框架包含使用共用编译程序基础设施111以用于产生可执行文件的多个DSL 105、107、109。可执行文件使用SMP执行环境115在多处理器计算机113上运行或使用集群执行环境119在集群117上运行。图1的右侧描绘执行流130。将域特定源代码131提供到编译程序133,其将域特定源代码131变换为域特定中间表示135、产生可执行文件137并提供program.exe 139。
同时,如上文所提及,用于DSL构造的方法远远不成熟。可确定现有技术存在以下主要问题。仅可实现以下两个选项中的一个而非实现两个选项。可以针对不同数据表示手动写入许多代码为代价实现良好性能,以及可针对所有表示仅写入一次通用代码,但代价是损失性能。必须使用共用编译程序后端来开发新DSL。尽管相较于实施编译程序这要容易得多,但其仍是复杂的任务。
发明内容
本发明的目的是提供用于将高级编程语言编译为低级编程语言的改进技术。
此目的通过独立权利要求的特征得以实现。在从属权利要求、说明书和图式中显而易见其它实施形式。
在本发明中,呈现一种用于DSL等高级抽象编程语言开发框架的新系统架构以及一种用于DSL等高级抽象编程语言的新编译方法。在下文中描述实施所述方法所必需的系统关键组件以及步骤。通过使用实例以及对新系统架构和新方法的基本部分给出形式化的界定来展现所述系统和所述方法。在本发明中,互换使用以下术语:基于图的中间表示(intermediate representation,IR)、程序图,或简单称作图。为了实施如下文中所描述的用于域特定专门化的新技术,可使用如下文关于图16a)到16j)所描述的分级评估方法。
本发明的方面提供良好性能且在不损失性能的情况下可针对所有表示仅写入一次通用代码。因此有可能每个算法仅写入一次且针对不同表示自动地产生专门化版本。通过针对具体数据表示自动地专门化通用算法、通过应用域特定优化和模型特定优化两者,实现良好性能。不再有必要使用共用编译程序后端来开发新DSL。这促进了新DSL的开发。
在本发明中,呈现用于DSL开发的分层框架。这意味着有可能使用先前产生的DSL来实施新DSL。有可能以任何组合形式使用现有DSL。本质上,本发明描述如何将模块化和基于组件的编程的最佳实践(其为以通用语言形式的目前先进技术途径)引入到DSL的领域。
为了详细描述本发明,将使用以下术语、缩写和符号:
DSL:域特定(编程)语言,在更一般意义上也被称为第一编程语言或高级编程语言或抽象编程语言。
MSL:模型特定(编程)语言,在更一般意义上也被称为第二编程语言或低级编程语言。
CIC:具体实施方案类。
DSS:域特定的专门化器。
SE:分级评估器。
GI:图解释器。
TF:类型族。
抽象语法树(AST):用于表示源代码的抽象语法结构的树状数据结构。树的每个节点可指代以源代码形式出现的构造。
编译程序:获取源程序的源代码并产生可执行机器代码的计算机程序。
可执行机器代码:由处理器执行以执行给定任务的一系列机器代码指令。
工厂方法设计模式:面向对象的编程中的设计模式。此模式可界定用于形成对象的接口(所谓的工厂方法),但可使实施所述接口的类决定将实例化哪一类。
通用程序:按照稍后待指定类型写入的程序,所述稍后待指定类型可在必要时针对作为参数提供的特定类型被实例化。此方法可准许写入仅在类型组上存在不同的共用函数或类型,所述共用函数或类型在使用时基于所述类型组操作,因此减少重复。
图数据结构:图数据结构可包含被称为节点或顶点的某些实体的有序对的有限集,即所谓的边缘的有限集。边缘(x,y)从x指向y或从x去到y。所述节点可以是图结构的部分或可以是由整数索引或参考表示的外部实体。
中间表示(IR):可在编译程序内部使用以表示源程序并允许输出和可执行机器代码之前的分析和变换的数据结构。通常,这是节点内部具有一些特定信息的图或树状数据结构。由于中间表示含有评估程序所需的所有信息(在给定输入数据的情况下),因此我们可将关于中间表示的评估作为执行程序的等效方式。
类(在面向对象的编程中):在面向对象的编程中,类是可用于形成自身的实例的构造-被称作类实例、类对象、实例对象或简单称作对象。类界定使得其实例能够具有状态和行为的构成成员。数据字段成员(成员变量或实例变量)使得类实例能够维持状态。其它类别的成员,尤其方法,实现类实例的行为。类界定其实例的类型。
方法(在面向对象的编程中):在面向对象的编程中,方法可以是与类相关联的子例程(或过程)。方法可界定在程序运行时间通过相关联类的实例所展现的行为。方法可具有特殊性质-在运行时间,其可以访问存储于与其相关联的类的实例中的数据并且可由此能够控制所述实例的状态。
面向对象的语言、面向对象的编程:面向对象(Object-Oriented,OO)的语言是支持面向对象的编程(object-oriented programming,OOP)的计算机编程语言。OOP是使用“对象”的编程范式-通常是类的实例。对象可由数据字段和/或方法以及其互动构成以设计应用程序和计算机程序。编程技术可包含数据抽象、封装、传信、模块化、多态性和继承等特征。
操作语义:用于编程语言的操作语义描述如何将有效程序解释为计算步骤序列(通常使用某种假想计算机)。这些序列接着是所述程序的含义。
代理设计模式:面向对象的编程中的设计模式。代理呈其最一般形式时是充当到另一物(某一主体)的接口的类。客户端呼叫将所述呼叫委托给主体的代理的方法,而非直接访问所述主体。
程序的语义等价:呈语言L1的程序P1和呈语言L2的程序P2这两个程序,如果对于任何输入数据其相对于语言L1和L2的操作语义的解释相对应地产生相同结果,那么可被称为语义等价。
源代码:使用某一编程语言的源程序的文字表示。
源程序:用作“编译程序”的输入的计算机程序。其可转化为“可执行机器代码”。
分级代码:源程序P的分级代码是程序P',因此对P'的评估可产生中间表示,其可与程序P语义等价。
树状数据结构:通过一组链接节点模拟分层树结构的数据结构。
虚拟方法:虚拟函数或虚拟方法是其行为可在继承类内尤其通过具有相同签名的函数重写的函数或方法。
接口、抽象方法:抽象方法是仅具有签名且不具有实施主体的方法。其常常用于指定子类别必须提供所述方法的实施。抽象方法可用于以一些计算机语言指定接口。
参数化的类型(通用类型):参数化的类型可界定相关类型族。举例来说,“Array”参数化的类型可界定类型“Array[Int]”、“Array[Char]”、“Array[Array[Int]]”等。
函子:函子可界定在类别理论中应用的类别之间的映射的类型。函子可描述类别或更一般来说态射之间的同态。
终结符表达式:符号或字符串等终结符表达式是可出现在到正式语法的产生规则的输入和/或来自正式语法的产生规则的输出中的文字表达。其不可使用所述语法的规则改变。
非终结符表达式:符号或字符串等非终结符表达式是可被替换的那些表达。正式语法可包含开始符号、非终结符集合的指定成员,可通过对产生规则的连续应用从所述集合导出所述语言中的所有字符串。由语法界定的语言因此是可以如此导出的终结符字符串的集合。
根据第一方面,本发明涉及一种用于将呈第一编程语言的源代码编译为呈第二编程语言的程序代码的方法,所述方法包括:基于源代码产生图,所述图对应于源代码的第一编程语言特定的中间表示;将所述图从第一编程语言特定的中间表示变换为第二编程语言特定的中间表示;以及基于所述图的第二编程语言特定的中间表示产生程序代码。
通过将所述图从第一编程语言特定的中间表示(intermediate representation,IR)变换为第二编程语言特定的IR,可进一步使用包含高抽象层级上的对象的第一编程语言的框架。所述方法提供到较低层级的转化,较低层级例如是处理器特定的第二处理语言。因此,针对每个应用程序可仅写入一次通用代码,例如高抽象层级算法。所述变换接着提供高层级代码到特定表示的转化,从而满足执行代码的特定处理器平台或处理器架构的要求。在改进性能的情况下促进代码的开发。
在根据第一方面的方法的第一可能实施形式中,第一编程语言包括域特定的语言并且第二编程语言包括模型特定的语言。
域特定语言是使用许多通用编程构造的高抽象层级编程语言。在使用DSL时开发是高效的。模型特定语言可以是可用于特定处理器平台的低抽象层级编程语言,特定处理器平台即特定(处理器)模型。当通过变换将DSL与MSL组合时,代码开发可相当高效,因为通用DSL构造提供代码的简易开发,例如,算法和MSL构造实现代码在特定处理器平台上的高效执行。
在同样根据第一方面或根据第一方面的第一实施形式的方法的第二可能实施形式中,变换所述图是基于第一编程语言特定的专门化。
通过使用第一编程语言特定的专门化,可在可在第二编程语言中使用的编程构造中分析及变换第一编程语言的编程构造。第一编程语言特定的专门化可提供用于将第一编程语言IR高效变换为第二编程语言IR的框架。
在同样根据第一方面或根据第一方面的先前实施形式中的任一个的方法的第三可能实施形式中,变换所述图包括:将所述图的对象变换为对象的具体实施方案,所述具体实施方案基于由第二编程语言特定的中间表示支持的数据结构。
通过将所述图的对象变换为对象的具体实施方案,所述具体实施方案基于由第二编程语言特定的IR支持的数据结构,可易于基于第二编程语言特定的IR支持的数据结构产生程序代码。
在同样根据第一方面或根据第一方面的先前实施形式中的任一个的方法的第四可能实施形式中,所述图包括对应于源代码的操作的节点和对应于操作之间的数据流的边缘,其中所述边缘包括存储于所述图的节点中的符号。
当所述图由节点、边缘和/或符号表示时,可易于通过穿过所述节点和/或单独地将每个节点变换为第二编程语言的对象而执行变换所述图。
在根据第一方面的第四实施形式的方法的第五可能实施形式中,所述图包括用于从符号查找到节点的查找表。
通过查找表,能容易且高效地执行从符号查找到节点。
在同样根据第一方面或根据第一方面的先前实施形式中的任一个的方法的第六可能实施形式中,所述方法包括:使用用于处理程序图的图解释器将所述图从第一编程语言特定的中间表示变换为第二编程语言特定的中间表示。
当使用用于处理程序图的图解释器时,可直接执行呈第一编程语言的指令而无需预先将其批量编译成机器语言。因此,使用解释器能改进效率。
在根据第一方面的第六实施形式的方法的第七可能实施形式中,图解释器包括:对于所述图的抽象节点类的抽象表达式、用于处理表示第一编程语言的原语操作的从所述图的节点类导出的类实例的终结符表达式、用于处理表示第一编程语言的自定义函数的从所述图的节点类导出的类实例的非终结符表达式、用于解释终结符表达式的第一解释方法以及用于解释非终结符表达式的第二解释方法。
通过使用抽象表达式、终结符和非终结符表达式以及相应解释方法,可构成抽象编程语言的产生规则。所述图解释器因此允许将此类抽象编程语言构造变换为由第二编程语言支持的具体表示。
根据第二方面,本发明涉及一种可在用于将呈第一编程语言的源代码编译为呈第二编程语言的程序代码的处理器上操作的第一编程语言特定的专门化器,所述第一编程语言特定的专门化器用于将对应于源代码的第一编程语言特定的中间表示的图从第一编程语言特定的中间表示变换为第二编程语言特定的中间表示,使得可由处理器基于所述图的第二编程语言特定的中间表示产生程序代码。
通过使用第一编程语言特定的专门化器,能在可在第二编程语言中使用的编程构造中分析和变换第一编程语言的编程构造。第一编程语言特定的专门化器提供用于将第一编程语言IR高效变换为第二编程语言IR的框架。所述第一编程语言特定的专门化器可以是处理器上运行的软件的特定部分或处理器的特定硬件电路。第一编程语言特定的专门化器允许对于每个应用程序仅写入一次通用代码,例如高抽象层级算法。第一编程语言特定的专门化器接着实现高层级代码到特定表示的转化,从而满足执行代码的特定处理器平台或处理器架构的要求。促进代码的开发而不会损失性能。
在根据第二方面的第一编程语言特定的专门化器的第一可能实施形式中,第一编程语言包括域特定语言;并且第二编程语言包括模型特定语言。
域特定语言是使用许多通用编程构造的高抽象层级编程语言。在使用DSL时开发是高效的。模型特定语言是用于特定处理器平台的低抽象层级编程语言,特定处理器平台即特定(处理器)模型。当通过变换将DSL与MSL组合时,代码开发相当高效,因为通用DSL构造提供代码的简易开发,例如,算法和MSL构造实现代码在特定处理器平台上的高效执行。
在同样根据第二方面或根据第二方面的第一实施形式的第一编程语言特定的专门化器的第二可能实施形式中,所述第一编程语言特定的专门化器包括:程序图解释器,其用于遍历所述图的节点并为每个节点供应对应于当前操作和当前上下文的符号。
程序图解释器允许直接执行呈第一编程语言的指令而无需预先将其批量编译成机器语言。因此,程序图解释器非常高效。
在根据第二方面的第二实施形式的第一编程语言特定的专门化器的第三可能实施形式中,所述第一编程语言特定的专门化器包括:可通过程序图解释器呼叫的分级评估器,所述分级评估器用于在当前上下文中产生符号的专门化。
分级评估器允许在其给定的上下文中提供操作的专门化。通过程序图解释器呼叫分级评估器允许以上下文感知方式专门化所述图的符号。
在根据第二方面的第三实施形式的第一编程语言特定的专门化器的第四可能实施形式中,所述程序图解释器用于通过由分级评估器提供的符号的专门化而更新符号。
通过利用图的符号的专门化更新所述符号,可高效实施变换过程。程序图解释器可通过使用由分级评估器提供的更新符号直接执行呈第一编程语言的指令。
在根据第二方面的第三实施形式或根据第二方面的第四实施形式的第一编程语言特定的专门化器的第五可能实施形式中,所述专门化是基于以下专门化规则中的至少一个:调用、映射处理、过滤处理。
这些专门化规则允许通过图的符号的专门化版本直插式取代所述符号。可成功地消除域对象的冗余构造。
在同样根据第二方面或根据第二方面的先前实施形式中的任一个的第一编程语言特定的专门化器的第六可能实施形式中,所述第一编程语言特定的专门化器用于基于以下编程构造中的至少一个变换所述图:具体实施方案类、同构、视图。
具体实施方案类以第一编程语言及其方法提供初始对象的最终低级表示。同构允许以两个不同方式表示图,例如作为邻接矩阵或作为邻接列表。视图允许使用图的这两个不同表示之间的变换。因此,这三个编程构造提供用于将图从第一编程语言IR变换为第二编程语言IR的非常高效的工具。
根据第三方面,本发明涉及一种用于将呈第一编程语言的源代码编译为呈第二编程语言的程序代码的处理器,所述处理器包括:用于基于源代码产生图的图产生器,所述图对应于源代码的第一编程语言特定的中间表示;用于将图从第一编程语言特定的中间表示变换为第二编程语言特定的中间表示的第一编程语言特定的专门化器;以及用于基于图的第二编程语言特定的中间表示产生程序代码的代码产生器。
通过使用第一编程语言特定的专门化器,处理器能够分析第一编程语言的编程构造,并且在可在第二编程语言中使用的编程构造中变换所述编程构造。处理器因此可执行通用代码,例如高抽象层级算法,其对于每个应用程序仅写入一次。处理器通过使用第一编程语言特定的专门化器实现高层级代码到特定表示的转化,从而满足硬件的要求。促进代码的开发而不会损失性能。
在根据第三方面的处理器的第一可能实施形式中,所述第一编程语言特定的专门化器对应于同样根据第二方面或根据第二方面的先前实施形式中的任一个的第一编程语言特定的专门化器。
第一编程语言特定的专门化器提供用于将第一编程语言IR高效变换为第二编程语言IR的框架。第一编程语言特定的专门化器促进通用代码的开发而不会损失处理性能。
在同样根据第三方面或根据第三方面的第一实施形式的处理器的第二可能实施形式中,第一编程语言包括域特定语言并且第二编程语言包括模型特定语言。
域特定语言是使用许多通用编程构造的高抽象层级编程语言。在使用DSL时开发是高效的。模型特定语言是用于特定处理器平台的低抽象层级编程语言,特定处理器平台即特定(处理器)模型。当通过变换将DSL与MSL组合时,代码开发相当高效,因为通用DSL构造提供代码的简易开发,例如,算法和MSL构造实现代码在特定处理器平台上的高效执行。
根据第四方面,本发明涉及一种包括将程序代码存储于其上的可读存储介质的计算机程序产品,所述程序代码供处理器系统使用执行同样根据第一方面或根据第一方面的先前实施形式中的任一个的方法。
计算机程序可灵活地设计为使得易于实现要求的更新。所述计算机程序产品可在大量不同处理系统上运行。
本发明的方面提供支持分层DSL的开发的新颖系统架构。本发明的方面提供用于高性能计算的域特定优化的新颖方法。本发明的方面将基于模块和组件的软件开发技术引入到DSL构造领域。本发明的方面简化用于高性能DSL的编译程序的实施。
本发明的方面提供用于DSL实施的新系统。本发明的方面提供用于实施域特定专门化器(Domain Specific Specializer,DSS)的方法,所述DSS可被视为所公开的新系统的核心特征。基于图的IR用于表示编译程序内部的源程序。如下文所描述在图2中示例性地呈现系统架构和编译工作流。
附图说明
本发明的另外实施例将参考以下附图进行描述,其中:
图1展示说明常规DSL开发框架的框图;
图2展示说明根据实施形式的DSL开发框架和编译工作流的框图;
图3展示说明根据实施形式的域特定专门化的实例的示意图;
图4展示说明根据实施形式的实例程序的基于图的IR的示意图;
图5展示说明根据实施形式的解释器设计模式的示意图;
图6展示说明根据实施形式的呈CIC的抽象方法的实施的示意图;
图7展示说明根据实施形式的具体实施方案类的实例的示意图;
图8展示说明根据实施形式的域特定专门化器的示意图;
图9展示说明根据实施形式的域特定专门化器及其组件的示意图;
图10展示说明根据实施形式的调用规则的实例的示意图;
图11a)和b)展示根据实施形式的映射操作的示例性交换图;
图12展示说明根据实施形式的当时的状况下的示例性映射处理的示意图;
图13展示说明根据实施形式的当C∈TF时的状况下的示例性映射处理的示意图;
图14展示说明根据实施形式的示例性过滤处理的示意图;
图15展示说明根据实施形式的用于将呈第一编程语言的源代码编译为呈第二编程语言的程序代码的方法1500的示意图;以及
图16a)到j)展示说明根据实施形式的可在域特定专门化器中使用的分级评估方法的示意图:
图16a)展示根据实施形式的用于构造图数据结构的分级评估方法1800的示意图;
图16b)展示根据实施形式的工厂方法设计模式1900的示意图;
图16c)展示说明根据实施形式的工厂方法模式2000应用于阵列节点2001的示意图;
图16d)展示说明根据实施形式的阵列类的工厂方法的源代码2100的列举;
图16e)展示说明根据实施形式的代理设计模式2200的示意图;
图16f)展示说明根据实施形式的图16e)的代理设计模式应用于阵列节点2307和符号2305的示意图;
图16g)展示说明根据实施形式的图数据结构的一般化类的源代码2400的列举;
图16h)展示说明根据实施形式的分级评估方法的源代码2500的列举;
图16i)展示表示根据实施形式的用于构造图数据结构的核心方法的程序代码2600的列举;以及
图16j)展示根据实施形式的用于将源代码编译成可执行机器代码的分级评估装置2700。
具体实施方式
以下参考附图进行详细描述,所述附图形成描述的一部分,并通过图解说明的方式展示可以实践本发明的特定方面。可以理解的是,在不脱离本发明范围的情况下,可以利用其它方面,并可以做出结构上或逻辑上的改变。因此,以下详细的描述并不当作限定,本发明的范围由所附权利要求书界定。
本文中所描述的设备和方法可基于相干光信号传输和接收。应理解,结合所描述的方法作出的评论对于用于执行所述方法的对应设备或系统也可以同样适用且反之亦然。例如,如果描述特定方法步骤,对应设备可包含执行所描述的方法步骤的单元,即使此类单元未在图式中明确描述或说明。此外,应理解,除非另外具体指出,否则本文中描述的各种示例性方面的特征可彼此组合。
本文中所描述的方法和设备可实施于相干光学发射器和接收器中,尤其是使用BPSK双极化调制的收发器。所描述的设备和系统可包含如上文关于图1和2所描述的软件单元123和硬件单元125。所描述的设备和系统可包含集成电路和/或无源元件且可根据各种技术制造。举例来说,电路可以设计为逻辑集成电路、模拟集成电路、混合信号集成电路、光学电路、存储器电路和/或集成无源元件。
图2展示说明根据实施形式的包含DSL开发框架103的DSL开发系统200和编译工作流230的框图。
如图2左侧所描绘的DSL开发系统200包含相对于图1中所描绘的DSL开发系统100的以下新颖组件:使用元DSL框架201代替如上文关于图1所描述的共用编译程序基础设施111。此组件201形成用于构造高级DSL的基础。元DSL框架201的目的是将域特定对象与模型特定对象分离。元DSL框架201由多个模型特定语言(Model Specific Language,MSL)205、207、209构建,其中的每个MSL对应于特定编程模型(例如,NDP、查询等)。每个MSL 205、207、209被实施为单独编译程序组件211、213、215。域特定专门化器(Domain SpecificSpecializer,DSS)203是用于将高级DSL表示105、107、108、109转换为较低级MSL表示205、207、209的编译程序的一部分。此组件203用于将域层级对象变换为其具体实施方案,所述实施方案基于由MSL支持的现有数据结构。DSS 203可支持针对每个域对象的若干不同具体实施方案。
可通过如图2右侧的编译工作流230中所说明的以下一般步骤描述系统行为。基于图的域特定中间表示135从高级DSL中写入的源代码131产生。应用域层级优化和变换。执行域特定专门化243。域特定代码(由基于图的IR表示)被变换为模型特定IR 245。所有域层级对象均经由所选具体实施方案而变换为模型层级对象。应用模型特定优化和变换,例如,向量化。产生可执行代码137。
元DSL框架201充当用于构造高级DSL的基础。大体上,其是用于支持从呈DSL等第一编程语言的高级中间表示到呈MSL等第二编程语言的较低级中间表示的有效转换的基础设施。基于将在下文中详细描述的以下组件实施元DSL框架201:
-全局编译程序基础设施,
-基于图的IR,
-图解释器和分级评估器,
-专门化基础设施,
-用于DSL对象的抽象接口,
-类型族和类型描述符,
-同构和视图,
-具体实施方案类,以及
-编译程序的单独级:域特定专门化器。
图3展示说明根据实施形式的用于域特定专门化的方法300的实例的示意图。
在图3的实例中,认为函数335发现非定向图的所有隔离顶点。可以看出,高级DSL代码248仅通过图和节点对象以及适当的方法“numOutNbrs”操作。在此之后,作为基于图的IR的代码通过上文关于图2所描述的可对应于单元241的域特定专门化器241处理。其通过块PArray[PArray[Int]](邻接列表)353选择图对象的具体实施方案351,并将对应变换应用于代码。并不使用其它具体实施方案355、357、359。接着,获得仅通过MSL结构250操作的程序代码345并提供可执行程序339。可归因于应用程序开发者界定而进行具体实施方案的选择。
图4展示说明根据实施形式的实例程序的基于图的IR 400的示意图。
在本发明中,使用程序的基于图的中间表示(intermediate representation,IR)。图的IR节点对应于源程序的操作并且边缘对应于操作之间的数据流。图4展示简单程序的图表示400。
执行顺序通过节点之间的相依性规定且并未明确地指定。机器存储器中的基于图的IR可以是从符号到节点的查找表。表1说明对应于图4中所描绘的基于图的IR的查找表。
Sym(1)-> | Param(‘a’) |
Sym(2)-> | Param(‘b’) |
Sym(3)-> | Param(‘c’) |
Sym(4)-> | Mul(Sym(2),Sym(3)) |
Sym(5)-> | Add(Sym(1),Sym(4)) |
表1:对应于图4的基于图的IR的查找表
图数据结构中的每个对(S,N)根据以下表示符号的界定:
S-符号(唯一标识符,id)
N-从节点类导出的类实例。在此,Add、Mul是从节点抽象类导出的类。图的边缘由存储于节点401、403、405、407、409中的符号表示。
图5展示说明根据实施形式的包括客户端501、上下文503、通过方法“解释(上下文)”507的“抽象表达式”505、通过方法“解释(上下文)”511的“终结符表达式”509以及通过方法“解释(上下文)”515的“非终结符表达式”513的解释器设计模式500的示意图。
为了遍历图4中所展示的图数据结构400,可使用如“http://en.wikipedia.org/wiki/Interpreter_pattern”所描述且在图5中所展示的解释器设计模式。
典型解释器软件设计模式的行为用于通过以下方式处理程序图:
-程序图的抽象节点类被处理为“抽象表达式”;
-从节点类导出的类实例根据以下规则被处理为“终结符表达式”或“非终结符表达式”:
-表示语言(例如Java)的原语操作的程序图节点被处理为终结符,即“终结符表达式”;
-表示自定义函数的程序图节点被处理为非终结符,即“非终结符表达式”。
-自定义函数被称为“λ”;每个λ通过以下参数表征:
-参数符号(也表示为“λ绑定变量”),其在基于图的IR中并不具有界定;
-λ主体是取决于函数参数符号的基于图的IR定义的序列;
-所得符号表示函数的执行的结果。
终结节点N的方法Interpret()呼叫下文关于图8和9描述的分级评估器(StagedEvaluator,SE)。提供节点N的符号S作为(Operation,Context)对的第一变量参数。其还使用当前上下文作为所述对的第二分量。上下文是输入符号与所得符号之间的映射。通过分级评估器返回对(Operation',Context')。当前上下文被用作用于下一定义的当前上下文的Context'替换。所得图通过分级评估器更新。
λ节点L的方法“Interpret()”由以下项界定:
1)其产生新的λ节点L';
2)对于λL的每个参数符号,其将新参数符号添加到L'并且在当前上下文中记住此对应;
3)其通过构建取决于参数符号的一系列定义而计算λL的主体。相对于由图的边缘表示的相依性对来自λ的主体的定义拓扑排序。这意味着在其取决于的所有定义之后解释每个定义;
4)对于λ的主体中的每个定义,图解释器呼叫“Interpret()”方法并且更新当前上下文。通过分级评估器更新所得图;
5)在进行λ主体的遍历之后,图解释器从上下文中检索L'的所得符号。所述所得符号是对应于λL的所得符号的来自所得图的符号;
6)在计算L'的所有分量(即参数、主体和所得符号)之后,将L'添加到所得图并且将L->L'对添加到上下文。
分级评估器是共用编译程序组件。其由图解释器呼叫以处理原始图的单个图节点。通过使用如下文关于图16a)到16j)所描述的分级评估方法在规则集合的情况下实施分级评估器以将程序P的原始图变换为所得版本P'。
在给定来自原始图的符号和当前上下文(sym,ctx)的情况下,分级评估器应用来自给定集合的规则并产生新对(sym',ctx'),其中sym'是来自所得图的对应于符号sym的符号。
认为每个高级DSL对象具有由可供用于此对象的方法集合组成的抽象接口。举例来说,类型图的与其具体表示无关的每个对象应具有方法节点,其返回图顶点的集合。出于此目的,系统含有对于所有域层级对象(或DSL对象)的接口描述。表2以类Java风格说明此示例性描述。
从某一抽象DSL对象继承的如下文所描述的每个具体实施方案类应含有其母接口的所有方法的具体实施方案。
表2:对域层级对象的抽象接口描述
每个具体特定语言(DSL或MSL)可表征为指定类型族(Type Family,TF)。这是通过语言操作“使用”的类型集合。对于由语言支持的所有操作,所有其变量参数的及结果的类型均属于对应TF。可以相长方式界定每个特定TF。此方式涉及基本类型集合及若干构造函数以及基于现有类型构造新类型的方式。表3中展示TF定义的实例。
表3:类型族(Type Family,TF)定义实例
每个值可具有一类型,并且此类型可以由特殊对象表示,特殊对象即所谓的类型描述符。针对对任何特定非基本类型的类型描述符由其分量的适当类型描述符构造。每个特定值具有作为单独栏位的适当类型描述符。当使用名称类型时,如果对象“a”具有类型T,那么所述“a”类型指代对类型T的类型描述符。这允许使用类型描述符通过类型和通过值操作。举例来说,类型描述符可在模式匹配时使用以便确定特定类型是否属于所选类型族或值是否属于特定类型。
在以下同构(Iso)和视图中,界定概念或构造。如果考虑两个类型A和B,那么Iso[A,B]暗示从(A->B)及到(B->A)的两个函数的定义。认为这些函数在A与B之间实施相互相反的函数。第二概念或构造是视图。两个类型A和B被视为某一函子Fct。在此状况下,View[A,B,Fct]是具有以下性质的类:
-View[A,B,Fct]是Fct[B]的子类;
-View[A,B,Fct]具有Fct[A]和iso:Iso[A,B]作为成员;
-View[A,B,Fct]可由(in:Fct[A]、iso:Iso[A,B])构造,即可实施适当的构造函数View(in,iso);
-View[A,B,Fct]可解构回至(in:Fct[A]、iso:Iso[A,B])。
为了阐明视图概念,在Fct=PArray(即并行阵列)时考虑特殊状况。在此状况下,可界定类“View[A,B,PArray](in:PArray[A]、iso:Iso[A,B])”,其是PArray[B]的子类并且可用作其实例。这意味着仅在最初A与B之间存在同构时构建从PArray[A]到PArray[B]的变换。
图6展示说明根据实施形式的呈具体实施方案类(Concrete ImplementationClass,CIC)的抽象方法的实施的示意图。
上文关于图2所描述的元DSL框架201的主要目的是将DSL对象自动地转换为MSL层级对象。此外,可以MSL以若干方式表示每个域特定对象。
出于此目的,对于任何域特定类型T∈TF,可界定被称为具体实施方案类(CIC)的类的集合(即类型)T1、...、Tn,使得对于每个Tk,保持以下:
1.Tk是T的子类,即可用作T的实例;
2.Tk与某一唯一类型Datak∈ModelTF相关联,其中ModelTF是MSL类型族。Datak被称作用于特定Tk的数据类型;
3.Tk可由类型Datak的变量构造,即可实施适当的构造函数Tk(Datak);
4.Tk与Datak:Iso[Datak,Tk]之间存在唯一同构。此同构可以是在不产生类的实例的情况下可从Tk获得的;
5.Tk使用MSL原语实施T的抽象接口的所有方法;
6.如果T的特定抽象方法m具有返回类型Fct[B],其中Fct是某一函子并且B∈TF,那么对于m的实施,其遵循:
a.所述方法的返回值是类型Fct[B]的某一表达;
b.或通过所述方法返回某一视图。通过以下方式构造所述视图:1)选择B的具体实施方案类(例如,表示为Bj)连同Iso以及对应的数据类型Dj;以及2)此方法m的返回值可以是View[Dj,B,Fct](res,Bj.Iso)的实例,其中res:Fct[Dj];
图6中展示抽象方法实施方案的实例。在此,在类图601中假设方法节点,预期其返回所有图顶点的阵列604:PArray[Vertex]。当实施呈具体类AdjListGraph 603的方法节点时,针对顶点类型选择具有对应的数据类型“Int”的CIC“VertexAsInt”612。因此,使用B=Vertex、Bj=VertexAsInt、Dj=Int和Fct=PArray构造返回值610。因此,方法节点的具体实施方案可返回如图6中所展示的适当视图。
每个具体实施方案类因此提供初始DSL对象和方法的最终低级表示。在如下文所示的表(表4)中,此便于表示域特定类及其CIC的集合。
表4:域特定类和CIC的实例
图7展示说明根据实施形式的具体实施方案类700的实例的示意图。
所述实例针对类型图701使用两个具体实施方案类。以两个不同方式表示图701,即表示为邻接矩阵或邻接列表。出于此目的,界定两个CIC:AdjMatrixGraph 703及AdjListGraph 705。CIC 703、705中的每一个均经由同构iso1 717或iso2 719与对应的数据类型707、709相关联。
图8展示说明根据实施形式的域特定专门化器241的示意图。
DSS 241将高级DSL源代码801看作输入且基于配置803产生专门化的较低层级MSL代码805作为输出,所述DSS 241可对应于上文关于图2所描述的DSS 241。因此,使用来自图7的术语,可陈述以下:
A1、…、AN、B∈TF,其中TF是DSL类型族;以及
A1'、…、AN'、B'∈ModelTF,其中ModelTF是MSL类型族。
域特定专门化器241可实施为编译程序的单独级。DSS 241的详细行为可描述如下:
-对于每个域层级类型,针对进一步使用选择其具体实施方案类中的一个;
-从某一其它表示(例如,文本文件)或从前一编译阶段产生基于图的中间表示;
-将程序图供应到DSS的图解释器(Graph Interpreter,GI)组件。GI产生空的上下文并开始关于节点之间的相依性的图遍历;
-对于每个节点,GI呼叫分级评估器(SE)并且供应对应于当前操作和上下文的符号;
-SE使用专门化和优化规则在当前上下文中产生当前符号的专门化;
-在SE针对给定符号产生专门化之后,其返回到GI。GI接着通过新对(Symbol->Symbol')更新上下文并继续图遍历;
-在遍历结束后,输入程序F的专门化版本F'的所得图完成。
图9展示说明根据实施形式的域特定专门化器900及其组件的示意图。
在图9中以简单实例展示DSS 900的组件以及信息流。这些组件是分级评估器(SE)905和(程序)图解释器(GI)911。所述过程对应于上文关于图8所描述的过程。在此,简单程序检查两个特定顶点在所述图中是否被链接。初始DSL表示使用对象图的抽象方法“hasEdge”901,其又具有抽象类型“Graph”。在进行专门化之后,对象图得到具体类型(PArray[PArray[Int]]),并且抽象方法“hasEdge”被其具体实施方案替换。DSS 900中的分级评估器905通过使用专门化规则907处理程序图的每个节点913。当处理每个特定符号时,SE 905使用指定规则集合以便将所述规则集合用于符号的重写。在其输入与指定模式匹配的状况下应用每个特定规则。
图10展示说明根据实施形式的调用规则1000的实例的示意图。
根据表5界定调用规则或规则1。
表5:调用规则描述
将规则1应用于IR图的MethodCall节点。对应于呼叫源程序中的某一方法的这些节点取决于三个输入:
-接收器:拥有被呼叫方法的源程序的对象;
-方法:被呼叫方法;以及
-变量参数:传递到被呼叫方法的变量参数。
规则1在其接收器(obj)在程序图中具有直接定义(某一节点)的条件下起作用。在此状况下,仅仅执行方法“调用”,其通过分级评估器自动地变换为对应的子图。在此通过方法“调用”表示的调用机制用于将如下文关于图16a)到16j)所描述的分级评估方法应用为用以实施所得图的构造的可能方式之一。图10表明简单调用的实例。基本上,简单调用可被当作线内取代并且进一步被当作分级评估。图10展示通过此技术被成功地消除的域对象“AdjMatrixGraph”1006的冗余构造。
执行以下操作:
对于方法invoke()的输入:
s0=adjMatrix:Parray[Boolean],1002;
s1=size:Int,1004;
s2=AdjMatrixGraph(s0,s1),1006;
s=s2.complement(),1008;
对于方法调用1024:
s3=adjMatrix:Parray[Boolean],1010;
s4=size:Int,1012;
s5=AdjMatrixGraph(s3,s4),1014;
方法complement()的实施,1026:
s6=s5.adjMatrix,1016;
s7=s5.size,1018;
s8=VectorInvert(s6),1020;
s9=AdjMatrixGraph(s7,8),1022;
对于方法invoke()的输出:
s10=adjMatrix:Parray[Boolean],1028;
s11=size:Int,1030;
s12=VectorInvert(s10),1032;
s'=AdjMatrixGraph(s11,12),1034。
图11a)和b)展示根据实施形式的映射操作的示例性交换图1100a、1100b。
根据下文界定映射处理规则或规则2。规则2在处理映射节点时起作用,映射节点即对应于由某一函子“Fct”指定的映射操作的节点。在此,映射操作是指满足图11的交换图的任何操作。
对于第一交换图1100a,其保持:
对Fct[A]1102应用View[A,B,Fct](iso)1108,产生Fct[B]1104;
对Fct[A]1102应用map(f o iso.to)1110,产生Fct[C]1106;
对Fct[B]1104应用map(f)1112,产生Fct[C]1106。
对于第二交换图1100b,其保持:
对Fct[A]1122应用View[A,B,Fct](iso1)1130,产生Fct[B]1124;
对Fct[A]1122应用map(iso2.from o f o iso1.to)1132,产生Fct[C]1126;
对Fct[B]1124应用map(f)1136,产生Fct[D]1128;
对Fct[C]1126应用View[A,B,Fct](iso2)1134,产生Fct[D]1128。
规则2的模式假设映射的输入中的一个是View[A,B,Fct]操作,A∈ModelTF,B∈TF,且另一个是将B看作变量参数的自定义函数。表6描述映射处理规则。
表6:映射处理规则描述
图12表明规则2在时的状况下起作用,所述状况对应于图11的图1100a。在此实例中,通过计算每个顶点的外边缘的数目的函数来映射图顶点的阵列(即A=Int,B=VertexAsInt,C=Int,Fct=PArray)。映射的结果是整数值阵列-PArray[Int]。
执行以下操作:
对于映射处理的输入:
in:Parray[Int],1202;
s2:Vertex,1204;
v=View[Int,VertexAsInt,PArray](in),1206;
s3=s2.numOutEdges(),1208;
s4=s2->s3,1210;
s=v.map(s4),1212;以及
对于映射处理的输出:
s5:Parray[Int];1214;
s7:Int,1216;
s8=VertexAsInt(s7),1218;
s9=s8.numOutEdges(),1220;
s10=s7->s9,1222;
s'=s5.map(s10),1224。
图13展示说明根据实施形式的在C∈TF时的状况下的示例性映射处理1300的示意图。
图13表明规则2在C∈TF时的状况下起作用,所述状况对应于图11的图2 1100b。在此实例中,通过产生边缘起始顶点的函数映射图边缘阵列(即A=(Int,Int),B=EdgeAsPair,C=VertexAsInt,Fct=PArray)。映射结果为PArray[VertexAsInt]。
在上一状况下,在应用规则之后,结果为视图操作。进行此操作以免丧失与程序图的其余部分的类型相容性。
执行以下操作:
对于映射处理的输入:
in:Parray[(Int,Int)],1302;
s2:Edge,1304;
v=View[(Int,Int),EdgeAsPair,PArray](in),1306;
s3=s2.start(),1308;
s4=s2->s3,1310;
s=v.map(s4),1312;以及
对于映射处理的输出:
s5:Parray[(Int,Int)],1314;
s7:(Int,Int),1316;
s8=EdgeAsPair(s7),1318;
s9=s8.start(),1320;
s10=s9.id,1322;
s11=s7->s10,1324;
s12=s5.map(s11),1326;
s'=View[Int,VertexAsInt,PArray](s12),1328。
图14展示说明根据实施形式的示例性过滤处理1400的示意图。
过滤处理规则或规则3在处理过滤节点时起作用,所述节点即通过仅选择满足某一条件的元素从初始集合构造新集合的节点。在此状况下可由布尔型函数界定所述条件。规则3的模式假设过滤的输入中的一个是View[A,B,Fct]操作且另一个是将B看作变量参数的自定义布尔型函数。此外,A∈ModelTF,B∈TF。表7描述过滤处理规则。
表7:过滤处理规则描述
图14中描绘规则3的实例。在此实例中,隔离顶点选自顶点阵列。出于此目的,使用过滤操作,其中在特定顶点被隔离的情况下过滤函数返回真。
同样,规则3结果是视图操作。进行此操作以免丧失与程序图的其余部分的类型相容性。
执行以下操作:
对于过滤处理的输入:
in:Parray[Int],1402;
s2:Vertex,1404;
v=View[Int,VertexAsInt,PArray](in),1406;
s3=s2.isIsolated(),1408;
s4=s2->s3,1410;
s=v.filter(s4),1412;
对于过滤处理的输出:
s5:Parray[Int],1414;
s7:Int,1416;
s8=VertexAsInt(s7),1418;
s9=s8.isIsolated(),1420;
s10=s7->s9,1422;
s6=s5.filter(s10),1424;
s'=View[Int,VertexAsInt,PArray](s6),1426。
这三个基本规则实际上对于大多数DSL程序是足够的。在遍历整个IR图之后,其将既不含有DSL层级操作也不含有视图操作。如果简而言之,那么在以反向后序遍历程序图时,在每个步骤,这些操作朝向图停止节点《向下移动》。即:
-每个DSL对象构造函数通过规则1被消除或《向下移动》;
-可由DSL方法调用呈现的每个视图操作通过规则2或规则3被消除或《向下移动》。
实际上,在任何特定状况下,可需要其它专门化规则。举例来说,如果MSL模型支持嵌套数据并行性,那么可需要规则来处理某一嵌套阵列操作。尽管并未针对每个特定状况描述规则,但可易于使用如本发明中所使用的相同想法构造这些规则。即,每个规则应消除或《向下移动》非所要节点直到其将在程序图的末端处被取消为止。
图15展示说明根据实施形式的用于将呈第一编程语言的源代码编译为呈第二编程语言的程序代码的方法1500的示意图。
方法1500可包含1501基于源代码产生图,所述图对应于源代码的第一编程语言特定的中间表示。方法1500可包含1502将所述图从第一编程语言特定的中间表示变换为第二编程语言特定的中间表示。方法1500可包含1503基于所述图的第二编程语言特定的中间表示产生程序代码。
在方法1500的实施形式中,第一编程语言包括域特定语言且第二编程语言包括模型特定语言。在方法1500的实施形式中,1502变换所述图是基于第一编程语言特定的专门化。在方法1500的实施形式中,1502变换所述图包括将所述图的对象变换为所述对象的具体实施方案,所述具体实施方案基于第二编程语言特定的中间表示所支持的数据结构。在方法1500的实施形式中,所述图包括对应于源代码的操作的节点和对应于操作之间的数据流的边缘,其中所述边缘包括存储于所述图的节点中的符号。在方法1500的实施形式中,所述图包括用于从符号查找到节点的查找表。在方法1500的实施形式中,方法1500包括使用用于处理程序图的图解释器将所述图从第一编程语言特定的中间表示变换为第二编程语言特定的中间表示。在方法1500的实施形式中,所述图解释器包括:对于所述图的抽象节点类的抽象表达式、用于处理表示第一编程语言的原语操作的从所述图的节点类导出的类实例的终结符表达式、用于处理表示第一编程语言的用户自定义函数的从所述图的节点类导出的类实例的非终结符表达式、用于解释终结符表达式的第一解释方法以及用于解释非终结符表达式的第二解释方法。
方法1500可应用于第一编程语言特定的专门化器中,例如,如上文关于图8和9所描述的DSS。
此类第一编程语言特定的专门化器241、900可在用于将呈第一编程语言的源代码编译为呈第二编程语言的程序代码的处理器上操作。所述第一编程语言特定的专门化器用于将对应于源代码的第一编程语言特定的中间表示的图从第一编程语言特定的中间表示变换为第二编程语言特定的中间表示,使得可由处理器基于所述图的第二编程语言特定的中间表示产生程序代码。
在第一编程语言特定的专门化器241、900的实施形式中,第一编程语言包括域特定语言且第二编程语言包括模型特定语言。在实施形式中,第一编程语言特定的专门化器241、900包括用于遍历所述图的节点并为每个节点供应对应于当前操作和当前上下文的符号的程序图解释器。在实施形式中,第一编程语言特定的专门化器241、900包括可由程序图解释器呼叫的分级评估器。所述分级评估器用于在当前上下文中产生所述符号的专门化。在第一编程语言特定的专门化器241、900的实施形式中,程序图解释器用于通过由分级评估器提供的符号的专门化而更新所述符号。在第一编程语言特定的专门化器241、900的实施形式中,所述专门化是基于以下专门化规则中的至少一个:如上文关于图11到14所描述的调用、映射处理和过滤处理。在实施形式中,第一编程语言特定的专门化器241、900用于基于以下编程构造中的至少一个变换所述图:如上文关于图11到14所描述的具体实施方案类、同构和视图。
图16a)到j)展示说明可在如上文关于图2、8和9所描述的域特定专门化器中使用的分级评估方法的示意图,尤其在如上文关于图9所描述的分级评估器905中使用的分级评估方法的示意图。
图16a)展示根据实施形式的用于构造图数据结构的分级评估方法1800的示意图。方法1800可用于针对编译程序将图数据结构构造为源代码的中间表示,所述编译程序例如是如关于图2所描述的编译程序233。所述编译程序用于将源代码编译成在计算机系统的处理器上运行的可执行机器代码。通过从图数据结构的基本节点类形成层级生长的类对象以面向对象的编程语言表示源代码的程序操作。方法1800包括1801基于在图数据结构的节点中实施的工厂方法设计模式通过呼叫与图数据结构的现有节点相关联的工厂方法来产生图数据结构的新节点,其中通过符号识别图数据结构的节点。方法1800包括1803根据代理设计模式将符号用作图数据结构的节点的代理。
在方法1800的实施形式中,将图数据结构的每个节点实施为类的对象。在方法1800的实施形式中,将符号用作对图数据结构的对应节点的键入代理。在方法1800的实施形式中,工厂方法使用符号实例,因此在呼叫符号的方法时,执行节点的对应方法。在方法1800的实施形式中,取决于图数据结构的节点的类型,节点的每个类均包括工厂方法。在方法1800的实施形式中,工厂方法用于产生新节点以及到现有节点的连接。在方法1800的实施形式中,每个工厂方法包括与图数据结构的节点的类相关联的子例程,所述工厂方法确定在程序运行时间待由相关联类实例展现的行为。在方法1800的实施形式中,代理包括充当到主体的接口的类。在方法1800的实施形式中,代理设计模式用于为代理提供工厂方法以用于将呼叫代理的工厂方法的客户端的呼叫委托给被呼叫主体。在方法1800的实施形式中,工厂方法设计模式用于设计接口以用于形成对象。在方法1800的实施形式中,实施接口的面向对象的编程语言的类决定实例化哪一类。在方法1800的实施形式中,图数据结构的节点是以下中的一个:图数据结构的部分、由整数索引表示的外部实体、由参考物表示的外部实体。在方法1800的实施形式中,面向对象的编程语言包括以下特征:虚拟方法、抽象方法以及参数化的类型。
方法1800解决了通过现有技术的分析识别的问题并消除了基于图的IR的限制。方法1800以面向对象的语言实施分级评估技术并可应用于通用程序。
计算所得值的程序的执行仅仅是其源代码的可能解释中的一个且通常由源语言的操作语义界定。相同源代码还可以不同方式使用,即使用不同语义。
可执行程序以产生中间表示(IR),而非执行程序进行计算。此执行被称为“分级评估”,即被分离成两个阶段的评估:首先是IR产生,其次是IR执行。评估被称为“分级”以反映相同程序可具有源语言的操作语义以及分级评估语义两者的事实。在分级评估中,执行程序的结果是IR,而非所得数据值。IR是跟踪在程序中使用的所有操作连同其顺序的数据结构。在图2中的实例中,所述程序可使用求和、长度计算以及除法运算。方法1800使用基于图的IR,因此分级评估的结果是所述程序的图,其也被称为程序图或简单称为图。所得图是源代码的内部内存表示。此分级评估技术可以面向对象的语言实施。
在一个实施方案中,通过以下步骤开发方法1800:在步骤1中,改变图节点在图构建过程中的作用。除表示操作以外,每个节点还可用于产生新节点。由于每个节点被实施为类的对象,因此将方法添加到节点的类的方式使得图被延伸,即通过呼叫或调用那些方法而构造。下文参考图16d)描述此过程。在面向对象的术语中,通过实施所谓的“工厂方法”设计模式使得每个图节点起到其它节点的“工厂”的作用。在步骤2中,将图的接口、节点、Sym(符号)类一般化且实施“分级评估”技术。可通过根据本发明的方法分级和实施“平均”实例程序的一般化版本。图16h)中展示分级版本。下文进一步参照图16h)描述“分级评估”的实施。其是基于下文关于图16d)及16e)所描述的众所周知的代理设计模式。
图9中所描绘的分级评估器905可实施方法1800。
图16b)展示根据实施形式的工厂方法设计模式1900的示意图。工厂方法设计模式为如上文关于图16a)所描述的工厂方法设计模式的实施方案。
图16b)中所展示的“工厂方法”设计模式1900解决了形成节点但不指定将产生的节点的确切类的问题。包括函数“factoryMethod():Product”的对象“ConcreteCreator”1903将信息提供到包括函数“factoryMethod():Product”的对象“Creator”1901并提供到对象“Product”1905。通过所述工厂方法设计模式1900,将图构建代码一般化。
图16c)展示说明根据实施形式的工厂方法模式2000应用于阵列节点2001的示意图。阵列节点2001可对应于如上文关于图16a)所描述的图数据结构的节点。
将工厂方法模式2000应用于图的节点2001。工厂方法模式2000包括对象“FloatArray”2007、“Array<Float>”2005以及FloatArrayLength 2003。包括函数“length():Node”的对象“FloatArray”2007将信息提供到包括函数“Length():Node”的对象“Array<Float>”2005并提供到对象“FloatArrayLength”2003。
工厂方法模式2000的概念是为了延伸现有技术IR并允许图节点起到额外“工厂”的作用。取决于节点的类型,节点的每个类(所述类从节点类导出)可含有一个或多个工厂方法。这些工厂方法在被呼叫时产生新图节点以及到经由变量参数明确或隐含地提供的现有节点的连接。图16c)中描绘在应用于节点类之后的工厂方法模式2000。
图16d)展示说明根据实施形式的阵列类2101的工厂方法2103的源代码2100的列举。所述工厂方法是如上文关于图16a)所描述的工厂方法的实施方案。
如图16d)中所展示的类阵列2101的方法是阵列方法。在类FloatArray 2101中,可以看出(参见方法长度)所述方法可如何产生图的新节点以及因此其如何可用作工厂方法。工厂方法“length()”2103通过返回将符号参数“nodeSymbol”提供到新节点的函数“FloatArrayLength(nodeSymbol)”2105而产生新节点。
针对某一类型T给定类型Array<T>2107的图节点,其中并不已知确切类型,并且执行语句len=arr.length()。由于作为其部分的图数据结构和节点被实施为类对象,所以此语句是方法呼叫,并且其被执行为虚拟方法呼叫。因此,被呼叫的方法长度的确切实施方案取决于变量“arr”所参考的阵列对象的确切类。如果变量“arr”的确切类是“FloatArray”2101,那么呼叫其方法长度2103。所述执行的结果是对应于类型“FloatArrayLength”的新近产生的图节点的符号“nodeSymbol”。应注意,在呼叫“FloatArray”类2101的实例的方法长度2103时,域“g”已经初始化到属主图,因此新近产生节点将属于与此“工厂节点”相同的图“g”。
图16e)展示说明根据实施形式的代理设计模式2200的示意图。代理设计模式2200是如上文关于图16a)所描述的代理设计模式的实施方案。
代理设计模式2200的关键想法是将符号(Sym)对象当作对应节点对象的代理对象。
代理2205是充当到主体“RealSubject”2207的接口的类。客户端2201不必直接访问主体2207。实际上,客户端2201呼叫代理2207的方法,所述代理将所述呼叫委托给主体“RealSubject”2207。
图16f)展示说明根据实施形式的图16e)的代理设计模式2200应用于阵列节点2307和符号2305的示意图。
代理“ArraySym<T>”2305充当到主体“ArrayNode<T>”2307的接口。客户端2301不必直接访问主体“ArrayNode<T>”2307。实际上,客户端2301呼叫代理“ArraySym<T>”2305的方法,所述代理将所述呼叫委托给主体“ArrayNode<T>”2307。
图16g)展示说明根据实施形式的图数据结构的一般化类的源代码2400的列举。所述图数据结构是如上文关于图16a)所描述的图数据结构的实施方案。
通过引入类型参数并使得类通用而一般化图数据结构的接口和类。
对于实施某一工厂接口的节点的每个类,界定实施相同接口的符号的类。这可从图16f)看出,其中类“ArrayNode”2401实施工厂接口“Array”2403,并且类“ArraySym”2405实施相同工厂接口“Array”2403。
通过使用所述设计,作为类“Sym<T>”2407的对象的符号被用作对应节点的键入代理。所述设计允许使用符号的实例呼叫节点的如上文关于图16b)和16c)所描述的工厂方法,使得在例如通过使用下文描述的图16h)的“arr.length()”来呼叫符号的方法时,接着执行所述节点的对应方法。
应注意,不指定用以实施代理模式的具体机制。任何实施方案均相关并且均可使用。
图16h)展示说明根据实施形式的分级评估方法的源代码2500的列举。所述分级评估方法是如上文关于图16a)所描述的用于构造图的方法1800的实施方案。
通过经由将“分级评估”方法应用于图构造来一般化来自明确图构造的图构造代码而获得源代码2500的列举。图16h)展示将“Array”类用作实例的实施方案,但所述方法可应用于任何类。
如下文中所描述执行图16h)中所展示的代码。当在第1行中呼叫函数平均时,参数“arr”含有类型“ArraySym<T>”的符号,其是对于某一类型“T”的类型“ArrayNode<T>”的节点的代理。应注意,“T”是类型参数,因此所述函数是通用的。
在第2行中,调用类“ArraySym<T>”的方法“sum()”。将此调用委托给对应阵列节点。举例来说,如果T=Float,即类型“T”属于类型浮点,那么执行委托到类“FloatArray”的方法“sum()”,其产生所述图的新节点并返回其符号。此符号作为代理方法呼叫返回并存储于变量“sum”中。
在第3行中,仅如第2行中所描述执行语句而非方法“sum()”,呼叫方法“length()”并将结果存储于变量“len”中。
在第4行中,执行除法运算。由于这是原始程序的分级版本,因此原始运算‘/’被特殊对象的方法调用替换。在此,此对象由变量“div”表示。应注意,此对象具有参数化的类型。如果类型“T”属于类型“Float”,那么在此被呼叫的类“DivOp<T>”的方法的应用产生类型“FloatDiv”的图的新节点。所述方法使用符号“sum”和“len”以将此新节点与所述图连接。如上文所描述,“FloatDiv”是以基于图的IR表示源程序的除法(‘/’)运算的类。
当在第5行中完成方法平均时,结果是通过方法“apply”返回的符号。在此,通过新节点延伸所述图以作为执行平均函数以及所有其语句两者的副作用。
图16i)展示表示根据实施形式的用于构造图数据结构的核心方法的程序代码2600的列举。所述图数据结构是如上文关于图16a)所描述的图数据结构的实施方案。
图或图数据结构“Graph”2601包括用于存储图2601的所有节点的查找表“Hashtable”2603。图2601包括用于产生所述节点的代理符号的代理符号产生符“createProxySym”2605。这些方法的实施方案可使用实施代理设计模式的任何现有方法,即,还可使用此描述中并未指定的其它方法。所述图2601包括用于在图2601中发现节点的发现节点运算符“findNode”2607。所述图2601包括用于将节点添加到此图2601的添加运算符“addNode”2609。所述图2601包括用于在图2601中发现节点的符号的发现符号运算符“toSymbol”2611。所述发现符号运算符“toSymbol”2611当其在图2601中时发现所述节点的符号,或其将所述节点添加到图2601。所述图2601进一步包括用于通过其符号查找节点的查找运算符“getNode”2613。
图9中所描绘的分级评估器905可实施如上文关于图16a)到16i)所描述的分级评估技术。
图16j)展示根据实施形式的用于将源代码2702编译成可执行机器代码的分级评估装置2700。机器代码用于在计算机系统的处理器上运行。装置2700包括用于接收源代码2702及提供源代码的中间表示的构造构件2701。
构造构件2701用于将图数据结构构造为源代码2702的中间表示。通过从图数据结构的基本节点类形成层级生长的类的对象以面向对象的编程语言表示源代码2702的程序操作。构造构件2701包括产生构件2703和代理构件2705。
产生构件2703用于基于在图数据结构的节点中实施的工厂方法设计模式通过呼叫与图数据结构的现有节点相关联的工厂方法而产生图数据结构的新节点。通过符号识别图数据结构的节点。代理构件2705用于根据代理设计模式将符号用作图数据结构的节点的代理。
在实施形式中,装置2700进一步包括用于优化中间表示2704的优化构件。在实施形式中,装置2700进一步包括用于产生可执行机器代码的产生构件。
构造构件2701可用于中间表示的改进构造。优化构件可用于优化中间表示。产生构件可用于产生可执行机器代码。在实施方案中,在如上文关于图2所描述的编译程序中,尤其在如上文关于图8和9所描述的域特定专门化器中应用装置2700。
装置2700可用于实施如上文关于图16a)所描述的方法1800。装置2700可以是如上文关于图2、8和9所描述的域特定专门化器的部分。图9中所描绘的分级评估器905可包含装置2700。
本文中所描述的方法、系统和设备可实施为数字信号处理器(Digital SignalProcessor,DSP)中、微控制器中或任何其它侧处理器中的软件,或可实施为数字信号处理器(DSP)的专用集成电路(application specific integrated circuit,ASIC)内的硬件电路。
本发明可在数字电子电路中或在计算机硬件、固件、软件中或在其组合中实施,例如在常规光收发器设备的可用硬件中或在专用于处理本文中所描述的方法的新硬件中实施。
本发明也支持包含计算机可执行代码或计算机可执行指令的计算机程序产品,所述计算机可执行代码或计算机可执行指令在执行时使得至少一个计算机执行本文中所描述的执行和计算步骤,尤其如上文关于图15所描述的方法1500和上文关于图2到14所描述的技术。此类计算机程序产品可包含上面存储有程序代码以供计算机使用的可读存储介质,所述程序代码可执行如上文关于图15所描述的方法1500。
尽管本发明的特定特征或方面可能已经仅参照若干实施方案中的一种进行公开,但此类特征或方面可以和其它实施方案中的一个或多个其它特征或方面组合,只要对于任何给定或特定的应用可能有需要或有利。此外,在一定程度上,术语“包含”、“有”、“具有”或这些词的其它变形在详细的说明书或权利要求书中使用,这类术语和术语“包括”是类似的,都是表示包含的含义。并且,术语“示例性地”,“例如”仅表示为实例,而不是最好或最佳的。
尽管本文中已说明和描述特定方面,但所属领域的一般技术人员应了解,在不脱离本发明的范围的情况下多种替代和/或等效实施方案可取代所展示和描述的特定方面。该申请案旨在涵盖本文中论述的特定方面的任何调适或变化形式。
尽管以上权利要求书中的元件是利用对应的标签按照特定序列列举的,除非对权利要求的列举另外暗示用于实施一些或所有那些元件的特定序列,否则那些元件不必限于以所述特定序列来实施。
通过以上教示,对于所属领域的技术人员来说,许多替代、修改和变化是显而易见的。当然,所属领域的技术人员容易认识到,除本文中所述的应用之外,还存在本发明的众多其它应用。尽管已参考一个或多个特定实施例描述了本发明,但所属领域的技术人员将认识到,在不偏离本发明的范围的情况下,仍可对本发明作出许多改变。因此,应理解,只要是在所附权利要求书及其等效物的范围内,就可以用不同于本文中具体描述的方式来实践本发明。
Claims (15)
1.一种用于将呈第一编程语言的源代码编译为呈第二编程语言的程序代码的方法(1500),其特征在于,所述方法(1500)包括:
(1501)基于所述源代码产生图,所述图对应于所述源代码的第一编程语言特定的中间表示;
(1502)将所述图从所述第一编程语言特定的中间表示变换为第二编程语言特定的中间表示;以及
(1503)基于所述图的所述第二编程语言特定的中间表示产生所述程序代码。
2.根据权利要求1所述的方法(1500),
其特征在于,所述第一编程语言包括域特定语言(248);并且
其中所述第二编程语言包括模型特定语言(250)。
3.根据权利要求1或2所述的方法(1500),其特征在于,(1502)变换所述图是基于第一编程语言特定的专门化(203)。
4.根据前述权利要求中任一权利要求所述的方法(1500),其特征在于,(1502)变换所述图包括:
将所述图的对象变换为所述对象的具体实施方案,所述具体实施方案基于所述第二编程语言特定的中间表示所支持的数据结构。
5.根据前述权利要求中任一权利要求所述的方法(1500),
其特征在于,所述图(400)包括对应于所述源代码的操作的节点(401、403、405、407、409)和对应于所述操作之间的数据流的边缘,
其中所述边缘包括存储于所述图(400)的所述节点(401、403、405、407、409)中的符号(a、b、c、*、+)。
6.根据权利要求5所述的方法(1500),
其特征在于,所述图(400)包括用于从所述符号(a、b、c、*、+)查找到所述节点(401、403、405、407、409)的查找表。
7.根据前述权利要求中任一权利要求所述的方法(1500),其特征在于,包括:
使用用于处理程序图的图解释器(911)将所述图从所述第一编程语言特定的中间表示(901)变换为所述第二编程语言特定的中间表示(915)。
8.根据权利要求7所述的方法(1500),其特征在于,所述图解释器(911)包括:
对于所述图的抽象节点类的抽象表达式(505),
用于处理表示所述第一编程语言的原语操作的从所述图的所述节点类导出的类实例的终结符表达式(509),
用于处理表示所述第一编程语言的自定义函数的从所述图的所述节点类导出的类实例的非终结符表达式(513),
用于解释所述终结符表达式(509)的第一解释方法(511),以及
用于解释所述非终结符表达式(513)的第二解释方法(515)。
9.一种可在用于将呈第一编程语言的源代码(131)编译为呈第二编程语言的程序代码(139)的处理器上操作的第一编程语言特定的专门化器(241、900),其特征在于,所述第一编程语言特定的专门化器(241、900)用于将对应于所述源代码的第一编程语言特定的中间表示的图(400)从所述第一编程语言特定的中间表示(135)变换为第二编程语言特定的中间表示(245),使得可由所述处理器基于所述图(400)的所述第二编程语言特定的中间表示(245)产生所述程序代码(139)。
10.根据权利要求9所述的第一编程语言特定的专门化器(241、900),
其特征在于,所述第一编程语言包括域特定语言(248);并且
其中所述第二编程语言包括模型特定语言(250)。
11.根据权利要求9或10所述的第一编程语言特定的专门化器(241、900),其特征在于,包括:
程序图解释器(911),其用于遍历所述图(400)的节点并为每个节点供应对应于当前操作和当前上下文的符号。
12.根据权利要求11所述的第一编程语言特定的专门化器(241、900),其特征在于,包括:
可由所述程序图解释器(911)呼叫的分级评估器(905),所述分级评估器(905)用于在所述当前上下文中产生所述符号的专门化。
13.根据权利要求12所述的第一编程语言特定的专门化器(241、900),其特征在于,所述程序图解释器(911)用于通过由所述分级评估器(905)提供的所述符号的所述专门化而更新所述符号。
14.根据权利要求12或13所述的第一编程语言特定的专门化器(241、900),其特征在于,所述专门化是基于以下专门化规则中的至少一个:
调用(1024),
映射处理(1200、1300),
过滤处理(1400)。
15.根据权利要求9到14中任一权利要求所述的第一编程语言特定的专门化器(241、900),其特征在于,用于基于以下编程构造中的至少一个变换所述图(400):
具体实施方案类,
同构,
视图。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/RU2014/000966 WO2016105225A1 (en) | 2014-12-22 | 2014-12-22 | Method for compiling a source code in a first programming language to a program code in a second programming language |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107111503A true CN107111503A (zh) | 2017-08-29 |
CN107111503B CN107111503B (zh) | 2020-06-16 |
Family
ID=53718104
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480084317.6A Active CN107111503B (zh) | 2014-12-22 | 2014-12-22 | 将呈第一编程语言的源代码编译为呈第二编程语言的程序代码的方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN107111503B (zh) |
WO (1) | WO2016105225A1 (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107656233A (zh) * | 2017-09-04 | 2018-02-02 | 国家电网公司 | 一种用于电能表软件自动测试的方法 |
CN110865814A (zh) * | 2019-10-30 | 2020-03-06 | 南京天数智芯科技有限公司 | 一种支持异构计算核架构的编译器实现方法和系统 |
CN110879710A (zh) * | 2019-07-24 | 2020-03-13 | 中信银行股份有限公司 | 一种rpg程序自动转成java程序的方法 |
CN111091612A (zh) * | 2019-10-09 | 2020-05-01 | 中国船舶重工集团公司第七0九研究所 | 一种抽象目标码架构的着色语言机器码生成方法及装置 |
WO2020113459A1 (en) * | 2018-12-05 | 2020-06-11 | Alibaba Group Holding Limited | Intermediate representation transformation by slice operation hoist |
CN111813381A (zh) * | 2020-06-22 | 2020-10-23 | 北京字节跳动网络技术有限公司 | 跨平台生成可运行程序的方法、装置、介质和电子设备 |
WO2022233246A1 (en) * | 2021-05-05 | 2022-11-10 | Huawei Technologies Co.,Ltd. | Methods, devices, and media for two-pass source code transformation |
US20220413826A1 (en) * | 2021-06-23 | 2022-12-29 | Optum Technology, Inc. | Identifying protocol recommendations for application data objects |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3177990B1 (en) | 2014-08-29 | 2021-03-17 | Huawei Technologies Co., Ltd. | Method for compiling a source code |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1716192A (zh) * | 2004-04-23 | 2006-01-04 | 微软公司 | 语义编程语言和语言对象模型 |
US20120185425A1 (en) * | 2009-09-29 | 2012-07-19 | Zap Holdings Limited | Content based approach to extending the form and function of a business intelligence system |
-
2014
- 2014-12-22 CN CN201480084317.6A patent/CN107111503B/zh active Active
- 2014-12-22 WO PCT/RU2014/000966 patent/WO2016105225A1/en active Application Filing
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1716192A (zh) * | 2004-04-23 | 2006-01-04 | 微软公司 | 语义编程语言和语言对象模型 |
US20120185425A1 (en) * | 2009-09-29 | 2012-07-19 | Zap Holdings Limited | Content based approach to extending the form and function of a business intelligence system |
Non-Patent Citations (1)
Title |
---|
ARVIND K. SUJEETH等: "Delite: A Compiler Architecture for Performance-Oriented Embedded Domain-Specific Languages", 《ACM TRANSACIONS ON EMBEDDED COMPUTING SYSTEMS》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107656233A (zh) * | 2017-09-04 | 2018-02-02 | 国家电网公司 | 一种用于电能表软件自动测试的方法 |
WO2020113459A1 (en) * | 2018-12-05 | 2020-06-11 | Alibaba Group Holding Limited | Intermediate representation transformation by slice operation hoist |
CN110879710A (zh) * | 2019-07-24 | 2020-03-13 | 中信银行股份有限公司 | 一种rpg程序自动转成java程序的方法 |
CN111091612A (zh) * | 2019-10-09 | 2020-05-01 | 中国船舶重工集团公司第七0九研究所 | 一种抽象目标码架构的着色语言机器码生成方法及装置 |
CN110865814A (zh) * | 2019-10-30 | 2020-03-06 | 南京天数智芯科技有限公司 | 一种支持异构计算核架构的编译器实现方法和系统 |
CN111813381A (zh) * | 2020-06-22 | 2020-10-23 | 北京字节跳动网络技术有限公司 | 跨平台生成可运行程序的方法、装置、介质和电子设备 |
WO2022233246A1 (en) * | 2021-05-05 | 2022-11-10 | Huawei Technologies Co.,Ltd. | Methods, devices, and media for two-pass source code transformation |
US20220413826A1 (en) * | 2021-06-23 | 2022-12-29 | Optum Technology, Inc. | Identifying protocol recommendations for application data objects |
US11768673B2 (en) * | 2021-06-23 | 2023-09-26 | Optum Technology, Inc. | Identifying protocol recommendations for application data objects |
Also Published As
Publication number | Publication date |
---|---|
CN107111503B (zh) | 2020-06-16 |
WO2016105225A1 (en) | 2016-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107111503A (zh) | 用于将呈第一编程语言的源代码编译为呈第二编程语言的程序代码的方法 | |
Burger et al. | View-based model-driven software development with ModelJoin | |
Agrawal et al. | Graph transformations on domain-specific models | |
CN105593815B (zh) | 在编译器中构建基于图的中间表示的方法 | |
CN103164249B (zh) | 用于脚本语言编译器的扩展机制 | |
Yakushev et al. | Generic programming with fixed points for mutually recursive datatypes | |
Hedin | An introductory tutorial on JastAdd attribute grammars | |
Combemale et al. | Concern-oriented language development (COLD): Fostering reuse in language engineering | |
JP2012504823A (ja) | 宣言型プログラミング言語の木ベースの有向グラフのプログラミング構造 | |
Jézéquel | Model-driven engineering for software product lines | |
Agrawal et al. | A UML-based graph transformation approach for implementing domain-specific model transformations | |
CN107003861B (zh) | 用于编译源代码的方法 | |
Varró et al. | An algorithm for generating model-sensitive search plans for pattern matching on EMF models | |
Archibald et al. | Conditional bigraphs | |
Litteken et al. | An updated LLVM-based quantum research compiler with further OpenQASM support | |
Ujhelyi et al. | Anti-pattern detection with model queries: A comparison of approaches | |
CN110659029A (zh) | 生成表示计算机程序的语义流图 | |
CN102193802A (zh) | 具有同基类结构模型子集的模型转换方法 | |
Ates et al. | Constructing VEGGIE: Machine learning for context-sensitive graph grammars | |
Leblebici et al. | Multi-amalgamated triple graph grammars | |
Capra | A pure spec-inscribed pn model for reconfigurable systems | |
Chiapperini et al. | Computing embeddings of directed bigraphs | |
Tong | Design and implementation of context calculus in the GIPSY | |
Johanson et al. | Sprat: Hierarchies of domain-specific languages for marine ecosystem simulation engineering | |
Najafi et al. | An approach to animate Object-Z specifications using C++ |
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 |