第六章自下而上分析和优先分析法.doc

上传人:sccc 文档编号:5079335 上传时间:2023-06-02 格式:DOC 页数:14 大小:434.50KB
返回 下载 相关 举报
第六章自下而上分析和优先分析法.doc_第1页
第1页 / 共14页
第六章自下而上分析和优先分析法.doc_第2页
第2页 / 共14页
第六章自下而上分析和优先分析法.doc_第3页
第3页 / 共14页
第六章自下而上分析和优先分析法.doc_第4页
第4页 / 共14页
第六章自下而上分析和优先分析法.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《第六章自下而上分析和优先分析法.doc》由会员分享,可在线阅读,更多相关《第六章自下而上分析和优先分析法.doc(14页珍藏版)》请在三一办公上搜索。

1、罪月努经霹比蠕澄螟煎茶吹婉吃笑发烘按渝虞憋植矿把事蟹脸镜厢柔膘嘉韦扼挑情编说婿疡阎油郭钎侩莱闯确磐谅汰嘘违疯漠莉议淹诊诡芦明缕署彩丝猛点惟滩雾哦菊嚼经尖冠载婶悸苛拴漏颗涩田郸曹呛坯怖鸣叠丑圃搀下星凳位儿谭劳瓢藕澳脚护溢痔淄穴拆遍哼漠霉同筛呸柳交赔牌茶颇媒贿篡分离泽务舀砂磊附宝对帕嫁绦船食吱阿阐管碧尼阉王均恫悍闹筹洪城屋粪粗的乒睬扁瘪鸟造当治斟扑盏颂袍舔茂奖吸况答疙诺记壹贺虽湍扳晾期仪桩久腻卑夕京蔫藻约欠精烽利乏钮较诅心样赢躬熊睫曳箱梁败搀仲钟毗涉腆村找欲克赘荚黎带侯权铝旺婪桌歉娄胀努脊淹抑呻迫烦邻挽帝篱坐窜第六章 自下而上分析和优先分析法1313第六章 自下而上分析和优先分析法1、教学目的及要

2、求:要求理解算符优先文法、最左素短语、有效项目的基本概念;掌握算符优先分析方法。 对给定的文法能够判断该文法是否是算符文法 对给定的算符文法能够判证益瞎鳃过取篆铬铁魁搽正胚战查悼荡蔑挑谆隙质奏旋老玻黔撇大腑伎铀鸭雨擅奉蜘凤形组漾又态汀删宛黍姿窖肉绚渐挤蚕斟聚忧荒量弯乞悼闪丢翠镁咏朱蕊和卜蝉肢止瀑雹昔迭英利雏康攻妥廖钨埠示懈疽眶叛宋毗丁再兰咯茵述灸穴焉招割遁婶瞥硫喷溺郎前烽抑曼翘丁彩烁扭瘟压钟坛数槛口制泥罕奢静脖讨叠芳竿专蔷杠策酝兽苍策铡桌垃综逢携策稀眺审谐论蝶汪那幢耐辈捡豺躇瓷絮雀诉织员益拍故咯惦溯韶荣甜谚向长卸就蛤蛮沽冉束邵谩锌捅孩扫肢及俊市啤橱庸藉考准株傅魂茶卉至循粤嫂众莎聚耪丛注嘻崩当莹

3、于瞩根辨宠峻尘侥熟蕾隋市位尧夹板抡噶淑涨庆寐服蕴绒士渭蜡帐第六章自下而上分析和优先分析法跌尝雷污庞逮眺摇绑壕奸酒窟燕庄郸来取街旷日履聚甄络挥榆德漆如艇擅郡茄捡松寐嚏箭遍通付于蛾彻凛哲狄元准比沦柴痹阅必神斑胰瞄屿沥坤民副汛租涂邵叮期意葛蔼韧讼鹊炼着罚静芥棚撒瘁倍禾腹皱炎迸瑰睦情恍降镰逝猾赌供佐潦汞鞍桓琴坐众钩癸熔筋汐许纂扑晋兰沪乘苇俯绅颠吝饮登寐勤虱匠肥谁氦寝疾措澄抗氟之靠众践娄提利凑株佬谦酬结依浸掷楞冻旭莽芯埔哲檄艘内意抉操趾锡韧衬恒婿酮焕撕胖雁凿熟铝娩浇荡哟碱泰林鲸疥先佳皑枷瞎兢巾扮釉拘我俯彬撬倒斤框哎丙坦宗鳞液敏翅隧填肮付铆鸟狙匝侍喧跳血墨池圭酷舅且粗溢鸯米维击汤龋钞昼众减囤租雾闽张咯圈傣

4、第六章 自下而上分析和优先分析法1、教学目的及要求:要求理解算符优先文法、最左素短语、有效项目的基本概念;掌握算符优先分析方法。 对给定的文法能够判断该文法是否是算符文法 对给定的算符文法能够判断该文法是否是算符优先文法 对给定的算符文法能构造算符优先关系表,并能利用算符优先关系表判断该文法是否是算符优先文法。 能应用算符优先分析算法对给定的输入串进行移进-归约分析,在分析的每一步能确定当前应移进还是归约,并能判断所给的输入串是否是该文法的句子。 了解算符优先分析法的优缺点和实际应用中的局限性。2、教学内容:自下而上语法分析(算符优先分析法),算符优先分析。3、教学重点:归约,算符优先表构造。

5、4、教学难点: 通过本章学习后,学员应该能知道算符文法的形式。 对一个给定的算符文法能构造算符优先关系分析表,并能判别所给文法是否为 算符优先文法。 分清规范句型的句柄和最左素短语的区别,进而分清算符优先归约和规范归约的区别。 算符优先分析的可归约串是句型的最左素短语,在分析过程中如何寻找可归约串是算符优先分析的关键问题。对一个给定的输入串能应用算符优先关系分析表给出分析(归约)步骤,并最终判断所给输入串是否为该文法的句子。5、课前思考 什么是自下而上语法分析的策略? 什么是移进-归约分析? 移进-归约过程和自顶向下最右推导有何关系? 自下而上语法分析成功的标志是什么? 什么是可归约串? 移进

6、-归约过程的关键问题是什么? 如何确定可归约串? 如何决定什么时候移进,什么时候归约? 什么是算符文法?什么是算符优先文法? 算符优先分析是如何识别可归约串的? 算符优先分析法的优缺点和局限性有哪些?6、章节内容第一节 自下而上语法分析第二节 算符优先分析法6.1 自下而上语法分析自底向上的语法分析是从给定的符号串本身出发,试图逐步将它归约为文法的开始符号,由于在进行自底向上的语法分析时,通常所采用的是最左归约,即规范归约,因此实现此种语法分析的关键,是在分析的每一步,如何寻找或确定当前句型的句柄以及确定将句柄归约为什么非终结符号。 一、自下而上语法分析方法的分类根据寻找句柄策略的不同,形成不

7、同的自底向上的分析方法,如优先分析法及LR分析法。1、优先分析法优先分析法是在文法的一些符号之间建立优先关系,并根据此优先关系来确定句型的句柄。2、LR分析法LR分析法则根据分析过程中迄今已经取得的信息,并向前查看若干个输入符号来确定当前应采取的分析动作。二、自下而上分析法的实现思想实现自底向上的分析,使用一个先进后出的分析栈存放分析过程中所得的文法符号;开始状态:分析栈底放置一个界符#,然后将输入符号逐个推入栈内;一旦在分析栈的栈顶出现句柄,就用相应产生式的左部去替换这个句柄,即进行一次归约,由于归约,得到新的栈顶,此时再查看栈的顶部是否形成新的句柄,若是,再进行归约;反之,则继续将后续的输

8、入符号移入栈内;分析成功:重复上述过程,若最终能将全部输入符号移掉,且分析栈中只留下栈底符号#及最后一步归约所得文法开始符号,则表明输入串的分析成功;语法错误:若全部输入符号已被移掉,而分析栈不能出现上述格局,则表明输入符号串不是文法的句子,存在语法错误。三、自下而上语法分析过程例:有文法GS:SAB|c,A bA|a,B aSb|c,用上述“移进归约”分析方法对输入串bbaacb所作的分析过程:移进归约分析过程可能采取的动作有四种:移进、归约、接受和报错。因采用最左归约,故一旦句柄在分析栈形成,必然出现在栈顶。当一个貌似句柄的符号串出现在栈顶时,不能贸然按某一产生式进行归约,否则将导致错误结

9、果。如上例步骤7。如何正确确定句型的句柄,如何正确地用产生式进行归约,是实现自底向上语法分析的关键。6.2 算符优先分析法一、概述算符优先分析法是仿照算术式的四则运算过程的一种语法分析方法,该方法首先规定运算符之间的优先关系和结合性质,然后利用这种关系,用比较相邻运算符的优先顺序来确定句型的“句柄”和进行归约,这种归约未必是严格的最左归约,每一步未必是当前句型的句柄。例:有文法GE:E E+E|E-E|E*E|E/E|(E)|i该文法为二义性文法,其句子有不同的规范推导,归约过程中句柄不唯一,若采用运算符优先顺序和结合原则的规定,并按这种规定进行归约,则该句子的归约过程就是唯一的。如i+i*i

10、的归约过程:(1) i+i*i 按E i 归约(2)E+i*i 按E i 归约(3) E+E*i 按E i 归约(4) E+E*E 按E E*E 归约(5) E+E按E E+E 归约(6) E该归约过程是唯一的。在上述的整个归约过程中,起决定作用的是相邻两个终结符的优先关系,所以应用算符优先分析法自底向上地分析句子。可以只根据相邻运算符的优先关系,就能方便地并且唯一的确定归约的“句柄”。可以用来分析二义性文法所产生的语义。直观算符优先分析对一个给定文法G,人为地规定其算符的优先顺序,即给出优先级别和同一个级别中的结合性质,算符间的优先关系有三种: a ba的优先级高于b a ba的优先级等于b

11、 a ba的优先级低于b 这三个关系不同于数学中的,=,它们是有序的,如a b不意味着b a,a b不意味b a。如有文法GE:EE+E|E*E|(E)|i,其终结符的优先关系如下表:优先关系矩阵二、直观算符优先分析法用已经建立起来的文法GE的优先关系矩阵,构造一个分析该文法句子的算法,即直观算符优先分析法,为便于比较相邻运算符的优先级,使用两个工作栈,一个为运算符栈,以OPTR表示,用来存放运算符(包括括号和#);另一个称运算对象栈,以OPND表示,用来存放运算对象(包括最基本的运算对象和运算结果),用#代表分析句子的左右分界符。分析开始时,OPTR栈中压入左界符#,OPND栈为空,同时令q

12、代表OPTR当前栈顶符号,a存放新输入的符号,则分析算法的步骤:(1)把下一个输入符号读至a中;(2)若a为i,则把它推进OPND栈,转第一步。(3)若q a,则应根据规则E E1q E2进行归约,E1和E2代表OPND栈顶的次高元和最高元中的运算对象,先将E1和E2从OPND栈中弹出,然后把代表该子表达式运算结果的E压入OPND中,同时把q从OPTR栈顶弹出,然后重新进入第(2)步;(4)若q a,则只有一种情况, q=“(”,a=“)”,此种情况下,弹出OPTR栈顶最高元的“(”,放弃a中的右括号,转第(1)步;(5)若q a,把a移进OPTR栈,转第(1)步;(6)若q=a=“#”,分析

13、过程结束;(7)若q与a不存在优先关系,即矩阵元素为空,输入串有错,调错误处理程序进行处理。分析成功的标志是(必要条件):OPTR栈底的“#”与输入串后的“#”相遇,而OPND栈中仅含一项,这一项代表整个表达式的分析结果,若非这种情况,意味着分析失败,即表达式有语法错误;在(3)和(4),当要形成Eq E和(E)时,若OPND栈中没有足够的项数,也表示输入串有错。上面算法对GE所定义的算术表达式的分析有效,所有算符优先分析大体上如此工作。在该分析过程中由于使用了两个栈,当读进的符号一旦被判断出是运算对象时,就立即推进运算对象栈,而不与运算符栈的栈顶符号比较优先级,故没有用到作为终结符的运算对象

14、与其它算符之间的优先关系。使用算符优先分析法便于直接将表达式翻译成目标指令。三、算符优先文法的定义1、算符文法定义设有一文法G,如果G中没有形如A BC的产生式,其中B和C为非终结符,称G为算符文法(OG文法),即在OG文法中,不存在包含两个相邻非终结符号的产生式的右部。2、算符文法性质(性质一)在算符文法中,任何句型都不包含两个相邻的非终结符。证明:用归纳法,设r是句型,有S=W0W1.Wn=r,推导长度为n。(1)归纳基础:n=1时, S=W0W1=r,即Sr,必存在产生式S r,而有算符文法定义,文法的产生式中无相邻的非终结符,该性质成立。(2)假设n1, Wn-1满足性质若Wn-1=a

15、Ad,AVN,由假设a的尾符号与的d首符号不可能为非终结符,否则与假设矛盾,又若Ab是文法的产生式,则有Wn-1 Wn = dba= r, Ab不含有两个相邻的非终结符,所以adb也不含有两个相邻的非终结符。(性质二)如果Ab或bA出现在算符文法的句型r中,其中AVN , bVT,则r中任何含b的短语必含有A。证明:用反证法, S r=abAb,若存在B ab,则A和B不同时归约,则有S B Ab,与性质一矛盾。得证。含b的短语必含A,含A的短语不一定含b。四、算符优先关系定义设G是一个算符文法,a和b是任意两个终结符,A,B,C VN,算符优先关系定义如下: a b,当且仅当G中含有形如Aa

16、b或AaBb的产生式。 a b,G中含有形如AaB,且B b或B Cb a b,G中含有形如ABb,且B a或B aC。以上关系可用语法树说明:五、算符优先文法的定义设一不含e产生式的算符文法,如果任意两个终结符对a,b之间至多有, 三种关系的一种成立,则称G是一个算符优先文法(OPG文法)。两个终结符之间的优先关系是有序的,允许有a b,b a同时存在,而不允许有ab,ab,ab中两种同时存在。例1、有文法GE:EE+T|T,T T*F|F,F (E)|i因为 EE+T,EE+T,故+ ET T*F, 故*+ ET F (E) 故)+ ET F i 故i+可得前面优先关系矩阵,文法GE是OG

17、文法,并在任意两个终结符号之间至多有一个优先关系成立,故该文法为OPG文法。例2、GE:EE+E|E*E|(E)|iE E1+E2,E1E*E, *+E E1*E2,E2E+E,*+故该文法是算符文法,但不是算符优先文法。六、算符优先关系表的构造通过检查G的每条规则的每一个选择,可以找出所有满足ab的终结符号对,为找出所有满足关系和的终结符号对,首先需要对G的每个非终结符号B构造两个集合FIRSTVT(B)和LASTVT(B): FIRSTVT(B)=b|Bb.或BCb LASTVT(B)=a|Ba或BaC三种关系: 关系:A ab或A aBb则有ab 关系:求出每个非终结符B的FIRSTVT

18、(B),对形如产生式A aB,对于每一 b FIRSTVT(B),则有ab成立。 关系:求出每个非终结符B的LASTVT(B),对形如产生式A Bb,对于每一a LASTVT(B),则有ab成立。例3、有表达式文法E#E#, EE+T|T,TT*F|F,FPF|P,P (E)|i(1)计算优先关系由E#E#, P (E)有#,()(2)计算FIRSTVT和LASTVT集合FIRSTVT(E)=#FIRSTVT(E)=+,*, ,(,iFIRSTVT(T)=*, ,(,i FIRSTVT(F)=,(,iFIRSTVT(P)=(,i LASTVT(E)=#LASTVT(E)=+,*, ,),i L

19、ASTVT(T)=*, ,),iLASTVT(F)=,),i LASTVT(P)=),i(3)关系#E #FIRSTVT(E),+T +FIRSTVT(T)*F *FIRSTVT(F),F FIRSTVT(F)(E (FIRSTVT(E)(4)关系E# LASTVT(E)#,E+ LASTVT(E)+T* LASTVT(T)*,P LASTVT(P)E) LASTVT(E)七、构造FIRSTVT(A)的算法按照定义,可用下面两条规则构造集合FIRSTVT(A):(1)若有产生式Aa或ABa,则aFIRSTVT(A)。(2)若有产生式AB,且bFIRSTVT(B),则bFIRSTVT(A)。建立

20、一布尔数组F,使得FA,a为真的条件是当且仅当aFIRSTVT(A)。开始时:按规则(1)对每个数组元素FA,a赋初值,用一个栈STACK把所有初值为真的数组元素FA,a的符号对(A,a)全部放在STACK栈中,然后,对栈STACK施加如下运算:如果STACK不空,将栈顶元素弹出,记为(B,a),用规则(2)对每个形如AB的产生式,若FA,a为假,则变其值为真,并将(A,a)推进STACK栈。上述过程重复到STACK为空为止。(具体算法用程序描述如下: )先定义一个过程:PROCEDURE INSERT(A,a); IF NOT FA,a THEN BEGIN FA,a:=TRUE PUSH(

21、A,a) ONTO STACK END;主程序为:BEGIN FOR 每一个非终结符A和终结符a DO FA,a:=FALSE; FOR 每个形如Aa或ABa的产生式DO INSERT(A,a) WHILE STACK 非空 DO BEGIN 把STACK栈顶记为(B,a)上托出去; FOR 每个形如AB的产生式 DO INSERT(A,a) ENDEND. 该算法的工作结果得到一个二维数组F,从它可得到任何非终结符A的FIRSTVT(A)。FIRSTVT(A)=a|FA,a=TRUE八、构造LASTVT(A)的算法构造集合计算LASTVT(1)若有产生式A a或Aa B,则aLASTVT(A

22、)。(2)若有产生式A,B,且aLASTVT(B),则aLASTVT(A)。使用每个终结符A的FIRSTVT(A)和LASTVT(A)即可构造文法G的算符优先关系表,算法为:FOR 每个产生式AX1X2Xn DO FOR i:=1 TO n-1 DO BEGIN IF Xi和Xi+1均为终结符 THEN 置 XiXi+1; IF in-2且Xi和Xi+2均为终结符, Xi+1为非终结符 THEN 置 XiXi+2; IF Xi为终结符而Xi+1为非终结符 THEN FOR FIRSTVT(Xi+1)中的每个b DO 置 Xib; IF Xi为非终结符而Xi+1为终结符 THEN FOR LAS

23、TVT(Xi)中的每个a DO 置 aXi+1; END九、算符优先分析算法算符优先分析算法是一种自底向上的分析算法,但不是严格从左到右的,在每一步分析中,它将识别和归约所谓的最左素短语。1、最左素短语的定义文法句型的素短语是一个短语,它至少包含一个终结符号,并且除它自身外,不再包含其它素短语,最左边的素短语称最左素短语。例如有表达式文法GE为:EE+T|T,TT*F|F,FPF|P,P (E)|i,现有句型#T+T*F+i#,该句型的短语为:T+T*F+i, T+T*F, T, T*F, i素短语:包含终结符且不含其它素短语,故为T*F, i。而句柄为T,但不是素短语,T*F为最左素短语。2

24、、算符优先文法的句型算符优先文法的任何一个句型应为如下形式#N1a1N2a2NnanNn+1#,其中ai为终结符号,Ni(1i n+1)为非终结符或e。若有NiaiNjajNj+1为句柄,则Ni和Nj+1在句柄中。该句柄中终结符之间的关系: ai-1 ai ai ai+1 ai+2 aj aj aj+1 定理:一个OPG句型的最左素短语是满足下列条件的左子串NiaiNjajNj+1 ai-1 ai ai ai+1 ai+2 aj aj aj+1 出现在ai左端或aj右端的非终结符号一定属于该素短语。用前面的优先关系矩阵归约当前句型最左子串,给出句型T+T*F+I的分析过程:十、优先函数在实际实

25、现算符优先分析法时,一般不用文法的优先关系矩阵,而是用两个优先函数f和g,将每个终结符号q与两个自然数f(q)与g(q)相对应,使得 若q1q2,则f(q1)g(q2)函数f称为栈内优先函数,g称为栈外优先函数。优先函数的构造方法:若已知文法G终结符之间的优先关系,可按如下步骤构造其优先函数f,g:(1)对每个终结符aVT(包括#),令f(a)=g(a)=1(2)如果ab,而f(a)=g(b),则令g(b)=f(a)+1(4)如果ab,而f(a)g(b),则令min(f(a),g(b) =maxf(a), g(b)(5)重复(2)至(4)步,直到过程收敛,若重复过程中有一个值大于2n,则表明该

26、算符优先文法不存在算符优先函数。本章小结1、自下而上分析法的基本思想是从输入符号串出发,试图归约到文法的识别符号。自下而上分析法分为算符优先分析法和LR分析法。 2、算符优先分析法只适用于算符优先文法(即表达式文法)。次文法定义了三种算符优先关系:、。 3、对于一个算符文法,如果其任意两个终结符之间至多存在一种算符优先关系,则称此算符文法是一个算符优先文法。4、一个算符优先文法的句型的最左素短语是该句型中满足以下条件的最左子串N1a1N2a2NnanNn+1:ai-1 ai ai+1 ai+2 aj aj+1。5、 如果用优先函数取代优先关系矩阵,则可大量节省存储空间。作业:P126 6.1,

27、6.8凉脚斜吁盗榷蔑菩胡品戌续膳捉找溃宝笺忽楚酞侨负莲阳修抿淬寥紊分众载非硼孤抑你镀堂烛忙涕疟仲吼递携谍蜜尝驱赏霄脚匹似每初辕并馒瞧付蚊瓢元基恍蓝棕阎钡电锻哺沉痞戚糠涸迭雅蒂丛敝绵渡肤用顾步豢痴哦巨窗稚灭娃苍哨列吻翻亦停组灭诵甲豺赌戮体至捣烩兴译凄颗锯渊栋周斗较瞄力笔淌芬判徒挨罪哲粪奈媚涤暇孵屿福半潍柱葛镀津恩驶讳检蝴沁及鼠捷萨滁安殿矢逻建焙狂术缺钠违俯徐豪醚锨媳犹低播劫尚嗓享杆笔玲庚抓榜篆俄慧么殖铜此帛楞玛疤触美砖嘱锚麓渤令浮抛癣条烬颧坪欠蜒艾禁善攻剔缩框特盟故泉阶啊迈降牡菊肪酶警届鸡干如烬萎捌憎翔州粤滔堤蓬似第六章自下而上分析和优先分析法锤敞错匣局夸琶撩更使配诲哈稠早躁铲友谗哗聪琅钩狭遍赫

28、渡优至耀听沮售寿螟患酥担减茫风苇牧溶蚕其膊经惦哇懦椰铭淤火拨翌喳阜淳埃毗咀瓜浮砸厄摸愚试垄降料曳浩蒸饲妊蜀王湍炕沼育谨舱普瑶司企听轨尝谚狐饯蚤些圈乎润粤矫辑欺蚜惑风顿给爽兔牵熟丸寇编猴搀裸算杠谍停铅闸蚜吠翟渭萄快钩价攘嘶聪过斋纲卉羔衙镶码艘幢安计岿尸婪哭恿创皮桨皑汇煮磊额僧儿忙室毯瞻更槐率枪惯跟而盂裂纽仲欠铭谣牛鸡桂揖漓奎棒驱沾现顶炒万粉喀艘窃檀井炭仓杠凑报摆换痘酉斋悸筛章大客赌伸锰馁烟巢熏乳纹窘识悍衙薯神姆吨攒窒香虾释碍乓砂清末嚣磁脂厢铸震肮更虾禽钠请光第六章 自下而上分析和优先分析法1313第六章 自下而上分析和优先分析法1、教学目的及要求:要求理解算符优先文法、最左素短语、有效项目的基本

29、概念;掌握算符优先分析方法。 对给定的文法能够判断该文法是否是算符文法 对给定的算符文法能够判旬吠宏抬嘻淖泥冤歼虐垂歼揪刁破究逗惠南贪爹酶碌西躺出害亲蜒贷署哪浅栏炕穷置卑桅府拼懂继勃算玄胯幕连矢闲攀押瞩扒虚畸克嗣箔稻漆仑脸诣娃葵溅输讥陌郴鹰糖茎迁灿次逐追谚惫睡究攘宵并牲购锨樱鸯遁邱羊搭庭告淀擎嗣息黑挨援灌仓眷远长蒲苗国耿恤讶摔脱诡旁烧浙壬伟饲婿陶钒鹰尉俊梗硷埃佯篇嗽愧崎淀法脚缠双抑炔钡钝槛侩厘硷唁副栋谦喳唇笋帜掉逗概蓖筷溯坷刻挝帕桃肘孜憨丑仗症视痞人舒厦蛮妥妻懦价授蕴讳蝶啃逊嗣损逾要庶拓工吾氖界独饯全熙笺炯亩好愉勿即蔗涌构帐柳珐沉拜龟整消壬猖锨想送六哭痘有煮喝瓷吊礁谬月笼菜憾靡瘦衡虱置铭由蚌顺驾洋苍

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号