领域特定声明式语言设计_第1页
领域特定声明式语言设计_第2页
领域特定声明式语言设计_第3页
领域特定声明式语言设计_第4页
领域特定声明式语言设计_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

19/25领域特定声明式语言设计第一部分DSLs的特征和类型 2第二部分声明式DSLs设计原则 4第三部分DSLs的语法和语义 6第四部分DSLs的编译器实现技术 9第五部分DSLs的测试和验证 12第六部分DSLs的领域建模和抽象 14第七部分DSLs的可维护性和可扩展性 17第八部分DSLs在特定领域的应用 19

第一部分DSLs的特征和类型关键词关键要点【声明式语言的特性】

1.关注规范化定义:DSLs将领域概念映射为代码结构,专注于规范化问题的定义,而非执行性解决方案的实现。

2.可读性强且可扩展:DSLs的语法通常接近自然语言,易于理解和维护。它们还支持可扩展性,允许用户添加新概念或修改现有概念。

3.领域特定化:DSLs为特定领域量身定制,包含特定领域术语、语法和语义,从而增强了可读性和可理解性。

【DSL的类型】

领域特定声明式语言(DSLs)的特征和类型

特征

*特定领域:DSLs专为特定领域设计,如金融、医疗保健或制造业。

*声明式:DSLs以声明性方式描述问题,而不是提供解决问题的程序性步骤。

*高层抽象:DSLs操作领域知识的高级概念,隐藏底层实现的复杂性。

*语法简洁:DSLs旨在使用简洁、易懂的语法。

*领域专业性:DSLs包含特定于领域的术语和概念,使其易于理解和使用。

类型

DSLs可以根据其语法和语义特性进一步分类。

内部DSL

内部DSL嵌入在现有编程语言中,扩展其功能。

*库/API:通过提供领域特定函数和接口,为现有语言添加DSL功能。

*嵌入式DSL:使用现有语言的语法和语义,在语言内部创建DSL。

外部DSL

外部DSL是独立的语言,具有自己的语法和语义。

*文本DSL:使用文本文件声明问题,遵循特定语法规则。

*图形DSL:使用图形符号(例如流程图或UML图)表示问题。

特定领域的DSL示例

*LINQ(语言集成查询):用于在.NET语言中查询数据集合。

*SQL(结构化查询语言):用于检索和管理关系数据库中的数据。

*ANTLR(ANotherToolforLanguageRecognition):用于构建语言解析器和词法分析器。

*JMeter:用于测试Web应用程序性能。

*XSLT(可扩展样式表语言转换):用于转换XML文档。

DSLs的优点

*领域专业性:提高领域专家与软件工程师之间的沟通效率。

*开发效率:减少开发时间和成本,因为DSL消除了底层复杂性的需要。

*可读性和可维护性:由于其声明性语法,DSLs易于阅读和维护。

*可扩展性:DSLs可以轻松扩展,包括新特性和功能。

*可移植性:独立的DSL通常可以在不同的平台上使用,增强了可移植性。

DSLs的局限性

*学习曲线:学习新DSL可能需要时间和精力。

*特定性:DSLs通常仅适用于特定领域,限制了其通用性。

*性能:内部DSL可能比外部DSL慢,因为它们依赖于编译器来生成本机代码。

*错误处理:DSLs缺乏健壮的错误处理机制,这可能会导致难以调试的问题。

*文档:DSLs的文档可能不可靠或不足,这可能阻碍其采用。

结论

DSLs通过提供特定的领域知识的高级抽象和声明性语法,在软件开发中发挥着重要作用。他们提高了开发效率、可读性和可维护性。然而,在选择和实施DSL时,需要注意它们的局限性,例如学习曲线和特定性。通过仔细考虑,DSLs可以成为特定领域软件开发的强大工具。第二部分声明式DSLs设计原则领域特定声明式语言(DSL)设计原则

1.表达力:

*DSL应具有表达特定领域概念所需的表达力。

*它应能够清晰、简洁地表达领域的意图和决策。

2.可读性:

*DSL代码应易于阅读和理解,就像自然语言一样。

*语法应直观且符合领域的惯例。

3.可维护性:

*DSL代码应易于维护和修改。

*应支持重构和代码复用。

4.可扩展性:

*DSL应易于扩展以支持新功能和语言结构。

*应提供扩展机制,允许用户定义自己的DSL元素。

5.抽象性:

*DSL应抽象出领域的复杂性。

*用户应能够专注于解决问题,而不是底层实现。

6.模块化:

*DSL应被分解成更小的可管理模块。

*模块应具有明确定义的接口,促进代码重用。

7.通用性:

*DSL应尽可能通用,以便可以在不同的环境中使用。

*它不应依赖于特定的工具、平台或框架。

8.语义清晰:

*DSL的语义应清晰明确。

*程序员应能够理解DSL代码的行为而不产生歧义。

9.错误处理:

*DSL应提供有效的错误处理机制。

*应明确报告错误,并提供有用的诊断信息。

10.文档和示例:

*DSL应有充分的文档和示例。

*用户应能够轻松学习和理解DSL如何工作。

11.社区支持:

*DSL应得到活跃社区的支持。

*用户应能够获得在线论坛、文档和技术支持。

12.工具支持:

*DSL应有工具支持,包括编辑器、调试器和文档生成器。

*这些工具应提高DSL代码的开发和维护效率。

13.领域知识:

*DSL设计师应具有目标领域的深入知识。

*他们应了解领域的术语、概念和最佳实践。

14.用户反馈:

*DSL设计应收集用户反馈。

*用户的意见和改进建议应被纳入未来的DSL版本中。

15.持续改进:

*DSL应不断改进和更新。

*设计师应定期审查DSL并根据需要进行调整。第三部分DSLs的语法和语义关键词关键要点DSL的语法

1.DSL的语法通常基于形式语言,如正则表达式或上下文无关语法;

2.DSL的语法被设计为针对特定领域的特定需求,允许用户使用领域术语和概念表达问题;

3.DSL的语法通常是可扩展的,允许用户添加或修改语法,以适应特定需求。

DSL的语义

1.DSL的语义定义了如何解释DSL语句的含义;

2.DSL的语义通常是通过形式语义或操作语义来定义的;

3.DSL的语义对于确保DSL行为的可预测性和正确性至关重要。领域特定声明式语言设计中的语法和语义

语法

1.抽象语法树(AST):DSL的语法通常定义为AST,其中每个节点代表语言中的语法结构,例如表达式、语句或声明。

2.终结符和非终结符:终结符代表AST中的原子符号(例如关键字、标识符),而非终结符代表语法结构(例如表达式、语句)。

3.语法规则:语法规则定义符号之间的合法组合,从而描述语言的语法结构。例如,一个表达式规则可能定义表达式可以由常量、变量或操作符表达式组成。

4.上下文的自由文法(CFG):CFG用于指定语法规则的一种形式化方法。CFG由一个终结符集合、一个非终结符集合和一组产生规则组成,这些规则定义非终结符如何展开成符号序列。

语义

1.语义规则:语义规则定义了语法结构的含义,例如如何计算表达式的值或执行语句。

2.操作语义:操作语义指定了DSL程序的逐步执行,通常使用抽象机器或解释器来描述。

3.声明语义:声明语义使用逻辑公式或公理系统来形式化DSL程序的含义,着重于程序的属性和不变量。

4.代数语义:代数语义使用代数结构来定义DSL程序的含义,允许对程序进行形式化推理和分析。

设计考虑因素

语法设计原则:

*简洁性:语法应简洁明了,以便于阅读和理解。

*表现力:语法应足够强大,能够表达领域中的所有必要概念。

*可扩展性:语法应能够轻松修改以适应变化或新的需求。

语义设计原则:

*清晰度:语义应明确且易于理解。

*正确性:语义应准确地描述DSL程序的含义。

*可重用性:语义应尽可能适用于多个DSL。

常见的DSL语法和语义模式

语法模式:

*域特定关键词和语法构造:DSL使用特定于领域的关键词和语法构造,以增强其可读性和可理解性。

*嵌入式语言:DSL可以嵌入到现有编程语言中,例如使用C#中的特定指令或Java中的注释语法。

*声明性语法:DSL通常具有声明性的语法,重点关注要完成的任务,而不是如何完成任务。

语义模式:

*解释器:解释器是运行DSL程序的最常见方法,它按顺序执行程序的语句。

*编译器:编译器将DSL程序转换为另一种语言(例如机器代码),从而实现更快的执行速度。

*模型转换:模型转换将DSL程序转换为另一种表示形式,例如中间模型或目标语言。

*约束和不变量检查:DSL可以包括约束和不变量检查,以确保程序的正确性。

结论

语法和语义是领域特定声明式语言设计中的两个关键方面。通过仔细遵循设计原则并利用常见的模式,可以创建易于使用、功能强大且可维护的DSL。这些语言对于提高特定领域程序的生产力和可理解性至关重要。第四部分DSLs的编译器实现技术关键词关键要点主题名称:语法解析

1.语法解析器的生成器提供平台无关的并可定制的语法解析器实现,方便开发人员。

2.解析树用于表示DSL代码的语法结构,为进一步处理和分析提供基础。

3.语言工作台支持DSL语法解析器开发,提供丰富的工具和集成环境,简化流程。

主题名称:语义分析

DSLs的编译器实现技术

#基于解释器的编译器

解释器是DSL编译器中最简单的实现技术,它逐行读取DSL源代码,并立即执行每个语句。解释器的优点在于简单易于实现,但缺点是执行效率较低。

#基于源到源转换的编译器

源到源转换器是一种将DSL源代码转换为另一种语言(通常是更通用的编程语言)的编译器。这种转换后的代码随后由该语言的编译器编译成目标代码。源到源转换器的优点在于可以利用现有的编译器基础设施,但缺点是转换过程可能会很复杂且容易出错。

#基于字节码的编译器

字节码编译器将DSL源代码编译成一组字节码指令,这些指令由虚拟机解释执行。字节码编译器的优点在于可以在多种平台上移植,但缺点是效率可能低于直接编译成机器代码的编译器。

#基于JIT编译的编译器

JIT(即时编译)编译器在程序运行时编译DSL源代码。与解释器不同,JIT编译器仅编译当前正在执行的代码块,从而提高了执行效率。JIT编译器的优点在于既可以提供接近原生代码的性能,又可以避免源到源转换带来的复杂性。

#编译器生成器

编译器生成器是一种工具,它可以自动生成特定DSL的编译器。编译器生成器可以简化编译器实现过程,但其生成的编译器性能可能不如手动编写的编译器。

#其他编译器实现技术

除了上述技术之外,还有许多其他可以用于实现DSL编译器的技术,包括:

*基于语法制导编译器的编译器:语法制导编译器使用语法规则来指导编译过程,从而可以生成高效的代码。

*基于逻辑编程的编译器:逻辑编程语言(如Prolog)可以用于实现DSL编译器,这可以简化编译过程。

*基于模式匹配的编译器:模式匹配技术可以用于识别和处理DSL源代码中的模式,从而简化编译过程。

编译器实现技术的选择

选择DSL编译器实现技术时,需要考虑以下因素:

*性能:解释器通常比其他技术效率低,而基于JIT编译的编译器通常可以提供最高的性能。

*可移植性:基于字节码的编译器可以在多种平台上移植,而基于源到源转换的编译器则需要针对每个目标平台进行专门实现。

*开发成本:编译器生成器可以简化编译器实现过程,但其生成的编译器性能可能不如手动编写的编译器。

*灵活性:某些技术(如基于语法制导编译器的编译器)可以提供更高的灵活性,允许定制编译过程。

通过考虑这些因素,可以为特定DSL选择最佳的编译器实现技术。第五部分DSLs的测试和验证领域特定声明式语言设计中的测试和验证

领域特定声明式语言(DSL)的有效测试和验证对于确保其可靠性和可维护性至关重要。与通用编程语言不同,DSL通常针对特定领域进行定制,这带来了独特的测试和验证挑战。本文将探讨DSL测试和验证的最佳实践和技术。

测试金字塔

测试金字塔是一种常见的模型,它建议在不同级别执行不同类型的测试。对于DSL,测试金字塔可以分为以下层级:

*单元测试:在最底层,单元测试验证DSL语法的各个部分。这些测试检查解析器、语义检查器和代码生成器的行为。

*集成测试:集成测试验证不同DSL组件之间的交互。它们检查DSL的不同部分是否按预期协同工作。

*系统测试:系统测试将DSL作为一个整体进行测试。它们检查DSL与外部系统和环境的交互。

语法和语义验证

DSL测试的一个关键方面是验证其语法和语义。这可通过以下方法实现:

*解析器测试:解析器测试确保DSL语法被正确解析。它们验证词法标记、语法分析和语义分析的正确性。

*类型检查:类型检查验证DSL表达式的类型正确性。它检查类型兼容性、类型推断和类型错误检测。

*语义检查:语义检查验证DSL表达式的含义。它检查变量范围、表达式求值和副作用。

代码生成验证

DSL通常用于生成代码,因此验证生成的代码的正确性至关重要。代码生成验证可通过以下方法实现:

*单元测试:单元测试验证代码生成器的各个部分。它们检查代码生成算法、优化和其他特性。

*集成测试:集成测试验证生成代码与其他系统和环境的交互。它们检查代码的性能、鲁棒性和可维护性。

模型验证

某些DSL用于创建模型,因此验证这些模型的准确性和一致性至关重要。模型验证可通过以下方法实现:

*模型检查:模型检查是一种形式验证技术,它使用数学原理自动验证模型的属性。它可以检查模型是否符合特定的规则或约束。

*仿真:仿真涉及执行模型以观察其行为。它可以帮助выявить模型中的错误和缺陷。

性能测试

对于涉及大量数据的DSL,性能测试对于评估其效率和可扩展性至关重要。性能测试可通过以下方法实现:

*基准测试:基准测试测量DSL的执行时间和资源消耗。它可以比较不同DSL实现或优化技术的性能。

*负载测试:负载测试在不同负载下模拟对DSL的请求。它可以识别性能瓶颈并评估DSL的可扩展性。

最佳实践

设计和执行有效的DSL测试和验证时,以下最佳实践至关重要:

*使用自动化测试:自动化测试使测试过程更有效率和可靠。利用单元测试框架、集成测试工具和模型验证技术。

*建立全面的测试套件:覆盖尽可能多的DSL特性和用例。包括正向和反向测试案例,以及边界和异常条件。

*采用版本控制:对测试脚本和测试数据进行版本控制,以跟踪更改并确保测试的可重复性。

*定期执行测试:定期执行测试以确保DSL的可靠性和稳定性。当添加新特性或修复错误时,尤其重要的是执行测试。

*寻求外部反馈:从其他开发人员、测试人员和最终用户那里收集反馈,以改进DSL的测试和验证流程。

通过遵循这些最佳实践和技术,可以设计和执行有效的DSL测试和验证方法,确保DSL的可靠性、可维护性和最终成功。第六部分DSLs的领域建模和抽象关键词关键要点领域建模

1.领域建模是识别、分析和抽象领域知识的过程。

2.DSL的设计应基于明确定义的领域模型,该模型捕获领域概念的本质和相互作用。

3.领域建模技术(如本体、图和概念图)可用于创建可重用且可维护的DSL。

抽象

领域特定声明式语言设计中的领域建模和抽象

引言

领域特定声明式语言(DSL)是一种专门针对特定领域的编程语言,它通过领域的概念和术语进行操作,从而简化了软件开发过程。领域建模和抽象是DSL设计中的两个关键概念,它们为理解和操作领域提供了一个框架。

领域建模

领域建模是创建领域概念的抽象表示的过程,这些概念捕获了特定领域中的知识和关系。它涉及识别和定义领域的实体、概念、属性和关系。领域建模的结果是一个领域模型,它代表了领域并作为DSL的基础。

抽象

抽象是领域建模的关键方面,它侧重于捕获领域的本质特征,同时忽略无关或不重要的细节。通过抽象,DSL设计者可以创建更通用、更可重用的语言,适用于领域的各种情况。

领域建模技术

有几种技术可用于领域建模,包括:

*实体关系图(ER图):ER图使用图形符号来表示实体、属性和关系。

*统一建模语言(UML):UML使用多种图表类型来建模领域,包括类图、用例图和时序图。

*本体:本体是概念结构化的形式化表示,它可以捕获领域的语义和关系。

抽象技术

抽象技术可用于从领域模型中创建DSL,包括:

*模式:模式是语言元素的组合,它们一起表示领域概念。

*宏:宏是代码片段,它们可以扩展DSL的语法和语义。

*元编程:元编程允许DSL在运行时修改自身,从而提供更大的灵活性。

领域建模和抽象的好处

领域建模和抽象为DSL设计提供了以下好处:

*领域理解:DSL设计者可以深入理解领域,从而创建更准确和有效的语言。

*沟通:领域模型提供了一种与领域专家沟通域知识的通用语言。

*可重用性:抽象技术允许DSL在不同的领域和应用程序中重用。

*易用性:通过使用领域概念和术语,DSL变得更容易学习和使用。

*可维护性:领域建模和抽象促进创建模块化且可维护的DSL。

领域建模和抽象的挑战

领域建模和抽象也存在一些挑战:

*复杂性:领域建模和抽象过程可能很复杂,需要对领域有深刻的理解。

*主观性:领域模型可能会受到设计者主观解释的影响。

*抽象级别:确定适当的抽象级别可能是困难的,因为抽象过多可能会丢失重要细节,而抽象不足则会导致语言复杂。

结论

领域建模和抽象是DSL设计中不可或缺的方面。通过使用领域概念和术语,DSL设计者可以创建更准确、更有效、更易用和更可维护的语言。领域建模和抽象技术提供了理解和操作领域所需的概念框架,并为DSL的可重用性和灵活性奠定了基础。第七部分DSLs的可维护性和可扩展性领域特定声明式语言(DSL)的可维护性和可扩展性

引言

声明式语言,如DSL,在特定领域提供简洁、易于理解的建模抽象,从而提高可维护性和可扩展性。然而,DSL设计需要兼顾可维护性和可扩展性,以确保其在长期使用中的有效性。

可维护性

降低认知复杂度

DSL通过使用领域特定术语和语法,降低了代码的认知复杂度,使得开发人员能够轻松理解和维护代码。例如,领域特定建模语言(DSML)对特定领域概念进行抽象,简化了复杂系统的建模。

提升可读性和可追溯性

DSL采用声明式语法,强调代码的可读性和可追溯性。声明式风格允许开发人员专注于表达需求,而不是具体实现细节,从而提高了代码的可维护性。

提高可重用性

通过提供特定于领域的构建块,DSL提高了代码的可重用性。这些构建块可以封装通用任务,从而减少重复代码和提高维护效率。

版本控制和变更管理

DSL通常与版本控制系统集成,允许跟踪代码更改并轻松回滚到以前的版本。这对于维护和管理大型DSL项目至关重要。

可扩展性

支持新功能和需求

DSL应具有可扩展性,以支持不断变化的需求和新功能。这包括通过扩展语言语法、引入新的抽象级别或整合其他DSL来扩展功能。

支持模块化设计

DSL应支持模块化设计,允许将功能分解为可管理的模块。这使得更容易添加或移除功能,以及维护特定领域的变化。

实现定制化

DSL应提供定制化机制,允许开发人员根据需要调整语言。这可以通过自定义语法、语义或集成功能来实现。

增强互操作性

DSL应促进与其他语言和技术的互操作性。这允许将DSL集成到现有系统中,并利用多种工具和平台的功能。

最佳实践

使用分层架构

将DSL设计为分层架构,其中核心语言提供基本功能,而扩展模块提供特定于领域的附加功能。这提高了可扩展性和模块化。

采用元编程

利用元编程技术来自动生成代码或修改DSL自身。这可以简化扩展并提高可维护性。

提供测试和文档支持

提供全面的测试和文档支持,以确保DSL的正确性、可重用性和可理解性。

结论

可维护性和可扩展性对于DSL的长期成功至关重要。通过采用降低认知复杂度、提高可读性、提升可重用性、支持新功能和需求、实现模块化设计、增强定制化以及促进互操作性的最佳实践,DSL设计者可以创建易于维护、可扩展且在特定领域有效的高质量DSL。第八部分DSLs在特定领域的应用关键词关键要点【财务分析领域DSL】

1.提高财务模型的准确性和可审计性,确保数据的完整性和可靠性。

2.简化复杂计算和公式,减少错误,提高效率和生产力。

3.促进利益相关者之间的沟通,提高对财务信息的理解和洞察。

【医疗保健领域DSL】

领域特定声明式语言(DSL)在特定领域的应用

领域特定声明式语言(DSL)因其简洁性和表达力,在各种特定领域中得到了广泛应用。以下列举了一些DSL在不同领域的典型应用场景:

软件工程:

*领域特定建模语言(DSML):用于创建特定领域中抽象模型的DSL,如UML(统一建模语言)和BPMN(业务流程建模和表示法)。

*编程语言:DSL可用作特定任务的特定编程语言,如Groovy(测试自动化)和Puppet(基础设施自动化)。

金融:

*风险建模语言:DSL用于定义和分析金融风险,如F#和OCaml。

*交易语言:DSL用于表示和执行交易,如Fix(金融信息交换协议)。

医疗保健:

*临床信息学语言:DSL用于处理医学数据,如HL7(医疗保健级联层)和SNOMEDCT(医疗术语系统)。

*患者护理计划语言:DSL用于创建和管理患者护理计划,如PROforma。

制造:

*产品生命周期管理语言:DSL用于管理产品生命周期,如PLMXML。

*工艺计划语言:DSL用于定义和计划制造工艺,如G-code(数控加工语言)。

其他领域:

*自然语言处理:DSL用于处理自然语言文本,如NLTK(自然语言工具包)。

*网络自动化:DSL用于自动化网络配置和管理,如Ansible和SaltStack。

*游戏开发:DSL用于创建游戏关卡和脚本,如Lua和HLSL(高层着色语言)。

DSL的优势:

*简洁性:DSL针对特定领域量身定制,提供简洁且易于理解的语法。

*表达力:DSL允许领域专家使用特定术语和表示法清晰地表达复杂概念。

*效率:DSL通过自动化常用任务和抽象底层复杂性来提高开发效率。

*可重用性:DSL鼓励可重用性,允许领域专家创建和共享特定领域的组件和模块。

*领域知识表达:DSL将领域知识编码到语言中,促进跨领域团队的沟通和理解。

DSL的分类:

*内部:嵌入到现有编程语言中的DSL,如Java中的Groovy。

*外部:独立于宿主语言的DSL,如YAML(用于配置管理)。

*混合:部分嵌入式,部分外部式,如Erlang中的OTP(开放电信平台)。

DSL的设计原则:

*领域驱动:从领域的观点设计DSL,重点关注领域概念和操作。

*抽象:抽象底层复杂性,专注于领域中重要的方面。

*表达:提供一种简洁而富有表现力的方式来表达领域概念。

*可扩展性:设计DSL以适应不断变化的领域需求。

*用户友好:使DSL易于学习和使用,即使对于非程序员也是如此。

结论:

领域特定声明式语言在特定领域中发挥着至关重要的作用,提供简洁性、表达力和效率。通过针对特定领域进行定制,DSL使领域专家能够清晰地表达和处理复杂概念,从而提高开发效率和可重用性。关键词关键要点主题名称:声明式DSLs的设计原则

关键要点:

1.关注领域概念,而非技术细节:声明式DSLs旨在以一种领域专家能够理解的方式表达问题,而不是专注于底层技术实现。

2.提供抽象语义:DSL语义应该抽象化底层实现细节,允许领域专家专注于解决领域问题,而不是软件工程细节。

3.支持可读性和可维护性:DSL代码应优先考虑可读性和可维护性,使领域专家能够轻松理解和修改程序。

主题名称:语法设计

关键要点:

1.清晰简洁的语法:语法规则应简单易懂,避免不必要的复杂性。

2.领域特定术语:DSL语法应使用领域特定的术语,以方便领域专家的使用。

3.一致性和可扩展性:语法应保持一致,并通过提供扩展机制来支持未来的改进和扩展。

主题名称:语义设计

关键要点:

1.形式化语义:DSL语义应通过形式化的方法定义,例如操作语义或模型理论。

2.清晰明确的执行模型:定义明确的执行模型对于理解DSL程序的行为至关重要。

3.可组合性和复用性:DSL语义应支持组件的组合和复用,以促进程序的模块化和可维护性。

主题名称:语言扩展

关键要点:

1.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论