没有合适的资源?快使用搜索试试~ 我知道了~
77理论计算机科学电子笔记65 No.3(2002)网址:http://www.elsevier.nl/locate/entcs/volume65.html20页基于数据库的工具自动生成Pedro Rangel Henriques,Maria JoaRangeoVaranda Pereira米尼奥大学-prh@di.uminho.ptPolytec hn icInstituteofBra ganca-mjoao@ipb.pt葡萄牙和Marjan Mernik,Mitja Lenic,EnisA vdic ause vic,ViljemZumer马里博尔大学电气工程与计算机科学学院-斯洛文尼亚fmarjan.mernik,mitja.lenic,enis,zumerg@uni-mb.si摘要许多工具可以从形式化语言定义中自动派生出来,如编译器/解释器、编辑器、分析器、可视化器/动画器等。本文介绍了由LISA此外,规范的算法动画和程序可视化,Alma,从一个扩展的LISA输入语法生成的讨论,LISA的原则和代码重用的Alma的实现。1介绍编程语言语义的形式化规范的优点是众所周知的。首先,程序的含义被精确而明确地定义;其次,它为编译器或解释器的自动生成提供了独特的可能性。这两个因素都有助于改进程序设计语言的设计和开发。用各种形式化方法之一设计的编程语言具有更好的语法和语义,1 该项目由斯洛文尼亚和葡萄牙政府根据合同SLO-P- 11/01-04提供支持2M的工作。JoaPizzioispartiallysupportedbythePortug ueseprogramPR ODEP,acco5.2damedida 5c2002年由Elsevier Science B出版诉 在CC BY-NC-ND许可下开放访问。亨利克斯等人78更少的例外,更容易学习。此外,从形式语言定义中可以自动生成许多其他基于语言的工具,例如:漂亮的打印机、语法指导的编辑器、类型检查器、语法分析器、部分求值器、调试器、分析器、测试用例生成器、可视化器、动画器、文档生成器等。更完整的列表请参见[HK00]。在大多数情况下,核心语言定义必须用特定于工具的信息来扩充在其他情况下,仅形式语言定义的一部分就足以用于自动工具生成,或者必须从形式语言定义中提取隐含信息以自动生成工具。本文的目的是双重的。一方面,我们讨论了最后一种情况下的一些工具,如帮助编写语言句子的编辑器和各种检查器(如自动机可视化器,语法树可视化器,语义评估器动画),这些工具有助于更好地理解语言分析程序。cess.这些例子都已被纳入编译器生成器系统丽莎[ML AZ0 0]。另一方面,我们提出了一些扩展的语言定义的方式,使自动生成的算法动画和程序可视化。程序可视化/动画是非常有用的工具,可以更深入、更清晰地理解算法。因此,它们对程序员和学生非常有价值。目前,算法动画器和程序可视化器是强烈的语言和算法导向的,并且它们不是以系统或自动的方式开发的。在本文中,我们的目标是表明,动画也可以自动生成扩展的语言定义。我们将简要地提出一个具体的解决方案,这样一个工具,Alma系统的发展,讨论其体系结构和实现。该系统有一个特定于每种语言的前端和一个通用的后端,并使用装饰抽象语法树(DAST)作为它们之间的中间表示。在Alma系统的实现中,两次使用了语言开发系统LISA它为每种新语言生成前端,并且它的某些部分(Java类)被重用以构建后端。本文的结构如下。第2节介绍了相关工作。第3节描述了LISA系统自动生成的基于存储的工具第4节描述了Alma系统的设计和实现。第5节是综述和结论。2相关工作第一个编译器的开发在五十年代后期没有足够的工具是一个非常复杂和耗时的任务。例如,编程语言FORTRAN的编译器的实现花了大约18个人类年。后来,形式化方法,如操作语义学,属性文法,指称语义学,动作语义学,代数语义学和抽象状态机,发展。他们让编程亨利克斯等人79语言更容易,并最终有助于编译器/解释器的自动生成。在过去的几年里,基于不同的形式化方法和处理语言规范的不同部分,已经建立了许多工具自动生成一个完整的编译器是这种系统的主要目标。然而,研究人员很快认识到,许多其他基于语言的工具可以从正式语言规范中生成。因此,许多工具不仅可以自动生成编译器,而且可以完成基于语言的编译。这种自动生成的基于语言的环境包括编辑器、类型检查器、调试器、各种分析器等。例如,FNC-2 [JP 97]是一种属性语法系统,它生成扫描器/解析器、递增属性求值器、漂亮打印机、依赖图可视化器等。CENTA UR系统[BCD+89]是一个通用的交互式环境,它从用自然语义(一种操作语义)编写的形式规格说明中产生生成的环境包括一个扫描器/解析器,一个漂亮的打印机,一个语法导向的编辑器,一个类型检查器,一个解释器和其他图形工具。SmartT ools 系 统 [ACD+01] 是 CENTAUR 系 统 的 继 承 ASF+SDF 元 素[vdBvDH+01]根据算法规范生成扫描器/解析器、漂亮的打印器、语法指导的在Gem-Mex系统[AKP 97]中,形式语言是用抽象状态机来指定的。 生成的环境包括扫描器/解析器、类型检查器、解释器、调试器等。LRC系统[SK98]从高阶属性语法规范生成增量扫描器/解析器和属性求值器、语法指导编辑器、抽象语义树的多视图(unparsing窗口)、基于Windows的接口等。从上面对各种公知的编译器/解释器生成器的描述可以注意到,编辑器、漂亮的打印机,并且类型检查器几乎是这种自动生成环境中的标准工具。据我们所知,没有一个现有的编译器生成器自动生成可视化和动画程序写在一个新的指定的语言。搜索产生某种动画的工具,以解释语义基础的一个给定的程序(以帮助程序员推理),我们发现了几个有趣的动画和可视化系统-例如:BALSA [BS 84]; TANGO [Sta 90]; JCAT [BNR97]; ZSTEP [LF 95]; JE-LI O T[HP S+97];PAVANE[RCWP 9 2] 或 LENS[MS93]。然而,大多数人众所周知的动画系统不是通用的。他们只是动画一个特定的算法(允许或不选择一些配置参数),或者,如果他们接受一个更大的算法集,程序必须用特定的语言编写。通常在这种情况下,程序员应该在源代码上使用特殊的数据类型或过程(可视化注释),这意味着必须修改源程序才能动画。在文献中描述的动画不是自动构造的语言规范。亨利克斯等人803来自语言定义的LISA是一个编译器-编译器,或者是一个从基于属性语法的语言规范自动生成编译器/解释器的系统。这个合成词LISA规范的税收和语义及其特殊功能(“模板”和“多属性语法继承”)在[ML EZ 2000]中有更详细的描述。LISA在生成真实编程语言编译器中的使用PLM,AALCOOL和COOL,SODL)在[MLAZ20098],[ALMZ2001],[MNA+ 01]中报道为了说明LISA风格,下面给出了一种玩具语言的规范--带有JavaScript的简单表达式语言,SELA。根据这些描述,LISA自动生成一个SELA编译器/解释器。拉美经济体系f词典F数字[0-9]+标识符[a-z]+运算符\+|:=忽略[\0x09\0x0A\0x0D\]+G属性哈希表 *.inEnv,*.outEnv; int *.val;规则起始fSTART::= STMTS计算System. out. println();START.outEnv = STMTS.outEnv;g、G规则语句fSTMTS::= STMT STMTS计算fSTMT.inEnv = STMTS[0].inEnv;STMTS[1].inEnv = STMT.outEnv;STMTS[0].outEnv = STMTS[1].outEnv;G| STMT计算fSTMT.inEnv = STMTS[0].inEnv;STMTS[0].outEnv = STMT.outEnv;g、G规则语句fSTMT::=#Identifier\:= EXPR计算fEXPR.inEnv = STMT.inEnv;STMT.outEnv = put(STMT.inEnv,#Identifier.value(),EXPR.val);g、G规则表达式fEXPR::= EXPR + EXPR计算fEXPR[2].inEnv = EXPR[0].inEnv;EXPR[1].inEnv = EXPR[0].inEnv;EXPR[0].val = EXPR[1].val + EXPR[2].val;g、G规则术语1fEXPR::=#数字计算fEXPR.val = 0.valueOf(int n = nums();g、G规则术语2亨利克斯等人81生成工具正式规范固定部分可变部分Lexer正则定义解释动作表行动表:状态! 状态解析器(LR)BNF解释动作表和转到表行动表:状态T! 操作转 到 表 : 状 态 ( T状态[ N)!评估器属性文法(AG)树遍历算法语义功能语言知识编辑器正则定义(摘自AG)匹配算法行动表:状态! 状态结构编辑器BNF(提取自AG)增量分析算法与解析器FSAtion视觉化正则定义(摘自AG)FSA布局算法与lexer二叉树可视化BNF(提取自AG)语法树布局算法语法树依赖图可视化提取自AGDG布局算法依赖图语义求值器动画提取自AG语义树布局算法修饰语法树语义函数程序可视化和动画(ALMA)附加形式规格可视化和重写规则可视化、重写和动画算法装饰抽象树表1LISA生成的基于语言的工具的固定和可变部分fEXPR::=#标识符计算fEXPR.val =(()EXPR.inEnv.get(int maximum();g、G方法环境F导入java.util.*;publicvoid run(int val,int name,int size)Fenv =(Hashtable)env.clone();env.put(name,new String(val));return env;GGG除此之外,LISA还衍生出其他工具。在下面的小节中,描述了这种工具的三个系列:编辑器,用于帮助最终用户创建和维护指定语言的句子,即,他想要处理(编译/解释)的源文本(或源程序);对于理解行为或调试生成的语言处理器本身(编译器/解释器)有用的检查器;以及与检查器类似的可视化器/动画器,对于理解正在处理的源程序的含义有用。当一个工具可以从一个固定部分和一个可变部分构建时,自动生成是可能的;而且,依赖于语言的可变部分必须是从语言规范中系统地导出的该部分具有定义良好的内部表示,可以由固定部分的算法遍历表1总结了LISA系统生成的一些基于语言的工具的这些部分。本文的目的不是描述所有这些算法,除了最有趣的程序可视化和动画。第4节对此进行了详细描述。亨利克斯等人82Fig. 1.语言知识编辑3.1编辑本节介绍两种不同的LISA3.1.1语言知识丰富的编辑LISA生成一个语言知识编辑器,它是文本编辑器和语法导向编辑器之间的妥协,从正式的语言规范。LISA生成的语言知识丰富的编辑器知道语言词典的常规定义(见表1)。因此,它可以为程序的不同部分(注释、操作符、保留字等)着色。以增强程序的可理解性和可读性。在图1中,SELA程序中的操作员在编辑时被识别,并以不同的颜色显示。3.1.2语法导向编辑器语法指导的编辑器是知道被编辑程序的语言语法的编辑器它们帮助用户在实际编译之前编写语法正确的程序,展示结构和/或直接在正确的地方插入关键字(用户只需完成文本的可变部分)。结构编辑器是一种语法导向的编辑器,在编辑程序时,可以显式地看到所编写程序的语法结构(参见图2和图3)。3.2语言处理器本小节介绍了三种不同的LISA生成的检查器。3.2.1有限状态自动机可视化借助有向图的可视化表示,可以清楚地看到如何用简单的正则表达式指定复杂的自动机,以及一些简单的自动机如何也可以确定规范中的冲突并解决它们。在图4中,给出了SELA语言亨利克斯等人83图二.结构编辑器图三.树视图见图4。FSA视图亨利克斯等人84图五.依赖关系图视图3.2.2树可视化对编译器的基本理解是基于对解析过程的理解这个工具是一个图形浏览器,用于浏览LISA生成的编译器在解析给定源程序后构建的语法树。通过这种可视化,可以测量不同语法规范和解析技术对树的形状和大小的影响,并评估它们对编译器实现的影响;通过这种方式,可以设计更好的语法,从而更容易理解的语义。图3展示了这个工具的输出:用户在编辑程序时选择的语法树的一部分。3.2.3依赖图可视化由于属性语法是在声明级别上指定的,因此属性求值的顺序由编译器构造工具确定。但是这个序列对于人类理解实际的求值顺序也很重要,这再次帮助语言设计者改进他们的语法。更重要的是检测语法上的循环;如果属性依赖性导致间接循环,则可以借助视觉表示轻松发现。在图5中,展示了由LISA生成的工具为第5个SELA产品绘制的增强依赖图3.2.4语义求值器动画在属性文法中,一组携带语义信息的属性与每个非终结符相例如,属性inEnv和val与非终结符EXPR相关联(参见SELA语言规范)。在评估过程中,必须计算这些属性的值。通过动画化对语义树的节点的访问以及这些节点中的属性的评估,可以更好地理解语义分析;图6显示了动画化过程的快照。因此,动画的评价过程也是非常有帮助的,亨利克斯等人85见图6。语义评估视图调试过程。用户还可以通过单步执行和设置断点来控制执行3.3程序可视化和动画另一个可以从形式语言规范中衍生出来的工具是程序可视化器/动画器。这样一系列工具的目的是帮助程序员检查源程序的数据和控制流-程序实现的算法的静态视图(可视化)-并了解其行为-算法执行的动态视图(动画)。这样的工具可以通过一个通用的可视化/动画(语言独立的后端)提供扩展的LISA属性语法,指定要分析的语言的专业化。AG扩展只是定义了将输入语句转换为动画师的内部表示(DAST)的方式下面是在前面小节中介绍的SELA导入“AlmaLib.lisa”;languageAlmaSELAextends SELA,AlmaBasef规则扩展开始FSTART::= STMTS计算fALMA_ROOT START,STMTS>ALMA_TAB START,STMTS>g、G规则扩展语句fSTMTS::= STMT STMTS计算fALMA_STATS STMTS,STMT,STMTS[1]>G亨利克斯等人86延伸原子语法+使用模板构建DAST模板定义阿尔玛基地属性方法属性文法代码AlmaLib延伸动画见图7。从LISA规范生成动画| STMT计算fALMA_IDENT STMTS,STMT>g、Grule extends语句fSTMT::=#标识符:= EXPR计算FALMA_ASSIGN STMT,ALMA_VAR(#Identifier),EXPR>g、G规则扩展表达式fEXPR::= EXPR + EXPR计算FALMA_OPER EXPR[0],EXPR[1],EXPR[2],“+">g、G规则扩展术语1fEXPR::=#数字计算FALMA_CONST EXPR,#Number>g、G规则扩展Term2fEXPR::=#标识符计算FALMA_VAR EXPR,#标识符>g、GG上面显示的扩展说明了模板的使用,以及多属性语法继承,它们都是标准的LISA特性。它用于指定与DAST构造相关的属性求值;它假定SELA属性语法中指定的语法和语义,并添加新的计算语句,以构建Alma使用的内部表示。为了以清晰简洁的方式编写这些语句,我们使用模板。每个模板指定为:模板属性X_in,Y_in>计算ALMA_ROOT{X_in.dast=new Alma.CRoot(Y_in.tree);}方法CRoot是继承自AlmaBase的预定义方法之一,源文本动画师编译器亨利克斯等人87++一+一+a B+a B+C见图8。动画师生成的可视化构建DAST节点。从这个规范中,我们生成了一个解析器和一个翻译器,它将每个输入文本转换为动画师使用的抽象表示,这对所有不同的源语言都是通用的。这个处理器,我们称之为动画师在这种情况下,它的固定部分比前面3.1和3.2小节中研究的情况更复杂所以,在拉美经济体系中使用一个源程序:a:=2+2+5b:=a+3+a c:=a+b+6这些算法可以生成如图8所示的可视化。以图片为例,因为最终的布局(使用的图纸)可以由Alma设计师修改。可视化规则调用的绘图过程可以很容易地更改。下一节将讨论的系统有一个特定于每种语言的前端和一个通用的后端,并使用一个装饰的抽象语法树(DAST)作为它们之间的中间表示。图7提供了Alma4Alma实施Alma系统被设计成一种新的通用工具,用于基于输入程序的内部表示的程序可视化和动画,以避免对源代码进行任何类型的注释(使用可视类型或语句),并能够处理不同的编程语言。4.1阿尔玛建筑为了满足上述需求,我们设想了图9所示的架构在Alma中,我们还使用DAST作为我们打算可视化的程序的内部表示;这样,我们在前端隔离了所有源语言依赖项,而在后端保留了通用动画引擎。DAST3663030212199121239954422亨利克斯等人88丽莎属性语法规范标准Alma Java类丽莎VisualizerVRB重写器源程序编译器RRB动画师DAST前端后端动画见图9。Alma系统架构由独立于具体源语言的抽象语法指定。 这里不可能包括语法来形式化DAST节点的类型(结构和属性);有关更多细节,我们建议阅读[VH 01]。从某种意义上说,我们可以说抽象语法模型的虚拟机。因此,DAST旨在表示程序在每个时刻的状态,而不是直接反映源语言语法。通过这种方式,我们重写DAST来描述不同的程序状态,模拟其执行;注意,我们处理的是语义转换过程,而不仅仅是语法重写。一个树漫游可视化工具,遍历树,创建节点的可视化表示,粘合图形,以获得该时刻的程序图像。然后重写DAST(以获得下一个内部状态),并重新绘制,生成一组将构成程序动画的图像。4.1.1Alma中的可视化可视化实现应用可视化规则(VR)的DAST子树,这些规则定义树和图形之间的映射。当对应于给定树的节点的部分图形被组装在一起时,我们获得相应程序的可视化表示。可视化规则VRB(可视化规则库)是一个映射,它将由语法规则(或产生式)定义的每个属性树与一组对相DAST 7!设置(条件DP)其中每一对具有匹配条件cond和过程dp,该过程定义树视觉表示。每个cond都是一个谓词,在与树节点相关联的属性值上,约束绘图过程(dp)的使用,即,第二个限制了可视化规则的适用性。每个可视化规则的书面形式如下:vis_rule(mid)= tree-pattern>,(条件),{绘图程序}亨利克斯等人89 = root,child_1,.,儿童_n>在此模板中,condition是一个布尔表达式(默认情况下,计算结果为true),而drawing procedure是对基本绘图过程的一个或多个调用的序列可视化规则可以应用于作为生产实例的所有树。树模式是使用变量来表示每个节点的。至少,每个节点都具有将在规则规范上使用的属性值、名称和类型,以公式化条件或作为参数传递给绘图过程。注意,尽管每个VRB将一组对关联到一个产生式,但为了简单起见,上面介绍的其为了说明这个想法,假设在阿尔玛p13:rel_oper:exp exp其中exp定义为:p14:exp:CONSTp15:exp:VARp16:exp:oper要为该关系操作构建可视化表示,我们需要区分两种情况:第一种情况发生在操作数表达式的值未知时(值属性尚未实例化);第二种情况发生在操作数的值因此,产生式p13的不同语义情况将由不同的图表示,如图10的示例所示,其中我们假设第一个表达式(左操作数)是变量,第二个表达式(右操作数)是常量:顶部的图描述第一种情况,下面的图描述第二种情况。指定映射的可视化规则如下所示。a.namea.valuea.nameopr.nameopr.name见图10。关系操作vis_rule(p13)=,((a.value=NULL)AND(c.value=NULL)AND(a.type=VAR)AND(c.type=CONST)),{drawRect(a.name),drawRect(),put(opr.name),putvis_rule(p13)=,((a.value!= NULL)AND(c.value!=NULL)AND(a.type=VAR)AND(c.type=CONST)),{drawRect(a. name,a.value),drawRect(c.value),c.value亨利克斯等人90put(opr.name),put('?')}可视化算法可视化算法根据自底向上的方法(post-fix traversal)将可视化规则应用于以每个节点为根的子树来遍历树。使用根节点的产品标识符,它获得一组可能的表示;然后根据为真的约束条件选择绘图过程。算法如下所示。public void run(){如果不是(空(树))then forall t in children(tree)do visualize(t); rules- VRB[prodId(tree)]; found-false;While(not(empty(rules))and not(found))do r-choice(rules);rules- rules - r;found-match(tree,r)如果(找到),则绘制(树,r);}4.1.2动画inAlma每个重写规则(RR)指定程序执行过程中的状态转换;应用规则的结果是通过子树的语义(也可以是语法)改变获得的新DAST。这种对原始DAST的系统性重写与产生动画的可视化序列交错。主函数以参数化的方式将重写过程与可视化结合起来,允许同一源程序的不同视图重写规则RRB(重写规则库)是将一组元组与每棵树相关联的映射。DAST 7!set(cond newtree atribsEval)其中每个元组具有匹配条件cond、树newtree(其定义语法变换)和属性评估过程atribsEval(其定义属性值的改变(语义修改))。每个重写规则的书面形式如下:rule(mid)= tree-pattern>,(条件),,{属性评估} = root,child_1,.,儿童_n> = root,child_1,.,儿童_n>在此模板中,condition是一个布尔表达式(默认情况下,计算结果为true),而attribute evaluation是一组定义新属性值的语句(默认情况下,计算结果为skip)。重写规则可以应用于作为生产实例的所有树。树模式将变量关联到节点,以便在规则规范的其他字段中使用:匹配条件、新树和亨利克斯等人91属性评价。当一个变量同时出现在树模式(我们称之为RR的左侧)和新树(所谓的RR的右侧)中时,这意味着该节点中包含的所有信息,包括其属性都不会被修改,即该节点在转换中保持原样。请注意,尽管每个RRB关联到一个生产一组元组,其书面形式,上面介绍的,只描述一个元组。因此,对于同一个产品,可能会有多个规则。例如,考虑以下属于Almap8:IF:cond actions动作p9:|第二行动将使用以下规则修改DASTrule(p8)= if,op,a,b>,(op.value =true),,- -rule(p8)= if,op,a,b>,(op.value =false),,- -重写算法重写算法也是遍历树的树遍历器,直到可以应用重写规则,或者没有更多的规则匹配树节点(在这种情况下,转换过程停止)。对于每个节点,该算法使用其生产标识符(productionidentifier,RRId)并评估与这些规则相关联的上下文条件来确定可能的RR将修改DAST,删除与所选RR左侧匹配的节点,并将其替换为该RR右侧定义的新树。这种转换可以只是语义修改(仅属性值改变),但也可以是语法修改(某些节点消失或被替换)。重写算法如下:public void run(){如果不是(empty(tree)),则rules- RRB[prodId(tree)];found-false;While(not(empty(rules))and not(found))do r-choice(rules);rules- rules - r;found-match(tree,r)如果(发现)then tree-change(tree,r)else a-nextchild(tree)而(not(empty(a))and not(rewrited(a)做一个-nextchild(tree)如果不是(empty(a)),则树-rebuild(tree,a,rewrite(a))return(tree)}动画算法main函数定义动画过程,反复调用可视化和重写过程。最简单的方法是重新绘制树,亨利克斯等人92Visualizer自动机和DG可视化丽莎规范词法分析器模板分析程序模板求值模板编译器/解释器语法树和语义评价可视化输入程序程序可视化/动画Visualizer内部表示分析程序求值器lexer内部表示编译器生成器面向语言的编辑器见图11。LISA系统的体系结构每次重写之后,但是所获得的图像序列可能非常长并且可能不是最有趣的。因此,树重绘的粒度由一个函数控制,下面称为shownow(),在每棵树作为Alma后端核心的动画算法public void run(){return(tree);rewrite(tree);如果shownow()then visualize(tree); until(tree==rewrite(tree))}当不能应用更多规则时,重写函数的输出和输入是相同的。4.2在Alma实现中重用LISALISA本身和生成的编译器是用Java编程语言实现的,遵循面向对象的方法-参见图11,以获得集成了所有生成工具的LISA因此,很容易识别和理解LISA系统和工具用于处理给定属性语法规范或源程序的数据结构和函数-它们被正确地因此,实现Alma所需的数据结构和算法的编码变得简单明了,因为重用了一些引用的类。图12提供了Alma实现的全局视图。为了构建DAST--即Alma为了实现这些方 法 , 我 们 重 用 了 Java 类 CTreeNode 、 CSyntaxTree 和CParseSymbol,LISA使用这些类来创建其内部树表示。作为一个直接的结果,LISA环境中提供的所有设施亨利克斯等人93使用LISA输出BE的主要部使用使用RRB生成丽莎作品图片1图片2DAST图片3生成Lexer+解析器+评估器动画算法(可视化+重写器)此生成的文件调用要在DAST编译器VRB见图12。LISA系统与Alma系统的连接来处理DAST。这些类被再次重用,以构建实现后端(可视化和动画)算法所需的映射VRB和RRB,如4.1.1和4.1.2小节所述-记住,两个映射中的每个(可视化或重写)规则都是根据树模式定义的。后端本身是另一个Java类,专门为此目的而开发,它重用数据结构并直接实现前面小节中所示的算法为了编写该类,我们保持了LISA开发中遵循的OO方法。为了编写Alma的主类,它应该包含必要的方法来调用和同步动画师的前端和后端函数,我们只是重用和改编了标准Java类www.example.com,在LISA库中Compile.java5结论今天的许多应用程序都是在易于理解的领域中编写的。编程中的一个趋势是提供专门设计用于处理这种特定领域应用的开发的软件工具,以便大大简化它们的构造。这些工具对特定任务进行高级描述,并生成完整的应用程序。编译器构造就是这样一个成熟的领域,因为手工生成编译器有着悠久的传统,而且基本理论(支持所有分析阶段,甚至代码生成和优化过程)也很好理解。目前,已有许多生成器可以根据程序设计语言规范自动生成编译器或解释器正如本文所示,不仅仅是标准的编译器/解释器可以自动生成。形式化语言规范包含了大量的信息,许多基于语言的工具,如编辑器、类型检查器、调试器、可视化工具等,都可以从形式化语言规范中获得信息。亨利克斯等人94alizer,animators动画,can be generated生成.有时隐含的信息就足够了,但在其他一些情况下,必须添加一些额外的数据。这两种类型的具体例子,产生的发生器系统LISA,介绍和讨论沿文章。我们不打算在本文中讨论LISA的实际性能,因为我们的目的是提高属性语法规范的能力,但是我们的实验允许我们说,与类似的程序相比,生成的工具的执行时间是完全可以接受的。这种方法对软件开发的好处是多方面的。一方面,开发人员只是编写更简洁和清晰的形式化描述-它们更快地生成,更容易理解和维护,因为它们更短;众所周知,数千行复杂代码可以从几十行语法定义中自动获得。另一方面,可以从相同的规范中获得不同的工具,这显然是一个主要的优势。最后但并非最不重要的是,一个非常好的和最佳的代码(由语言处理方法和算法的专家开发)在自动生成过程中被重用详细讨论了一个特定工具的架构和实现,程序可视化/动画Alma,我们还证明了:(1)语法方法,以软件工程,支持发电机,是一个很好的方式来开发应用程序(我们系统地创建了一个通用的动画,而不是一个算法或语言依赖的);和(2)模块化,面向对象的编程方式,明是有价值的有效重用的代码(我们使用了一些LISA类在Alma),实际上节省了开发时间和精力。为了调整Alma使用的内部表示,实现了一些前端。到目前为止,我们正在开发后端类来实现可视化和动画算法,我们希望在不久的将来会有一些实验结果。引用[ACD+01] Isabelle Attali , Carine Courbis , Pascal Degenne , Alexandre Fau ,Didier Parigot,and Claude Pasquier. SmartTools:一个交互式环境工具的生成器。在第10届国际建筑会议上,第2027卷,第355-360页。计算机科学讲义,Springer-Verlag,2001年。[AKP97] M. Anlauff,P.W. Kutter和A.皮耶兰托尼奥Montages的正式方面和开发环境。第二届国际代数规范理论与实践研讨会(ASF+SDF电子计算讲习班,Springer/英国计算机学会,1997年。[AL MZ01]EnisAvdi c au sev i c',MitjaLeni c,MarjanMerni k,andViljemZr. 面向方面语言的设计与实现实验. ACM SIGPLAN Notices,36(12):84-94,December 2001.亨利克斯等人95[BCD+89] P. Borras,D. Clement,Th. Despeyroux,J. Incerpi,G. Kahn和B.系统。ACM SIGPLAN Notices,24(2):14-24,February 1989.[BNR 97] M.H. 布朗,M。A. Najork和R.Raisamo。一个基于Java的协作式活动教科书的实现。在VLIEEE,1997年9月。[BS 84] M. H. Brown和R.塞奇威克一种算法动画系统。在SIGGRAPHACM计算机图形。[HK00] Jan Heering和Paul Klint。程序设计语言的语义学:一种面向工具的方法. ACM Sigplan Notices,35(3):39[HPS+97] J. Haajanen,M. Pesonius,E. Sutien,T. Terasvirta,P. Vanninen,和J. Tarhio。网络中用户算法的动画。在VLIEEE,1997年9月。[JP97]马丁·卡丹和迪迪埃·帕里戈。FNC-2系统用户指南和参考手册,1.19版。技术报告,INRIA Rocquencourt,1997年。[LF95] H. Lieberman和C.炒在编程中弥合代码和行为之间的差距。ACM计算机和人机界面会议,丹佛,科罗拉多州,1995年4月。[ML AZ1998]MarjanMern i k,MitjaLeni c,EnisAvdi ca use vi c,andViljemZr. 一种可重用的面向对象的程序设计语言形式规范方法。L’Objet[ML AZ00]MarjanMerni k,MitjaLeni c,EnisAvdi ca u se vi c,andViljemZr. 编译器/解释 器生 成 器系 统LISA 。 IEEECD ROM Proceedings of 33rd HawaiiInternational Conference on System Sciences,2000。[ML EZ2000]MarjanMerni k,MitjaLeni c,EnisAvdi ca u se vi c,andViljemZr. 多属性语法继承。Informatica,24(3):319[M NA+01]M. Mernik,U. N ovak,E. 我的意思是,先生。 Leni c,和V. 我的天简单对象描述语言的设 计与实现。在ACM Symposium on AppliedComputing,SAC[MS93] S. Mukherjea和J.T.斯塔斯科将算法动画技术应用于程序跟踪、调试和理解。第15届软件工程国际会议,第456-465页,巴尔的摩,1993年5月。[RCWP92] G. C. Roman,K.考克斯角Wilcox,and J. Plun. Pavane:一个并发计算 的 声 明 式 可 视 化 系 统 。 Journal of Visual Languages andComputing,3(1):161亨利克斯等人96[SK98]Jo aZeloSara iv a和MatthijsKuipe r.Lrc-一个面向语言的增量工具的生成器在第七届国际建筑会议上,第1383卷。计算机科学讲义,Springer-Verlag,1998年。[Sta90] John T.斯塔斯科用探戈简化算法动画。IEEE视觉语言研讨会。IEEE,1990年10月。[vdBvDH+ 01] M.G.J. vanden布兰德,A. vanDeursen,J. Heering,H.A. 德容,M. de Jonge,T.Kuipers,P.克林特湖Moonen,P.A.奥利弗,J。舍尔德,J.J. Vinju,E. Visser和J. Visser。 ASF+SDF元环境:基于组件的语言开发环境。在第10届国际建筑会议上,第2027卷,第365-370页。计算机科学讲义,Springer-Verlag,2001年。[VH01] M. J. Varanda和P. Henriques。基于抽象表示和形式映射的程序可视化/动画。在IEEE,编辑,HCC
下载后可阅读完整内容,剩余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直接复制
信息提交成功