版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编译原理,语法分析自下而上分析,第五章 语法分析自下而上分析,自上而下分析法(Top-down) 自下而上分析法(Bottom-up),存在主要问题: 左递归问题 回溯问题,主要方法: 递归子程序法 LL分析法,自顶向下分析算法的基本思想为:,自底向上分析算法的基本思想为:,存在主要问题: 可规约串的识别问题,主要方法: 算符优先分析法 LR分析法,语法分析的方法: 自下而上分析法(Bottom-up) 基本思想:从输入串开始,逐步进行“归约”,直到文法的开始符号。即从树末端开始,构造语法树。所谓归约,是指根据文法的产生式规则,把产生式的右部替换成左部符号。,自底向上分析算法的基本思想为:,存
2、在主要问题: 可规约串的识别问题,主要方法: 算符优先分析法 LR分析法,5,5,分析过程是重复以下步骤:,1、找出当前句型的可规约串x,2、找出以 x 为右部的规则 X-x,3、把 x 规约为X,产生语法树的一支,关键:找出当前句型的可规约串x (或其变形),这不是很容易。,G(E): E i| E+E | E-E | E*E | E/E | (E) i*i+i E*i+i E*E+i E+i E+E E,i,+,*,i,i,5.1.1 归约,采用“移进归约”思想进行自下而上分析。 基本思想:用一个寄存符号的先进后出栈,把输入符号一个一个地移进到栈里,当栈顶形成某个产生式的候选式时,即把栈顶
3、的这一部分替换成(归约为)该产生式的左部符号。,例:设文法G(S): (1) S aAcBe (2) A b (3) A Ab (4) B d 试对abbcde进行“移进归约”分析。,b,d,b,a,c,e,分析树和语法树不一定一致。 自下而上分析过程:边输入单词符号,边归约。 核心问题:识别可归约串,5.1.2 规范归约,定义:令G是一个文法,S是文法的开始符号,假定是文法G的一个句型,如果有 且,则称是句型相对于非终结符A的短语。 特别是,如果有A,则称是句型相对于规则A 的直接短语。一个句型的最左直接短语称为该句型的句柄。,考虑文法G(E): E T | E+T T F | T*F F
4、(E) | i 和句型i1*i2+i3: E E+T E+F E+i3 T+i3 T*F+i3 T*i2+i3 F*i2+i3 i1*i2+i3,在一个句型对应的语法树中,以某非终结符为根的两代以上的子树的所有末端结点从左到右排列就是相对于该非终结符的一个短语,如果子树只有两代,则该短语就是直接短语。最左直接短语称为句柄。,短语: i1,i2,i3, i1*i2, i1*i2+i3 直接短语: i1,i2,i3 句柄: i1,可用句柄来对句子 abbcde 进行归约 句型 归约规则 abbcde (2) A b aAbcde (3) A Ab aAcde (4) B d aAcBe (1) S
5、 aAcBe S,S,A,S,定义:假定是文法G的一个句子,我们称序列 n, n-1, ,0 是的一个规范归约,如果此序列满足: 1 n= 2 0为文法的开始符号,即0=S 3 对任何i,0 i n, i-1是从i经把句柄替换成为相应产生式左部符号而得到的。,把上例倒过来写,则得到: S aAcBe aAcde aAbcde abbcde 显然这是一个最右推导。 规范归约是关于是一个最右推导的逆过程 最左归约 规范推导 由规范推导推出的句型称为规范句型。,对规范句型来说句柄的右边不会出现非终结符,规范归约的实质是,在移进过程中,当发现栈顶呈现句柄时就用相应产生式的左部符号进行替换,5.1.3
6、符号栈的使用和分析树的表示,栈是语法分析的一种基本数据结构。#作为栈底符号 考虑文法G(E): E T | E+T T F | T*F F (E) | i 输入串为i1*i2+i3 ,分析步骤为:,步骤 符号栈输入串动作 0 #i1*i2+i3#预备 1 #i1*i2+i3#进 2 #F*i2+i3#归,用Fi 3 #T*i2+i3#归,用TF 4 #T*i2+i3#进,G(E): E T | E+T T F | T*F F (E) | i,步骤 符号栈输入串动作 4 #T*i2+i3#进 5 #T*i2+i3#进 6 #T*F+i3#归,用Fi 7 #T+i3#归,用TT*F 8 #E+i3
7、# 归,用ET 9 #E+i3# 进,G(E): E T | E+T T F | T*F F (E) | i,步骤 符号栈输入串动作 9 #E+ i3#进 10#E+i3#进 11#E+F#归,用Fi 12#E+T#归,用TF 13#E#归,用EE+T 14#E#接受,G(E): E T | E+T T F | T*F F (E) | i,移进:把下一个输入符号移进栈,移进归约的基本动作:,归约:栈顶已形成句柄右端,需向栈 内搜索确定句柄的左端,并选 择正确的非终结符进行替换,接受:分析成功,出错:调用错误处理程序,任何可归约串的出现必须在栈顶,不会在栈的内部,四、句柄的识别,解决两个问题:,
8、栈顶形成的一定是最左直接短语,2、判断句柄的左、右端:,优先法 状态法,1、最左性:,规范归约:例及练习,文法GS: S (L) | aS | a L L , S | S 写出句子 (a,(a) 的规范归约过程; 指出每次归约用的句柄。,句型 归约规则 (a,(a) S a 归(S,(a) L S 归(L,(a) S a 归(L,(S) L S 归(L,(L) S (L) 归(L,S) L L,S 归(L) S (L) 归 S,剪子树,画语法树 剪句柄,5.2 算符优先分析,四则运算的优先规则: 先乘除后加减,同级从左到右 考虑二义文法文法G(E): G(E): E i| E+E|E-E|E*
9、E|E/E|(E) 它的句子有几种不同的规范规约。 归约即计算表达式的值。归约顺序不同,则计算的顺序也不同,结果也不一样。 如果规定算符的优先次序,并按这种规定进行归约,则归约过程是唯一的。,例如:句子i+i-i*(i+i),返回,句子i+i-i*(i+i)的归约过程是: (1) i+i-i*(i+i) (2) E+i-i*(i+i) (3) E+E-i*(i+i) (4) E-i*(i+i) (5) E-E*(i+i) (6) E-E*(E+i) (7) E-E*(E+E) (8) E-E*(E) (9) E-E*E (10) E-E (11) E,算符优先分析的基本思路,(1) 解决谁先归
10、约: 规定算符(终结符)的优先关系和结合性质,(2) 确定可归约串: 采用比较相邻运算符(终结符)的优先顺序来确定可归约串 - 最左素短语 (3) 进行归约,起决定作用的是相邻的两个算符之间的优先关系。 所谓算符优先分析法就是定义算符之间的某种优先关系,借助于这种关系寻找“可归约串”和进行归约。,首先必须定义任何两个可能相继出现的终结符a与b的优先关系 三种关系 a b a的优先级高于b 注意:与数学上的 =不同 a a a b并不意味着b a,如 ( + 和 + ( a b并不意味着b a,5.2.1 算符优先文法及优先表构造,一个文法,如果它的任一产生式的右部都不含两个相继(并列)的非终结
11、符,即不含如下形式的产生式右部: QR 则我们称该文法为算符文法。 例:文法G1E是算符文法。 EEE|E-E|E*E|E/E|EE|(E)|-E|i 例:文法G2E不是算符文法。 EEAE|(E)|-E|i A|*| / | 约定: a、b代表任意终结符; P、Q、R代表任意非终结符; 代表由终结符和非终结符组成的任意序列,包括空字。,假定G是一个不含-产生式的算符文法。对于任何一对终结符a、b,我们说: 1. a b当且仅当文法G中含有形如Pab或PaQb的产生式;,如果一个算符文法G中的任何终结符对(a,b)至多只满足下述三关系之一: a b,a b 则称G是一个算符优先文法。,2. a
12、 b当且仅当G中含有形如PaR的产生式, 而R b或R Qb;,3. a b当且仅当G中含有形如PRb的产生式,而 R a或R aQ。,例:考虑下面的文法G(E): (1) EE+T | T (2) TT*F | F (3) FP F | P (4) P(E) | i 由第(4)条规则,有 ( ); 由规则EET和TT*F, 有 + ; 由(3)FPF和F PF,可得 。 由(4)P(E)和 EE+TT+TT*F+TF*F+T PF*F+TiF*F+T 有 ( +、( *、( 和( i。,优先关系表,从算符优先文法G构造优先关系表的算法。 通过检查G的每个产生式的每个候选式,可找出所有满足a
13、b的终结符对。,确定满足关系的所有终结符对:,1. a b当且仅当文法G中含有形如Pab或PaQb的产生式;,从算符优先文法G构造优先关系表的算法。 通过检查G的每个产生式的每个候选式,可找出所有满足a b的终结符对。 确定满足关系 的所有终结符对: 首先需要对G的每个非终结符P构造两个集合FIRSTVT(P)和LASTVT(P):,从算符优先文法G构造优先关系表的算法。 通过检查G的每个产生式的每个候选式,可找出所有满足a b的终结符对。 确定满足关系的所有终结符对: 首先需要对G的每个非终结符P构造两个集合FIRSTVT(P)和LASTVT(P):,从算符优先文法G构造优先关系表的算法。
14、通过检查G的每个产生式的每个候选式,可找出所有满足a b的终结符对。 确定满足关系的所有终结符对: 首先需要对G的每个非终结符P构造两个集合FIRSTVT(P)和LASTVT(P):,比较,比较,有了这两个集合之后,就可以通过检查每个产生式的候选式确定满足关系的所有终结符对。 假定有个产生式的一个候选形为 aP 那么,对任何bFIRSTVT(P),有 a b。,首先讨论构造集合FIRSTVT(P)的算法。 按其定义,可用下面两条规则来构造集合FIRSTVT(P): 1. 若有产生式Pa或PQa,则aFIRSTVT(P); 2. 若aFIRSTVT(Q),且有产生式PQ,则aFIRSTVT(P)
15、。,数据结构: 布尔数组FP,a,使得FP,a为真的条件是,当且仅当aFIRSTVT(P)。开始时,按上述的规则(1)对每个数组元素FP,a赋初值。 栈STACK,把所有初值为真的数组元素FP,a的符号对(P,a)全都放在STACK之中。,运算: 如果栈STACK不空,就将顶项逐出,记此项为(Q,a)。对于每个形如 PQ 的产生式,若FP,a为假,则变其值为真且将(P,a)推进STACK栈。 上述过程必须一直重复,直至栈STACK拆空为止。,如果把这个算法稍为形式化一点,我们可得如下所示的一个程序(包括一个过程和主程序): PROCEDURE INSERT(P,a); IF NOT FP,a
16、THEN BEGIN FP,a:=TRUE; 把(P,a)下推进STACK栈 END;,主程序: BEGIN FOR 每个非终结符P和终结符a DO FP,a:=FALSE; FOR 每个形如Pa或PQa的产生式 DO INSERT(P,a); WHILE STACK 非空 DO BEGIN 把STACK的顶项,记为(Q,a),上托出去; FOR 每条形如PQ的产生式 DO INSERT(P,a); END OF WHILE; END,这个算法的工作结果得到一个二维数组F,从它可得任何非终结符P的FIRSTVT。 FIRSTVT(P)a | FP,a=TRUE 同理,可构造计算LASTVT的算
17、法。,构造集合LASTVT(P)的算法。 按其定义,可用下面两条规则来构造集合LASTVT(P): 1. 若有产生式P a或P aQ,则a LASTVT(P); 2. 若a LASTVT(Q),且有产生式P Q ,则a LASTVT(P)。,使用每个非终结符P的FIRSTVT(P)和LASTVT(P),就能够构造文法G的优先表。构造优先表的算法是:,FOR 每条产生式PX1X2Xn DO FOR i:=1 TO n-1 DO BEGIN IF Xi和Xi+1均为终结符 THEN 置Xi Xi+1 IF in-2且Xi和Xi+2都为终结符 但Xi+1为非终结符 THEN 置Xi Xi+2; IF
18、 Xi为终结符而Xi+1为非终结符 THEN FOR FIRSTVT(Xi+1)中的每个a DO 置 Xia; IF Xi为非终结符而Xi+1为终结符 THEN FOR LASTVT(Xi)中的每个a DO 置 a Xi+1 END,例: 考虑下面的文法G(E): (1) EE+T | T (2) TT*F | F (3) FP F | P (4) P(E) | i 1. 计算文法G的FIRSTVT和LASTVT; 2. 构造优先关系表; 3. G是算符优先文法吗?,用关系图构造FIRSTVT和LASTVT,(1) EE+T | T (2) TT*F | F (3) FP F | P (4)
19、P(E) | i,(,FIRVT(E),+,FIRVT(P),FIRVT(T),FIRVT(F),*,i,用关系图构造FIRSTVT和LASTVT,(1) EE+T | T (2) TT*F | F (3) FP F | P (4) P(E) | i,),LASVT(E),+,LASVT(P),LASVT(T),LASVT(F),*,i,结论: G是算符优先文法,G的算符优先关系表,(1) EE+T | T (2) TT*F | F (3) FP F | P (4) P(E) | i,思考,特殊符号#的优先关系如何确定?,对文法进行改造,得:G(S): S #E# EE+T|T TT*F|F
20、F(E)|i,(1) EE+T | T (2) TT*F | F (3) FP F | P (4) P(E) | i,构造表达式文法非终结符的FIRSTVT集合和LASTVT集合,FIRSTVT(F)= (, i FIRSTVT(T)= *, (, i FIRSTVT(E)= +,*, (, i ,EE+T|T TT*F|F F(E)|i,LASTVT(F)= ), i LASTVT(T)= *,), i LASTVT(E)= +,*,), i ,由FIRSTVT集和LASTVT集确定优先关系,有了FIRSTVE(P)和LASTVT(P)这两个集合后,就可以通过检查每个产生式的右部符号串的形式
21、确定满足关系 、 、的所有终结符号对。 对形如 Pab或 PaQb的产生式,有a b。 对形如 PaR的产生式,R VN ,有bFIRSTVT(R),则 a b。 对形如 P Rb的产生式,R VN,有aLASTVT(R),则 a b。,注意:只考察右部至少含有两个符号的产生式。,优先表构造例:,对 TT*F LASTVT(T)= *, i , ) FIRSTVT(F)= i , ( 有 *, i , ) * * i , (,对 EE+T LASTVT(E)= +,*, i , ) FIRSTVT(T)= *, i , ( 有 +, *, i , ) + + *, i , (,对 F( E )
22、 有 ( ) FIRSTVT(E)= +,*, i , ( LASTVT(E)= +,*, i , ) 有 ( +, *, i , ( +, *, i , ) ),此外,由 #E# 得:# # # FIRSTVT(E) LASTVT(E) #,构造文法的优先表:,用前面得到的结果填表,空白表示没有优先关系。,强调:优先关系是有顺序的。表中第一列的终结符是前符, 第一行的终结符是后符。,构造优先表:例及练习,文法GS为算符优先文法,求优先关系矩阵。 SSaF|F F FbP|P P c|d,每个非终结符的FIRSTVT集合、 LASTVT集合: FIRSTVT(P) = c , d FIRSTV
23、T(F) = b, c, d FIRSTVT(S) = a, b, c, d LASTVT(P) = c, d LASTVT(F) = b, c, d LASTVT(S) = a, b, c, d ,构造优先表:例及练习(续),对 SSaF LASTVT(S) a a FIRSTVT(F) 有: a a, b a, c a, d a a b, a c, a d 对 F FbP LASTVT(F) b b FIRSTVT(P) 有: b b, c b, d b b c, b d,a b c d a d ,优先关系矩阵:,算符优先分析中的可归约串,可归约串,句型,短语,直接短语,句柄,规范归约。
24、一个文法G的句型的素短语是指这样一个短语,它至少含有一个终结符,并且,除它自身之外不再含任何更小的素短语。 最左素短语是指处于句型最左边的那个素短语。,ET | E+T TF | T*F Fi | (E),短语有:i, T * F, T * F + i 素短语有: T * F , i 最左素短语是:T * F,【例4】下述文法的一个句型: T * F + i 其短语、素短语、最左素短语分别是?,文法GE:(1) EE+T(2) ET(3) TT*F(4) TF(5) FPF|P(6) P(E)(7) Pi,句型T+T*F+i其短语有:T+T*F+iT+T*FTT*Fi,E,E,T,+,+,E,
25、T,F,*,F,T,T,i,最左素短语为:T*F,句型T+T+F的素短语为:T+T,E,+,+,T,F,E,句型T+T+i的素短语为: T+T,i,素短语为:T*F, i,E,T,T,i,考虑下面的文法G(E): (1) EE+T | T (2) TT*F | F (3) FP F | P (4) P(E) | i,句型:T+F*P+i,短语: 直接短语: 句柄: 素短语: 最左素短语:, T+F*P+i,T, F, P, F*P, i,T+F*P,T, F, P, i,T,F*P, i,F*P,算符优先文法句型(括在两个之间)的一般形式写成: #N1a1N2a2NnanNn+1# 其中,每个
26、ai都是终结符,Ni是可有可无的非终结符。 定理:一个算符优先文法G的任何句型的最左素短语是满足如下条件的最左子串 NjajNiaiNi+1, aj-1 ai+1,ET | E+T TF | T*F Fi | (E),文法的句型 T+T*F+i ,其 素短语: T*F ( + * 及 * + ) i ( + i 及 i # ) 最左素短语: T*F,查找最左素短语的方法 在句型中加入优先关系,例如:i+i*i # i + i * i # 1、找最左素短语的右端; 从左至右扫描符号串直至遇到第一个 为止。 2、找最左素短语的左端; 然后向回扫描(向左)越过任何 ,直至一个被发现。 3、归约 可归
27、约串包括在第1步所遇到的的左边和第2步所遇到的的右边的所有终结符号,包括插入在中间的或环绕在两旁的非终结符号。 归约时把最左素短语归约为某一非终结符号,算符优先分析过程见下图:,G(E): E i| E+E | E-E | E*E | E/E | (E),算符优先分析算法 使用一个符号栈S,用它寄存终结符和非终结符,k代表符号栈S的使用深度。,算符优先分析过程:(根据最左素短语的定义) 句型的一般形式: #N1a1N2a2NnanNn+1# 其中,每个ai都是终结符,Ni是可有可无的非终结符。从左向右扫描各符号,将符号进栈,依次查看算符优先矩阵,直至找到满足ai ai+1的终结符为止.再从ai
28、开始往左扫描,直至找到满足关系aj-1 aj的终结符为止。 此时,形如: NjajNiaiNi+1的子串即为最左素短语,应被归约。 分析过程的结束:分析栈中为#S,输入串为#,二. 算符优先分析算法 设a为栈顶终结符,初始化: #栈,a=b=#,ab或a=b,ab,归约最左素短语:最左素短语出栈, 左部符号入栈,b入栈,结束,出错,Y,N,Y,Y,N,N,读一符号b,k:=1; Sk:=#; REPEAT 把下一个输入符号读进a中; IF SkVT THEN j:=k ELSE j:=k-1; WHILE Sja DO BEGIN REPEAT Q:=Sj; IF Sj-1VT THEN j:
29、=j-1 ELSE j:=j-2 UNTIL Sj Q; 把Sj+1Sk归约为某个N; k:=j+1; Sk:=N END OF WHILE; IF Sj a OR Sj a THEN BEGIN k:=k+1;Sk:=a END ELSE ERROR /*调用出错诊察程序*/ UNTIL a=#,自左至右,终结符对终结符,非终结符对非终结符,而且对应的终结符相同。 N X1 X2 Xk-j Sj+1 Sj+2 Sk,EE+TT TT*FF F(E) i i+i*i的分析过程,例 G(E),i+i*i的算符优先分析过程,# i+i*i#,符号栈 输入串 分析动作 .,#i +i*i#,#F +
30、i*i#,#F+ i*i#,#F+i *i#,#F+F *i#,#F+F* i#,#F+F*i #,#F+F*F #,#F+T #,#E # 分析成功结束,# i, 移进i,i +, # i, 归约Fi,# +, 移进+,+ i, 移进i,i *, + i, 归约Fi,+ *, 移进*,* i, 移进i,i #, * i, 归约Fi,* #, + *, 归约TT*F,+ #, # +, 归约EE+T,E,E,T,+,F,T,i,i,*,F,T,i,F,i+i*i F+i*i F+F*i F+F*F F+T E,在算法的工作过程中,若出现j减1后的值小于等于0时,则意味着输入串有错。在正确的情况
31、下,算法工作完毕时,符号栈S应呈现:# N #。 由于非终结符对归约没有影响,因此,非终结符根本可以不进符号栈S。,规范归约和算符优先归约,句型#i+i#的规范归约过程,步骤符号栈剩余输入串 句柄 归约用产生式,1# i+i#,2#i +i# i Pi,4#F +i# F TF,5#T +i# T ET,6#E +i#,7#E+ i#,8#E+i # i Pi,10#E+F # F TF,11#E+T # E+T EE+T,12#E # 接受,3#P +i# P FP,9#E+P # P FP,G(E):E#E# EE+T | T TT*F | F FP F | P P(E) | i,E =
32、#E# = #E+T# = #E+F# = #E+P# = #E+i# = #T+i#= #F+i# = #P+i# = #i+i#,规范归约和算符优先归约,句型#i+i#的算符优先归约过程,步骤栈 优先关系 当前符号 剩余符号串 动作,1# i +i# 移进,2#i + i# 归约,3#P + i# 移进,3#P+ i # 移进,4#P+i # 归约,4#P+P # 归约,4#E = # 接受,G(E):E#E# EE+T | T TT*F | F FP F | P P(E) | i,算符优先分析法优缺点,由于算符优先分析并未对文法的非终结符定义优先关系,所以就无法发现由单个非终结符组成的“
33、可归约串”。 也就是说,在算符优先归约过程中,我们无法用那些右部仅含一个非终结符的产生式(称为单非产生式,如PQ)进行归约。这样,算符优先分析比规范归约要快很多。这既是算符优先分析的优点,也是它的缺点。 忽略非终结符在归约过程中的作用,存在某种危险性,可能导致把本来不成句子的输入串误认为是句子。,5.2.3 优先函数,用算符优先分析法时,对算符之间优先关系可以用优先矩阵表示,这样需站用大量的内存空间,当文法有n个终结符时,就需要有(n+1)2个内存单元(包括#),因此,在实际实现算符优先分析算法时,一般不用优先表而是用两个优先函数f 和g,需要内存空间2(n+1)个内存单元。,我们把每个终结符
34、号与两个自然数f()和g() 相对应,使得 若1g(2) 函数f 称为入栈优先函数,g称为比较优先函数。 优点:便于比较,节省空间; 缺点:原来不存在优先关系的两个终结符,由于自然数相对应,变成可以比较的。要进行一些特殊的判断。,3、 优先函数,有许多优先关系表不存在优先函数,如:,不存在对应的优先函数f和g 因为若假定存在f和g,则有 f(a)=g(a),f(a)g(b), f(b)=g(a),f(b)=g(b) 导致如下矛盾: f(a) g(b) = f(b) = g(a) = f(a) 如果优先函数存在,则不唯一(无穷多),(一)如果优先函数存在,那么,从优先表构造优先函数的一个简单方法
35、是用关系图法构造优先函数: (1)对于每个终结符a(包括#)令其对应两个符号fa和ga , 画一张以所有符号fa和ga为结点的方向图,如果a=b,那么,就从fa画一箭弧至gb,如果a=b 则画一条从gb到fa的箭弧。,如果优先函数存在,那么,从优先表构造优先函数的一种个简单方法是用关系图法构造优先函数:,. aVT#, 建立两个结点fa和ga; . a,b VT # , 若a b,则从fa 至 gb 画一条箭弧; 若a b,则从gb 至 fa 画一条箭弧; . 对每个结点赋予一个数, 此数等于从该结点出发沿着箭弧所能到达的结点(包括出发结点自身在内)的个数, 赋给fa的数作f(a), 赋给gb
36、的数作g(b)。 . 用f和g应满足的三个条件检查构造出的f和g, 看它们是否同原来的优先表有矛盾, 若无矛盾, 则f和g为所求, 否则此优先表不存在优先函数。,从优先表构造优先函数:例3.15,gi,fi,f*,g*,g+,f+,f#,g#,优先函数,优先表,算符优先分析中的错误恢复,算符优先分析器能发现的语法错误 如果栈顶的终结符和当前输入之间没有优先关系(如果用优先函数存储,这个错误不能发现) 如果发现句柄,但句柄不是任何产生式的右部 归约时的错误处理 给出相应的具有描述性的出错信息 试图通过插入、删除来获得句柄,一个加入了出错处理的优先矩阵,E1:(1)若栈顶有非终结符E,则 表达式分析完毕。 (2)若为空,缺少整个表达式 把id插入输入字符串中 输出诊断信息 Missing ope
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 9961-2026鲜、冻羊肉
- 传染病对心理健康的影响
- 荆州CEO家园前期物业管理方案模板
- 2026中医护理专业英语课件
- 艾滋病宣传方案
- 江苏扬州市仪征市市级名校2026年初三年级第一次校模拟考试英语试题含解析
- ARDS心理支持与沟通技巧
- 河北省廊坊市霸州市重点名校2026届初三质量监测(一)英语试题试卷含解析
- 山东省沂水县2025-2026学年初三下学期三模考试语文试题理试题含解析
- 贵州省黔东南州剑河县重点名校2026届初三下学期语文试题期中测试卷含解析
- 湖南中医药大学72学时解剖学考试试卷1王牌题库
- 百万农奴日活动方案
- 企业绿电采购合同范本
- 2025电力变压器和气体绝缘金属封闭开关施工及质量验收规范
- 知道智慧树网课《生物医学工程方法学(浙江大学)》课后章节测试答案
- 2025年江苏省高考历史真题(含答案解析)
- 新版《医疗器械经营质量管理规范》2025年培训试题及答案
- 宫腔镜子宫内膜息肉切除术护理查房
- 自建房水电安装承包合同4篇
- 针灸推拿面试题目及答案
- 《软件无线电原理与技术》课件-11第7章解调及接收机2
评论
0/150
提交评论