没有合适的资源?快使用搜索试试~ 我知道了~
ASDF:一种可重用动作语义描述的形式主义
理论计算机科学电子笔记110(2004)149-168www.elsevier.com/locate/entcs行动环境马克·范登·布兰德软件工程系,CWIKruislaan 413,NL-1098 SJAmsterdam,荷兰和Instituut voor Informatica en Electrotechniek,Hogeschool vanAmsterdamWeesperzijde 190,NL-1097 DZ Amsterdam,荷兰约根·艾弗森,Peter D. 苔藓计算机科学系1地址:Aarhus,Aabogade 34,DK-8200 Aarhus N,Denmark摘要一些基本的编程结构(例如,条件语句)存在于许多不同的编程语言中,并且在设计新的语言时通常可以不加改变地被包括在内。然而,在编写语言的语义描述时,通常不可能不加改变地重用以前描述的部分。本文介绍了一种新的形式主义,ASDF,它已被专门设计用于提供可重用的动作语义描述的个别语言结构。 使用ASDF的初始案例研究已经提供了Core ML底层所有基本结构的可重用描述。本文还介绍了行动环境,一个新的环境,支持使用和验证ASDF描述。动作环境是在ASF+SDF元环境之上实现的,它利用了最新的技术进步来集成不同的形式主义,并继承了元环境的所有主要功能。保留字:ASF+SDF,ASDF,动作语义,模块化,重用,语言环境1计算机科学基础研究(www.brics.dk),由丹麦国家研究基金会资助。1571-0661 © 2004 Elsevier B. V.根据CC BY-NC-ND许可证开放访问。doi:10.1016/j.entcs.2004.06.005150M. van den Brand等理论计算机科学电子笔记110(2004)1491介绍Action Semantics [18]是一个描述编程语言动态语义的实用框架。动作语义描述(ASD)中涉及任何特定结构的部分独立于所描述语言中包含的其他结构,因此ASD具有高度的固有模块性,并且可以很容易地扩展或修改。也可以将一种语言的ASD的一部分在另一种语言的ASD中重用,而不进行更改。然而,对于ASD的传统模块化结构,通常不可能重用整个模块,因此必须复制和粘贴所需的部分。Doh和Mosses [11]提出了一种ASD的模块化结构,每个结构的描述都是一个单独的模块。这种新的结构允许通过列出所包含结构的模块名称来描述完整的语言,并完全支持显式重用部分语义描述。Doh和Mosses在ASF+SDF [10]中制定了他们的模块,并使用ASF+SDF元环境[6]来检查它们。Doh和Mosses的方法是可行的,但直接使用ASF+SDF会带来相当大的符号开销。在本文中,我们介绍了一个新的动作语义描述形式主义,ASDF,它已被专门设计用于提供可重用的描述个别的语言结构。我们还报告了行动环境,一个新的环境,支持使用和验证ASDF描述。动作环境是在ASF+SDF元环境之上实现的,它利用了不同形式主义集成技术的最新进展[5],并继承了元环境的所有主要功能。由于元环境的开放式架构,这是可行的。元环境有一个基于组件的 体系结构 ,它允许 以相当简单 的方式轻 松连接新 组件。为了 将ASF+SDF元环境转换为动作环境,必须定义一些新组件,并将其插入元环境。最重要的是负责将ASDF转换为ASF+SDF的组件。在未来,更多ASDF特定的组件,如类型检查器,解释器和编译器,将被连接。概述:第2节回顾了ASF+SDF和元环境。第3节简要介绍了动作语义学,重点是模块化。第4节介绍ASDF和动作环境。第5节回顾了M. van den Brand等理论计算机科学电子笔记110(2004)149151元环境,并解释了用于集成ASDF的新技术第六节介绍了一些相关的工作。第7节结束2ASF+SDFASF+SDF是一种通用的、可执行的代数规范语言。迄今为止,它的主要应用领域是(编程)语言的语法和静态语义的模块化定义,但它也被用于语言的(动态)动作语义的模块化定义(见第3节)和定义语言之间的翻译正如名称所示,ASF+SDF形式主义是两个以前的形式主义的组合:ASF,代数规范形式主义[2,10]和SDF,定义形式主义[12]。SDF用于定义语言的具体语法,而ASF用于定义条件重写规则; ASF+SDF的组合允许在规范的SDF部分中定义的语法在ASF部分中使用,从而支持在代数规范中使用所谓的ASF+SDF允许将规范划分为命名模块,便于重用和共享(如SDF)。在本节的其余部分中,将讨论SDF和ASF,以及 支持使用ASF+SDF的交互式编程环境:ASF+SDF元环境[6]。2.1定义形式主义定义形式主义SDF是一种声明性的形式主义,用于定义语言的具体语法:不仅是编程语言,例如,Java和COBOL,但也包括特定语言,例如,CASL,Elan和动作语义学。与(E)BNF类形式主义相反,SDF允许语法的模块化定义。此外,SDF并不强加特定类别的语法,如LL(k),LR(k)等,但是允许任意的、无循环的、无上下文的语法--这些语法甚至可能是不明确的。任意上下文无关文法类的选择使文法的模块化定义成为可能,因为只有该类在并集下是封闭的。尽管在定义编程语言的语法时几乎不需要任意上下文无关语法的全部功能(除了COBOL,PL/I等语言),模块化对于在各种语言定义中重用特定的语言构造是必不可少的。SDF定义由模块集合组成,其中模块可以导入其他模块。导入机制支持图元参数化和符号重命名功能。这在图1中演示:模块“containers/List“的形式参数X152M. van den Brand等理论计算机科学电子笔记110(2004)149模块基本/整数importbasic/布尔值出口分类NatCon词汇句法[0-9]+ ->NatCon上下文无关语法国家电视台““+”-->->{left}->{left}->{left}->{bracket}上下文无关优先级“*"{left:“+”->“-"词汇限制NATCON-/-[0-9]hiddens...变量“Int”[0-9]* ->模块ListOfIntegersimportsbasic/Integers containers/List[编辑]...Modulecontainers/List[X]基本导入/基本布尔值/整数...Fig. 1.一个小的SDF定义展示了参数化机制图二. 整数的SDF模块实际的参数是导入的模块会自动导出;模块中定义的语法可以导出或隐藏。图2展示了定义词汇语法、上下文无关语法、关联性和优先级的基本特征2.2代数规范形式主义ASF提供了条件方程,其中也允许方程的否定作为条件。在相应的SDF模块和传递闭包M. van den Brand等理论计算机科学电子笔记110(2004)149153方程[]0+Int=Int[]Int+0 =Int[]1 + 1 =2[] 1 + 2 = 3...[]Int* 0 =0[]Int* 1 =Int[]gt(Int2,1)=true====>Int1*Int2 =Int1+Int1*(Int2-1)...图三. 整数的ASF方程在编写ASF模块的条件方程时,2.3ASF+SDF元环境ASF+SDF规范的开发由交互式集成编程环境ASF+SDF元环境[6]支持。该编程环境为模块的SDF和ASF部分以及术语、模块的格式良好性检查以及导入图和解析树的可视化设施提供语法指导的该环境在规范级别上支持所有类型的重构操作:模块的重命名、模块的复制等。此外,一系列预定义的原始数据结构,例如,布尔、整数、字符串、列表、集合等,服务器租用-美国服务租用该库还包含越来越多的编程和特定语言的语法集合,例如,Java、C、CASL、SDF本身等。ASF+SDF元环境的用户界面如图4所示。定义Pico(一种玩具语言)具体语法的模块已经开放。在左侧部分,我们看到了模块的树结构视图,而右侧窗格显示了模块导入关系的图形。3动作语义学动作语义学的主要目标[18]是编程语言的描述应该尽可能容易使用。动作语义去重(ASD)从小型的理想化语言到完整的语言[7,21]平滑地扩展,并且它们具有高度的可理解性(不仅关于符号的清晰性,而且关于底层概念)。他们还154M. van den Brand等理论计算机科学电子笔记110(2004)149见图4。 ASF+SDF元环境的GUI。具有固有的良好模块性,并且可以在不重新表述与未改变的构造有关的描述部分的情况下进行扩展或修改。动作语义学(AS)是指称语义学和操作语义学的混合体,结合了两种方法的优点.与传统的指称描述一样,归纳定义的语义函数映射程序(以及声明、表达式、语句等)。组合到它们的外延上,这对它们的行为进行了建模。不同之处在于,在这里,指称是动作,并且用动作表示法(AN)来表达,动作表示法(AN)本身是操作性定义的(最初[18,App. C]使用结构操作语义学,后来[19]以更模块化的风格)。ASD的固有模块性来自AN的设计,而不是来自它们显式划分为命名模块。例如,当它们组合的动作被丰富了新的行为方面时,动作组合器的应用仍然有效(和有意义);同样地,关于动作处理的数据。AN的原始版本[18,App. B]相当大,但修订版本AN-2 [15]更经济,AN-2内核符号的大小与指称语义的一元风格中使用的符号相当(例如,如[16]所示虽然将ASD划分为命名模块对于可扩展性和可修改性来说并不重要,但整体模块化结构对于可重用性来说至关重要。直到最近,结构是分层的,是对通常将语义描述划分为处理M. van den Brand等理论计算机科学电子笔记110(2004)149155模块Exp导入值导出排序Exp上下文无关语法“evaluate”“[[”Exp“]]”->Action变量E [1-9] ->Exp图五. SDF中的模块扩展抽象语法,辅助语义实体和语义功能的定义。抽象语法模块为每种构造(表达式、语句等)都有一个子模块,语义功能也是如此以前的AS环境的实现基于ASF+SDF元环境,ASD工具[9],依赖于这种结构来区分不同类型的子模块。Doh和Mosses [11]意识到,这种传统的模块化结构是显式重用ASD部分的主要障碍。例如,假设标准ML的AS已经给出[21],我们正在编写Java的AS[7],希望重用两种语言共有的所有结构的语义方程(关于抽象语法的模符号变化我们不能从ML的ASD导入整个表达式模块,以便在Java的ASD中重用,因为这将包括Java中没有的ML结构(例如,匿名函数抽象)。当然,我们可以简单地复制和粘贴各个语义等式Doh和Mosses建议改变ASD的模块化结构,以支持语义的增量方法。其主要思想是为每个单独的构造引入一个单独的模块,指定其抽象语法和定义其AS的语义方程,并为所需的辅助实体引用辅助模块。每种结构都有一个单独的模块,但与前一种结构不同,这个模块没有组合特定的结构选择:它只是引入了句法排序,元变量范围,以及用于相应语义功能的符号。ASF+SDF用于编写具有新模块结构的ASD [11],并给出了涉及小型案例研究的演示[17]。图5显示了用于排序Exp的SDF模块,156M. van den Brand等理论计算机科学电子笔记110(2004)149模块Exp/if-then-else进出口出口上下文无关语法“if”Exp“then”Exp“else”Exp->Exp Bool->Value方程[10]evaluate[[ ifE1 thenE2 elseE3]]=[1]求[1]的值,然后选择[2]。(假设为真,则求值[[E2]])或(假设为假,则求值[[E3]])见图6。 ASF+SDF中的Exp/if-then-else模块函数求值和元变量范围在Exp.引入排序Action的模块通过辅助模块Values间接导入。图6显示了通常条件表达式的ASD的ASF+SDF模块,其中条件是布尔值表达式。它使用SDF来引入用于构造的抽象语法的mix fix表示法,并要求将Bool包含在排序Value中。请注意,需要为构造中涉及的所有类型的构造导入模块方程式部分使用ASF定义构造的动作语义,使用模块的SDF部分中引入的符号和导入模块中的符号。4ASDFASDF是一种语言规范形式主义,旨在使编写单一语言结构的ASD变得更容易4.1形式主义我们以前使用普通ASF+SDF来编写ASD,如第3节所述。使用ASF+SDF的优点是它允许ASD使用元环境进行原型化。此外,其他工具,如动作解释器,动作类型检查器等,可以连接到Meta环境。然而,使用ASF+SDF来编写描述单一语言结构的小模块并不是最佳的,这促使了ASDF的发展。使用ASF+SDF的主要问题与M. van den Brand等理论计算机科学电子笔记110(2004)149157Exp::= Ide|ifExpthenExp否则Exp|Exp Exp|fnIde=>Exp Dec::=valIde=Exp| 12月12月繁琐的符号:见图7。 ML的小子集• 当使用语法排序时,例如,例如,在生产规则中,引入语法排序的模块必须显式导入(参见图6)。描述AN的模块也必须导入,因为它不是SDF语言的一部分。• 在排序范围内声明元变量有些繁琐(参见图5)。• ASF+SDF需要许多关键字,可能会产生误导,例如,语义功能的符号性质由词语“上下文无关语法”引入ASDF解决了这些问题,使规范更容易写入和读取。模块SmallML进口Exp/IdeExp/CondExp/App-SeqExp/AbsDec/Bind-ValDec/Accum模块1模块2模块Exp/Ide语法Exp::= val(Ide)语义valve(I)=给出约束值I模块3模块4模块扩展需要E:失效数据::=确认语义平均值:Exp->Action模块Exp/CondsyntaxExp::=cond(Exp,Exp,Exp)需要Val::=Bool语义evaluatecond(E1,E2,E3)=计算E1,然后也许检查布尔值,评估E2else评估E3158M. van den Brand等理论计算机科学电子笔记110(2004)149模块数据/功能需要Func::= func(action:Action)模块Exp/AbssyntaxExp::=abs(Ide,Exp)需要Val::=Func语义求abs(I,E)=givefunc(bind(I,the val)scopeevaluate E))模块5模块6模块Dec/Bind-ValsyntaxDec::=bind-val(Ide,Exp)语义declarebind-val(I,E)=evaluate Ethenbind(I, the val)模块8模块7模块10模块9语言的语义描述由ASDF模块的集合和从语言中使用的具体语法到模块中描述的抽象语法的映射组成。图7显示了ML的一个小子集,模块2到10可用于描述ML子集中的结构。模块之间的导入关系可以在图8的屏幕截图中看到,其中一个级别上的模块导入较低级别上的模块,如果存在连接它们的边。将模块4与图6中的模块进行比较,可以立即注意到我们使用抽象语法与prefix构造函数,而不是con-fix构造函数。模块Dec/Accum语法Dec::=accum(Dec+)语义declareaccum(D)=declareD declare accum(D D+)=declare Dbeforedeclareaccum(D+)模块Exp/App-SeqsyntaxExp::=app-seq(Exp,Exp)需要Val::=Func|函数不应用语义学evaluateapp-seq(E1,E2)=evaluate E1and-thenevaluate E2then(apply(action(the func#1),the val#2)else(throw func-no-apply))模Dec需要D:12月基准::=绑定语义declare:Dec->ActionM. van den Brand等理论计算机科学电子笔记110(2004)149159→方程...[cond]map(ifE1 thenE2 elseE3)=cond(map(E1),map(E2),map(E3))...[let]map(fnI=>E)= abs(I,map(E))...[seq]map(D1 D2)= accum(map(D1)map(D2))见图8。 行动环境见图9。 具体到抽象语法的在ASDF中描述构造时,使用前缀构造函数的优点是更好的可重用性。例如,来自标准ML的if-then-else表达式的描述可以被重用来描述“?:”这是因为它们具有相同的组成结构和预期解释,尽管它们的具体语法不同。从具体ML语法映射到抽象语法的函数映射的部分定义如图9所示。ASDF模块由一个名称(在关键字module之后)和三个可选部分组成。语法部分定义了构造的抽象语法。这在模块3中用标识符表达式构造函数val来说明,它接受一个标识符(Ide)作为参数。写作时生产规则使用分隔符requires部分用于介绍语义部分中使用的数据排序、运算符和变量。这在模块6中进行了说明,其中使用sortFunc扩展了sortVal,使得操作可以产生功能协调发展的声明变量的语法在模块7中说明,其中当160M. van den Brand等理论计算机科学电子笔记110(2004)149声明变量X在排序S上的范围变量Xn、X*和X+,其中n是正整数,被自动声明为在排序S、S+和S+上的范围。这些变量的使用在模块4和模块9中说明。模 块10 说 明 了如 何 引 入 数据 排 序 和 运算 符 声 明 ' Func : : = func(action:Action)'导致类型Func,并且数据操作符func和action在action中变得可用,这样我们就可以将action写为' give the func '和' give action(...)'(动作give的语法是'giveDataOp',其中DataOp包含其他术语'theSort')。操作符func是一个数据构造函数,action选择该数据的action组件。语义功能,将语法部分中引入的抽象语法构造映射到动作,在语义部分中使用等式定义。在等式中,可以使用来自AN和进口模块的项。例如,在模块5中,语义函数包含动作组合符和常量,以及来自requires部分,以及在导入的模块Data/Func中声明的操作语义sortfunc。注意,可以使用多个方程来定义函数,如模块9所示。 语义部分还可以包含语义函数的签名,如我们在模块2和模块3中看到的。7 .第一次会议。要求在模块中使用的函数的签名在同一模块或导入的模块中定义。由于语义函数的语法依赖于模块其他部分中声明的语法,因此解析模块必须分两步完成,第一步构建一个可解析表基于语法和要求部分。更多信息请参见第4.2和5.2节。语法部分中使用的语法排序导致隐式导入,因此例如在模块8中,模块Dec(模块7),Ide(未显示)和Exp(模块2)被自动导入。隐式导入也是从requires部分中使用的排序生成的,不同之处在于只有在产生式右边使用的语法排序才会导致导入,并且导入的模块总是以Data/开头,例如模块6导入Data/Func(模块10)。自动导入的模块(如Exp或Data/Func)可能会提供比导致其进口。ASDF还允许显式导入。这主要用于导入用于描述语言的所有模块的顶级模块(参见模块1)。另一个很少使用的特性是包含原始SDF的M. van den Brand等理论计算机科学电子笔记110(2004)149161本节中介绍的模块是核心ML的语义描述中使用的模块的简化版本,可以在[14]中找到该描述包含ASDF模块和ASF+SDF模块,将ML具体语法映射到抽象语法。4.2环境动作环境建立在ASF+SDF元环境之上,继承了它的大部分功能(在第2.3节中描述)。从表面上看,元环境和行动环境之间的差异似乎可以忽略不计。一些菜单已经改变,因为我们还没有实现ASDF的ASF+SDF可用的所有操作(例如,更改模块名称和导入)。当编辑一个模块时,我们会注意到更多的差异,因为语法导向的编辑器现在使用ASDF语法进行解析。此外,在解析模块中的语义方程时,使用模块(以及它导入的模块)中定义的语法。这意味着当高亮显示语义函数中的一段语法时,编辑器会根据同一模块(以及导入的模块)的语法和需求部分中定义的语法来与元环境一样,可以使用给定的语言规范来解析和重写语言上的术语。由于我们实现动作环境的方式,所有与术语相关的内容都像元环境中一样工作。结合ASF+SDF元环境和动作环境为我们提供了将语言的具体语法映射到动作的工具支持。其思想是在ASF+SDF中描述从具体语法到抽象语法的映射(参见图9),而从抽象语法到动作的映射则使用我们已经看到的ASDF来描述我们计划在Action Environment中实现对ASF+SDF和ASDF模块同时工作的支持,以便支持完整的语言描述。未来的计划还包括将不同的工具集成到行动环境中。集成现有的动作评估器将允许我们评估用我们正在设计的语言编写的程序。动作编译器将把环境变成编译器生成器。集成现有的动作语义函数的类型检查器将使我们更好地检查ASDF模块的格式良好性,从而检查语言ASD的正确性。总而言之,Action Environment与其他工具相结合,应该为开发语义描述和记录编程语言的设计提供一个特别有用的环境。162M. van den Brand等理论计算机科学电子笔记110(2004)1495实施概述动作环境建立在ASF+SDF元环境之上。讨论操作环境的实现细节涉及讨论元环境的体系结构。5.1ASF+SDF元环境架构元环境有一个分层的体系结构,如图10所示。在本节中,我们将更详细地讨论每一层。ASF+SDF元环境分层设计的第一步在[5]中讨论。这篇论文讨论了ASF如何被另一种重写形式主义所取代。这一发展又向前推进了一步,形成了这里讨论的架构。内核层元环境的核心是完全独立于语言的。它由软件协调体系结构,工具总线[3],它负责组成元环境的组件之间的所有通信。工具总线允许协调和计算的完全分离,它是一种可编程的软件总线,其中组件之间的协调使用基于进程代数的形式主义进行正式描述。计算在连接的组件内执行,可以用任何编程语言实现。组件之间的数据交换是基于一种表示格式,ATerms [4],专门设计用于表示树状数据结构。这种形式主义提供了最大的子项共享和高效的线性化操作。除了工具总线之外,元环境的内核还包括解析器、文本和结构编辑器、图形用户界面组件、用于存储解析表和解析树的每个组件都是完全独立于语言的,并将通过下一层实例化,该层提供语言特定的功能。内核已经完全准备好处理模块化语言和规范形式主义。SDF图层下一层实例化具有SDF功能的内核元环境。这是通过向内核中添加SDF特定组件以及通过用户界面中的按钮和可单击图标添加操作来激活SDF模块的编辑器来实现的。SDF专用组件M. van den Brand等理论计算机科学电子笔记110(2004)149163内核-MetaSDFASF见图10。 ASF+SDF元环境是SDF分析表、导入关系计算器和分析表生成器。后者是必要的,因为SDF被设计为描述编程语言的语法,并且为了使用这些语言描述,有必要生成用于解析程序的解析表此外,术语库必须以这样一种方式实例化,即SDF模块的解析树及其对应的解析表都可以被存储。ASF层此层扩展了具有ASF功能的SDF元环境。同样,这是通过添加ASF特定的组件和动作来实现的,以激活ASF模块的实例编辑器。ASF特定组件的一个例子是一个组件,它使用语法规则扩展每个SDF规范来解析ASF方程;通过这种方式,可以获得方程中的用户定义语法。将SDF与ASF结合使用会对可以在SDF中写入的语法规则造成一些限制,例如,列表中的分隔符只能是文字而不是任意符号。这些限制由ASF+ SDF语法检查器检查。最后,这一层提供了一个ASF检查器来检查方程的良构性,并将ASF解释器和编译器添加到SDF元环境中。术语存储必须被扩展以存储ASF模块、相应的解析表等,也执行图11显示了具有上述每个扩展的内核元环境的抽象。在本节中,我们将简要描述如何以灵活的方式实现这些扩展内核层可以接收的消息是事先已知的,这仅仅是因为系统的这一部分是固定的。反之则不然:泛型部分不能对其他层提供的功能做出任何假设。我们将从元环境的内核发送到扩展的消息识别为所谓的钩子。SDF层可以并将为下一层引入新的挂钩。环境的每个实例都应该在164M. van den Brand等理论计算机科学电子笔记110(2004)149ASF检查器ASF+SDF检查器SDF可解析的关系计算器按钮解释器Term商店解析器ASFSDF内核Meta-环境ASF编译器ASF解释器SDF操作可解析生成器GUI结构编辑器文本编辑器钩描述environment-name(名称)主GUI窗口将显示此名称扩展(签名、Sem、期限)声明不同文件类型的扩展stdlib-path(路径)设置标准库的路径top-sort(排序)声明规范表1元环境钩子:参数化GUI见图11。 ASF+SDF元环境至少为这些钩子中的每一个实现接收器实现这些钩子需要编写一小段ToolBus规范。表1显示了几个内核钩子。它们都与GUI和编辑器有关。图11中内核层和ASF或SDF层之间的虚线箭头表示钩子和服务请求。添加一个层涉及到一些实现方面的工作。当然,这些组件本身必须得到实现。在许多情况下,需要编写ToolBus脚本,但内核元环境也提供了一个强大的按钮语言,可用于连接新组件和功能。按钮语言允许以灵活的方式向GUI添加按钮和图标,以及向各种类型的编辑器添加按钮5.2行动环境在Action Environment中,元环境的分层设计被扩展为一个额外的层,即ASDF层,如图12所示。请注意,我们没有替换ASF+SDF元环境的任何部分,我们只是在顶部扩展了一个额外的层。这种方法的替代方案是用ASDF层替换ASF和SDF层,类似于 与[5]中所描述的不同,但是通过我们的方法,我们重用了先进的技术,从而节省了实现时间。另一种看待M. van den Brand等理论计算机科学电子笔记110(2004)149165ASDF转ASF+SDFASDF解析器ASDF外部工具ASDF支持见图12。 ASDF层ASDF层是ASF+SDF元环境的ASDF接口ASDF层由几个组件组成:一个ASDF解析器、用于从ASDF模块中检索模块名称和导入模块的工具,以及两个ASDF到ASF+SDF的映射。与其他层一样,我们还必须扩展术语库,在本例中是为了保存ASDF模块。基于在ASDF语言的语法基础上,生成了一个语法分析表,用于ASDF语法分析器。用于从ASDF模块获取模块名称和导入模块的工具是在ASF+SDF中实现的,几乎是微不足道的(这是插图中的ASDF支持组件)。在这里,我们将重点介绍ASF+SDF的生成以及将来添加外部工具的可能性。将ASDF映射到ASF+SDF动作环境包含两个从ASDF到ASF+SDF的映射。一个映射的结果用于解析和重写术语。通过将每个ASDF模块映射到一个ASF+SDF模块,我们得到了相同的效果,就像我们在元环境中打开了生成的ASF+SDF模块一样,因此术语的编辑独立于ASDF层。 另一个映射的结果用于第二个解析ASDF模块本身的解析(解析允许我们用同一模块中定义的语法解析语义方程)。图13给出了一些示例,这两个映射都包含了这些示例。生成ASF+SDF使导入显式化,例如,在生产规则中使用排序S1和S2将导致导入模块S1和S2。ASF+SDF按需生成(即, 当我们需要解析一个术语或一个模块时),并且每次模块改变时都必须为ASDF模块重新生成。到ASF+SDF的映射在ASF+SDF中实现;这是一个显而易见的选择,因为ASF+SDF的语法已经存在,这使得166M. van den Brand等理论计算机科学电子笔记110(2004)149构造类型安全的翻译。整合外部工具由于元环境的可配置性,可以附加外部工具,如动作类型检查器或解释器。这是一个使用按钮语言的简单任务,假设工具只是将编辑器的内容作为输入,并返回一个文本字符串作为结果。当工具需要全局信息时(比如语义函数类型检查器,它可能需要所有已定义的函数签名来检查函数定义),这变得更加复杂,在这些情况下,我们需要遍历导入图以从每个模块收集必要的信息。6相关工作在定义编程语言的语法和语义以及支持这种语言定义的开发的系统的领域中,已经进行了大量的工作。我们参考Heering和Klint [13],以获得相当完整和最新的概述。在相关工作的讨论中,我们将集中在环境中,可以用来描述单一的语言结构在一个模块化的方式,或给ASD的语言。GEM-MEX系统[1]允许使用MONTAGE的集合来描述语言,这是一种基于抽象状态机的形式主义。在单独的模块中描述单个语言构造的想法受到GEM-MEX的鼓励,但是由于所使用的语法形式主义缺乏模块性(进口S1S2...S1::=S2⇒上下文无关语法S2→S1V:S⇒进口S...上下文无关语法→S““L:S1→S2⇒L S1→S2图十三. 将ASDF映射到SDFM. van den Brand等理论计算机科学电子笔记110(2004)149167单个结构的语义描述基于具体语法,并且所收集的语法必须是LALR(1))。ABACOsystem [20]是一个面向编程语言设计者的AS工具。ABACO的主要组件是代数规范编译器、规范编辑器、动作库、动作编辑器和GUI。此外,它还提供了一个帮助系统、一个动作调试器和将规范导出为可读输出的工具。主要组件是代数规范编译器,它提供规范和解释的语法检查行为环境与行为系统有很强的相似性,但行为环境通过底层体系结构的开放性,在添加外部组件时具有更大的灵活性单个构造的动作语义可以用面向对象的视角来呈现[8]。然后,每个句法排序及其相应的语义功能的介绍被作为类定义给出;单个构造的句法及其动作语义被定义在一个子类中,该子类扩展了定义构造排序的类。使用传统的面向对象的类定义不允许像ASDF中那样保持隐式,但是类和子类定义的集合可以直接与ASDF中的模块集合相比较。然而,尚未提供对该方法的工具支持ASD工具集[9]支持创建、编辑、检查和使用ASD。这个工具集与旧版本的ASF+SDF有很强的关系,它的实现已经过时了。7结论和今后的工作在本文中,我们提出了ASDF,一个新的形式主义的动作语义描述支持重用的描述个别构造。我们还报告了Action Environment,一个支持使用ASDF的新环境,并解释了它是如何在ASF+SDF元环境之上实现的。两位作者已经对ASDF和Action Environment的使用进行了初步的案例研究,为Core ML的所有基本结构提供了ASDF模块(已提交供发布)。未来的工作计划包括进一步的案例研究,在ASDF的使用,并在现有的类型检查器,解释器,最终,编译器生成的行动环境的集成。168M. van den Brand等理论计算机科学电子笔记110(2004)149引用[1] M. Anlau,P. W. Kutter和A.皮耶兰托尼奥 增强的控制流程图在蒙太奇。在PSI 斯普林格,2000年。[2] J. A. Bergstra,J. Heering,and P. Klint,editors. Algebras Specification. ACM Press FrontierSeries. Addison-Wesley,1989年。[3] J. A. Bergstra和P.克林特离散时间工具总线-一种Sci. Comput. Programming,31(2-3):205 -229,1998.[4] M. G. J. van den Brand,H. A. de Jong,P. Klint,and P. A.奥利维尔经典注释。软件,实践经验,30:259[5] M. G. J. van den Brand,P. Moreau,and J. J. Vinju. 免费的术语重写引擎环境!2003年RTA,LNCS第2706卷,第424-435页。Springer,2003年。[6] M. G. J. vandenBrand,A.van Deursen,J.Heering,H.A. de Jong,M.de Jonge,T.凯珀斯,克林特湖Moonen,P. A.放大图片作者:J. J. Visser和J. Visser。ASF +SDF元环境:一个基于组件的语言开发环境。CC 2001,LNCS第2027卷,第365-370页。Springer,2001年。[7] D. Brown和D. A.瓦特JAS:一种Java动作语义。在AS部奥胡斯大学计算机科学系,1999年。[8] C. Carvilhe和M.音乐家动作语义的面向对象观点。 AS 2002,BRICS NS-02-8,第45部计算机科学,大学奥胡斯,2002年。[9] A.范·杜尔森。可执行语言定义:案例研究和起源跟踪技术。博士论文,阿姆斯特丹大学,1994年。[10] A. van Deursen,J. Heering,and P. Klint,editors. 语言原型:一种代数规范方法。AMASTSeries in Computing Vol. 5.世界科学,1996年。[11] K.- G.杜和P. D.苔藓通过结合动作语义模块来组合编程语言. Sci. Comput. Programming,47(1):3 -36,2003.[12] J. Heering,P. R. H. Hendriks,P. Klint,and J. Rekers. SDF:语法定义形式主义:参考手册。SIGPLAN Notices,24(11):43[13] J. Heering和P.克林特程序设计语言的语义:面向工具的方法。SIGPLAN Notices,35(3):39[14] J.Iversen和P. D.苔藓核心ML行动语义 说明.http://www.brics.dk/Projects/AS/LDTA-2004/网站。[15] S. B.拉森警察局Mosses和D. A.瓦特AN-2的介绍,建议的新版本的行动符号。AS 2000,BRICSNS-00-6,第19-36页。部的Comput。科学,奥胡斯大学,2000年。[16] S. Liang和P. Hudak. 编译器构造的模块指称语义 在ESOP Springer,1996年。[17] P. Mosses动作语义和ASF+SDF。在理论计算机科学电子笔记,第65卷。Elsevier,2002年。[18] P. D.苔藓动作语义学剑桥理论计算机科学丛书26.剑桥大学出版社,1992年。[19] P. D.苔藓一个模块化的SOS行动符号。BRICS RS-99-56,部门的Comput。科学,奥胡斯大学,1999年。[20] H.莫拉湖 C.我来了,M 。 Monteiro,P.我是一个很棒的人,还有W 。 CAN SANcao.ABACOsytem:编程语言设计者的行动工具。AS 2002,BRICS NS-02-8,第1-8页。部计算机科学,大学奥胡斯,2002年。[21] D. A.瓦特SML的静态和动态语义。AS部奥胡斯大学计算机科学系,1999年。
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 十种常见电感线圈电感量计算公式详解
- 军用车辆:CAN总线的集成与优势
- CAN总线在汽车智能换档系统中的作用与实现
- CAN总线数据超载问题及解决策略
- 汽车车身系统CAN总线设计与应用
- SAP企业需求深度剖析:财务会计与供应链的关键流程与改进策略
- CAN总线在发动机电控系统中的通信设计实践
- Spring与iBATIS整合:快速开发与比较分析
- CAN总线驱动的整车管理系统硬件设计详解
- CAN总线通讯智能节点设计与实现
- DSP实现电动汽车CAN总线通讯技术
- CAN协议网关设计:自动位速率检测与互连
- Xcode免证书调试iPad程序开发指南
- 分布式数据库查询优化算法探讨
- Win7安装VC++6.0完全指南:解决兼容性与Office冲突
- MFC实现学生信息管理系统:登录与数据库操作
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功