没有合适的资源?快使用搜索试试~ 我知道了~
自底向上语言开发工具Lever:简化领域特定语言的进化性改变
理论计算机科学电子笔记164(2006)55-60www.elsevier.com/locate/entcs语言进化杠杆- 工具演示-Elmar Juergens1,2 Markus Pizka1InstititutfurIinformatik,TechnischeUniversitaütMuünchenBoltzmanstr.3,85748 Garching,德国摘要由于许多领域都在不断发展,相关的领域专用语言(DSL)也不可避免地要发展,以保持其价值。但是DSL的发展可能是非常昂贵的,因为语言的现有单词(即。e.程序)和工具必须根据DSL本身的变化进行调整。在这种情况下,这些成本严重限制了DSL的采用。本文介绍了杠杆,DSL的进化开发的工具。Lever的目标是通过自动化DSL解析器和现有单词的适应,并为现有工具的正确适应提供额外的支持,使DSL的进化性改变更加便宜。G. 程序生成tors)。这样,Lever简化了DSL维护,并为自底向上的DSL开发奠定了基础关键词:领域特定语言,自底向上语言开发,语言进化,耦合转换1引言就像其他软件产品一样,语言需要随着使用环境的变化而发展。这对于领域特定语言(DSL)来说尤其明显,因为它们通常与域紧密绑定。无论领域如何发展,DSL都必须适应这些变化。发展DSL需要三个主要步骤:• 语言句法• 现有词语的迁移(i. e.程序)以符合新语法• 语言处理工具的适应(i,e. 解析器,生成器)1 电子邮件:{juergens,pizka}@ in.tum.de2感谢SD F /SGL R,RalfL?a m m e l,R alf L?a m m e l,R a l f L?a m e l,R a l f L?a m m e l,Ra l fL?a m e l,R al f l f L?ammel,RalflfL?a m e l , R a l f l f L ? a m e l ? a m e l , R a l f L ? a m el ? a m e l , R a l f l f l ? a1571-0661 © 2006 Elsevier B. V.在CC BY-NC-ND许可下开放访问。doi:10.1016/j.entcs.2006.10.00456E. Juergens,M.Pizka/Electronic Notes in Theoretical Computer Science 164(2006)55在实现DSL的传统方法中,演进能力是有限的,因为所有三个演进步骤通常必须手动执行。迁移现有单词的转换器必须编写,解析器和生成器必须手工修改。每次DSL演进时以自组织方式这样做的成本很高,因此严重抑制了演进。本文介绍了我们的解决方案,我们称之为杠杆(语言进化)的DSL的进化发展Lever为DSL的创建和发展提供了一种特定于领域的它可以自动调整DSL的语法、解析器和现有单词。此外,它通过指示由所执行的语言演化操作所影响的那些生成器部分来支持DSL生成器的手动适配。相关工作与杠杆有很强关系的工具是TransformGen [1,5]。它简化了现有单词的迁移,但只提供了对耦合进化的有限支持,并且不支持解析器或生成器的适配Levere的进化过程是由RalfLaémmel的语法适应[3,4]的著作提出的,但通过考虑词及其语法的耦合进化操作,它走向了一个不同的方向。2语言的杠杆式进化概述2.1语法演变杠杆使用标记上下文无关语法来指定语言的语法。标记上下文无关文法扩展了规范上下文无关文法,为产生式和产生式符号添加了唯一的标记。这些标签稍后将用于路径表达式中,该路径表达式在带标签的上下文无关语法中导航以选择语法元素。Lever中的语法是可变的。Lever提供了一种用于创建和修改语法元素的语法进化语法进化语言包括一组进化操作,在通过应用一系列语法进化语言语句可以将每个语法转换成任何其他语法的意义上,这是完整的。2.2词汇演变Lever在内部将单词表示为带标签的派生树:生产标签命名树中的节点,生产符号标签命名树中的边。因此,从标记的上下文无关语法中选择语法元素的相同路径表达式可以用于从标记的导出树中选择对应的节点。这使得路径表达式成为一个统一的查询机制,标记上下文无关文法和派生树。标记的派生树也是可变的。与语法进化语言一样,Lever提供了一种用于执行进化的单词进化语言E. Juergens,M.Pizka/Electronic Notes in Theoretical Computer Science 164(2006)5557在派生树上的操作。单词进化语言包括一组进化操作,在每个派生树可以通过应用单词进化语言语句序列而变成任何其他派生树的意义上,这是完整的。2.3语法与词汇的耦合演化虽然语法和单词进化语言是表达性的,但它们的抽象水平仍然相对较低,因为它们分别针对语法和单词进化。各种频繁使用的进化操作可以更舒适地使用更高级别的耦合进化操作来完成,所这类高级命令的例子有重命名终结符或引入具有默认值的新非终结符杠杆提供了一个集成的语言进化语言,以促进这种耦合的进化操作。它建立在语法和单词进化语言的基础上,以实现这些耦合的进化命令。在使用Lever时,用户主要使用语言进化语言。只有在它没有覆盖的情况下,才使用基本语法和单词演变操作。语言演化语言是可扩展的,允许用户添加自己的耦合演化命令。我们希望通过这种方式逐渐增长它,直到它提供所有常见的语言进化操作。有趣的是,注意到语言进化语言本身是一种DSL,它是以自下而上、逐步的方式开发的,因此可以使用杠杆来实现。然而,语言进化语言目前被实现为内部DSL,因为随着我们对语法和树转换的理解的变化,语法和词进化语言仍在进化。计划在语法和单词进化语言达到足够的稳定水平2.4语言处理工具的适应性Lever可以自动生成其语言的解析器。它从标记的上下文无关文法生成SDF文法[2],并使用SGLR解析器[6]从语言的单词中实例化标记的派生树。因此,解析器的自适应是完全自动化的。3语言处理工具(i.e. 生成器)使用路径表达式来访问标记的导出树中的节点。杠杆并没有自动适应这些路径表达式后,语言的演变,但。 但是路径表达式是语法感知的:杠杆根据语法静态验证路径表达式,以检测那些在3请注意,Lever不依赖于GLR解析技术。如果不需要使用它们,可以用手写的解析器来代替。然而,解析器自适应不能再自动化。58E. Juergens,M.Pizka/Electronic Notes in Theoretical Computer Science 164(2006)55数据结构店店ob标签类型独一无二?]独特[a-z]+type=[店店存储对象 标签类型cb]字符串type=[店标记的派生树。这种静态检查检测在语言演化过程中中断的所有路径表达式。3示范我们演示了一个示例性的进化步骤,以说明一个简单的DSL生成数据结构的逐步在图1和图2a中以文本4和视觉5它包含两个参数,用于验证代码生成:类型描述允许的数据对象,当存在unique时图3和图2b显示了初始语法的单词(文本上和视觉上)。6“Store”“[”lbl:“type=”type:“[a-z]+”“unique”? “]”->数据结构{Store}Fig. 1. 语篇形式图二. a)初始语法b)初始单词存储[type=string]包[type=string]存储[type=object unique]设置[type=object]图三. 进化前后的词汇随着我们对数据结构领域的理解不断加深,我们决定将unique关键字替换为术语Set和Bag。为了反映我们对领域的理解的变化,我们相应地发展了我们的DSL:• 所有独特的商店将被转换为集,所有其他实例袋。• 两种数据结构都包含类型参数。为了避免产生的语法中的重复,我们将其封装到它自己的产品• Store产品现在未使用,并从语法中删除。图3、4、5a和5b显示了进化后的语法和单词。“Set”ob:“[”Type cb:“]”->数据结构{Set}“Bag”ob:“[”Type cb:“]”->数据结构{Bag}lbl:“type=”type:“[a-z]+”->类型{类型}见图4。 进化语法的语篇表征[4]在本例中,为简洁起见,省略了一些文字符号的标签5 关键词:双椭圆是排序,单椭圆是生产,盒子是终端。6关键:省略号是对应于产生式的节点,框是带有单词片段的叶子。E. Juergens,M.Pizka/Electronic Notes in Theoretical Computer Science 164(2006)5559数据结构袋设袋ob类型 CB设置ob类型cb类型类型标签类型[a-z]+type=][设置][袋袋袋ob类型CB类型标签类型字符串type=][袋图五. A.演化的语法B.演化的词汇图6显示了用于这些演化操作的LanguageEvolutionLanguage命令7将“lbl”,“type”封装到存储中的类型中创建生产“Set”ob:“[”Type cb”]”->数据结构{Set}创建生产“Bag”ob:“[”Type cb”]”->数据结构{Bag}对于商店中的商店:删除文字“存储”if包含唯一文字:将生产设置为“Datastructures.Set”附加叶“Set”否则:将生产设置为“Datastructures.Bag”附加叶“Bag”删除生产“存储”见图6。 语言演变4结论Lever为不同层次的语言进化提供了几种DSL:语法的Gram-mar EvolutionLanguage,单词的Word Evolution Language(即,e. 程序)和语言进化语言的语法和单词的耦合进化使用这些DSL制定的演化操作允许Lever自动适应现有的单词和解析器。此外,Lever还可以指出在无法自动调整的工具中需要手动调整的区域(例如,G.发电机)。因此,与DSL演进的ad hoc方法相比,Lever显著降低了演进成本。未来的工作包括杠杆的应用,以发展现实世界的DSL的语言进化语言,从而提高其表达性。此外,我们计划为那些仅仅重构语言的语言进化语言命令自动调整路径表达式(即。e. 重命名非终结符、封装或内联非终结符等)。[7]语句的语法已被简化,以增加可读性。60E. Juergens,M.Pizka/Electronic Notes in Theoretical Computer Science 164(2006)55Lever目前正在实施和测试中,将于2006年上半年引用[1] Garlan,D.,C. W. Krueger和B. S. 林文龙:结构化环境的自动化维护,计算机工程. 16(1994),pp. 七二七七七四[2] Heering , J. , P. R. H. Hendriks , P. Klint and J. Rekers , The syntax definition formalism sdfreference manual,SIGPLAN Not. 24(1989),pp. 43比75[3] Laémmel,R., 我的奶奶,我的奶奶。 FormaIMethodsEurope(FME)2001,LNCS2021(2001),pp. 550-570[4] Lamel,R. 和G. Wachsmuth,S D F s的Transformtiontaxdi tineASF+SDFMeta-Environment,in:M.van den Brand和D. Parigot,editors,Proceedings of the First Workshop on Language Descriptions,Tools and Applications(LDTA '01),Genova,Italy,April7,2001,SatelliteeventofETAPS'2001,ENTCS44(2001).[5] 施 陶 特 湾 J. , C. W. Krueger 和 D. Garlan , 面 向 结 构 环 境 维 护 的 结 构 化 方 法 , 1987 年 , 第 二 届 ACMSIGSOFT/SIGPLAN软件工程研讨会论文集,第12页。160-170[6] van den Brand,M. G. J.,Scheerder,J. J. Vinju和E. Visser,Disambiguation filters for scannerlessgeneralized lr parsers,in:CC143-158
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功