没有合适的资源?快使用搜索试试~ 我知道了~
理论计算机科学电子笔记107(2004)33-49www.elsevier.com/locate/entcs模式匹配程序的集成开发Julien Guyon、Pierre-Etienne Moreau1和Antoine ReillesLORIA CNRS INRIACampusScientique,BP239,54506Villers-l`es-Nancy CedexFrance摘要TOM和ApiGen是两个互补的工具,它们简化了抽象数据库的定义和TOM是Java的一个扩展,它添加了独立于所使用的数据结构的模式匹配功能ApiGen是一个抽象语法树实现的生成器,它可以与TOM自然交互。在本文中,我们将展示如何扩展Eclipse以支持TOM程序的开发。通过集成一个TOM编辑器,一个自动构建过程和一个错误管理机制,我们展示了Eclipse中代数编程环境的集成。因此,我们的工作有助于促进正式的方法和Eclipse的教育,代数和工业界。关键词:Java,Eclipse,集成开发环境,代数编程环境。1介绍正如在[8]中提到的,Eclipse平台是一个集成开发环境(IDE),可以用于任何事情,也没有什么特别的。虽然Eclipse平台有很多内置功能,但可以扩展系统。插件是Eclipse平台的最小功能单元,可以单独开发和交付。Eclipse平台的所有功能都是通过插件接口提供的,除了一个称为Eclipse平台的小内核。一个简单的功能(例如在线帮助)可以通过单个插件添加,并且无需任何编码即可在1http://www.loria.fr/~{}moreau1571-0661 © 2004 Elsevier B. V.根据CC BY-NC-ND许可证开放访问。doi:10.1016/j.entcs.2004.02.04534J. Guyon等人理论计算机科学电子笔记107(2004)33所有. 一个复杂的IDE(一种编程语言的完整IDE)可以分成几个插件,每个插件都用Java编写。因此,插入平台的工具提供了特定的功能,使其适合开发新类型的应用程序。Eclipse提供了一个用于Java的工具。Java开发工具(JDT)为平台添加了Java程序开发功能,就像任何功能齐全的Java IDE一样(项目管理、源代码编辑器、重构支持、复杂搜索、增量编译、调试支持等)。). Eclipse还支持一个C/C++等效的IDE:CDT。所有这些工具都是使用Eclipse框架API开发的,Eclipse框架API是一个开放的、基于文档的框架。开发一个特定的工具非常容易。这正是我们为Java的代数扩展所做的:TOM2。面向对象语言非常流行。然而,它们仍然缺乏强大的功能,如函数式编程语言提供的表达模式匹配。在实践中,这些有用的功能与面向对象语言的核心数据抽象机制交互很差。因此,在面向对象的语言在本文中,我们为TOM[13]和ApiGen [5]提供了一个Eclipse插件。TOM是Java(和C)的扩展,它为这些语言添加了模式匹配功能[15,16,12,10]。这在描述结构化实体的各种转换,例如树/术语和XML文档。从实现的角度来看,它是一个编译器,它接受不同的本地语言(C或Java),其编译过程包括将匹配的结构翻译成给定的底层本地语言。它的设计遵循我们在基于规则的系统的高效编译方面的经验[9]。ApiGen是一个抽象语法树实现的生成器。采用抽象数据类型的简洁定义,它为该抽象数据类型生成高效且强类型的该实现具有高效的内存管理和使用最大共享的快速相等检查[2]。如图1所示,ApiGen与TOM非常好地相互作用。除了生成的Java代码之外,ApiGen还生成代数签名,这些签名可以直接在TOM中重用,以定义模式匹配表达式。TOM和ApiGen提供了对列表表示和列表匹配的支持[3],这对XML文档转换等实际应用非常有用。事实上,XML文档可以很容易地用列表表示2可在http://tom.loria.fr上查阅J. Guyon等人理论计算机科学电子笔记107(2004)3335JTom编译器ApiGenJTOM定义带有匹配结构的手写Java使用类型和构造函数Java与生成的匹配自动机生成的实现AST节点的Fig. 1. ApiGen在Java中生成一个数据类型,并将此数据类型的定义作为TOM的输入。用户在生成的抽象树类上使用match构造编写代码,TOM将其编译为普通Java。运营商本文其余部分的结构如下。第二节简要介绍了TOMTM和ApiGen。Eclipse插件及其特性将在第3节中介绍。第4节介绍了这项工作的两个主要贡献。一方面,它促进了Eclipse的发展,并为代数编程社区提供了一个完整的IDE.另一方面,它表明Eclipse是通用的足以支持新的“非标准”编程设备的开发。第五节介绍了相关的工作。最后一部分总结了本文并对今后的工作提出了展望2汤姆和ApiGen2.1基于TOM的模式匹配为了简单起见,我们只考虑扩展Java语法的T om的两个额外的新构造:%match和back-quote(')。第一个构造类似于ML和相关语言的match原语:给定一个术语(称为subject)和一个模式-动作对列表,match原语选择与主题匹配并执行相关操作的模式。因此,这种构造可以被看作是经典开关/情况构造的扩展。第二个结构是一种机制,javac字节码36J. Guyon等人理论计算机科学电子笔记107(2004)33在定义的签名上的基础术语。这个运算符称为反引号,后面跟着一个用前缀表示法写的格式良好的项为了更好地理解TOM两个整数的比较可以用以下方式描述:public boolean alert(intn, intn) {%match(Natt1, Natt2) {x,x-> { return true; }{ returntrue;}zero(),zero(_)-> { return false; }zero(x),zero(y)-> { return zero(x,y);}}}这个例子应该这样理解:给定两个项t1和t2(表示Peano整数),如果t1大于或等于t2,则对CherterThan的求值返回true。这是通过(非线性)模式匹配(第一个模式)和匿名变量(第二个和第三个模式)实现的。读者应该注意,变量不需要声明:它们的类型是从它们所涉及的运算符的定义中自动推断出来的。将一个常数与一个变量区分开来(e)。G.常量零),可以使用空括号(zero())。如前所述,TOM的一个重要特性是支持列表匹配,也称为与中性元素的关联匹配(受ASF+SDF元环境[3]的启发)。让我们考虑一下联想operatorconc用于构建自然数列表(NatList)。在TOM中,关联运算符是变元运算符,每个子项可以是排序元素或列表(在我们的例子中分别是Nat或NatList)。为了说明关联匹配的表现力,让我们定义一个排序算法:public int findDuplicate(intfindDuplicate) {%match(NatListl) {conc(X1*,x,X2*,y,X3*)->{if(x,y)){ return}_ -> { returnl;}}}这个例子说明了使用列表变量,用' * '注释 给定一个部分排序的列表,排序函数试图找到两个元素x和y,使得x大于y。如果存在两个这样的元素,它们将被交换,并递归地应用排序函数。 当列表被排序时,第一个模式在列表中找不到,然后尝试下一个模式。事实上,第二种模式对它的主题没有任何限制,因此触发了相应的动作,并返回了排序列表l。J. Guyon等人理论计算机科学电子笔记107(2004)3337Peano数据类型Nat::=零|(pred:Nat)NatList::=conc(elt:Nat)2.2抽象数据库如第1节所述,ApiGen采用抽象数据类型(*.adt文件)的简洁定义,并生成高效且强类型的Java实现。考虑到前面基于Peano的示例,数据类型定义如图2所示。 TOM的一个特殊性是数据结构独立的 因此,给定一个具体的Java实现,必须被定义以在实现和算法构造器之间建立映射。除了生成的Java代码,ApiGen还生成了这个TOM签名定义。图二. Peano整数和自然数列表的数据类型定义。抽象数据类型的一个有趣之处是静态类型:每个构造函数都由一个域和一个共域定义。在实践中,这降低了编程错误的风险,因为在编译时检测到格式错误的术语(或模式)。2.3XML转换的另一个应用汤姆是支持XML文档的操作-薪酬。实际上,XML文档可以由基于树的数据结构,如文档对象模型(DOM),由W3C推广。DOM是一个独立于平台的接口,允许动态访问和更新XML文档的内容、结构和样式。TOM提供了一种映射机制(签名定义),使我们能够将DOM树视为代数项,可以在其上执行模式匹配。除了标准的前缀表示法,TOM还支持一种特殊的类似XML的符号,它使模式定义对XML用户来说非常自然 。 例 如 , 根 据 属 性 ( 本 例 中 为 Age ) 的 值 比 较 两 个 XML 节 点(Person)可以描述如下:publicint findDuplicate(intfindDuplicate,int findDuplicate){%match(TNode t1,TNode t2){<人员年龄=a1>/人员>,<人员年龄=a2>/人员>->{return a1.compareTo(a2);}}返回0;38J. Guyon等人理论计算机科学电子笔记107(2004)33}当使用XML表示法时,模式...& lt;/Person>仅当XML文档以Person节点为根节点时才匹配该文档。在我们的例子中,记法Age=a1意味着我们只对包含属性Age的节点感兴趣。对于这些节点,属性的值(字符串)存储在fresh变量a1中。前面的模式在给定两个XML文档t1和t2时匹配,这些文档以Person为根,并具有属性Age。在这种情况下,它们的属性Age的值分别存储在a1和a2中。因此,当a1小于a2时,我们说t1小于t2(使用Java的String库提供的compareTo方法在所有其他情况下,两个文档t1和t2不可比较,返回整数0。有了这种XML表示法,就可以检索存储在子项中的信息。当XML文档包含以Name为根的子节点时,以下模式匹配该文档。在这种情况下,Name节点的内容(字符串)存储在变量name中。<人员年龄=a1>姓名>#TEXT(name)/姓名>/人员> ->.正如人们在操作XML文档时所观察到的那样,面向对象语言不擅长分析和转换XML。这是因为这样的树通常只包含数据而不包含方法.DOM库帮助程序员,但使转换仍然冗长的表达。实验表明,TOM在这方面表现良好,主要是因为模式匹配的概念自然地扩展到了XML数据的处理。理想情况下,人们希望融合,统一在不同范式中发现的概念我们的建议是对这个问题的第一个答案。 例如,DOM库提供了一种方法来获取具有特定名称的所有节点这可以在TOM中指定,但它更乏味。所有节点的集合在TOM中使用特定属性更容易,使用从图书馆。TOM和DOM的互补方法提供了一个非常强大的范例,它提供了一个统一、直观和简单的语法来描述XML分析和转换。这种方法与其他技术(如Java)竞争,但它更安全,因为我们受益于TOM和Java的静态类型。3将Tom集成到Eclipse中推广TOM意味着开发所有预期的工具来利用这种新技术的影响。根据我们对《中华人民共和国著作权法》的编纂经验,J. Guyon等人理论计算机科学电子笔记107(2004)3339ELAN [9],一个强大的语言核心编译器已经开发出来[13]。这个名为JTOM的编译器是用Java和TOM本身编写的,使用ApiGen进行抽象数据类型定义。在并行,一个动态调试器,能够跟踪模式匹配和重写步骤表达式已经实现。该工具允许设置条件断点和可视化变量instan。通过模式匹配来标记。最近,TOM编译器经过调整,可以集成到Eclipse平台中。由于Eclipse框架的简单性,TOM插件的开发导致了专门用于TOM的完整集成代数环境的出现。这项工作与ASF+SDF元环境[1,4]共享一些共同的功能。3.1将系统迁移到Eclipse:预期收益最初,JTOM和ApiGen在Java中作为命令行工具实现。传统的编辑器,如Emacs和Vim,以及Make命令用于编辑和编译源文件。这种方法适合有经验的Unix用户,但它使系统对于其他用户来说,这会更加复杂,因为编辑器、脚本和shell变量都必须经过裁剪。虽然可以在一个包中分发所有内容,但它仍然需要外部编辑器和一些脚本自定义。当然,我们需要一个更友好的环境来推广语言,并使我们的发展更容易。Eclipse平台通过提供一个包含编辑器、编译器和构建器的集成环境来解决这些问题此外,Eclipse还能够为TOM提供一个完整的专用编辑器,包括语法着色、键控、语法语法着色、语法着色和语法着色。字完成和在统一环境中的错误报告。最后,Eclipse还提供了调试支持,可以重用它来集成当前的TOM(文本模式)调试器。3.2问题需要解决在研究了Eclipse平台带来的不同机会之后,我们发现了几个需要解决的问题:• 如何保持汤姆系统是一个独立的软件包(独立于Eclipse),因为此迁移不应破坏命令行工具capa-babilities?• 如何为编辑器提供测试语法着色功能?• 如何重用JDT编辑器来编辑和重构用Java编写的程序?汤姆40J. Guyon等人理论计算机科学电子笔记107(2004)33• 如何扩展JDT Java编辑器并保持TOM插件作为inde-尽可能地依赖于JDT这是避免每次升级Eclipse平台时的额外工作非常重要• 如何集成JTOM和ApiGen,使其编译对用户自动透明?• 如何协调不同的编译器(javac、JTOM和ApiGen)来平滑地集成这些工具所引发的错误?• 如何在与Eclipse相同的Java虚拟机中管理外部工具的执行,而不会出现意外行为?例如,这些工具应该在不停止虚拟机的情况下正确终止其中一些问题可以通过调整我们的工具来解决,以适应所提出的框架:例如,删除静态引用并避免System.exit。然而,其他一些问题,例如与JDT编辑器相关的问题,更难解决,只能通过采用“非侵入式”方法或等待Eclipse环境的更灵活设计来减轻。3.3TOM插件所呈现的插件功能齐全,可在TOM网页上找到。该系统由大约10个Eclipse扩展点[8]组成,以提供从向导到复杂结构化编辑器和自动增量构建支持的服务。项目和资源向导向导旨在简化新项目的创建。与Java类似,JTOM向导允许程序员基于Java模板定义类的继承结构以及骨架此外,如图4所示,JTOM和ApiGen向导还邀请程序员定义特定属性,例如编译选项。结构编辑器每个文件都有一个特定的编辑器,其设计灵感来自Java编辑器。在实现方面,一些行为是从JDT中包含的类继承的。特别是,它免费提供了Java着色、缩进和函数模板完成功能。具体部分包括添加TOM功能以完成继承的功能:J. Guyon等人理论计算机科学电子笔记107(2004)3341图3.第三章。TOM项目向导扩展了Java项目向导,并将项目配置为自动编译TOM程序• 语法着色已经扩展到考虑和突出显示结构,汤姆表示...的意思• 自动完成字处理程序已扩展到执行测试关键字补全,取决于上下文,• 最后一个特征允许显示代数构造器的签名。通过双击一个TOM构造函数,一个信息弹出窗口给出了它的代数符号(domain、co-domain和field-name)。这大大改善了开发过程,并参与减少了病态术语错误的数量。最后一点很有趣,因为它说明了TOM和ApiGen的平滑集成:代数构造器用于TOM程序,而它们的签名是在ApiGen级别定义的(在*.adt文件中)。通过使用签名定义对TOM编辑器进行参数化,编辑器能够检索和显示相关信息。42J. Guyon等人理论计算机科学电子笔记107(2004)33图四、TOM向导允许指定预期的类层次结构和其他资源属性,如编译选项自动构建过程Eclipse平台定义了一个自动构建过程,在每次修改资源时激活。编译工作流程(第3页的图1)显示了如何使用此过程自动编译TOM项目:每次修改资源(ApiGen或TOMILE)时,都必须重新修改。亦列载此外,当修改签名定义时,依赖的T文件也必须重新编译。要完成构建过程,必须编译所有生成的Java文件。 这是由构建过程定义的第三阶段执行的(参见前页的图3错误管理当使用集成开发环境时,最重要的期望特性之一是可视化编程错误的可能性在我们看来,这是Eclipse IDE提供的一个非常强大的点为了最大限度地减少TOM环境和标准Java环境之间的差异,必须提供以统一方式可视化Java和TOM错误的可能性如图5所示,J. Guyon等人理论计算机科学电子笔记107(2004)3343图五、运行中的Eclipse工作区:TOM和Java错误可以在“Package Explorer”、“Problems”窗口以及编辑器中看到执行的结果(排序的XML文档)显示在“控制台”中检索并显示TOM和ApiGen错误(例如,请参见“警告行43”)。从某种意义上说,这可能被认为是正常的,因为我们对编译器有完全的控制权复杂的部分是能够检索并显示所有Java错误。在设计编译器或预处理器时,它通常会引入新的行和构造。因此,很难在生成的代码中的错误位置与它们在源代码中的起源之间保持对应例如,如何确保错误行n(在在生成的Java代码中的同一行上产生错误我们的编译方案使我们能够引入同步机制,确保任何本地语言块(C或Java)在生成的文件中保持因此,在生成的文件中检测到的任何Java错误都可以被收集并与源文件相关联(参见图5中的吸取了教训通过提供自动构建过程和良好的错误管理机制,Eclipse插件大大简化了开发过程。44J. Guyon等人理论计算机科学电子笔记107(2004)33基于TOM的程序。通过开发这样一个插件,我们已经在TOM项目和Eclipse中发现了几个改进的机会。除了设计源代码同步机制之外,我们还必须调整我们的工具,使它们能够共享一个通用的Java虚拟机。因此,似乎必须删除所有静态对象,并消除对exit(),因为它会立即终止Eclipse环境的执行。在Eclipse方面,我们观察到向导和自动构建过程的开发非常简单。其中一个主要问题是编辑器的实现,因为重用JDT代码来构建TOM编辑器几乎是不可能的。特别是,解析阶段很难在Eclipse基础设施中实现。Java程序可以虽然可以我们遇到的最后一个困难是尽可能独立于低级JDT实现的能力。然而,这似乎是必要的,以避免额外的工作,如跨平台测试,每次有一个新版本的JDT或整个系统。特别是,从Eclipse的当前稳定版本(2.1)迁移到新的预构建版本(3.x)并不是一件小事。4贡献4.1学术界在上一节中,我们展示了如何为Java扩展提供一个令人愉快且易于使用的此外,我们还展示了如何将Eclipse框架转变为一个专用于重构和调试基于代数的语言的平台呈现的TOM插件使构建过程自动化,编译错误被报告在编辑器中并定位,并带有解释性消息。在我们看来,这有助于减少调试所花费的时间,从而加快开发过程。提供这样一个环境对于形式方法的定义无疑是有趣的,因为它将帮助学生学习和使用代数规范语言。这样的环境所提供的功能允许我们专注于这种语言的基本概念语言的句法特性。通过快速识别语法和类型错误,IDE有助于将重点放在更高级别的概念上,而不是技术问题上。J. Guyon等人理论计算机科学电子笔记107(2004)3345代数语言的集成开发环境绝对是一个有趣的平台,用于制作工具演示、显示示例、修改和运行它们。专业和易于使用的界面,可能会说服工业用户切换到这样的工具,并开始在他们的软件开发过程中使用更正式的技术这也是一种通过平台独立的插件分发系统的方便方式,具有非常简单的此外,由于所有这些原因,Eclipse插件对于有经验的代数风格程序员来说也是一个非常方便的工具。通过这种方式,所提出的结果是一个具体的贡献,必将促进Eclipse的出现代数编程社区。4.2Eclipse技术可扩展性的验证这项工作展示了如何使用Eclipse开发新的语言或扩展环境,使用IDE框架的开放体系结构。我们已经展示了如何使用这个框架来集成不同的工具,以前被认为是独立的工具,涉及到一个复杂的构建过程到一个程序员友好的环境。其他工具的引入允许将这些工具统一在一个共同的平台上。我们表明,Eclipse环境的潜力也可以很容易地扩展,以促进这些新的语言,通过提供一个统一的框架,功能通常只在专业使用的IDE。这个TOM插件是介绍Eclipse作为开发和分发代数语言(如基于规则的语言)开发工具的最感兴趣的平台的第一步。这表明Eclipse项目的兴趣,并将Eclipse作为促进新思想的通用支持工具Eclipse可以变成一个通用框架,为高级可执行代数规范的开发这项工作的另一个贡献是确认Eclipse平台设计足够好和通用,以支持新的“非标准”编程环境的开发另一个令人鼓舞和有希望的贡献是强调了一些必须改进的地方,例如放松Java语法和Eclipse编辑器之间的深层联系。46J. Guyon等人理论计算机科学电子笔记107(2004)334.3该插件在行动该插件在研究和工业环境中都有应用。最重要的例子是在Java和TOM中开发JTOM。它表示大约10,000行TOM代码转换成30,000多行Java代码。大约有200个构造函数定义为ApiGen生成大约30,000行Java代码,具有最大共享和快速相等检查。该项目代表了近80,000行代码。实现这个插件只需要6,000行代码这一点验证了Eclipse插件体系结构的可扩展性。该插件还被用于设计和实现各种证明和模型检查工具。最近,一个命题证明器已经被原型化:给定一个要证明的命题,系统以可读取的方式(使用LATEEXasatypesetingsystem)生成一个或所有可能的命题。我不是她Needham-Schroeder公钥协议(建立一个相互的发起者和响应者之间的认证)已经使用TOM[7]进行了描述和验证在这两种情况下,Java和TOM之间的交互都非常富有成效:TOM用于指定转换系统,而Java的表达能力用于指定如何探索搜索空间最后,Eclipse的使用使这种范式的融合变得如此自然汤姆似乎已经足够成熟,可以在教学或工业环境中推广。CRIL Technology Group最近使用了TOM插件。本研究计画的主要理论目标是指定和执行时间自动机的转换从实现的角度来看,视图中,大多数数据结构都是用XML文档表示的。因此,需要一个功能强大的集成XML转换工具。第一个原型已经在Java中使用Eclipse和DOM库实现,以描述各种转换。在实现的第二个版本中,决定使用TOM来描述转换。值得一提的是,TOM-Eclipse插件的存在是必不可少的:如果没有这样的插件,要说服这个小组使用更高级的编程概念来实现其工具将困难得多结果令人印象深刻,到目前为止,本文中描述的Eclipse插件已经使他们能够实现复杂的算法,他们永远不会使用Dom实现。TOM插件还帮助他们改进了系统的维护,并将项目的大小减少了3倍(从1,200行Java代码减少到400行TOM代码)。J. Guyon等人理论计算机科学电子笔记107(2004)33475相关工作为了将模式匹配和转换工具集成到命令式语言中,已经开发了几个系统。例如App[14]和Prop[11]是C++的两个扩展:第一个是预处理器,它为语言添加了匹配构造,而第二个是C++的多范式扩展,包括模式匹配构造。最后,Pizza[15]是一个Java扩展,支持参数多态性,第一类函数,类案例和模式匹配。所有这些方法都很有趣,也很强大,但没有TOM那么通用,因为它们强烈依赖于底层语言。在精神上,Prop和Pizza非常接近于TOM:它们为经典的命令式语言添加了模式匹配功能,但实现这一点的方法完全不同。事实上,它们比TOM更具侵入性,因为它们确实用几个新的模式匹配结构扩展了C++和Java。TOM的非侵入式方法允许我们对底层语言的任何修改都更具反应性(TOM已经为Java 1.5做好了准备,示例),并简化了它与Eclipse等编程环境的集成。据我们所知,Java 的几个扩展已经集成到Eclipse 中。让我们以JavaCC和Jack[6]插件为例。JavaCC是Java的解析器生成器,而Jack是使用JML注释对Java小程序进行静态验证的工具。然而,据我们所知,这些工具并没有完全集成到Eclipse中,因为它们没有提供任何良好的支持来检索和显示Eclipse编辑器中的编程错误。6结论和进一步的工作在本文中,我们展示了如何重用Eclipse组件来提供一个插件,为Java:TOM的扩展提供一个集成环境(结构化编辑器、构建过程和错误管理)。特别地,我们已经讨论了如何协调几个编译器并适应Eclipse,以显示编程错误。然而,JDT编辑器没有提供足够灵活的扩展点,以便在独立于核心实现的上下文中我们计划通过以下新功能来改进我们的插件• 字段名和代数构造函数的自动完成。为此我们我需要改进JTOM编译器,使其支持TOM程序的增量编译。48J. Guyon等人理论计算机科学电子笔记107(2004)33• 代码重构能力,如JDT环境所示。这一点取决于JDT的实现和发展。• 在现有的(文本模式)调试器之上创建一个专门的Eclipse视图,作为图形界面。其中一些功能提出了新的问题,涉及JTOM编译器的设计最后,通过CDT工具的中间件将所有这些构件移植到C语言中应该是有趣的。这个端口将受益于平台所强加的约定和通用功能的使用。因此,这项任务应该包括重构和调整编辑器以及编译器的集成。在Eclipse平台上集成TOM和ApiGen的实验表明了Eclipse支持“非标准”语言的能力。Eclipse似乎是学术界支持新语言和教授这些新语言的首选平台。引用[1] M. van den Brand等. ASF+SDF元环境:基于语义的语言开发环境。In R.Wilhelm,编辑,Proceedings of Furniture Construction,第10届国际会议,LNCS第2027卷,第365-370页。Springer-Verlag,2001.[2] M. van den Brand,H. de Jong,P. Klint,and P. Olivier.经典注释术语。软件,实践与经验,30(3):259[3] M. van den Brand,J. Heering,P. Klint,and P. Olivier.编译语言定义:ASF+SDF编译器。ACM Transactions on Programming Languages and Systems,24(4):334 - 368,2002.[4] M. van den Brand,H. Jong,P. Klint,and A. Kooiker eclipse的语言开发环境In M.Burke,editor,first eclipse Technology eXchange(eTX),pages 61[5] M. van den Brand,P.- E. Moreau和J. Vinju。java中高效强类型抽象语法树技术报告SEN-E0306,ISSN 1386- 369 X,CWI,阿姆斯特丹(荷兰),2003年11月。[6] L.Burdy,J.- L.Lanet和A.请求Java applet正确性工具包:http://www.gemplus.com/smart/r_d/trends/jack.html网站。[7] H. Cirstea,P. E. Moreau和A.雷列斯Java中基于规则的编程用于协议验证。在N. Marti-Oliet,编辑,第五届重写逻辑和应用国际研讨会论文集,ENTCS。Elsevier Sciences,2004年。出现。[8] Eclipse平台技术概述。技术报告,对象技术国际公司,2001.[9] H. Kirchner和P. -E. 莫罗将重写提升到编程语言:一个在关联交换理论中用于非确定性重写程序的编译器。 Journal of FunctionalProgramming,11(2):207 -251,2001 .J. Guyon等人理论计算机科学电子笔记107(2004)3349[10] K. Lee,A. LaMarca,和C.钱伯斯可演化分布式系统的面向对象模式匹配。 在第18届ACMSIGPLAN会议上,面向对象编程,系统,语言和应用程序,第205-223页。ACM Press,2003.[11] L.小良道具:http://cs1.cs.nyu.edu/phd_students/leunga/prop.html网站。[12] J. Liu和A.C. 迈尔斯Jmatch:Java的可迭代抽象模式匹配弧菌中的达尔和P. Wadler,编辑,PADL '03会议记录Springer-Verlag,2003.[13] P. - E.莫罗角,澳-地Ringeissen和M.维特克一个多目标语言的模式匹配查询器。In G.Hedin,editor,12th Conference on Furniture Construction,Warsaw(Poland),volume 2622of LNCS,pages 61-76. Springer-Verlag,2003年5月[14] G. 奈兰App:http://www.primenet.com/~georgen/app.html.[15] M. Odersky和P. Wadler。 Pizza into Java:将理论转化为实践。 法律程序中第24届ACM程序设计语言原理研讨会(POPL '97),法国巴黎,第146-159页。ACM Press,USA,1997.[16] M. Zenger和M.奥德斯基 带缺省值的可扩展代数数据库。 第六届ACM SIGPLAN函数式编程国际会议(ICFPACM Press,2001.
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- SSM Java项目:StudentInfo 数据管理与可视化分析
- pyedgar:Python库简化EDGAR数据交互与文档下载
- Node.js环境下wfdb文件解码与实时数据处理
- phpcms v2.2企业级网站管理系统发布
- 美团饿了么优惠券推广工具-uniapp源码
- 基于红外传感器的会议室实时占用率测量系统
- DenseNet-201预训练模型:图像分类的深度学习工具箱
- Java实现和弦移调工具:Transposer-java
- phpMyFAQ 2.5.1 Beta多国语言版:技术项目源码共享平台
- Python自动化源码实现便捷自动下单功能
- Android天气预报应用:查看多城市详细天气信息
- PHPTML类:简化HTML页面创建的PHP开源工具
- Biovec在蛋白质分析中的应用:预测、结构和可视化
- EfficientNet-b0深度学习工具箱模型在MATLAB中的应用
- 2024年河北省技能大赛数字化设计开发样题解析
- 笔记本USB加湿器:便携式设计解决方案
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功