电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

开源EGL语言开发工具EGLDevelopmentTools,第4部分EGL高级话题

25页
  • 卖家[上传人]:M****1
  • 文档编号:498700929
  • 上传时间:2023-11-27
  • 文档格式:DOCX
  • 文档大小:229.83KB
  • / 25 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、开源EGL语言开发工具EGLDevelopmentTools,第4部分EGL高级话题开源EGL语言开发工具EGLDevelopmentTools,第4部分:EGL高级话题1. EDT的可扩展性简介EGL作为一门编程语言,它的编译过程遵循一般语言的编译过程:源程序通过编译器生成中间模型(IRModel,IntermediateRepresentationModel),IR模型通过代码生成器被转换成目标代码。EDT中EGL源文件转换成目标语言的过程如下图所示:图1.EGL编译过程:|rw亡泅+支百营,聃。口匚十+覃匚。Antirsm口。叫门呻查看大图。这里IR模型之前的工作通常称为前端编译,模型之后的代码生成工作通常称为后端编译。本文将首先介绍通过扩展后端编译来改变EGL语言的行为或者增加新的运行平台和目标语言,然后将介绍如何扩展前端使新的语言概念能够被编译到模型中。所有的扩展都能够以EclipsePlugin的形式方便的增加到EDT中。这一切,使得创造一种新语言变得前所未有的方便。接下来需要做的仅仅是发挥想象力了。2. EGL模型的可扩展性EGL模型在设计之初就考虑了可扩展性。通过扩展E

      2、GL模型,可以引入新的元素和概念,使得EGL代码可以表达更多的信息。而这些新的概念和信息,可以被代码生成器识别并利用从而生成全新的功能。下面介绍最常用的几种语言模型的扩展。NativeTypesNativeType是纯抽象的类型定义,由代码生成器决定怎样把NativeType映射到目标平台。EGL语言中的大多数系统函数都是用NativeType来定义的。比如下面代码中用到的SysLib.writeStdout()方法只是一个抽象函数定义。在Java代码生成器中,它会被生成System.out.println(),而在COBOL代码生成器中,则会生成DISPLAY语句。清单1.EGL抽象函数SysLib.writeStdout()packagesamples.server;programExamplenamestring;functionmain()name=Joe;SysLib.writeStdout(name);endendSysLib的定义,目前,我们使用externaltypetypeNativeType的形式来定义一个NativeType.使用同样的方法,你可以扩展EGL的系统

      3、函数库,或者定义自己的函数库。当然,在定义了新的NativeType之后,需要使用上一章中提到的方法扩展代码生成器使得这些新的元素能够被映射成目标平台可执行代码。清单2.定义新的NativeTypeexternalTypeSysLibtypeNativeTypestaticfunctionwriteStdout(textstringin);endAnnotationAnnotation可以用于给已有的语言类型添加额外的注解信息,这些信息能够被代码生成器识别并生相应的目标代码。Annotation用于为任何成员(Member)添加注解,比如变量,方法等。在下面的代码中Id是一个Annotation,它表明cust_no字段是一个用于标识的字段。清单3.Annotation的使用recordMyRecordtypeEntityTableName=Customercust_nointId;namestring;end相应的,在代码生成器中,就可以对于有Id标识的字段进行特殊的处理,比如,当我们把MyRecord写入关系数据库的时候,cust_no字段会被当作主键进行处理。下面的代码是对IdA

      4、nnotation的定义。我们使用recordtypeAnnotation的形式来定义Annotation。targets=FieldMbr表示IdAnnotation可以被用在任何一个FieldMember上。清单4.IdAnnotation的定义packageeglx.persistence;recordIdtypeAnnotationtargets=FieldMbrendIdAnnotation非常简单,没有附带任何额外的信息。下面我们来设计一个略微复杂点的Annotation用于在生成的代码中添加一些注释。如下代码所示,CommentAnnotation同样作用于FieldMember,并且它可以指定一个字符串值text。清单5.可指定字符串text的CommentAnnotation定义recordCommenttypeAnnotationtargets=FieldMbrtextString;end在定义了CommentAnnotation之后,我们就可以在EGL代码中使用它。清单6.使用CommentAnnotationrecordMyRecordtypeEntityTab

      5、leName=Customercust_nointId,Commenttext=between10000and19999;namestringComment=hello;end为了让Comment这个新的语言元素能够真正起作用,最后要做的是使用扩展代码生成器。当发现一个CommentAnnotation时,读取text值并在目标代码中生成相应的注释。StereotypeStereotype的概念和Annotation相同,不同的是Stereotype作用于EGL类型,包括DataItem,Record,Program,Library,Service,Interface,Handler,ExternalType。Stereotype的定义和Annotation基本相同,需要注意的是targets必须是EGL类型,并且需要增加Stereotype注解。下面的代码实例是EGL中对于RUIHandlerstereotype的定义。清单7.RUIHandlerStereotype的定义RecordRUIHandlertypeAnnotationtargets=ElementKind.handle

      6、rPart,StereotypedefaultSuperType=View,onConstructionFunctionFunctionMemberRef;includeFileString;cssFileString;titleString;themeString;endStereotype的使用也和Annotation不用,如下代码所示,在EGL类型之后可以使用type关键字来指定stereotype。清单8.RUIHandlerStereotype的使用handlerHelloWorldtypeRUIhandler抽象IO语句EGL通过抽象的数据操作语句(add,get,replace,delete,open,close)来简化数据读写工作。EDT现有版本已经对关系型数据库SQL实现了这些操作语句。语言的可扩展性决定了这些数据操作语句可以被扩展到任何一个数据存储平台,比如针对文件系统的扩展,针对XML文件的扩展,针对云数据存储的扩展等。下面将以云存储为例简单介绍扩展IO语句的方法。EGL前端编译器通过datasource来决定将抽象IO操作语句编译成哪种特定实现的中间模型(IR)

      7、。为了扩展到云存储,首先必须定义一个代表云存储的新datasource。如下代码所示。这里我们又看到了熟悉的NativeType。清单9.云存储CloudDataSource定义externalTypeCloudDataSourceextendsDataSourcetypeNativeTypeend接下来需要定义代表Cloud存储访问的IO语句,这里仅以add作为例子。清单10.云存储CloudDataSourceAdd语句定义externalTypeCloudAddStatementextendsCloudActionStatement,AddStatementtypeMofClassend然后我们需要告诉编译器:当add语句的目标datasource是CloudDataSource时,把该条add语句编译成CloudAddStatement。这条规则需要写成Java代码并包含在Plugin中。最后需要做的是扩展代码生成器,为CloudAddStatement增加新的template以生成相应的目标代码。在完成了所有上述扩展后,用如下EGL代码即可把record添加到云存储中。最终使

      8、用者(写这段EGL程序的人),不需要了解存储服务的技术细节也可以方便的使用云存储或者SQL存储,甚至可以将同一个程序在不同存储之间随意的切换。清单11.云存储CloudDataSourceAdd语句使用programPgmdsCloudDataSource?Resource;functionmain()ds=newCloudDataSource();customerCustomer;customer.id=10001;customer.name=Joe;addusertods;endend回页首3.EGL代码生成器的可扩展性从图1中可以看出,EGL代码生成器的作用是把EGL模型翻译成目标语言代码,它的输入是EGL模型,输出是目标语言代码。以下是代码生成器中的一些关键概念。Template对象Template对象是EGL代码生成器中的主要部分,EGL模型中的一个元素类型般会对应一个Template类型。一个Template对象的主要功能有两个:1 .把EGL模型中的一个元素转换成目标代码2 .调用EGL模型中一个元素的子元素对应的Template以下图展示了Template的作用:图2.

      9、代码生成过程查看大图。一个简单的IR模型,包含一个Program和定义在此Program中的一个Function。从Program中的属性可知,止匕Program的包名是pkgl,程序的名字是HelloWorld;从Function的属性可知,止匕Function的名字是main,没有参数和返回值。当此模型作为输入进入Java代码生成器,ProgramTemplate会对Program进行处理,读取Program对象的属性,生成右边框中红色的代码;然后会调用FunctionTemplate,并把Function对象作为参数,FunctionTemplate读取Function对象的属性,生成右边框中蓝色的代码。对于复杂的IR模型,Template采用以上描述的流程,生成复杂的代码。生成器配置文件IR模型中的对象如何匹配其对应的Template对象呢,在EDT中,是通过一个配置文件实现的。除了Templates配置文件,EDT中还有NativeTypes配置文件和PrimitiveType配置文件。代码生成器的配置文件是Properties文件,由key-value对组成。1.Templates配置文件此文件描述了EGL模型中的一个元素类型和一个Template的对应,在目标代码生成过程中,生成器通过此文件把EGL模型的中的元素类型和Templat

      《开源EGL语言开发工具EGLDevelopmentTools,第4部分EGL高级话题》由会员M****1分享,可在线阅读,更多相关《开源EGL语言开发工具EGLDevelopmentTools,第4部分EGL高级话题》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.