【人工智能_编译new】第二章词法分析_第1页
【人工智能_编译new】第二章词法分析_第2页
【人工智能_编译new】第二章词法分析_第3页
【人工智能_编译new】第二章词法分析_第4页
【人工智能_编译new】第二章词法分析_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

词法分析的 任务 : 从左至右逐个字符地扫描源程序,产生 一个个的 单词符号 ,把作为字符串的源程序 改造成为单词符号串的 中间程序 。 词法分析器 /扫描器 : 执行词法分析的程序。 源 程 序 扫描器 scanner 1、关键字 词法分析器的 功能 如下图所示: 2、标识符 5、界符 4、运算符 3、常数 由程序语言定义的具有固定意 义的标识符。也可称为保留字 或基本字。例如: Pascal中的 begin, end, if等。 界符:如逗号、分号、括号、 /*, */ 等。它是确定的。 运算符:如 +、 -、 *、 / 等。 它是确定的。 常数的类型一般有整型、实型 、布尔型、文字型等。它是不 限的。 用来表示各种名字,如变量名 、数组名、过程名等。它是不 限的。 词法分析器的 功能 :输入源程序,输出单词符号。 单词符号 :一个程序语言的基本语法符号。分为以下 5种。 1、 关键字 :由程序语言定义的具有固定意义的标识符。也可 称为保留字或基本字。例如: Pascal中的 begin, end, if等。它是 确定 的。 2、 标识符 :用来表示各种名字,如变量名、数组名、过程 名等。它是 不限 的。 3、 常数 :常数的类型一般有整型、实型、布尔型、文字型 等。它是 不限 的。 4、 运算符 :如 +、 -、 *、 / 等。它是 确定 的。 5、 界符 :如逗号、分号、括号、 /*, */ 等。它是 确定 的。 确定 不限 单词符号的表示形式 :词法分析器所输出的单词符号常常表示成 二元式(单词种别,单词自身的值) 。 单词种别 可以用以下形式表示: 1、一类单词统一用一个整数值代表其属性。例如: 1代表关键字, 2代表标识符等。 2、每一个单词一个类别。例如: 1代表 BEGIN, 2代表 END等。 单词自身的值 可以表示成:常量的二进制表示;常量、变量等在符号表 种的地址码,等等。 注意: 一个语言的单词符号如何分种,分几种,怎样编码,是一个技术 问题。标识符一般同归为一种。常数则宜按类型(整、实、布尔)分。 关键字可以将其全体视为一种,也可 一字一种 。 运算符可采用一符一种 ,但也可把具有一定共性的视为一种。界符则一般采用 一符一种 。如何 进行分种主要取决于处理上的方便。 若是一符一种分种,单词自身值就不需要了。否则,要查符号表。 例 2-1: 151 FORTRAN编译程序的词法分析器在扫描输入串 IF (5EQ M) GOTO 100 后,它输出的 单词符号串 是: 逻辑 IF ( 34, _) 左括号 ( 2, _) 整常数 ( 20, 5 的二进制表示) 等号 ( 6, _) 标识符 ( 26, M ) 右括号 ( 16, _) GOTO ( 30, _) 标号 ( 19, 100 的二进制表示) IF为关键字,种别编码 34, 采用一符一种的编码方式。 常数类型,种别编码 20,单词自身 的值为 5 的二进制表示。 ( 为界符,种别编码 2,采 用一符一种的编码方式。 等号为运算符,种别编码 6, 采用一符一种的编码方式。M为标识符,种别编码 26,单 词自身值为 M 。 ) 为界符,种别编码 16, 采用一符一种的编码方式。GOTO为关键字,种别编码 30, 采用一符一种的编码方式。 100为标号,种别编码 19,单词 内部的值用 100的二进制表示。 例 2-2 :下述 C+代码段: while ( i = j ) i - -; 经词法分析器处理以后,它将被转换为如下的 单词符号串 ( while , _ ) ( ( , _ ) ( id ,指向 i的符号表指针 ) ( = , _ ) ( id ,指向 j的符号表指针 ) ( ) , _ ) ( id ,指向 i的符号表指针 ) ( - - , _ ) ( ; , _ ) 1、把词法分析从语法分析中脱离出来的 优点 : 使编译程序的 结构 更加简洁、清晰和条理化。 词法分析和语法分析 方法 不同,词法分析可以使用正则文法自动构造 scanner简单。 有利于提高语法分析的 效率 。 可以改善词法分析的细节,甚至于一个语法分析配几个 scanner,把不同 的输入变成一种内部表示。 2、把词法分析作为独立的一 遍 scanner当作一遍。 把 scanner当作子程序。 外存 scanner 语法分析 源程序 单词符号 scanner作为一遍 语法 分析 scanner 源程序 scanner作为子程序 设计前提 : 把 scanner作为一个独立的子程序; 词法分析器的任务为输出单词符号。 必要性 : 编辑性字符如空白符、回车符等,除了出现在文字和 常数中以外,在别处出现都没有意义。 功 能 : 剔除无用字符。 实 现 : 预处理子程序。 输入 列表 预处理 子程序 扫描器 扫描缓冲区 输入缓冲区 单词符号 图 2.1 词法分析器语法分析器 预 处 理 部 分 扫 描 器 若 识别 输入语句 IF (5.EQ.M) GOTO 100,若缓冲区情况如下所示: IF (5.EQ.M) GO 起点指示器 搜索指示器 输入缓冲区 TO 100 IF (5.EQ.M) GO 起点指示器 搜索指示器 输入缓冲区 TO 100 IF (5.EQ.M) GO 起点指示器搜索指示器 两 个 互 补 输 入 缓 冲 区 120个字符 扫描缓冲区的 结构 : 缓冲区大小 : 120个字符。 采用两个 指示器 :起点指示器、搜索指示器。 两个互补区 。 单词符号识别的简单方法: 超前搜索 。 关键字识别 : 例如:在标准 FORTRAN中 1、 DO99K = 1,10 2、 IF(5.EQ.M)I = 10 3、 DO99K = 1.10 4、 IF(5) = 55 其中的 DO、 IF为关键字 其中的 DO、 IF为标识符 的一部分 标识符的识别 多数语言的标识符是字母开头的 “ 字母 /数字 ” 串 ,而且在程序中标识符的出现后都跟着算符或界符。因 此,不难识别。 常数的识别 对于某些语言的常数的识别也需要使用超前搜索。 算符和界符的识别 对于诸如 C+语言中的 “ + +” 、 “ - -” ,这种复 合成的算符,需要超前搜索。 转换图 :是一张有限方向图。在状态转换图中, 结点 代表 状态 ,用圆圈表示。状态之间用 箭弧 连接。箭弧上 的 标记(字符) 代表在射出结状态下可能出现的输 入字符或字符类。 状态转换图的功能 :用于识别一定的字符串。 初态 :一张转换图的启动条件,至少有一个 ,用圆圈表示。 终态 :一张转换图的结束条件,至少有一个,用双圈表示。 * :表示多读进了一个字符。 1 2 3 X Y (a)转换图示例 20 1字母 其他 字母或数字 * ( b)识别标识符的转换图 其他 20 1数字 数字 * ( c)识别整数的转换图 例 2-3:简单的状态转换图示例: 初态 终态 从 0状态到 1状态 可能出现字母 图 2.2 状态转换图 7 * 6 5 数字 40 1数字 数字 2 数字 3 E 或 D +或 数字 其他E 或 D 数字 其他 数字 例 2-4:识别 FORTRAN实型常数 的转换图: 例如下列实型常数可以 被以下转换图识别: 1.23E+4 .56E-7 单词 符号 种 别编码 助 忆 符 内 码值 DIM 1 $DIM IF 2 $ IF DO 3 $ DO STOP 4 $ STOP END 5 $ END 标识 符 6 $ ID 内部字符串 常数(整) 7 $INT 标 准二 进 制形式 8 $ ASSIGN 9 $ PLUS * 10 $ STAR * 11 $ POWER , 12 $ COMMA ( 13 $ LPAR ) 14 $ RPAR 例 2-5:综合实例 做出识别下表所示的小语言的 单词符号 的状态转换图 * 1 20 字母 非字母与数字 字母或数字 * 空白 5 43数字 数字 非数字 * 6 1 0 1 1 1 3 1 2 7* 8 9* 非 * , ( ) 其他 。 右图即为对上页所示 的简单语言进行 词法 分析 的状态转换图。 1、 CHAR 字符变量,存放最新读进的源程序字符。 2、 TOKEN 字符数组,存放构成单词的字符串。 3、 GETCHAR 过程,将下一输入字符读入 CHAR,搜索指示器前移一个字符。 4、 GETBC 过程,检查 CHAR中的字符是否为空白。若是,则调用 GETCHAR 直至 CHAR中进入一个非空白字符。 5、 CONCAT 过程,把 CHAR中的字符连接到 TOKEN之后。 6、 LETTER 布尔函数过程,它们分别判断 CHAR中的字符是数字或是字母, DIGIT 从而给出真假值 TRUE、 FALSE。 7、 RESERVE 整型函数过程,用 TOKEN中的字符串查保留字表,若是一个保留 字则给予编码,否则回送 0值(假定 0不是保留字的编码)。 8、 RETRACT 过程,把搜索指示器回调一个字节,把 CHAR中的字符置为空白。 以上函数和子程序过程都不难编制,使用它们能够方便 的构造状态转换图的对应程序。一般,我们可以让每 一个状 态结 对应 一个程序段 。 例如:我们可以让不含回路的分叉结,对应一个 CASE 语 句,或者是一组 IFTHENELSE 语句。具体见后面实例。 终态结 一般对应一个 RETURN(C,VAL)语句。其中 C为单词 种别编码; VAL是字符数组的 TOKEN ,或者是一个整数值,或 者无定义。具体见后面实例。 为了把 状态转换图 转化成 程序 ,每个 状态 要建立一段 程序 ,它要做的工作如下: 第一步 :从输入缓冲区中取一个字符。为此,我们使用函 数 GETCHAR,每次调用它,推进先行指针,送回一 个字符。 第二步 :确定在本状态下,哪一条箭弧是用刚刚来的输入 字符标识的。如果找到,控制就转到该弧所指向 的状态;若找不到,那么寻找该单词的企图就失 败了。 失 败 :先行指针必须 重新回到 开始指针处,并用另一状 态图来搜索 另一 单词。如果所有的状态转换图都 试过之后,还没有匹配的,就表明这是一个词法 错误,此时,调用错误校正程序。 GETCHAR是过程, 将下一输入字符读入 CHAR,搜索指示器 前移一个字符。 例 2 6:以下 CASE语句段对应的状态图 : state i: GETCHAR; CASE CHAR OF AZ : state j ; 09 : state k ; / : state l ; END; FAIL 数字 i j k l 字母 / 字符变量,存放最新 读进的源程序字符。 过程,将下一输入字 符读入 CHAR,搜索指 示器前移一个字符。 对于如上的状态转换图, 状态 0的代码如下所示: state 0: C := GETCHAR ; if LETTER(C) then goto state 1 else FAIL( ) 20 1字母 其他 字母或数字 LETTER( )是布尔 函数过程,当且仅 当 C中的字符是字 母,它返回真假值 TRUE。 FAIL( )是例子程序, 它移回 先行指针 ( lookahead pointer ) , 开始下一状态转换 图,或调用出错程序 。 例 2-7:示例 如何把 状态结 对应于一段 程序 : * 对于如上的状态转换图, 状态 1的代码如下所示: state 1: C := GETCHAR ; if LETTER( C) or DIGIT(C) then goto state 1 else if DELIMITER(C) then goto state 2 else FAIL( ) 20 1字母 其他 字母或数字 DIGIT( )是布尔函数 过程,当且仅当 C 中的字符是数字, 它返回真假值 TRUE。 DELIMITER(C)是过程, 只要碰到标识符后的分 界符,它返回 TRUE。 分界符 一般为:空格、 算术、逻辑符号,括号 、 、 ; 、 . 、 , 。 * 对于如上的状态转换图,终态 状态 2的 代码如下所示: state 2: RETRACT( ) ; RETURN($id , INSTALL( ) ) 20 1字母 其他 字母或数字 RETRACT( )是过程 ,由于分界符不属 于标识符,所以我 们要把先行指针 回 调 一个字符。 INSTALL( )是过程, 如我们识别出的标 识符不在符号表中 ,我们把它装入 符 号表 。我们还要给 语法分析程序返回 一个 二元式 。 * 如果同时识别 标识符 和 定义符 , 则需要 修改 为 State2: 修改之后, 状态 2的代码如下所示: state 2: RETRACT( ) ; c := RESERVE( ); if c = 0 then RETURN($id , INSTALL ) else RETURN(C , _ ) RESERVE( ) 整型函数 过程 ,针对 TOKEN中的 字符串进行查找,看其 是否是 保留字 ,是保留 字给出它的编码,否则 回送 0(假定 0不是保留 字编码)。 例 2 8:以下程序段对应的状态图 state i: GETCHAR; WHILE LETTER OR DIGIT DO GETCHAR; state j: 布尔函数过程,它们分别 判断 CHAR中的字符是数字 或是字母,从而给出真假 值 TRUE、 FALSE。 i j其它 字母或数字 例 2 9:以下程序段对应的状态图 0 9 : BEGIN WHILE DIGIT DO BEGIN CONCAT; GETCHAR END; RETRACT; RETURN($INT,DTB) ; END; 3 非数字 数字 数字 4 * RETURN 语句,对应终态 结,其中 $INT为种别编码 , DTB为一个把十进制转 换到二进制的转换函数。 它把 TOKEN中的数字译成 标准二进制码 ,并以此为 函数值返回。 正规式与正规集的递归定义: 1、 和 都是 字母表 上的正规式,它们所表示的正规集分别为 和 ; 2、任何 a , a是 上的一个 正规式 ,它所表示的 正规集 为 a; 3、 正规式 正规集 正规式 正规集 U L(U) ( U | V) L(U) L(V) V L(V) ( U V) L(U)L(V) (U)* L(U)*(闭包) 仅由有限次使用上述三步骤而得到的表达式才是 上的 正规式 。仅由这 些正规式所表示的子集才是 上的 正规集 。 运算符的优先顺序: 先 “*” ,次 “ ” ,最后 “ |” “ |” 读 做 “ 或 ”“ ” 读做“ 连接 ”“ *” 读做 “闭包 ” * 的子集 U , V: 积 UV =| U & V n次积 V n= VVV V V0 = V的闭包 V* = V0 U V1 U V2 U V的正则闭包 V+ = V V* 例 2-11:令 a, b,下面是 上的 正规式 和相应的 正规集 : 正规式 正规集 ba* 上所有的以 b为首,并且后跟任 意多个 a的字, b, ba,baa,baaa, a(a|b)* 上所有的以 a为首的字 (a|b)* (aa|bb) (a|b)* 上所有含有两个连续的 a或者 b的字 例 2-10:令 A, B, 0, 1,则: 正规式 正规集 (A|B)(A|B|0|1)* 上 “ 标识符 ” 的全 体 (0|1)(0|1)* 上 “ 数 ” 的全体 若两个正规式表 示相同的正规集 ,则认为二者 等 价 ,记为 U=V。例 如: b(ab)*=(ba)*b (a|b)*=(a*b*)* 令 U、 V和 W均为 正规式 ,显而易见,下列 关系 普遍成立: 1、 U|V = V|U(交换律); 2、 U|(V|W) = (U|V)|W(结合律); 3、 U(VW) = (UV)W(结合律); 4、 U(V|W) = UV|UW(分配律) (V|W)U = VU|WU; 5、 U = U = U。 一个 确定有限自动机( DFA) M是一个五元式: M (S, ,s0 ,F) ,其中 1、 S是一个有限集,它的每个元素称为一个 状态 2、 是一个有穷 字母表 ,它的每个元素称为一个 输入字符 3、 是一个从 S 至 S的单值部分映射。 (s,a)=s意味着:当现行 状态为 S、输入字符为 a时,将转换到下一状态 s。我们称 s为 s的 一个后继状态。 4、 s0S 是唯一的 初态 5、 F S是一个 终态集 (可空)。 显然,一个 DFA可用一个矩阵表示,该矩阵的行表示状态 ,列表示输入字符,矩阵元素表示 (s,a)的值。这个矩阵称 为 状态转换矩阵 。 例 2-12:有 DFA M = (0,1,2,3,a,b,0,3) 其中 为 : (0,a)=1 (0,b)=2 (1,a)=3 (1,b)=2 (2,a)=1 (2,b)=3 (3,a)=3 (3,b)=3 状 态 a b 0 1 2 1 3 2 2 1 3 3 3 3 相应的状态转换矩阵如下表: 一个 DFA也可用一张(确定的) 状态转换图 来表示。假定 DFA M含有 m个状态和 n个 输入字符 ,那么,这个状态转换图含有 m个 状态结点 ,每个结点顶多有 n条箭弧射出和别的结点相连接 ,整张图含有一个 初态结点 和若干个(可以为 0) 终态结点 。 30 1 图 2.5 状态转换图 2 a a a a b b b 状 态 a b 0 1 2 1 3 2 2 1 3 3 3 - 如下表所示的状态转换矩阵 对应的状态转换图如右图: 30 1 2 a a a b b b 上图所示的状态转换图的 S、 及 *如下: S = 0,1,2,3 = a,b *= | 为 ,或者 为 a、 b的任意组合 从初态 0到终态 3有如 图所示的通路,箭弧 上到标记符连接起来 的字 aa属于 * ,所 以右图所示的 DFA可 以识别字 aa。 同理:从初态 0到终 态 3还有如图所示的 通路,箭弧上到标记 符连接起来的字 bba 属于 * ,所以右图 所示的 DFA可以识别 字 bba。 a 例 2-13:科学表示法中数字常量的 正则表达式 对应的 DFA: digit digit nat对应的 DFA如下图 digit = 0-9 nat = digit + signedNat = ( +|- )? nat number = signedNat(“”nat )? signedNat对应的 DFA如下图 加上可选的小数部分, 数字常量的 正则表达式 number = signedNat(“”nat)? 对应的 DFA如下图: + digit digit digit - + digit digit digit - digit digit a bb b 接受与 正则式 ab+|ab*|b* 相同的语言的 DFA如下所示: 例 2-14:串中 只有一个 b被如下所示的 DFA接受 : b not bnot b 例 2-15:包含 最多一个 b的串被如下所示的 DFA接受: b not bnot b 注意二者之 间的区别 定理 :如果一个 DFA M 的 输入字母表 为 ,则我们也称 M是 上的一个 DFA。可以证明 : 上的一个字集 V *是正规的 ,当且仅当存在 上的 DFA M,使得 V =L(M)。 DFA的 确定性 表现在映射 : SS 是一个 单值函数 。 即:对于任何状态 sS 和输入符号 a , (s,a)唯一确定了 一个状态。 从转换图角度,我们也可以得到答案。 如果允许是一个 多值函数 ,我们就得到下一节要讲到的 非确定自动机 的概念。 一个 非确定有限自动机( NFA) M是一个五元式: M (S, ,S0 ,F) ,其中 1、 S是一个有限集,它的每个元素称为一个 状态 2、 是一个 有穷 字母表 ,它的每个元素称为一个 输入字符 3、 是一个从 S *至 S的子集的映射,即 : S * 2s 4、 S0S 是唯一的 初态 5、 F S是一个 终态集 (可空)。 一个含有 m个状态和 n个输入字符的 NFA可用一张如下的状态 转换图来表示:该图含有 m个状态结点,每个结点可以射出若干 条弧与别的结点相连接, 每条弧用 *中的一个字(可以是不同 的字,也可以是空字)做标记 ,整张图至少含有一个初态结点 和若干个(可以为 0)终态结点。某些结点既可以是初态结点也 可以是终态结点。 1aaa,b 2 bb ab 0 a,b 0 1 ab,ba aa,bb ab,ba aa,bb yx 15 aa aa b b 4 3 2 6 b b 下图所示的状态转换图的 S、 及 *如下: S = 0,1,2,3 = a,b *= | 为 ,或者 为 a、 b的任意组合 对于 *中的任何一个字 ,若 存在一条从某一初态结点到某一 终态结点的通路,且这条通路上 所有弧上的标记字依序连接成的 字(忽略 )等于 ,则称 可 以为 NFA M 识别 。 从初态 x到终态 y的连接通路弧上,有如下标记字: a a ,去除 ,为 aa,所以字 aa可为 NFA接受 。 1 43 2 a a b 例 2-16:上图所示的 NFA的以下两个转换序列都可以接受串 abb: 允许接 受 ab 允许接受与 ab*匹配的字 符串 允许接受与 b*匹配的字 符串 允许接受与 ab+匹配的字 符串 由此,我们可以看 出这个 NFA接受与正 则式 ab+|ab*|b* 相 同的语言! 接受 ab接受 接受 ab 接受 ab 接受 ab 接受 ab* 接受 接受 接受 接受 b* 练习:考虑以下 NFA通过怎样的转换 接受串 acab: 10 a 21 b 3 7 5 6 4 8 9 c DFA是 NFA的特例 ,可以采用 子集法 将 NFA确定化。 假定 I是 NFA M的状态集的一个 子集 , 我们定义 _CLOSURE(I)为: 1、若 s I, 则 s _CLOSURE(I); 2、若 sI ,那么从 s出发经过 任意 条 弧 而能到 达的 任何状态 s 都属于 _CLOSURE(I)。 状态集 _CLOSURE(I)称为 I的 _闭包 。 假定 I 是 NFA M的状态集的 子集 , a, 定义 Ia= _CLOSURE(J) 其中, J是那些可从 I中的某一状态结点出发 经过一条 a弧 而 到达的状态结点的全体。 = a1,a2,. ak 。 先 构造一张表 ,该表每 一行含有 k+1列。置该 表的 首行首列为 _CLOSURE(X)。 重复上述过程 ,直至所有 第二列 和 第三列 的 子集 均 已在 第一列 上出现 了为止。 如果某一行的第一列的 状态子集已经确定,例如记 为 I,那么,求出这一行的第 二个和第三个子集 Ia和 Ib看 它们是否已 在表的第一列出 现,将未出现的 填入 到后面 空行的第一列。 1 表的 初始化 构造 2 处理表的 一行 3 重复处理 例 2-17:考虑下图所示 NFA的 确定化 : yx 15 aa aa b b 4 3 2 6 b b I Ia Ib X,5,1 5,3,1 5,4,1 5,3,1 5,3,1,2,6,Y 5,4,1 5,4,1 5,3,1 5,4,1,2,6,Y 5,3,1,2,6,Y 5,3,1,2,6,Y 5,4,1,6,Y 5,4,1,6,Y 5,3,1,6,Y 5,4,1,2,6,Y 5,4,1,2,6,Y 5,3,1,6,Y 5,4,1,2,6,Y 5,3,1,6,Y 5,3,1,2,6,Y 5,4,1,6,Y I= _CLOSUREX 为 X,5,1。 从状 态 I出发经过一条 a 弧而能到达的状态 全体 J为 5,3,而 _CLOSURE(J)=5, 3,1。从而 Ia=5, 3,1。 初态 _闭包 X,5,1 Ja为 5,3 _CLOSURE(J) 为 5,3, 1( 根据 _闭包的 定义) 根据此方法依次求 出左边表中的状态 转换矩阵即可。 对右下图表中的所有 子集 重新命名,得到左图中的状态转换矩 阵形成如下状态转换矩阵,从而得到相应的 DFA。如图所示: s a b 0 1 2 1 3 2 2 1 5 3 3 4 4 6 5 5 6 5 6 3 4 3 0 1 2 a a a a b b b 5 4 6 a b b a b I Ia Ib X,5,1 5,3,1 5,4,1 5,3,1 5,3,1,2,6,Y 5,4,1 5,4,1 5,3,1 5,4,1,2,6,Y 5,3,1,2,6,Y 5,3,1,2,6,Y 5,4,1,6,Y 5,4,1,6,Y 5,3,1,6,Y 5,4,1,2,6,Y 5,4,1,2,6,Y 5,3,1,6,Y 5,4,1,2,6,Y 5,3,1,6,Y 5,3,1,2,6,Y 5,4,1,6,Y 重命名为 状态 0 重命名为 状态 1 根据重命 名的状态 填写表格 a b 例 2-18:考虑下图所示 NFA的确定化: 1 在 letter上有到 2的转换 : 2=2, 3, 4, 5, 7, 10 2,3,4, 5,7,10 letter 在 上有到 6的转换 : 6=4, 5, 6, 7, 9, 4,5,6, 7,9, 10letter 在 digit上有到 8的转换 : 8=4, , 7, 8, , 4,5,7, 8,9, 10digit letter digitdigit letter 注意:所有这些状态都有在 letter和 digit上的转换。上图所示 NFA的确定化后的 DFA如下:子集构造过程如

温馨提示

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

评论

0/150

提交评论