没有合适的资源?快使用搜索试试~ 我知道了~
理论计算机科学电子笔记157(2006)133-146www.elsevier.com/locate/entcsHTML1中的模块化Claude Kirchner克劳德·基什内尔INRIA LORIA3H'el'eneKirchner5CNRS LORIA3Anderson Santana安德森桑塔纳2,6INRIA LORIA3摘要模块化是设计、编程、验证、测试和维护时的关键特性,也是可重用性的必要条件。大多数语言和系统都提供了内置的解释、输入或参数化功能。然而,也有一些语言,如HTML,对模块化的支持很差。因此,一个自然的想法是提供通用的模块化原语。为了扩展现有语言的额外和可能的正式功能,最近引入了anchorage和Formal Island的概念。例如,TOM为JAVA和C提供通用匹配、重写和策略扩展。在本文中,我们展示了HTML的例子,如何添加模块化功能锚定模块化原语在HTML中。这使得人们可以编写模块化的HTML描述,从而方便了它们的设计、可重用性和维护,并为HTML有效性检查提供了重要的一步。关键词:模块化,参数化,HTML,TOM,MHTML,形式岛,特征锚点1.在卓越反向网络2由斗篷3615,ruedujardinbotanique,54600Villers-l`es-Nancy,法国4Claude. loria.fr5Helene. inria.fr6 Anderson.Santana-de-loria.fr1571-0661 © 2006 Elsevier B. V.在CC BY-NC-ND许可下开放访问。doi:10.1016/j.entcs.2005.12.051134C. Kirchner等人/理论计算机科学电子笔记157(2006)1331介绍在软件开发的所有阶段,从用户需求分析到维护,模块化是编程环境的一个关键特征它当然是可重用性策略的关键特征,因此也是任何软件库中的主要概念随着安全软件的兴起,模块化也成为构建大型认证软件的基本特征因此,模块化存在于许多编程语言和证明环境中,我们现在对主要模块化结构的语义有了相当好的理解特别是在函数和代数编程中,导入,参数化和可见性的概念已经被赋予了分类和操作语义(例如,[2、7、13])。如果从理论的角度来看,情况是令人满意的,这不是从实际的情况,特别是因为每种语言都有自己的模块化特征和语义。CLU中的集群,Ada中的包,ML中的结构,C++和Java中的类都是促进模块化编程的不同结构有些语言具有相当复杂的模块化特性,如CASL、OBJ和Maude,其中视图的概念精确地定义了参数实例化或模块导入的方式。其他人,如ELAN,有一个更基本的方法。像Java这样的面向对象语言考虑了类和继承。函数式语言,如ML,也朝着模块化发展面对这种多样的方法,我们因此处于一种标准的模块化特征的情况下,主要独立于语言,将受到极大的赞赏。但模块化并不是编程语言的普遍特征,其中一些语言缺乏有用的功能。例如,参数化在ASF+SDF和C中都不存在。这种情况下的一个极端例子是HTML,它根本没有导入或参数化功能。因此,无论是为了标准化还是为了所需的改进,都希望能够向现有的编程语言添加模块化特性虽然我们理解它的有用性,但我们现在必须解决在编程环境中添加模块化原语的可行性这个问题已经在[13]中进行了探讨,其中提出了一个类似于SML的模块系统,它可以容纳各种基本语言,只要它们满足温和的假设。另一种独立发展的方法是在简单和务实的背景下发挥作用的正式岛屿范式:C. Kirchner等人/理论计算机科学电子笔记157(2006)133135扔掉今天在人类活动的所有领域中使用的数十亿行代码是毫无意义的,然而,很明显,所有这些软件都必须在逻辑、算法、安全和维护质量方面进行相当大的改进。正如TOM7[14,9]中所介绍的,特别是对于匹配,规范化和策略重写,形式岛允许向现有的编程语言添加形式特征,这些特征可以在以后编译成宿主语言本身,因此不会引起对形式岛机制的依赖以严格的锚定为代价,提供了宿主语言数据结构和形式对象之间的联系,形式岛方法提供了以下可能性:(i)以更高的在设计时的层次结构,(ii)执行形式证明的形式岛屿建设,(iii)证明正式岛屿编译到宿主语言的实现[12]。除了这些好处之外,使形式岛更具吸引力的是,它们在不同编程语言的几个实现之间共享例如,TOM在Java(这是jTOM)、C(这是cTOM)或CAML(mlTOM)中提供匹配、规范化和策略重写。建立模块化形式岛的一般定义是一个困难的目标,并且在CASL的静脉中使TOM模块化用于代数规范的第一项工作已经在[10]中完成本文的目的是在现有语言中锚定模块性的另一个步骤,并以HTML为例说明该方法这允许编写模块化的HTML描述,从而促进它们的设计,可重用性和维护,以及提供HTML有效性检查的重要一步虽然我们在本文中只处理HTML的情况下,所提出的方法的一个重要利益是建立一个通用的方法的基础。为了使我们的目标更精确,我们在第2节中使用了一个运行的单块HTML页面的例子,并展示了我们如何将其分解为自包含的可重用模块。然后,我们在第3节中介绍了添加到HTML中的模块化特性,并在第4节中给出了其操作语义,从而使编译过程变得清晰。第5节和第6节分别讨论了相关工作和进一步扩展。7tom.loria.fr136C. Kirchner等人/理论计算机科学电子笔记157(2006)1332激励的例子让我们首先考虑一个说明性的例子,说明模块化如何有助于网站的构建和维护通常,组成网站的网页这与出现在每个页面上的标准信息或导航问题有关,例如,指向网站上其他页面的链接集。网页设计师目前的趋势是避免使用框架8,它允许人们在同一个浏览器窗口上设置来自不同HTML文件的固定内容特别是对于没有使用脚本语言的网站,网站管理员必须从字面上“复制和粘贴”静态信息从一个页面到另一个页面因此,更新成为一个容易出错和恼人的任务。一个典型的网站布局如图1所示。主页(索引)页面之后的所有页面将共享页眉、菜单和页脚的相同代码。访问者与左侧指针列表中包含的链接的交互会带来一个类似的页面,其中Fig. 1. 典型的网站布局有能力隔离每一段重复的代码,网站8http://www.w3c.org/TR/REC-html40/present/frames.htmlC. Kirchner等人/理论计算机科学电子笔记157(2006)133137作者可以(半)自动地从单独的源组成新的网页。在上面的例子中,页面应该被分解为可重用的命名模块,分别用于页面标题、导航菜单和页脚。此外,引入参数将允许为另一用户重复使用类似的页面格式,从而促进网站的统一呈现。第三个问题是,在这个上下文中,从HTML的角度来看,每个重复的代码片段只能被检查一次,以确保格式良好。我们现在的目标是通过提出一种正式语言及其在HTML中的锚定过程,对这些问题给出一个实际的答案3模块化HTML语言在本节中,我们将介绍模块化HTML(MHTML)语言及其操作语义的主要元素为此,我们使用代数规范形式主义来表达语言的语法和语义。类似的方法已被用于例如在相应的OBJ-3的定义或Full Maude的定义[6]以及ASF+SDF的模代数[1]。然而,不需要关于代数规范的复杂知识来理解这个执行模型所基于的机制。MHTML语言是常规HTML标记与结构化原语的组合,允许通过重用现有代码片段来组合文档指导其设计的原则是简单和通用。模块模块化的第一个问题是如何定义一段自包含的可重用代码来表示一个模块。我们的方法将定义所需粒度的任务留给了用户,因为我们没有将模块限制为完全有效的HTML代码。实际上,任何格式良好的HTML标记集都可以被认为是一个模块。例如,通过使用%模块原语,我们可以定义一个可重用的示例3.1图1中网页的左侧菜单在下面的模块中描述。%模块菜单 a href=“publications.html”>出版物/a>/li> a href=“cv.html”>简历/a>/li>按照惯例,为了方便访问模块,我们限制每个文件只能有一个模块,并强制该模块和包含它的系统文件具有相同的名称。因此,一个名为foo的模块将在系统中找到文件名为foo.mhtml。进口其次,在重用的上下文中,一个常见的需求是访问由其他模块定义的符号这可以通过%import原语来实现导入的模块被插入到找到%import标记的位置,重复的头将被忽略,只保留主模块在导入的模块具有自身导入的情况下,递归地执行该过程。另一个重要的问题是强制导入的模块是格式良好的HTML。或者,最好导入有效的HTML代码,这意味着导入的代码应该满足W3C当前HTML规范的所有要求[15]。这是通过语言的另一个特征来实现的,它引入了理论的概念,接近于类型的概念。在MHTML中设置一个模块mod是格式良好的(分别是valid)是通过声明mod::WellFormedHTML(resp.mod::ValidHTML)。在编译时,对于HTML,通过调用适当的HTML工具来检查此属性下面的例子说明了这些问题,考虑到第2节中提出的网站:例3.2图1的网页被写成下面的模块。%模块页面1<标题>首页/标题><联系我们%import header:: WellFormedHTML研究方向/h1><联系我们
- a href=“index.html”>首页/a>/li>
- a href=“researchs.html”>研究兴趣/a>/li>
- a href=“work.html”>最近的工作/a>/li>
- a href=“projects.html”>项目/a>/li>
- ahref=“conferences.html”>会议/a>/li>138C. Kirchner等人/理论计算机科学电子笔记157(2006)133
研究方向/h1><联系我们%import menu:: WellFormedHTML<联系我们%importcontents:: WellFormedHTML<联系我们%importfooter:: WellFormedHTMLC. Kirchner等人/理论计算机科学电子笔记157(2006)133139<联系我们<联系我们模板该语言还提供了一个模板机制,它用参数化模块扩展了语言。在这种情况下,实际参数被期望为其他模块,而这些模块又可能需要符合某个理论。在HTML的情况下,我们目前简单地认为这些是有效的或简单的格式良好的HTML。同样,当预处理器组成这样的模板的实例时,参数被转换成文本扩展。下面的例子展示了参数化MHTML模块的定义:示例3.3为了重用图1的网页结构,提供了以下模板:%模块模板1[标题Header:: WellFormedHTMLMenu:: WellFormedHTMLContents::WellFormedHTML Footer::WellFormedHTML]%use Title/title><联系我们 %使用标题研究方向/h1><联系我们%使用菜单<联系我们使用百分比<联系我们使用页脚的<联系我们<联系我们此模板可以使用以下实例化生成新实例例3.4实际的模块名被替换为参数,以获得前一个模板的适当实例:模块出版物%import template1 [myHomePagemyPageHeeadermyBookmarksmyPublicationsmyPageFooter]图2显示了上面示例中使用的语法140C. Kirchner等人/理论计算机科学电子笔记157(2006)133模块身体::=::=%modulemoduleName(([Import][Use][HTML])进口::=%importmoduleName[Paraminst+][Param::=paramName帕拉明斯特::=模块名称使用::=%useparamName理论::=格式良好的HTML|验证HTMLHTML::=任何HTML代码,上面图二. 通用结构化构造4语义、锚定和编译现在我们来描述如何将MHTML中提供的模块化特性编译成HTML。从实现的角度来看,编译器接受一个MHTML程序作为输入,该程序由本机代码和第3节中描述的语言的模块化原语组成,并生成纯本机代码作为输出。为了描述这个编译过程,我们选择编写一个代数规范,并在ELAN4 [11]中实现重写规则通过这种方式,我们还提供了我们的MHTML语言的操作语义。该规范的概要见图3。这与[6]中给出的描述Maude语言(更详细)模块化特征的规则类似(但确实更简单)。ELAN4共享SDF的语法定义[5]。HTML代码由排序HTML表示。下一条规则可以解读如下:• 第一条规则是,没有比%module更进一步的结构化构造的模块应该被转换成HTML代码。[ ] translate(%module mhtml) =>html• 下面的两条规则指出,任何没有参数或理论的导入都应该开始递归调用translate函数,结果将在找到%import标记[ ]translate(%module m %import m1 html)=> translate(load(m1))htmltranslate(%module mhtml %import m1) =>html translate(load(m1))• 下面的规则与前面的规则具有类似的效果,但是它们通过C. Kirchner等人/理论计算机科学电子笔记157(2006)133141模块mhtmlTranslateimports basic/ElanLayoutbasic/BuiltinBoolmhtmltool exports规则hiddens上下文无关语法translate(Module)->HTMLtranslate ( Module , ParamList ) ->HTMLHTML HTML-> HTMLload(ModuleName)->Modulesatisfies(Module,Theory)-> BuiltinBool变量“m”[0-9]*->ModuleName“x”[0-9]*->ParamName“p”[0-9]*->ParamDecList“i”[0-9]*->ParamList“html”[0-9]* ->HTML“th”[0-9]*->理论[ ]translate(%module mbody)=>translate(body)translate(%modulem%importm1html)=>translate(load(m1))html[ ]translate(%modulemhtml%importm1)=>html translate(load(m1))translate(%module mhtml%import m1::th)=>html translate(load(m1))if satisfies(load(m1),th)translate(%module m %import m1::th html)=>translate(load(m1))htmlif satisfies(load(m1),th)[ ]translate(%module m %import m1[i]html)=>translate(load(m1), i)htmltranslate(%modulem%importm1[i]::thhtml)=> translate(load(m1),i)htmlif satisfies(load(m1),th)[ ] translate ( %module m )[x p] html%use x , m2i )=>translate ( %modulem[p]htmltranslate ( load(m2)),i)[ ]translate ( %module m[x : : th p] html%usex , m2i )=>translate ( %modulem[p]htmltranslate ( load(m2)),i)ifsatisfies(load(m2),th)图三. MHTML编译器的重写规则满足功能。translate(%module mhtml %import m1::th)=>html translate(load(m1))如果满足(load(m1),th)[ ] translate(%module m %import m1::th html)=>translate(load(m1))html如果满足(load(m1),th)• 接下来的两个规则处理参数化模块的导入,在这种情况下,激活第二个版本的转换函数来处理实际参数。[ ]translate(%module m %import m1[i]html)=>translate(load(m1),i)html[ ]translate(%module m %import m1 [i]::thhtml)=>142C. Kirchner等人/理论计算机科学电子笔记157(2006)133translate(load(m1),i)htmlifsatisfies(load(m1),th)• 下面的规则遍历形参列表,根据实际参数验证它们,并在发现[ ] translate(%module m[x p] html %usex, m2i)=>translate( %module m[p] html translate(load(m2)),i)[ ] translate(%module m[x::th p] html %usex, m2i)=>translate( %module m[p] html translate(load(m2)),i)ifsatisfies(load(m2),th)开发了一个原型来实现MHTML编译器的早期版本。作为具体的语法,我们使用XML标记来表示前面介绍的原语,例如%模块构造成为<模块>.,其他构造也是我们已经限制了[16]第一个问题是如何将一个新的语法定义为XHTML-1.0-Strict编译器是一个TOM使用上述规则的左侧作为XML模式的程序,一旦在源代码中的遍历过程中匹配,就会启动一个操作,执行规则9的相应右侧中指定的转换。目前,限制是缺乏理论和它们所需要的相应验证。这些重写规则提供了将MHTML编译为HTML的概要。在完成实例化过程的完整描述后,此规范提供了将MHTML编译为HTML的规范化过程。与TOM中为匹配和重写提供的形式岛的实现相比,从几个角度来看,这个过程更简单。有了这里介绍的模块化原语,就不需要锚定来处理术语的结构这种情况可能会改变,例如考虑依赖类型。因此,与[ 12 ]中使用的涉及术语结构的“深层”锚定不同,我们在这里只需要一个处理模块内容的另一个区别是我们不必以同样的方式证明编译过程:在[12]中,匹配编译必须被证明,考虑锚定的属性。在我们的例子中,验证过程将涉及对导入和参数实例化的验证,特别是导致HTML类型系统的另一种使用。9源代码和示例可以在http://tom.loria.fr/applications.php#XmlC. Kirchner等人/理论计算机科学电子笔记157(2006)1331435HTML相关工作将我们的注意力限制在HTML中锚定模块化的具体问题上,问题是确定我们的方法在网站开发过程中提供的改进首先,MHTML提供了以下主要优点:• 它独立于托管网站的WEB• 不需要像在WYSIWYG HTML编辑器中那样通过GUI处理语言。这大大简化了维护过程。它还可以被底层GUI环境用来生成模块化的、希望是人类可读的代码。• 它有一个轻量级的编译过程。• 它很容易学。• 它不需要每次访问网站时都执行• 最后,我们应该强调的是,对于任何锚定,它都不会引起对语言扩展的任何依赖,因为所有锚定的语言功能都被编译成目标语言。HTML模块化的缺乏当然已经引起了人们的注意,我们可以提到以下与WEB相关的作品。JWIG项目[3]提供了一种旨在设计交互式Web服务的语言的实现它基于以会话为中心的WEB请求执行模型。作为第二个结果,它提供了一个模板语言的动态网页建设。这种语言允许定义间隙,可以用HTML代码填充。当然,这种方法提供了HTML代码的重用,但它依赖于整个环境来完成简单的结构化任务。在[8]中,开发了一个带有语言的完整管理环境,以解决在数据密集型网站的实现中出现的管理问题。该系统结合了查询语言来指定网站的结构和内容与模板语言,其HTML表示。虽然可重用性不是这项工作的主要关注点,但模板语言为网站的创建提供了灵活性和可扩展性,但它与前一个一样存在缺点相对于脚本语言,如PHP,ASP,PERL等,这种方法的优点是简单和直接的用户。与脚本语言或服务器端包含(例如Apache中可用)相比,MHTML的另一个优点是每次通过WEB访问根模块时都不需要重新执行。此外,我们相信,虽然这还没有被考虑到,MHTML可以是144C. Kirchner等人/理论计算机科学电子笔记157(2006)133与其他语文结合使用,开发网站。许多WYSI-WYGHTML编辑器提供了类似形式的模板机制这限制了HTML的重用,因为用户依赖于图形环境从现有模板生成新的网页,而在MTML中可以通过简单的文本编辑器获得相同的功能显然,用户也可以在他最喜欢的WYSIWYG编辑器中设计他的页面,然后确定他希望在MHTML中重用该页面的哪些部分。6结论本文所描述的方法是一个更大的企业的一部分,以-ward的入侵和依赖性少的形式化方法和算法的方法,通过形式岛的概念。例如,一方面,匹配和策略重写可能有助于对大块代码建模。另一方面,模块化在大型软件的结构中具有基本的用途我们已经开发了模块化锚定的思想,简单但有用的HTML语言的例子。引入了非常简单的输入和参数化原语,我们已经展示了如何定义HTML的模块化扩展使用ELAN4概述了汇编过程这当然是一个初步的工作,有几点我们正在积极地进行首先,MHTML的实现正在进行中,我们自然选择TOM本身作为实现框架这使我们能够发挥概念,并验证我们最初的想法(并清理我们的一些网页!)。第二,也是非常重要的一点,验证工具应该使用或开发特定于HTML的。当然,正如我们之前提到的,可以考虑W3C工具提供的(X)HTML代码验证。此外,正式的岛机制允许检查M个HTML模块之间的相互依赖性,例如以避免循环问题。 还将开发特定类型的系统,以确保特性. 例如,对于代数语言,结构化数据类型可以使用规定的类型系统进行静态类型化。此外,引入用于参数验证的视图将要求其验证执行非平凡的证明,并且从代数规范社区再次获得的经验将在这里引起极大的兴趣我们也可以考虑为HTML指定验证工具,比如检查链接对象的可达性。当然,HTML是一种非常特殊和初级的语言。一个自然的扩展将涉及XML,特别是用于逻辑和语义WEB,C. Kirchner等人/理论计算机科学电子笔记157(2006)133145和模块化特性将在Rewerse10这样的项目中发挥巨大作用。确认本文得益于我们与皮埃尔-艾蒂安·莫罗、Horatiu Cirstea和Antoine Reilles进行的许多富有成果的讨论,特别是关于正式岛屿的讨论。我们也感谢匿名评审对本文第一版提出的建设性意见引用[1] Bergstra , J. A. , J. Heering 和 P. Klint , Module algebra , Journal of the ACM37(1990),pp.335-372.[2] Bidoit,M.,D. Sannella和A. Tarlecki,Architectural specifications inCASL,Formal Aspectsof Computing13(2002),pp. 252-273。[3] 克里斯滕森,A.美国,A. Moller和M.I. 杨文,基于Java的Web服务架构,北京大学出版社,2001。25(2003),pp.814-875.[4] Cirstea,H.,E. Coquery,W.Drabent,F.法日角Kirchner,J.Maluszynski和B.变态,Web规则语言的类型:初步研究,技术报告(2004)。[5] Deursen,A.,J. Heering和P. Klint,“语言原型”,世界科学,1996年,iSBN 981-02-2732-9。[6] 杜兰,F。,“A R e d i c t i v e M o l e A l g e b r i t e A l g e b r i c t i c a t i c t i n s to the Maude L anguage“ , Ph.D.thesis , UniversidadeM'alaga , Spain ( 1999 ) ,http://maude.csl.sri.com/papers.[7] 杜 兰 , F 。 和J 。 Meseguer , Structurredtheoriesandinstitutions , in : M.Hofmann , G.RosolinianddD.Pavlovi'c,editors,Proceedingsof8thConfernceonCategoryTheryanddComputerScience , Edinburgh , Scotland ,September 1999 , Electronic Notes in Theoretical Computer Science29 ( 1999 ) ,pp.71http://www.elsevier.nl/locate/entcs/volume29.html。[8] 费尔南德斯,M.,D. Florescu,A. Levy和D. Suciu,Declarative specification of web siteswith strudel,The VLDB Journal9(2000),pp.38-55.[9] Guyon , J. , P. - E. Moreau 和 A. Reilles , An integrated development environment forpatternmatching programming,in:2nd eclipse Technology eXchange workshop-eTX[10] Hrvatin,S.,Structurationpourllesp′ecationsa`basededer`egles:EtudeeetmisenanuvrepourTOM , RapportdeDEA , Universit′eHenriPoincar′e-Na ncy1(2004).[11] 基什内尔角和H. Kirchner,基于规则的程序设计和证明:ELAN经验成果,第九届亚洲计算科学会议-亚洲[12] Kirchner,C., P. - E. Moreau和A. Reilles,模式匹配代码的形式验证,在:A. Festival,editor,Proceedings of the PPDP[13] Leroy,X.,一个模块化的模块系统,Journal of Functional Programming10(2000),pp. 269-303第10rewerse.net146C. Kirchner等人/理论计算机科学电子笔记157(2006)133[14] Moreau,P. E、C. Ringeissen和M. Vittek,一个多目标语言的模式匹配算法,在:G。Hedin,editor,12th Conference on Construction,Warsaw(Poland),LNCS2622(2003),pp.61比76[15] Raggett,D.,A.L.霍斯和我。Jacobs,Html 4.01规范(1999),http://www.w3.org/TR/REC-html40/网站。[16] W3C, xhtml1.0可扩展超文本标记语言(第二版)(2002),http://www.w3.org/TR/REC-html40/网站。
下载后可阅读完整内容,剩余1页未读,立即下载
%importcontents:: WellFormedHTML<联系我们
%importfooter:: WellFormedHTMLC. Kirchner等人/理论计算机科学电子笔记157(2006)133139<联系我们<联系我们模板该语言还提供了一个模板机制,它用参数化模块扩展了语言。在这种情况下,实际参数被期望为其他模块,而这些模块又可能需要符合某个理论。在HTML的情况下,我们目前简单地认为这些是有效的或简单的格式良好的HTML。同样,当预处理器组成这样的模板的实例时,参数被转换成文本扩展。下面的例子展示了参数化MHTML模块的定义:示例3.3为了重用图1的网页结构,提供了以下模板:%模块模板1[标题Header:: WellFormedHTMLMenu:: WellFormedHTMLContents::WellFormedHTML Footer::WellFormedHTML]%use Title/title><联系我们 %使用标题研究方向/h1><联系我们
研究方向/h1><联系我们%使用菜单<联系我们使用百分比<联系我们使用页脚的<联系我们<联系我们此模板可以使用以下实例化生成新实例例3.4实际的模块名被替换为参数,以获得前一个模板的适当实例:模块出版物%import template1 [myHomePagemyPageHeeadermyBookmarksmyPublicationsmyPageFooter]图2显示了上面示例中使用的语法140C. Kirchner等人/理论计算机科学电子笔记157(2006)133模块身体::=::=%modulemoduleName(([Import][Use][HTML])进口::=%importmoduleName[Paraminst+][Param::=paramName帕拉明斯特::=模块名称使用::=%useparamName理论::=格式良好的HTML|验证HTMLHTML::=任何HTML代码,上面图二. 通用结构化构造4语义、锚定和编译现在我们来描述如何将MHTML中提供的模块化特性编译成HTML。从实现的角度来看,编译器接受一个MHTML程序作为输入,该程序由本机代码和第3节中描述的语言的模块化原语组成,并生成纯本机代码作为输出。为了描述这个编译过程,我们选择编写一个代数规范,并在ELAN4 [11]中实现重写规则通过这种方式,我们还提供了我们的MHTML语言的操作语义。该规范的概要见图3。这与[6]中给出的描述Maude语言(更详细)模块化特征的规则类似(但确实更简单)。ELAN4共享SDF的语法定义[5]。HTML代码由排序HTML表示。下一条规则可以解读如下:• 第一条规则是,没有比%module更进一步的结构化构造的模块应该被转换成HTML代码。[ ] translate(%module mhtml) =>html• 下面的两条规则指出,任何没有参数或理论的导入都应该开始递归调用translate函数,结果将在找到%import标记[ ]translate(%module m %import m1 html)=> translate(load(m1))htmltranslate(%module mhtml %import m1) =>html translate(load(m1))• 下面的规则与前面的规则具有类似的效果,但是它们通过C. Kirchner等人/理论计算机科学电子笔记157(2006)133141模块mhtmlTranslateimports basic/ElanLayoutbasic/BuiltinBoolmhtmltool exports规则hiddens上下文无关语法translate(Module)->HTMLtranslate ( Module , ParamList ) ->HTMLHTML HTML-> HTMLload(ModuleName)->Modulesatisfies(Module,Theory)-> BuiltinBool变量“m”[0-9]*->ModuleName“x”[0-9]*->ParamName“p”[0-9]*->ParamDecList“i”[0-9]*->ParamList“html”[0-9]* ->HTML“th”[0-9]*->理论[ ]translate(%module mbody)=>translate(body)translate(%modulem%importm1html)=>translate(load(m1))html[ ]translate(%modulemhtml%importm1)=>html translate(load(m1))translate(%module mhtml%import m1::th)=>html translate(load(m1))if satisfies(load(m1),th)translate(%module m %import m1::th html)=>translate(load(m1))htmlif satisfies(load(m1),th)[ ]translate(%module m %import m1[i]html)=>translate(load(m1), i)htmltranslate(%modulem%importm1[i]::thhtml)=> translate(load(m1),i)htmlif satisfies(load(m1),th)[ ] translate ( %module m )[x p] html%use x , m2i )=>translate ( %modulem[p]htmltranslate ( load(m2)),i)[ ]translate ( %module m[x : : th p] html%usex , m2i )=>translate ( %modulem[p]htmltranslate ( load(m2)),i)ifsatisfies(load(m2),th)图三. MHTML编译器的重写规则满足功能。translate(%module mhtml %import m1::th)=>html translate(load(m1))如果满足(load(m1),th)[ ] translate(%module m %import m1::th html)=>translate(load(m1))html如果满足(load(m1),th)• 接下来的两个规则处理参数化模块的导入,在这种情况下,激活第二个版本的转换函数来处理实际参数。[ ]translate(%module m %import m1[i]html)=>translate(load(m1),i)html[ ]translate(%module m %import m1 [i]::thhtml)=>142C. Kirchner等人/理论计算机科学电子笔记157(2006)133translate(load(m1),i)htmlifsatisfies(load(m1),th)• 下面的规则遍历形参列表,根据实际参数验证它们,并在发现[ ] translate(%module m[x p] html %usex, m2i)=>translate( %module m[p] html translate(load(m2)),i)[ ] translate(%module m[x::th p] html %usex, m2i)=>translate( %module m[p] html translate(load(m2)),i)ifsatisfies(load(m2),th)开发了一个原型来实现MHTML编译器的早期版本。作为具体的语法,我们使用XML标记来表示前面介绍的原语,例如%模块构造成为<模块>.,其他构造也是我们已经限制了[16]第一个问题是如何将一个新的语法定义为XHTML-1.0-Strict编译器是一个TOM使用上述规则的左侧作为XML模式的程序,一旦在源代码中的遍历过程中匹配,就会启动一个操作,执行规则9的相应右侧中指定的转换。目前,限制是缺乏理论和它们所需要的相应验证。这些重写规则提供了将MHTML编译为HTML的概要。在完成实例化过程的完整描述后,此规范提供了将MHTML编译为HTML的规范化过程。与TOM中为匹配和重写提供的形式岛的实现相比,从几个角度来看,这个过程更简单。有了这里介绍的模块化原语,就不需要锚定来处理术语的结构这种情况可能会改变,例如考虑依赖类型。因此,与[ 12 ]中使用的涉及术语结构的“深层”锚定不同,我们在这里只需要一个处理模块内容的另一个区别是我们不必以同样的方式证明编译过程:在[12]中,匹配编译必须被证明,考虑锚定的属性。在我们的例子中,验证过程将涉及对导入和参数实例化的验证,特别是导致HTML类型系统的另一种使用。9源代码和示例可以在http://tom.loria.fr/applications.php#XmlC. Kirchner等人/理论计算机科学电子笔记157(2006)1331435HTML相关工作将我们的注意力限制在HTML中锚定模块化的具体问题上,问题是确定我们的方法在网站开发过程中提供的改进首先,MHTML提供了以下主要优点:• 它独立于托管网站的WEB• 不需要像在WYSIWYG HTML编辑器中那样通过GUI处理语言。这大大简化了维护过程。它还可以被底层GUI环境用来生成模块化的、希望是人类可读的代码。• 它有一个轻量级的编译过程。• 它很容易学。• 它不需要每次访问网站时都执行• 最后,我们应该强调的是,对于任何锚定,它都不会引起对语言扩展的任何依赖,因为所有锚定的语言功能都被编译成目标语言。HTML模块化的缺乏当然已经引起了人们的注意,我们可以提到以下与WEB相关的作品。JWIG项目[3]提供了一种旨在设计交互式Web服务的语言的实现它基于以会话为中心的WEB请求执行模型。作为第二个结果,它提供了一个模板语言的动态网页建设。这种语言允许定义间隙,可以用HTML代码填充。当然,这种方法提供了HTML代码的重用,但它依赖于整个环境来完成简单的结构化任务。在[8]中,开发了一个带有语言的完整管理环境,以解决在数据密集型网站的实现中出现的管理问题。该系统结合了查询语言来指定网站的结构和内容与模板语言,其HTML表示。虽然可重用性不是这项工作的主要关注点,但模板语言为网站的创建提供了灵活性和可扩展性,但它与前一个一样存在缺点相对于脚本语言,如PHP,ASP,PERL等,这种方法的优点是简单和直接的用户。与脚本语言或服务器端包含(例如Apache中可用)相比,MHTML的另一个优点是每次通过WEB访问根模块时都不需要重新执行。此外,我们相信,虽然这还没有被考虑到,MHTML可以是144C. Kirchner等人/理论计算机科学电子笔记157(2006)133与其他语文结合使用,开发网站。许多WYSI-WYGHTML编辑器提供了类似形式的模板机制这限制了HTML的重用,因为用户依赖于图形环境从现有模板生成新的网页,而在MTML中可以通过简单的文本编辑器获得相同的功能显然,用户也可以在他最喜欢的WYSIWYG编辑器中设计他的页面,然后确定他希望在MHTML中重用该页面的哪些部分。6结论本文所描述的方法是一个更大的企业的一部分,以-ward的入侵和依赖性少的形式化方法和算法的方法,通过形式岛的概念。例如,一方面,匹配和策略重写可能有助于对大块代码建模。另一方面,模块化在大型软件的结构中具有基本的用途我们已经开发了模块化锚定的思想,简单但有用的HTML语言的例子。引入了非常简单的输入和参数化原语,我们已经展示了如何定义HTML的模块化扩展使用ELAN4概述了汇编过程这当然是一个初步的工作,有几点我们正在积极地进行首先,MHTML的实现正在进行中,我们自然选择TOM本身作为实现框架这使我们能够发挥概念,并验证我们最初的想法(并清理我们的一些网页!)。第二,也是非常重要的一点,验证工具应该使用或开发特定于HTML的。当然,正如我们之前提到的,可以考虑W3C工具提供的(X)HTML代码验证。此外,正式的岛机制允许检查M个HTML模块之间的相互依赖性,例如以避免循环问题。 还将开发特定类型的系统,以确保特性. 例如,对于代数语言,结构化数据类型可以使用规定的类型系统进行静态类型化。此外,引入用于参数验证的视图将要求其验证执行非平凡的证明,并且从代数规范社区再次获得的经验将在这里引起极大的兴趣我们也可以考虑为HTML指定验证工具,比如检查链接对象的可达性。当然,HTML是一种非常特殊和初级的语言。一个自然的扩展将涉及XML,特别是用于逻辑和语义WEB,C. Kirchner等人/理论计算机科学电子笔记157(2006)133145和模块化特性将在Rewerse10这样的项目中发挥巨大作用。确认本文得益于我们与皮埃尔-艾蒂安·莫罗、Horatiu Cirstea和Antoine Reilles进行的许多富有成果的讨论,特别是关于正式岛屿的讨论。我们也感谢匿名评审对本文第一版提出的建设性意见引用[1] Bergstra , J. A. , J. Heering 和 P. Klint , Module algebra , Journal of the ACM37(1990),pp.335-372.[2] Bidoit,M.,D. Sannella和A. Tarlecki,Architectural specifications inCASL,Formal Aspectsof Computing13(2002),pp. 252-273。[3] 克里斯滕森,A.美国,A. Moller和M.I. 杨文,基于Java的Web服务架构,北京大学出版社,2001。25(2003),pp.814-875.[4] Cirstea,H.,E. Coquery,W.Drabent,F.法日角Kirchner,J.Maluszynski和B.变态,Web规则语言的类型:初步研究,技术报告(2004)。[5] Deursen,A.,J. Heering和P. Klint,“语言原型”,世界科学,1996年,iSBN 981-02-2732-9。[6] 杜兰,F。,“A R e d i c t i v e M o l e A l g e b r i t e A l g e b r i c t i c a t i c t i n s to the Maude L anguage“ , Ph.D.thesis , UniversidadeM'alaga , Spain ( 1999 ) ,http://maude.csl.sri.com/papers.[7] 杜 兰 , F 。 和J 。 Meseguer , Structurredtheoriesandinstitutions , in : M.Hofmann , G.RosolinianddD.Pavlovi'c,editors,Proceedingsof8thConfernceonCategoryTheryanddComputerScience , Edinburgh , Scotland ,September 1999 , Electronic Notes in Theoretical Computer Science29 ( 1999 ) ,pp.71http://www.elsevier.nl/locate/entcs/volume29.html。[8] 费尔南德斯,M.,D. Florescu,A. Levy和D. Suciu,Declarative specification of web siteswith strudel,The VLDB Journal9(2000),pp.38-55.[9] Guyon , J. , P. - E. Moreau 和 A. Reilles , An integrated development environment forpatternmatching programming,in:2nd eclipse Technology eXchange workshop-eTX[10] Hrvatin,S.,Structurationpourllesp′ecationsa`basededer`egles:EtudeeetmisenanuvrepourTOM , RapportdeDEA , Universit′eHenriPoincar′e-Na ncy1(2004).[11] 基什内尔角和H. Kirchner,基于规则的程序设计和证明:ELAN经验成果,第九届亚洲计算科学会议-亚洲[12] Kirchner,C., P. - E. Moreau和A. Reilles,模式匹配代码的形式验证,在:A. Festival,editor,Proceedings of the PPDP[13] Leroy,X.,一个模块化的模块系统,Journal of Functional Programming10(2000),pp. 269-303第10rewerse.net146C. Kirchner等人/理论计算机科学电子笔记157(2006)133[14] Moreau,P. E、C. Ringeissen和M. Vittek,一个多目标语言的模式匹配算法,在:G。Hedin,editor,12th Conference on Construction,Warsaw(Poland),LNCS2622(2003),pp.61比76[15] Raggett,D.,A.L.霍斯和我。Jacobs,Html 4.01规范(1999),http://www.w3.org/TR/REC-html40/网站。[16] W3C, xhtml1.0可扩展超文本标记语言(第二版)(2002),http://www.w3.org/TR/REC-html40/网站。
下载后可阅读完整内容,剩余1页未读,立即下载
使用百分比<联系我们
使用页脚的<联系我们<联系我们此模板可以使用以下实例化生成新实例例3.4实际的模块名被替换为参数,以获得前一个模板的适当实例:模块出版物%import template1 [myHomePagemyPageHeeadermyBookmarksmyPublicationsmyPageFooter]图2显示了上面示例中使用的语法140C. Kirchner等人/理论计算机科学电子笔记157(2006)133模块身体::=::=%modulemoduleName(([Import][Use][HTML])进口::=%importmoduleName[Paraminst+][Param::=paramName帕拉明斯特::=模块名称使用::=%useparamName理论::=格式良好的HTML|验证HTMLHTML::=任何HTML代码,上面图二. 通用结构化构造4语义、锚定和编译现在我们来描述如何将MHTML中提供的模块化特性编译成HTML。从实现的角度来看,编译器接受一个MHTML程序作为输入,该程序由本机代码和第3节中描述的语言的模块化原语组成,并生成纯本机代码作为输出。为了描述这个编译过程,我们选择编写一个代数规范,并在ELAN4 [11]中实现重写规则通过这种方式,我们还提供了我们的MHTML语言的操作语义。该规范的概要见图3。这与[6]中给出的描述Maude语言(更详细)模块化特征的规则类似(但确实更简单)。ELAN4共享SDF的语法定义[5]。HTML代码由排序HTML表示。下一条规则可以解读如下:• 第一条规则是,没有比%module更进一步的结构化构造的模块应该被转换成HTML代码。[ ] translate(%module mhtml) =>html• 下面的两条规则指出,任何没有参数或理论的导入都应该开始递归调用translate函数,结果将在找到%import标记[ ]translate(%module m %import m1 html)=> translate(load(m1))htmltranslate(%module mhtml %import m1) =>html translate(load(m1))• 下面的规则与前面的规则具有类似的效果,但是它们通过C. Kirchner等人/理论计算机科学电子笔记157(2006)133141模块mhtmlTranslateimports basic/ElanLayoutbasic/BuiltinBoolmhtmltool exports规则hiddens上下文无关语法translate(Module)->HTMLtranslate ( Module , ParamList ) ->HTMLHTML HTML-> HTMLload(ModuleName)->Modulesatisfies(Module,Theory)-> BuiltinBool变量“m”[0-9]*->ModuleName“x”[0-9]*->ParamName“p”[0-9]*->ParamDecList“i”[0-9]*->ParamList“html”[0-9]* ->HTML“th”[0-9]*->理论[ ]translate(%module mbody)=>translate(body)translate(%modulem%importm1html)=>translate(load(m1))html[ ]translate(%modulemhtml%importm1)=>html translate(load(m1))translate(%module mhtml%import m1::th)=>html translate(load(m1))if satisfies(load(m1),th)translate(%module m %import m1::th html)=>translate(load(m1))htmlif satisfies(load(m1),th)[ ]translate(%module m %import m1[i]html)=>translate(load(m1), i)htmltranslate(%modulem%importm1[i]::thhtml)=> translate(load(m1),i)htmlif satisfies(load(m1),th)[ ] translate ( %module m )[x p] html%use x , m2i )=>translate ( %modulem[p]htmltranslate ( load(m2)),i)[ ]translate ( %module m[x : : th p] html%usex , m2i )=>translate ( %modulem[p]htmltranslate ( load(m2)),i)ifsatisfies(load(m2),th)图三. MHTML编译器的重写规则满足功能。translate(%module mhtml %import m1::th)=>html translate(load(m1))如果满足(load(m1),th)[ ] translate(%module m %import m1::th html)=>translate(load(m1))html如果满足(load(m1),th)• 接下来的两个规则处理参数化模块的导入,在这种情况下,激活第二个版本的转换函数来处理实际参数。[ ]translate(%module m %import m1[i]html)=>translate(load(m1),i)html[ ]translate(%module m %import m1 [i]::thhtml)=>142C. Kirchner等人/理论计算机科学电子笔记157(2006)133translate(load(m1),i)htmlifsatisfies(load(m1),th)• 下面的规则遍历形参列表,根据实际参数验证它们,并在发现[ ] translate(%module m[x p] html %usex, m2i)=>translate( %module m[p] html translate(load(m2)),i)[ ] translate(%module m[x::th p] html %usex, m2i)=>translate( %module m[p] html translate(load(m2)),i)ifsatisfies(load(m2),th)开发了一个原型来实现MHTML编译器的早期版本。作为具体的语法,我们使用XML标记来表示前面介绍的原语,例如%模块构造成为<模块>.,其他构造也是我们已经限制了[16]第一个问题是如何将一个新的语法定义为XHTML-1.0-Strict编译器是一个TOM使用上述规则的左侧作为XML模式的程序,一旦在源代码中的遍历过程中匹配,就会启动一个操作,执行规则9的相应右侧中指定的转换。目前,限制是缺乏理论和它们所需要的相应验证。这些重写规则提供了将MHTML编译为HTML的概要。在完成实例化过程的完整描述后,此规范提供了将MHTML编译为HTML的规范化过程。与TOM中为匹配和重写提供的形式岛的实现相比,从几个角度来看,这个过程更简单。有了这里介绍的模块化原语,就不需要锚定来处理术语的结构这种情况可能会改变,例如考虑依赖类型。因此,与[ 12 ]中使用的涉及术语结构的“深层”锚定不同,我们在这里只需要一个处理模块内容的另一个区别是我们不必以同样的方式证明编译过程:在[12]中,匹配编译必须被证明,考虑锚定的属性。在我们的例子中,验证过程将涉及对导入和参数实例化的验证,特别是导致HTML类型系统的另一种使用。9源代码和示例可以在http://tom.loria.fr/applications.php#XmlC. Kirchner等人/理论计算机科学电子笔记157(2006)1331435HTML相关工作将我们的注意力限制在HTML中锚定模块化的具体问题上,问题是确定我们的方法在网站开发过程中提供的改进首先,MHTML提供了以下主要优点:• 它独立于托管网站的WEB• 不需要像在WYSIWYG HTML编辑器中那样通过GUI处理语言。这大大简化了维护过程。它还可以被底层GUI环境用来生成模块化的、希望是人类可读的代码。• 它有一个轻量级的编译过程。• 它很容易学。• 它不需要每次访问网站时都执行• 最后,我们应该强调的是,对于任何锚定,它都不会引起对语言扩展的任何依赖,因为所有锚定的语言功能都被编译成目标语言。HTML模块化的缺乏当然已经引起了人们的注意,我们可以提到以下与WEB相关的作品。JWIG项目[3]提供了一种旨在设计交互式Web服务的语言的实现它基于以会话为中心的WEB请求执行模型。作为第二个结果,它提供了一个模板语言的动态网页建设。这种语言允许定义间隙,可以用HTML代码填充。当然,这种方法提供了HTML代码的重用,但它依赖于整个环境来完成简单的结构化任务。在[8]中,开发了一个带有语言的完整管理环境,以解决在数据密集型网站的实现中出现的管理问题。该系统结合了查询语言来指定网站的结构和内容与模板语言,其HTML表示。虽然可重用性不是这项工作的主要关注点,但模板语言为网站的创建提供了灵活性和可扩展性,但它与前一个一样存在缺点相对于脚本语言,如PHP,ASP,PERL等,这种方法的优点是简单和直接的用户。与脚本语言或服务器端包含(例如Apache中可用)相比,MHTML的另一个优点是每次通过WEB访问根模块时都不需要重新执行。此外,我们相信,虽然这还没有被考虑到,MHTML可以是144C. Kirchner等人/理论计算机科学电子笔记157(2006)133与其他语文结合使用,开发网站。许多WYSI-WYGHTML编辑器提供了类似形式的模板机制这限制了HTML的重用,因为用户依赖于图形环境从现有模板生成新的网页,而在MTML中可以通过简单的文本编辑器获得相同的功能显然,用户也可以在他最喜欢的WYSIWYG编辑器中设计他的页面,然后确定他希望在MHTML中重用该页面的哪些部分。6结论本文所描述的方法是一个更大的企业的一部分,以-ward的入侵和依赖性少的形式化方法和算法的方法,通过形式岛的概念。例如,一方面,匹配和策略重写可能有助于对大块代码建模。另一方面,模块化在大型软件的结构中具有基本的用途我们已经开发了模块化锚定的思想,简单但有用的HTML语言的例子。引入了非常简单的输入和参数化原语,我们已经展示了如何定义HTML的模块化扩展使用ELAN4概述了汇编过程这当然是一个初步的工作,有几点我们正在积极地进行首先,MHTML的实现正在进行中,我们自然选择TOM本身作为实现框架这使我们能够发挥概念,并验证我们最初的想法(并清理我们的一些网页!)。第二,也是非常重要的一点,验证工具应该使用或开发特定于HTML的。当然,正如我们之前提到的,可以考虑W3C工具提供的(X)HTML代码验证。此外,正式的岛机制允许检查M个HTML模块之间的相互依赖性,例如以避免循环问题。 还将开发特定类型的系统,以确保特性. 例如,对于代数语言,结构化数据类型可以使用规定的类型系统进行静态类型化。此外,引入用于参数验证的视图将要求其验证执行非平凡的证明,并且从代数规范社区再次获得的经验将在这里引起极大的兴趣我们也可以考虑为HTML指定验证工具,比如检查链接对象的可达性。当然,HTML是一种非常特殊和初级的语言。一个自然的扩展将涉及XML,特别是用于逻辑和语义WEB,C. Kirchner等人/理论计算机科学电子笔记157(2006)133145和模块化特性将在Rewerse10这样的项目中发挥巨大作用。确认本文得益于我们与皮埃尔-艾蒂安·莫罗、Horatiu Cirstea和Antoine Reilles进行的许多富有成果的讨论,特别是关于正式岛屿的讨论。我们也感谢匿名评审对本文第一版提出的建设性意见引用[1] Bergstra , J. A. , J. Heering 和 P. Klint , Module algebra , Journal of the ACM37(1990),pp.335-372.[2] Bidoit,M.,D. Sannella和A. Tarlecki,Architectural specifications inCASL,Formal Aspectsof Computing13(2002),pp. 252-273。[3] 克里斯滕森,A.美国,A. Moller和M.I. 杨文,基于Java的Web服务架构,北京大学出版社,2001。25(2003),pp.814-875.[4] Cirstea,H.,E. Coquery,W.Drabent,F.法日角Kirchner,J.Maluszynski和B.变态,Web规则语言的类型:初步研究,技术报告(2004)。[5] Deursen,A.,J. Heering和P. Klint,“语言原型”,世界科学,1996年,iSBN 981-02-2732-9。[6] 杜兰,F。,“A R e d i c t i v e M o l e A l g e b r i t e A l g e b r i c t i c a t i c t i n s to the Maude L anguage“ , Ph.D.thesis , UniversidadeM'alaga , Spain ( 1999 ) ,http://maude.csl.sri.com/papers.[7] 杜 兰 , F 。 和J 。 Meseguer , Structurredtheoriesandinstitutions , in : M.Hofmann , G.RosolinianddD.Pavlovi'c,editors,Proceedingsof8thConfernceonCategoryTheryanddComputerScience , Edinburgh , Scotland ,September 1999 , Electronic Notes in Theoretical Computer Science29 ( 1999 ) ,pp.71http://www.elsevier.nl/locate/entcs/volume29.html。[8] 费尔南德斯,M.,D. Florescu,A. Levy和D. Suciu,Declarative specification of web siteswith strudel,The VLDB Journal9(2000),pp.38-55.[9] Guyon , J. , P. - E. Moreau 和 A. Reilles , An integrated development environment forpatternmatching programming,in:2nd eclipse Technology eXchange workshop-eTX[10] Hrvatin,S.,Structurationpourllesp′ecationsa`basededer`egles:EtudeeetmisenanuvrepourTOM , RapportdeDEA , Universit′eHenriPoincar′e-Na ncy1(2004).[11] 基什内尔角和H. Kirchner,基于规则的程序设计和证明:ELAN经验成果,第九届亚洲计算科学会议-亚洲[12] Kirchner,C., P. - E. Moreau和A. Reilles,模式匹配代码的形式验证,在:A. Festival,editor,Proceedings of the PPDP[13] Leroy,X.,一个模块化的模块系统,Journal of Functional Programming10(2000),pp. 269-303第10rewerse.net146C. Kirchner等人/理论计算机科学电子笔记157(2006)133[14] Moreau,P. E、C. Ringeissen和M. Vittek,一个多目标语言的模式匹配算法,在:G。Hedin,editor,12th Conference on Construction,Warsaw(Poland),LNCS2622(2003),pp.61比76[15] Raggett,D.,A.L.霍斯和我。Jacobs,Html 4.01规范(1999),http://www.w3.org/TR/REC-html40/网站。[16] W3C, xhtml1.0可扩展超文本标记语言(第二版)(2002),http://www.w3.org/TR/REC-html40/网站。
下载后可阅读完整内容,剩余1页未读,立即下载
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![.zip](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- 谷歌文件系统下的实用网络编码技术在分布式存储中的应用
- 跨国媒体对南亚农村社会的影响:以斯里兰卡案例的社会学分析
- RFM2g接口驱动操作手册:API与命令行指南
- 基于裸手的大数据自然人机交互关键算法研究
- ABAQUS下无人机机翼有限元分析与局部设计研究
- TCL基础教程:语法、变量与操作详解
- FPGA与数字前端面试题集锦:流程、设计与Verilog应用
- 2022全球互联网技术人才前瞻:元宇宙驱动下的创新与挑战
- 碳排放权交易实战手册(第二版):设计与实施指南
- 2022新经济新职业洞察:科技驱动下的百景变革
- 红外与可见光人脸融合识别技术探究
- NXP88W8977:2.4/5 GHz 双频 Wi-Fi4 + Bluetooth 5.2 合体芯片
- NXP88W8987:集成2.4/5GHz Wi-Fi 5与蓝牙5.2的单芯片解决方案
- TPA3116D2DADR: 单声道数字放大器驱动高达50W功率
- TPA3255-Q1:315W车载A/D类音频放大器,高保真、宽频设计
- 42V 输入 5A 降压稳压器 TPS54540B-Q1 的特点和应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)