哪里能找到编译原理
㈠ 汉语程序设计语言的编译原理
汉编系统是一个交互式的程序设计环境,最初是为程序员在小型和微型计算机上开发应用程序而设计的。主要应用于科学计算和工业控制,比如仪器、机器人、过程控制、图形和图像处理、人工智能和商业应用。汉编语言的主要优点是软件开发快速、交互式、计算机硬件的高效使用等。
汉编语言与传统语言最大的不同是它的可扩展性。汉编语言的编程过程就是定义新的词,词实际上就是语言的新命令。词可以用一系列以前定义的词来定义,这个过程与教育孩子的过程相似:我们总是用孩子们以前理解的概念来教给孩子们新的概念,而这些词被称为“高级定义”。同样,新的词也可以用汇编代码定义。
可扩展性的结果是我们在开发一个应用的同时,也间接地开发了一个特殊的、针对这一类应用的“面向应用的模块,它可以用于或者经过修改之后被用于相似的应用。
汉编语言的可扩展性并不仅仅是为语言自身增加新的命令,所以不要把定义词与传统高级语言定义函数、过程等同。汉编系统还能对定义词(建词)进行扩展,创建一个可以定义其它词的词,这种词被称为“定义词”。在创建这样一个定义词的时候,程序员能够指定它所创建的词在编译时间、运行时间或者这两种状态下的特殊行为。这个能力允许我们定义特殊的数据类型,并对其行为和结构实施完全的控制。又由于这种词的运行时行为可以用高级语言或者汇编语言来定义,所以由定义词创建的词将具有与其它汉编词一样的性能。系统也允许我们增加一个新的“编译指示符”以实现特殊类型的循环或者其它的控制结构。比如,汉语言定义一个程序变量的词:给,其代码大概如下:
编给(32位数-<变量名>-)编译时
(---32位数)运行时
建词可用地址4字节空出写
动作读
。
定义变量时
5给变量一
则5被自动写入变量一的实体域中
运行“变量一”时
变量一
则变量一实体域中的数字5被自动读取,放到数摞上 汉编词可以使用以前定义的词或者汇编代码来定义,它们与其它语言的子程序相似,也与其它语言的命令等效。汉编系统允许我们在键盘上打入一条指令的词名,这个词将被立即执行。然而,如果我们把功能的词名放到定义中,将编译成对于这个词的引用。
高级词是由其它词的集合来定义的,我们可以把这个过程想象成是其它语言的宏。新的词被加入到它们可以使用的存储器中,其定义被加入到词典中。在一个汉编词的命名规则中,只有很少的几个字符不能作为词名使用。
当遇到一个词的时候,汉编系统就通过词典搜索希望找到这个词的定义,如果找到这个词定义的功能,或者被立即执行,或者作为引用而被编译到新的定义中。然而,如果在词典中没有找到这个词,系统就试着把它转换成一个数。如果转换成功,就把它放在数摞上。如果不能转换成数字,就显示这个未定义的词名并打印出一个错误的信息来报告这个词是系统所不知道的。
汉编词的执行流程大概可以用一个词来模拟如下:
编查词测试
{词名串--}
255个字节空给词名串
词名串255填0
词名串字串传送
词名串(查词)
0=
就
计字节
串>数
就
♀
否则
字串未定义词名串字串+传送
词名串计字节
回车印字串
全复位
然后
否则
执行
然后
。★
字串看数摞查词测试数摞已空!★
字串123456查词测试★.
看数摞[1]123456★.
显123456★
字串看方法查词测试
看方法未定义
汉编系统编译流程如右图(流程图来源:汉编新浪博客)所示。
汉编语言坚持“结构化程序设计”原理:
·词必须在引用之前被定义;
·逻辑流限制只有顺序、条件和循环,有专门的词用于实现常用的程序控制结构;
·程序员使用许多小的、独立的模块(词)来实现最大的可测试性和可靠性;
这种方法有两个明显的优点
·新的词总是用以前定义和测试过的词来构造,所以调试更容易。模块可以单独执行以测试它的功能;
·固有的模块性使汉编语言成为一个“设计性语言”,允许自顶向下的设计同时保持自底向上的测试。一个词可以在不同的程序中使用,但是它的功能只需要定义一次;
这些都保证了汉编软件能够快速和有效地被开发,同时,如果管理得当,也可以作为自身文档的基础。
汉编语言的5个主要元素决定了它的特点:
·一个词典;
·两个数摞,一个是参数摞,另一个是用于嵌套的返回摞;
·键盘(输入流)解释器;
·一个编译器;
·虚拟存储; 词典是汉编定义词的数据和代码存储空间,也为编译建立了词的索引。词典中的词包括汉编程序代码词、常数定义词、变量定义词、不定量定义词,面向对象部分还有模板、对象、对象事件、消息。
汉编代码存储在词典中。词典占据了系统存储器的很大部分,它由一个串线链接的可变长度的项目组成,每个项目定义了一个词。每个定义的内容根据词的类型(数据项、常数、操作序列等)而有所不同,词典是可扩展的。
词是由“定义词”加入词典的,最常用的定义词是“编。”当“编”执行的时候,马上就把后面的词名扫描,建立一个词典项,然后进入“编译”模式。有许多不同的编译方法,最常用的是“串线编码”,这种方法把定义编译成一系列以前定义词的地址引用。词的定义由“。”(句号)结束。下面就是一个词的定义:
编平方(--)♂*显。
当一个词名项被编译到词典中的时候(称为定义的首部),它包含一个指向词典中前一个首部的指针。新词的词名加入词典(这里就是平方),接着一个指向词名为“(编)”子程序调用的指针编译到词典中作为定义的第一部分,这个指针指向一段在解释定义体时需要执行的代码。当然,这里所说的不是唯一的编译技术,但它的应用最为普遍,这种技术称为间接串线编码,因为定义中的第一个项目是一段代码的引用,这段代码知道如何解释定义的其它部分。
定义的其它部分称为这个定义的体。在编译模式下,系统将依次寻找每个词的首部。每个首部地址依次放到定义体中,这样就产生了一个地址列表。最后在到达“。”时,词名为“。”的子程序地址被编译进词典。“。”子程序用来将控制返回到调用词,就像一个子程序返回一样。
㈡ 编译原理
C语言编译过程详解
C语言的编译链接过程是要把我们编写的一个C程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程。过程图解如下:
从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链接过程。
一、编译过程
编译过程又可以分成两个阶段:编译和汇编。
1、编译
编译是读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,源文件的编译过程包含两个主要阶段:
第一个阶段是预处理阶段,在正式的编译阶段之前进行。预处理阶段将根据已放置在文件中的预处理指令来修改源文件的内容。如#include指令就是一个预处理指令,它把头文件的内容添加到.cpp文件中。这个在编译之前修改源文件的方式提供了很大的灵活性,以适应不同的计算机和操作系统环境的限制。一个环境需要的代码跟另一个环境所需的代码可能有所不同,因为可用的硬件或操作系统是不同的。在许多情况下,可以把用于不同环境的代码放在同一个文件中,再在预处理阶段修改代码,使之适应当前的环境。
主要是以下几方面的处理:
(1)宏定义指令,如 #define a b。
对于这种伪指令,预编译所要做的是将程序中的所有a用b替换,但作为字符串常量的 a则不被替换。还有 #undef,则将取消对某个宏的定义,使以后该串的出现不再被替换。
(2)条件编译指令,如#ifdef,#ifndef,#else,#elif,#endif等。
这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉
(3) 头文件包含指令,如#include "FileName"或者#include <FileName>等。
在头文件中一般用伪指令#define定义了大量的宏(最常见的是字符常量),同时包含有各种外部符号的声明。采用头文件的目的主要是为了使某些定义可以供多个不同的C源程序使用。因为在需要用到这些定义的C源程序中,只需加上一条#include语句即可,而不必再在此文件中将这些定义重复一遍。预编译程序将把头文件中的定义统统都加入到它所产生的输出文件中,以供编译程序对之进行处理。包含到C源程序中的头文件可以是系统提供的,这些头文件一般被放在/usr/include目录下。在程序中#include它们要使用尖括号(<>)。另外开发人员也可以定义自己的头文件,这些文件一般与C源程序放在同一目录下,此时在#include中要用双引号("")。
(4)特殊符号,预编译程序可以识别一些特殊的符号。
例如在源程序中出现的LINE标识将被解释为当前行号(十进制数),FILE则被解释为当前被编译的C源程序的名称。预编译程序对于在源程序中出现的这些串将用合适的值进行替换。
预编译程序所完成的基本上是对源程序的“替代”工作。经过此种替代,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。这个文件的含义同没有经过预处理的源文件是相同的,但内容有所不同。下一步,此输出文件将作为编译程序的输出而被翻译成为机器指令。
第二个阶段编译、优化阶段。经过预编译得到的输出文件中,只有常量;如数字、字符串、变量的定义,以及C语言的关键字,如main,if,else,for,while,{,}, +,-,*,\等等。
编译程序所要作得工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。
优化处理是编译系统中一项比较艰深的技术。它涉及到的问题不仅同编译技术本身有关,而且同机器的硬件环境也有很大的关系。优化一部分是对中间代码的优化。这种优化不依赖于具体的计算机。另一种优化则主要针对目标代码的生成而进行的。
对于前一种优化,主要的工作是删除公共表达式、循环优化(代码外提、强度削弱、变换循环控制条件、已知量的合并等)、复写传播,以及无用赋值的删除,等等。
后一种类型的优化同机器的硬件结构密切相关,最主要的是考虑是如何充分利用机器的各个硬件寄存器存放的有关变量的值,以减少对于内存的访问次数。另外,如何根据机器硬件执行指令的特点(如流水线、RISC、CISC、VLIW等)而对指令进行一些调整使目标代码比较短,执行的效率比较高,也是一个重要的研究课题。
2、汇编
汇编实际上指把汇编语言代码翻译成目标机器指令的过程。对于被翻译系统处理的每一个C语言源程序,都将最终经过这一处理而得到相应的目标文件。目标文件中所存放的也就是与源程序等效的目标的机器语言代码。目标文件由段组成。通常一个目标文件中至少有两个段:
代码段:该段中所包含的主要是程序的指令。该段一般是可读和可执行的,但一般却不可写。
数据段:主要存放程序中要用到的各种全局变量或静态的数据。一般数据段都是可读,可写,可执行的。
UNIX环境下主要有三种类型的目标文件:
(1)可重定位文件
其中包含有适合于其它目标文件链接来创建一个可执行的或者共享的目标文件的代码和数据。
(2)共享的目标文件
这种文件存放了适合于在两种上下文里链接的代码和数据。
第一种是链接程序可把它与其它可重定位文件及共享的目标文件一起处理来创建另一个 目标文件;
第二种是动态链接程序将它与另一个可执行文件及其它的共享目标文件结合到一起,创建一个进程映象。
(3)可执行文件
它包含了一个可以被操作系统创建一个进程来执行之的文件。汇编程序生成的实际上是第一种类型的目标文件。对于后两种还需要其他的一些处理方能得到,这个就是链接程序的工作了。
二、链接过程
由汇编程序生成的目标文件并不能立即就被执行,其中可能还有许多没有解决的问题。
例如,某个源文件中的函数可能引用了另一个源文件中定义的某个符号(如变量或者函数调用等);在程序中可能调用了某个库文件中的函数,等等。所有的这些问题,都需要经链接程序的处理方能得以解决。
链接程序的主要工作就是将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够被操作系统装入执行的统一整体。
根据开发人员指定的同库函数的链接方式的不同,链接处理可分为两种:
(1)静态链接
在这种链接方式下,函数的代码将从其所在地静态链接库中被拷贝到最终的可执行程序中。这样该程序在被执行时这些代码将被装入到该进程的虚拟地址空间中。静态链接库实际上是一个目标文件的集合,其中的每个文件含有库中的一个或者一组相关函数的代码。
(2) 动态链接
在此种方式下,函数的代码被放到称作是动态链接库或共享对象的某个目标文件中。链接程序此时所作的只是在最终的可执行程序中记录下共享对象的名字以及其它少量的登记信息。在此可执行文件被执行时,动态链接库的全部内容将被映射到运行时相应进程的虚地址空间。动态链接程序将根据可执行程序中记录的信息找到相应的函数代码。
对于可执行文件中的函数调用,可分别采用动态链接或静态链接的方法。使用动态链接能够使最终的可执行文件比较短小,并且当共享对象被多个进程使用时能节约一些内存,因为在内存中只需要保存一份此共享对象的代码。但并不是使用动态链接就一定比使用静态链接要优越。在某些情况下动态链接可能带来一些性能上损害。
我们在linux使用的gcc编译器便是把以上的几个过程进行捆绑,使用户只使用一次命令就把编译工作完成,这的确方便了编译工作,但对于初学者了解编译过程就很不利了,下图便是gcc代理的编译过程:
从上图可以看到:
预编译
将.c 文件转化成 .i文件
使用的gcc命令是:gcc –E
对应于预处理命令cpp
编译
将.c/.h文件转换成.s文件
使用的gcc命令是:gcc –S
对应于编译命令 cc –S
汇编
将.s 文件转化成 .o文件
使用的gcc 命令是:gcc –c
对应于汇编命令是 as
链接
将.o文件转化成可执行程序
使用的gcc 命令是: gcc
对应于链接命令是 ld
总结起来编译过程就上面的四个过程:预编译、编译、汇编、链接。了解这四个过程中所做的工作,对我们理解头文件、库等的工作过程是有帮助的,而且清楚的了解编译链接过程还对我们在编程时定位错误,以及编程时尽量调动编译器的检测错误会有很大的帮助的。
㈢ 计算机基础知识对程序员来说有多重要
非常重要,必须认真学习。
学习基础知识从来都是枯燥的,而且很多时候会给我们一个错觉,就是基础知识没有用。这主要是因为,我们未来工作以后,更多的是面向应用,更直接的就是面向工具的使用,基础知识基本是不可能直接拿出来用的,所以,大家就会觉得我只要懂应用方面的知识就好了,基础知识根本不需要去学。
就拿程序员来举例:
很多的程序员培训机构,他们并不会教任何的基础知识,直接就是教编程语言,然后设计一些案例做练习,3个月-6个月基本就结束。这样教出来的程序员能够写代码吗?当然是能的,不然这些培训机构早垮了。而很多大学本科4年读完的应届生,说不定写代码都没有这些培训几个月的学生强,大学4年对于程序员来说难道就是白费吗?
并不是的。
基础知识决定的是你未来的高度,可能你作为一个初级、中级程序员,你不一定会用到数据结构、算法、编译原理。但初中级的程序员就是你未来几十年的全部吗?
如果是的,在你30多岁的时候,应该就会面对裁员了并且很难找到下一份工作。
程序员是一个干到老学到老的工作,每天都需要去学习一点新的知识,技术也是在不断的演进,需要去了解未来的技术发展方向,这样才能够一直产生价值。而基础知识是什么呢,就是当你对技术了解越深入时,越需要用到的东西。
例如:你要做大数据的工作时,你需要数据建模,需要在海量的数据中抽取自己需要的数据,还需要不影响系统的性能,运算速度更快。那么你就必须要了解算法,了解时间复杂度。如果你曾经大学时好好的学习了这些知识,并且时不时会温习一下,那么你更高更快的胜任这份工作。
但是,对于一个只是了解应用知识的程序员来说,他需要想办法学习你用4年时间堆积起来的知识,而且还不一定有可靠的老师能够教他。
再举个例子,现在华为需要一些技术人才,来做他方舟编译器的迭代,待遇非常可观。
而这时,对于懂数据结构、懂算法、懂编译原理的人来说,查的无非就是一些应用实践的知识,这些知识只要有基础、有环境,1-2周就可以上手。
但是对于只懂应用知识的人,他可能就是看都看不懂,华为也就不可能去招聘这样的人。
所以,程序员也是有高低之分的,有的年薪百万,有的年薪可能就十来万。谁不想拿百万年薪呢?可能他们也觉得某些知识没有用,所以没有去认真的学吧。
㈣ 编译原理中语法分析的一道问题
LALR我做着做着觉得不对,但SLR还是没问题的,这道题工程量非常庞大,想必以后也一定有人问,我就简要的带过吧,我归纳的解题步骤是:
构造LR(0)项目集规范族
求出FOLLOW集
根据规则圈出sj和rj对应的产生式
算出goto数
构造分析表
㈤ 鍓嶈緢缁栾$畻链轰笓涓氩︾敓镄勫嚑涓寤鸿锛
阒块噷鍓嶈緢缁栾$畻链轰笓涓氩︾敓镄
涔濅釜寤鸿
1.瀛﹀ソ绾挎т唬鏁板拰绂绘暎鏁板
瀹冩槸绠楁硶銆佹満鍣ㄥ︿範锛岃呜夊勭悊杩欎簺镰旂┒鏂瑰悜镄勪竴涓锘虹銆
2.瀛﹀ソ璁$畻链哄簳灞傜浉鍏崇殑璇剧▼
鍖呮嫭鏁版嵁缁撴瀯銆佺畻娉曘佹搷浣灭郴缁熴佺绣缁溿佹暟鎹搴扑互鍙婄紪璇戝师鐞呜繖浜涜剧▼銆傚畠鍐冲畾浣犲皢𨱒ユ槸鎴愪负涓钖岖湡姝g殑绋嫔簭锻桡纴杩樻槸锅氢竴涓鏅阃氱殑镰佸啘銆傚悓镞跺喅瀹氢綘鏄钖﹁兘阃氲繃澶у巶镄勯溃璇曘傚彲浠ュ幓b绔欍佷腑锲藉ぇ瀛
Moo C銆佸浗澶栫殑course ra涓婂︿範銆
3.纭瀹氭湭𨱒ユ妧链鏂瑰悜锛屾繁鍏ュ︿範涓闂ㄧ紪绋嬭瑷
鍙浠ユ槸Java锛 鎴栬匔鎴栬匔++銆
鍏充簬瀛︽妧链锛屾湁涓鍙ヨ佽瘽璇寸殑寰埚ソ锛屽彨锅氢笉镐曚竾𨰾涗细锛屽彧镐曚竴𨰾涚簿锛屽︾簿涓闂ㄨ瑷锛屼笉浠呭彲浠ュ府锷╀綘瑙e喅镟存繁灞傛$殑闂棰桡纴瀹炵幇锷熻兘镟村己镄勯”鐩锛屽苟涓旓纴瀵逛綘瀛︿範鍏朵粬镄勮瑷锛屼篃闱炲父链夊府锷┿备綘浼氩彂鐜帮纴瀛︾簿浜嗕竴闂ㄨ瑷锛屽啀瀛﹀叾浠栫殑灏卞緢瀹规槗浜
4.鍙备笌瀹为檯椤圭洰鎴栬呭︾戠珵璧
棣栧厛锛屽畠鍙浠ユ楠屼綘镄勪笓涓氭按涔庡熶笉澶熺‖锛屾槸涓嶆槸锅氩埌浜嗗︿互镊寸敤銆
鍏舵★纴阃氲繃椤圭洰鍜岀珵璧涘彲浠ュ府锷╀綘浠鍙戠幇鐭ヨ瘑浣撶郴涓镄勭洸镣癸纴椹卞姩浣犳湁鐩镄勭殑瀛︿範锛岃屼笖鍙傚姞椤圭洰鍜岀珵璧涳纴鍙浠ュぇ澶ф彁楂树綘灏嗘潵鍒板ぇ铡傚幓瀹炰範浠ュ强灏变笟镄勫嚑鐜囥傜壒鍒鏄瀵逛簬闾d簺鍙涓娄简鏅阃氩︽牎镄勮$畻链轰笓涓氱殑瀛︾敓𨱒ヨ达纴杩欎釜锛屾洿鏄鍙浠ユ彁楂树綘灏嗘潵灏变笟绔炰簤锷涚殑涓崭簩娉曞疂銆
5.鍒烽桦埛棰桦埛棰桡纴閲嶈佺殑浜嬫儏璇翠笁阆!
涓昏佸氨鏄鍒风畻娉曢桡纴闇瑕佷綘鍏埚︿範鏁版嵁缁撴瀯涓庣畻娉曪纴涔嫔悗浣犲氨鍙浠ュ氩埛棰桡纴澶氩埛棰桡纴澶氩埛棰树简!杩欎欢浜嬫儏瓒婃棭锅氲秺濂斤纴链濂界殑寮濮嬫椂闂鑺傜偣鏄澶т簩锛屽ぇ涓鎶婃暟鎹缁撴瀯涓庣畻娉曞︿範瀛︿範锛屽ぇ浜屽氨寮濮嫔埛棰树简銆
6.瀛︿细浣跨敤Git hub
杩欎釜鐪熺殑鏄涓涓宸ㄥぇ镄勮祫婧愬寘𨰾锛岃繖涓涔熷彿绉版槸绋嫔簭锻樻渶澶х殑钖屾т氦鍙嬬绣绔欙纴鎴戣夊缑锛屾疮涓涓璁$畻链轰笓涓氱殑浜洪兘搴旇ョ煡阆揿畠锛屼细锘烘湰镄勪娇鐢ㄥ畠锛屽湪杩欎笂闱锛屼綘鍙浠ユ垒鍒板緢澶氭湁瓒e疄鐢ㄧ殑椤圭洰渚涗綘瀛︿範!
杩椤氨鏄涓涓浠g爜镓樼″钩鍙帮纴绠鍗曡达纴灏辨槸鍏ㄤ笘鐣屽悇鍦扮殑绋嫔簭锻树细鎶婅嚜宸辩敤浠g爜鍐欑殑涓滆タ涓娄紶涓婂幓锛岀劧钖庝綘灏卞彲浠ョ敤浜嗭纴涓瀹氲佸杽锷犲埄鐢锛屽ソ澶勫氩氾纴鐢ㄤ简灏卞缮涓嶆帀浜!
7.澶氭姌鑵鹃”鐩
鍗冧竾涓嶈佸彧锅氢竴涓鐞呜烘淳锛岀悊璁哄浐铹堕吨瑕侊纴浣嗘槸绂诲紑浜嗗疄鎴桡纴鐞呜虹殑浣灭敤灏嗗ぇ澶ф姌镓o纴镓浠ヨ韩涓轰竴涓璁$畻链轰笓涓氱殑瀛︾敓锛岄櫎浜呜佸﹀ソ瀛﹂忓繀澶囩殑鐞呜虹煡璇嗭纴涓瀹氲佽姳镞堕棿澶氩幓鎶樿吘涓浜涢”鐩!
璇寸殑绠鍗旷偣锛屽氨鏄鐢ㄤ綘镓瀛︾殑鐭ヨ瘑铡诲仛涓浜涗笢瑗垮嚭𨱒ワ纴鎶婄悊璁虹煡璇呜惤瀹炲埌瀹炴垬褰扑腑铡伙纴鍦ㄥ疄鎴树腑铡讳笉鏂镄勫讥琛ュ珐锲轰綘镄勭悊璁轰笂鐭ヨ瘑锛岀悊璁轰笌瀹炴垬涓瀹氭槸鐩镐簰淇冭繘镄!
8.鎻愬墠瀹炰範
灏ゅ叾涓嶅嗳澶囱幂爷锛屾瘯涓氩氨鍑嗗囧伐浣灭殑!
瀹炰範鑳借╀綘鎻愬墠鎺ヨЕ浼佷笟鍏鍙革纴鍖呮嫭鐜澧冦佹皼锲淬佸伐浣沧柟寮忔柟娉曪纴骞朵笖瀹炰範涓瀹氲佹垒闾g嶅ぇ鍏鍙革纴澶у叕鍙稿瑰疄涔犵敓鏄链夊煿鍏昏″垝鍜岃佹眰镄勶纴瀵逛簬琛ㄧ幇浼樼镄勪细鐩存帴镵樼敤浣狅纴鐪佸缑鍐嶅幓鍝楦块亶閲庣殑绉嬫嫑鍗蜂简锛岄毦阆扑笉棣椤悧?
灏忓叕鍙告垒瀹炰範鐢熷ぇ閮ㄥ垎灏辨槸渚垮疁锛屾暀浣犱竴镣逛笢瑗匡纴铹跺悗浣犱箣钖庣殑镞堕梾閮戒细鏄閲嶅岖殑锅氲繖涓涓滆タ锛屾墍浠ュ疄涔犱篃瑕佹厧閲嶃
9.阌荤偧韬浣
璺熷︿範娌℃湁鐩存帴鍏崇郴浣嗘湁闂存帴鍏崇郴锛屽苟涓旀瘆瀛︿範杩樿侀吨瑕佺殑浜嬨