C语言编译器前端的设计与实现课程设计.doc_第1页
C语言编译器前端的设计与实现课程设计.doc_第2页
C语言编译器前端的设计与实现课程设计.doc_第3页
C语言编译器前端的设计与实现课程设计.doc_第4页
C语言编译器前端的设计与实现课程设计.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

计 算 机 与 信 息 工 程 学 院软硬件专业综合课程设计总结报告题目: C语言编译器前端的设计与实现 姓 名: 学 号: 专 业: 计算机科学与技术 指导教师: 起止日期: 12.11.2613.01.20 计 算 机 与 信 息 工 程 学 院软硬件专业综合课程设计任务书实践题目C语言编译器前端的设计与实现学生姓名班级学号指导教师职称实践地点计算机基础实验室实践日期2012年11月26日起至2013年1月20日选题的目的:编译器前端是制作一个编译器最为关键性的一个步骤,设计一个优秀的前端,直接影响到后期编译器的实现效率。编译器前端具有多样化,实现的方法较多,如何选择更优秀的方法来设计,让许多人一直不懈的研究下去。并且编译器前端的设计能与自然语言处理相互印证,是一个值得思考的领域。技术要求:1、熟练掌握一门语言,熟练掌握C语言语法使用,以及各种语法结构2、良好的算法数据结构基础,对常见的数据结构模型能够实现3、对编译原理知识有良好的基础,对于各种常见文法做到心中有数4、熟练使用VS2005开发工具进度安排:2012年11月26日2012年12月09日 可行性研究、需求分析2012年12月10日2012年12月23日 总体设计2012年12月24日2013年01月06日 详细设计2013年01月07日2013年01月13日 系统调试、测试2013年01月14日2013年01月18日 撰写实训报告2013年01月19日2013年01月20日 验收主要参考资料:1 钱焕延.编译技术第2版M.南京:东南大学出版社出版,2002。2 康慕宁.编译原理M.西安:西北工业大学出版社出版,2003。3 贺世娟,陈冀川.Visual studio 2005 程序设计M.北京:中国水利水电出版社出版,2008.8。4 杨克玉.Visual studio 2005程序设计实训教程M.北京:机械工业出版社出版,2009.2。教师签名: 年 月 日C语言编译器前端的设计与实现摘 要:编译器是程序员使用的关键工具,程序员每天都在使用编译器,并且非常依赖于其正确性和可靠性。编译器作为广大IT从业者必须接触的系统软件,它的设计本身又是一个极其庞大的工程。编译器相关的各项技术经过近几十年的发展,已经日臻成熟,然而编译器构造原理和技术依然是计算机科学中理论与实践相结合的最好典范。本文首先介绍了C语言及C语言编译器的发展历程,其次对本次开发所用到的工具Visual Studio C+2005以及面向对象的程序设计方法做一下简单介绍。最后重点介绍了编译器前端的详细开发过程,分为三个部分分别阐述:词法分析器的设计,语法分析器的设计,语义分析部分。每个部分又分别从总体框架,详细流程,重点数据结构和函数,以及与其他部分的接口等方面予以阐述。由于C语言本身的复杂性,很难面面俱到实现所有标准定义,所以本次设计只象征性的选择部分具有代表性的功能。在本文的第四章详细给出了此次设计所实现的功能和语法规范,同时也给出了编译器的运行方式。关键词:编译器前端、C源程序、面向对象程序设计方法、VC+目 录摘要I第1章 绪论11.1 C语言及编译器概述11.2 C编译器设计思想11.3 开发工具的选用及介绍21.4 论文组织结构3第2章 C语言词法分析器总体分析与设计42.1 系统设计目标与功能分析42.2 词法分析42.3 语法分析42.3.1自顶向下的语法分析52.3.2自底向上的语法分析52.4 语义分析62.5 符号表62.6 类型检查7第3章 系统详细设计83.1 系统设计基本思路83.2 词法分析模块设计83.3 语法分析模块设计113.4 语义分析模块设计14第4章 结束语16参考文献16 附录: 附录1:词法分析核心代码.17 附录2:语法分析核心代码.18- 0 -第1章 绪论1.1 C语言及编译器概述C语言是在70年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchit合著了著名的“THE C PROGRAMMING LANGUAGE”一书。通常简称为K&R,也有人称之为K&R标准。但是,在K&R中并没有定义一个完整的标准C语言,后来由美国国家标准学会在此基础上制定了一个C 语言标准,于一九八三年发表。通常称之为ANSI C。C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言。编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程。然而,也存在从低阶语言到高阶语言的编译器,这类编译器中用来从由高阶语言生成的低阶语言代码重新生成高阶语言代码的又被叫做反编译器。也有从一种高阶语言生成另一种高阶语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。典型的编译器输出是由包含入口点的名字和地址, 以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序。1.2 C编译器前端设计思想一个编译器的前端设计主要工作过程可以概括为以下几个步骤:(1)词法分析词法分析器根据词法规则识别出源程序中的各个记号(token),每个记号代表一类单词(lexeme)。源程序中常见的记号可以归为几大类:关键字、标识符、字面量和特殊符号。词法分析器的输入是源程序,输出是识别的记号流。词法分析器的任务是把源文件的字符流转换成记号流。本质上它查看连续的字符然后把它们识别为“单词”。(2)语法分析语法分析器根据语法规则识别出记号流中的结构(短语、句子),并构造一棵能够正确反映该结构的语法树。(3)语义分析语义分析器根据语义规则对语法树中的语法单元进行静态语义检查,如果类型检查和转换等,其目的在于保证语法正确的结构在语义上也是合法的。本系统的设计主要是实现了其中的词法分析、语法分析和语义分析三个部分。1.3 开发工具的选用及介绍软件环境使用Windows2000/XP操作系统,用Visual C+ .NET为开发平台,在开发此软件时用的是VC+中的MFC框架。Visual C+.NET2005是微软公司推出的开发Win32应用程序(Windows 95/98/2000/XP/NT)的面向对象的可视化集成工具。从原来的Visual C+6.0/ Visual C+.Net 2005升级而来,它的最大优点就是提供了功能强大的MFC类库,MFC是一个很大的C+类层次结构,其中封装了大量的类及其函数,很多Windows程序所共有的标准内容可以由MFC的类来提供,MFC类为这些内容提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓,这将简化编程工作,大大的减少程序员编写的代码数量,使编程工作变得更加轻松容易。当然还有Visual 2008和最新的Visual 2010beta版也已经发布。Visual Studio 2005的成功已被证实,即开发人员偏爱一个具备对他们需要的工具提供接口的集成开发环境。下面主要介绍它的有点。通过将开发人员在开发环境中需要的测试和性能工具(例如,单元测试、代码分析和性能分析)合并在一起,Visual Studio 2005 Team System 也期待着这种成功。这使开发人员能够在生命周期的较早阶段就改善其代码的质量,而无需中断他们的工作。通过尽早地为开发人员提供他们需要用于识别和解决质量问题的工具,更多的产品缺陷就能够在它们还未构成危害之前即被发现并解决。 Visual Studio 2005 Team System,那么过程就不仅仅是文档了。它还能将自己体现为实际的工具行为更改。当您在项目初期选择过程时,还需要选择工作流和工作产品,它们会驱动系统的行为方式。对 SDLC 过程的支持是内置的,这使得对工作流的支持是无缝的。通过将过程集成到团队成员日常使用的基本工具中,Visual Studio 2005 Team System 大大消除了过程采纳的障碍,并使自动收集跨职能的项目标准成为可能,而无需实施人工报告的相关开销。通过使用一个公共的跨工具集的数据仓库,Visual Studio 2005 Team System 解决了在大多数 SDLC 工具中建立数据仓库这一问题,并启动了一个聚合的项目状态视图。团队根据能够收集到的规则来管理项目。今天,数据主要限于缺陷跟踪。Visual Studio Team System 中集成的数据将开创一条新路 通过平衡利用贯穿于 SDLC 的大量、多样的数据来管理项目规则。Visual Studio 2005 Team System 会收集精确的数据 不仅限于缺陷跟踪,而是包括测试结果、代码涵盖、代码生成、任务进度等这些贯穿于团队常规工作流程的数据。该数据以某些标准的报告方式呈现,客户和 Microsoft 内部团队已在报告中建立了成功项目管理的关键规则。此外,团队还能够创建自定义报告。仅当以项目的大范围上下文查看数据时,团队才能够精确地报告项目状态。1.4 论文组织结构第1章 绪论简述了C语言的发展以及一般编译器的工作原理,并介绍了本系统开发的主要平台和工具及其特点。第2章 C语言词法分析器的总体分析与设计简单的介绍了系统的设计目标及系统要实现的功能。简单的介绍了几个要实现的编译步骤的概念和要完成的任务。第3章 系统的详细设计介绍了系统的基本流程,各个模块的设计思想和核心代码部分。2 第2章 C语言词法分析器的总体分析与设计2.1 系统设计目标与功能分析本系统的设计目标是完成一个小型的C语言编译器的前端设计,由于要完成一个完美的C语言编译器前端是一件非常复杂的事情,不仅要考虑到C语言代码的各种灵活用法,还需要能灵活运用C语言语法,甚至是了解语法的构成原理。本系统只完成整个编译过程中的词法分析、语法分析、语义分析以及其中的建立符号表和类型检查几个步骤。下面分别概括介绍编译过程中的这几个阶段。2.2 词法分析词法分析程序又称扫描器,它是编译过程的第一个阶段。其主要任务是从左到右依次描描字符串形式的源程序的各个字符,逐个识别出其中的单词,并将其转换成为内部编码形式的单词符号串输出,用于进行语法分析。通常可采用二元式(CLASS,VALUE)来表示一个单词符号的内部编码,其中CLASS为一整数码,用于表示该单词的类别;VALUE则是单词之值(如变量名在符号表中的序号,常数的二进制表示,以及运算符和分隔符的编码,等等)。概括的说,扫描器在其工作过程中,一般应完成下列的任务:(1)识别出源程序中的各个单词符号,并将其转换成内部编码形式;(2)删除无用的空白字符、回车字符以及其他非实质性字符;(3)删除注释;(4)进行词法检查,报告所发现的错误。此外,视编译工作流程的组织,一些编译程序在进行词法分析时,还要完成将所识别出的标志符登录到符号表的工作。从功能上看,词法分析上把字符串形式的源程序转换为单词串形式,然后进行语法分析。从工作方式上看,他与语法分析之间存在两种接口方式。一种方式是将词法分析的输出结果存放在一个中间文件上,后面的语法分析程序将它作为输入进行语法分析 。另一种方式是将词法分析编成一个子程序,该子程序由语法分析程序调用,当语法分析程序需要一个新的单词时,就调用该子程序,每调用一次,则从源程序字符串中读出一个具有独立意义的单词。本设计采用前一种方式。2.3 语法分析语法分析程序又称分析器,它以单词串形式的源程序作为输入或分析的对象,其基本任务是:根据程序设计语言的语法规则(即定义该语言的前后无关文法),分析源程序的语法结构,即分析如何由这些单词组成该源程序的各种语法成分(如下标变量、函数、各种表达式、各种程序语句等),并在分析过程中进行语法正确性检查,产生内部形式的中间代码,供编译程序后续阶段处理。目前,已存在多种语法分析方面的方法,但就产生语法树的方向而言,可大致把它们分为自顶向下分析和自底向上分析两大类。2.3.1自顶向下的语法分析所谓自顶向下的语法分析,只指对于给定输入串w,试图为其构造一个从文法开始符号S到w的最左推导S=w,或为w自上而下地构造一棵S为根结点的语法树。如果这一尝试得到成功,则证明w是相应文法的一个句子;反之,则不是。在进行自顶向下的语法分析时,通常有两个障碍须加以解决:(1) 由于采取了最左推导,故当相应文法G中含有左递归的非终结符号时,便会使语法分析过程陷入循环不已的状况。(2) 采用最左推导以实现对符号串w的匹配,实际上是一个用文法产生式的诸候选式反复进行试探的过程,这势必会出现大量的回溯,从而导致语法分析效率的大幅度下降。因此,欲实现自顶向下的语法分析,其首要任务是改造程序设计语言的文法,使得文法无左递归且无左公因子,以消除其中的左递归和避免回溯的出现。2.3.2自底向上的语法分析所谓自底向上的语法分析,是指从给定的输入串w=a1a2an出发,试图利用相应文法中的产生式,逐步将其归约为文法的开始符号S,即从叶结点a1,a2,an出发,试图逐步向上构造一个语法树,而其根结点恰好为S0由于上述分析过程通常采用的是最左归约,所以实现此种语法分析的关键,是在分析的每一步,如何寻找或确定当前句型的句柄,以及确定将其归约为什么非终结符号。和自顶向下的分析过程一样,实现自底向上的分析,通常也须使用一个分析栈来存放分析过程中所得的文法符号。分析开始时,在栈底放置一个界符#,然后将输入符号逐个推入栈内,一旦在分析栈的栈顶出现句柄,就用相应的产生式的左部去替换这个句柄,即进行一次归约。由于归约,便得到了新的栈顶,此时再查看栈的顶部是否形成新的句柄:若是,再进行归约;反之,则继续将后续的输入符号移入栈内,并重复上述过程。若最终能将全部输入符号(不包括右界符#)移掉,且分析栈中只留下栈底符号#及最后一步归约所得的文法开始符号,则表明对输入串的分析已经成功。但若全部输入符号已被移掉,而分析栈却不能出现上述格局,则表明输入符号串不是文法的一个句子,其中必定存在语法错误。通常将上述过程称为“移进-归约”分析,它是最基本的自底向上分析过程。在此基础上,根据寻找句柄策略的不同,便形成了不同的自底向上的语法分析方法。2.4 语义分析在完成了上述过程后编译程序将源程序变成一种内部表示形式,这种内部表示形式就叫做中间代码或中间语言,它是一种结构简单、含义明确的记号系统。有些快速编译程序几乎没有中间代码,但是为了使目标代码的优化比较容易实现,独立于机器进行,许多编译程序都采用了某种复杂性程度介于源程序语言和机器语言之间的中间语言。但是,想对于词法分析和语法分析都已有相当成熟的理论和算法,中间代码目前还没有一种公认的形式系统,比较接近形式化的方法是语法制导翻译。2.5 符号表符号表的信息栏中登记了每个名字的有关性质,如类型(整、实或布尔等)、种属(简单变量、数组、过程等)、大小(长度,即所需的存储单元字数)以及相对数(指分配给该名宇的存储单元的相对地址)。不同的程序语言对于名字性质的定义各有不同。现今多数程序语言中的名字或者是用说明语句规定其性质,或者采用某种隐含约定(如FORTRAN中凡以字符I,J,N开头的标识符代表整型变量名)。有些程序语言,如ADL没有说明语句也没有隐含约定,因此,符号表的性质须到目标程序运行时才能确定下来。但编译时登记在符号表中的各名字的性质只能来自说明语句(包括隐含约定和标号定义)或其它引用情形。对于变量名、数组名和过程名而言,它们的信息栏中一般要求有下列信息:变量 类型(整、实、双实、布尔、字符、复、标号或指针等);种属(简单变量、数组或记录结构等);长度(所需的存储单元数);相对数(存储单元相对地址);若为数组,则记录其内情向量;若为记录结构,则把它与其分量按某种形式联系起来;形式参数标志;若在 COMMON或 EQUVALENCE语句中(FORTRAN语言),把它和有关名字连接在一起;它的说明是否已处理过(即标志位“定义否”);是否对这个变量进行过赋值(包括出现在输人名表中)的标志位。过程 是否为程序的外部过程?若为函数,类型是什么?其说明是否处理过?是否递归?形式参数是些什么?为了与实参进行比较,必须把它们的种属、类型信息同过程名联系在一起。对于那些只使用单一符号表的简单语言,对符号表填入新项的工作可由词法分析程序来完成。也就是,当扫描器碰到一个标识符时就对它查填符号表,然后回送它在符号表中的位置作为单词值。但在某些语言中,甚至在同一过程段里允许用同一标识符标识各种不同对象。例如,XYZ可能既是一个实变量名又是一个标号名,或者又是某个结构型数据的一个分量名。在这种情况下,使用单一符号表或由词法分析程序负责查填符号表都是非常不方便的。因此,采用多种符号表并让语法语义分析程序负责查填工作是比较妥当的。对于词法分析程序来说,只要求它凡碰到标识符就直接送出此标识符自身即可。符号表中信息栏的具体组织和安排取决于所翻译的具体语言与目标机器(的字长和指令系统)。2.6 类型检查为了进行类型检查,编译器需要给源程序的每一个组成成分赋予一个类型表达式。然后,编译器需要确定这些类型表达式是否满足一组逻辑规则。这些规则被称为源语言的类型系统。类型检查具有发现程序中的错误的功能。原则上,如果目标代码在保存元素值的同时保存了元素类型的信息,任何检查都可以动态地进行。一个健全的类型系统可以消除对动态类型检查的需要,因为它可以帮助我们静态地确定这些错误不会在程序运行的时候发生。如果编译器可以保证它接受的程序在运行时刻不会发生类型错误,那么该语言的这个实现就被称为强类型的。19 第3章 系统详细设计3.1 系统设计基本思路基于C语言源程序分析器的开发在可行性分析的基础上进一步全面、深入的分析,弄清C语言的编译原理及运行状况,在编译程序工作的五个阶段中,每个阶段都必须遵从功能等价的原则。词法规则与语法分析阶段依据的语法规则一同构成了一个语言的语法,而语法则是从形的角度衡量一个程序是否合法。所以在词法分析阶段,词法规则成为重要的研究对象。词法分析器所处理的对象即词法分析程序的输入数据,实际上是源程序经过编译预处理,去掉多余的符号后而形成的代码,这样给词法分析带来方便。词法分析的过程是线性的从头至尾扫描一遍,复杂度较低,易实现。最后概括出要实现的几个功能流程图如下:输入文件开始词法分析语法树语法分析建立符号表符号表类型检查输出信息3.2 词法分析模块设计 词法分析程序需要完成的任务如下:1) 识别出源程序的各个语法单位;2) 剔除无用的空白字符、制表符、回车字符以及其他与输入介质相关的非实质性字符 ;3) 过滤掉源程序中的注释;4) 进行词法检查,如果出现错误,记录出错信息并报告。我们将编译程序的重点放在中间代码生成阶段。词法分析器的功能是输入源程序,输出单词符号。这部分程序主要包括两个类:包括两个类:Class CTokenizer:从一个字符串中(这个把一个文件看作是一个字符串,MFC中CFile-CString)分离出一个一个token,配上简单的类型通过NextToken()返回:#define TT_EOLn#define TT_EOF-1#define TT_INTEGER-2#define TT_REAL-3#define TT_WORD-4#define TT_STRING#define TT_CHARClass CScaner:得到具体的的token类型,定义TokenType如下:enum TokenType/ reserved Keyword_AUTO, _DOUBLE, _INT, _STRUCT,_BREAK, _ELSE, _LONG, _SWITCH, _CASE, _ENUM, _REGISTER, _TYPEDEF,_CHAR, _EXTERN, _RETURN, _UNION,_CONST, _FLOAT, _SHORT, _UNSIGNED,_CONTINUE, _FOR, _SIGNED, _VOID,_DEFAULT, _GOTO, _SIZEOF, _VOLATILE,_DO, _IF, _STATIC, _WHILE,_READ, _WRITE, _PRINTF,/ operationsASSIGN, PLUS, MINUS, TIMES, DIV, MOD,BITWISE_AND, BITWISE_OR, BITWISE_NOT, LOGICAL_NOT, LT, GT,/ interpunctionsLPARAN, RPARAN, LBRACE, RBRACE, LSQUARE, RSQUARE, COMMA, DOT, SEMI, COLON,/ complex operationsEQ/* = */, NEQ/* != */, PLUS_PLUS/* + */, MINUS_MINUS/* - */,PLUS_ASSIGN/* += */, MINUS_ASSIGN/* -= */, TIMES_ASSIGN/* *= */, DIV_ASSIGN/* /= */,NGT/* = */, LOGICAL_AND/* & */, LOGICAL_OR/* | */,/ others_EOF, _ID, _NUM, _STRING, _CHARACTER, _LABEL, _ERROR, _NONE;CScaner通过一个CMap m_KeyIndex 把CString的关键字和TokenType对应,便于查找和反向查找。C关键字表:autodoubleintstructbreakelselongswitchcaseenumregistertypedefcharexternreturnunionConstfloatshortunsignedContinueforsignedvoidDefaultgotosizeofvolatileDoifstaticwhile标识符词法:identifier :nondigitidentifier nondigitidentifier digitnondigit : one of_ a b c d e f g h i j k l m n o p q r s t u v w x y zA B C D E F G H I J K L M N O P Q R S T U V W X Y Zdigit : one of0 1 2 3 4 5 6 7 8 9escape:n, r, b, 0-73.3 语法分析模块设计 在上一节中,实现了词法分析程序的功能。一个字符串形式的源程序经过词法分析,即被转换为一串单词符号。编译程序在完成了词法分析之后,就进入语法分析阶段。语法分析程序以单词形式的源程序作为输入或分析的对象。其基本任务是根据语言的语法规则(即描述该语言的上下文无关文法),分析源程序的语法结构(即分析如何将这些单词组成各种语法成分,如各种表达式、语句、函数或过程等),并在分析过程中,对源程序进行语法正确性检查。其分析结果是识别出无语法错误的语法成分。其输出形式也有多种。语法分析模块的核心部分设计如下:Class CParser:定义CTreeNode,和Tiny例程类似:#define MAX_CHILDREN 3class CTreeNodepublic:CTreeNode*child MAX_CHILDREN ;/ point to child nodeCTreeNode*father;/ point to father nodeCTreeNode*sibling;/ point to sibling nodeintlineno;NodeKindnodekind;union StmtKindstmt;ExpKindexp; kind;enum TokenTypetype;CStringszName;CStringszScope;/ node function scopeBOOLbArray;/ is this an array declarationintiArraySize;/ array size;通过文法及相应规则建立语法树。Grammar:program-declaration_listdeclaration_list-declaration_list declaration | declarationdeclaration-var_declaration | fun_declarationvar_declaration-type_specifier ID(, .); | type_specifier ID NUM (, .);type_specifier-int | void | char, actually this step is in declaration_list()fun_declaration-type_specifier ID ( params ) compound_stmtparams-param_list | void | empty, void is thought as emptyparam_list-param_list , param | paramparam-type_specifier ID | type_specifier ID compound_stmt- loal_declarations statement_list | expression_stmtlocal_declarations-local_declarations var_declaration | var_declarationread ( var ) ;write ( expression ) ;printf ( STRING ) ;expression_stmt-expression ; | ;expression-var = expression | logic1_expressionlogic1_expression-logic1_expression | logic2_expression | logic2_expressionlogic2_expression- logic2_expression & simple_expression | simple_expressionsimple_expression-additive_expression relop additive_expression | additive_expressionrelop- = | | = | = | !=additive_expression - additive_expression addop term | termaddop- + | -term-term mulop logic3_expression | logic3_expressionmulop- * | / | %logic

温馨提示

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

评论

0/150

提交评论