ImageVerifierCode 换一换
格式:PPT , 页数:75 ,大小:710.50KB ,
资源ID:7415460      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-7415460.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理课件第2章.ppt)为本站会员(kpmy5893)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

编译原理课件第2章.ppt

1、2019/5/17,1,第2章 高级语言及其文法,2.1 语言概述 2.2 基本定义 2.3 文法的定义 2.4 文法的分类 2.5 CFG的语法树 2.6 CFG的二义性 2.7 本章小结,2019/5/17,2,2.1 语言概述,什么是语言?,语言是一定的群体用来进行 信息交流的工具。,2019/5/17,3,2.1 语言概述,信息交流的基础是什么? 按照共同约定的生成规则和理解规则去生成“句子”和理解“句子” 例: “今节日上课始开译第一编” “今日开始上第一节编译课”,2019/5/17,4,2.1 语言概述,语言的特征 自然语言(Natural Language) 是人与人的通讯工具

2、 语义(semantics):环境、背景知识、语气、二义性难以形式化 计算机语言(Computer Language) 计算机系统间、人机间通讯工具 严格的语法(Grammar)、语义(semantics) 易于形式化:严格,2019/5/17,5,2.1 语言概述,语言的描述方法现状 自然语言:自然、方便-非形式化 数学语言(符号):严格、准确-形式化 形式化描述 高度的抽象、严格的理论基础和方便的计算机表示,2019/5/17,6,2.1 语言概述,语言形式化的内容提取 语言(Language):满足一定条件的句子集合 句子(Sentence):满足一定规则的单词序列 单词(Token):

3、满足一定规则的字符(Character)串 语言是字和组合字的规则 例(自然语言:第译始二天课今开编上节) 今天开始上第二节编译课,2019/5/17,7,2.1 语言概述,语言是字及其组合规则的统一体,2019/5/17,8,2.1 语言概述,程序设计语言形式化的内容提取 程序设计语言(Programming Language):组成程序的所有语句的集合。 程序(Program):满足语法规则的语句序列。 语句(Sentence) :满足语法规则的单词序列。 单词(Token) :满足词法规则的字符串。 例:变量:=表达式 if 条件表达式 then 语句 while 条件表达式 do 语句

4、 call 过程名(参数表),2019/5/17,9,2.1 语言概述,描述形式文法 语法语句 语句的组成规则 描述方法:BNF范式、语法(描述)图 词法单词 单词的组成规则 描述方法:BNF范式、正规式,2019/5/17,10,形式语言与自动机理论的产生与作用,语言学家Chomsky最初从产生语言的角度研究语言。 1956年,通过抽象,他将语言形式地定义为是由一个字母表中的字母组成的一些串的集合。可以在字母表上按照一定的规则定义一个文法(Grammar),该文法所能产生的所有句子组成的集合就是该文法产生的语言。,2019/5/17,11,形式语言与自动机理论的产生与作用,克林(Kleene

5、)在1951年到1956年间,从识别语言的角度研究语言,给出了语言的另一种描述 克林是在研究神经细胞中,建立了自动机 对于按照一定的规则构造的任一个自动机,该自动机就定义了一个语言,这个语言由该自动机所能识别的所有句子组成,2019/5/17,12,形式语言与自动机理论的产生与作用,1959年,Chomsky通过深入研究,将他本人的研究成果与克林的研究成果结合了起来,不仅确定了文法和自动机分别从生成和识别的角度去表达语言,而且证明了文法与自动机的等价性。,2019/5/17,13,形式语言与自动机理论的产生与作用,20世纪50年代,人们用巴科斯范式(Backus Nour Form 或 Bac

6、kus Normal Form,简记为BNF)成功地描述ALGOL-60 促进形式语言在20世纪60年代的大发展 巴科斯范式就是上下文无关文法(Context Free Grammar)的一种表示形式,2019/5/17,14,2.2 基本定义,定义2.1 字母表(Alphabet)是一个非空有穷集合,字母表中的元素称为该字母表的一个字母(Letter),也叫字符(Character) 例 以下是不同的字母表: a,b,c,d a,b,c,z 0,1(4) +, -, *, /, !, , t, n,2019/5/17,15,2.2 基本定义,定义2.2 设1、2是两个字母表,1与2 的乘积(

7、Product)定义为12=ab|a1,b2 例:1=0,1, 2=a,b, 12 =0a,0b,1a,1b 定义2.3 设是一个字母表,的n次幂(Power)递归地定义为: 0= n=n-1 n1 例: 13 =000,001,010,011,100,101,110,11114 =0000,0001,0010,0011,0100,1111,2019/5/17,16,2.2 基本定义,定义2.4 设是一个字母表,的正闭包(Positive Closure)定义为: +=234 的克林闭包(Kleene Closure)为: *=0+=023,2019/5/17,17,2.2 基本定义,例 0,

8、1+ = 0,1,00,01,11,000,001,010,011,100, a,b,c,d+ = a,b,c,d,aa,ab,ac,ad,ba,bb,bc,bd,aaa,aab,aac,aad,aba,abb,abc,2019/5/17,18,2.2 基本定义,例 0,1* = ,0,1,00,01,11,000,001,010,011,100, a,b,c,d* = ,a,b,c,d,aa,ab,ac,ad,ba,bb,bc,bd,aaa,aab,aac,aad,aba,abb,abc,,2019/5/17,19,2.2 基本定义,定义2.5 设是一个字母表,x *,x称为字母表上的一个句

9、子(sentence),叫做上的一个空句子。 定义2.6 设是一个字母表,对任意的x,y*,a,句子xay中的a叫做a在该句子中的一个出现(occurrence)。 定义2.7 设是一个字母表,x*,句子x中字符出现的总个数叫做该字符串的长度(length),记作|x|。,2019/5/17,20,2.2 基本定义,定义2.8 设是一个字母表,x,y*,x,y的并置(concatenation)是这样一个串,该串是由串x直接连接串y所组成的。记作xy。并置又叫做连结。 对于n0,串x的n次幂(power)定义为: x0=; xn=xn-1x。,2019/5/17,21,2.2 基本定义,定义2

10、.9 设是一个字母表,对x,y,z*,如果x=yz,则称y是x的前缀(prefix),如果z,则称y是x的真前缀(proper prefix);z是x的后缀(suffix),如果y,则称z是x的真后缀(proper suffix)。 字母表=a,b上的句子abaabb的前缀、后缀、真前缀和真后缀如下: 前缀:,a,ab,aba,abaa,abaab,abaabb 真前缀:,a,ab,aba,abaa,abaab 后缀:,b,bb,abb,aabb,baabb,abaabb 真后缀:,b,bb,abb,aabb,baabb,2019/5/17,22,2.2 基本定义,定义2.10 设是一个字母表

11、,对x,y,z,w,v*,如果x=yz,w=yv,则称y是x和w的公共前缀(common prefix)。如果x和w的任何公共前缀都是y的前缀,则称y是x和w的最大公共前缀(maximal common prefix)。如果x=zy,w=vy,则称y是x和w的公共后缀(common suffix )。如果x和w的任何公共后缀都是y的后缀,则称y是x和w的最大公共后缀(maximal common suffix )。,2019/5/17,23,2.2 基本定义,定义2.11设是一个字母表,对w,x,y,z*,如果w=xyz,则称y是w的子串(substring)。 定义2.12 设是一个字母表,

12、对t,u,v,w,x,y,z*,如果t=uyv,w=xyz,则称y是t和w的公共子串(common substring)。如果y1,y2,yn是t和w的公共子串,且|yj|=max|y1|,|y2|,|yn|,则称yj是t和w的最大公共子串(maximal common substring)。,2019/5/17,24,2.2 基本定义,定义2.13 设是一个字母表,L *,L称为字母表上的一个语言(Language),xL,x叫做L的一个句子。 例:字母表0,1上的语言 0,1 00,11 0,1,00,11 0,1,00,11,01,10 00,11* 01,10*,2019/5/17,2

13、5,2.2 基本定义,2.14 设1,2是字母表,L11*,L22*,语言L1与L2的乘积(product)是字母表12上的一个语言,该语言定义为: L1L2=xy|xL1,yL2,2019/5/17,26,2.2 基本定义,定义2.15 设是一个字母表,L*,L的n次幂(power)是一个语言,该语言定义为: 当n=0是,Ln=; 当n1时,Ln= Ln-1L。 L的正闭包(positive closure)L+是一个语言,该语言定义为: L+=LL2L3L4 L的克林闭包(Kleene closure)L*是一个语言,该语言定义为: L*= L0LL2L3L4,2019/5/17,27,2

14、.3 文法的定义,如何实现语言结构的 形式化描述?,考虑赋值语句的形式: 左部量 = 右部表达式,a = a+a b = m3+b m1 = a+m2,2019/5/17,28,= a b c m1 m2 m3 + -,问题:如何用符号来描述?即如何形式化?,句子的组成规则,2019/5/17,29,非终结符号集V = , 终结符号集T = a,b, c,m1,m2,m3, +, - 语法规则集P = = , 开始符号S = 赋值语句,定义句子的规则的语法组成 终结符号集,非终结符号集,语法规则,开始符号,2019/5/17,30,文法G的形式定义,定义2.16 文法G为一个四元组: = (,

15、T,) :非终结符(Variable)集 语法变量(成分)代表某个语言的各种子结构 T:终结符(Terminal)集 语言的句子中出现的字符,T= :开始符号(Start Symbol),S 代表文法所定义的语言,至少在产生式左侧出现一次,2019/5/17,31,文法G的形式定义,:产生式(Product)集合 ,被称为产生式(定义式),读作:定义为。其中(T)+,且中至少有中元素的一个出现。(T)*。称为产生式的左部(Left Part),称为产生式的右部(Right Part)。 产生式定义各个语法成分的结构(组成规则),2019/5/17,32,例2.9 赋值语句的文法,V=, T=a

16、,b,c,m1,m2,m3,+,- P=, ,a,b, c,m1,m2,m3, +, - S=,2019/5/17,33,例2.9 赋值语句的文法(续),符号化之后: G=(A,B,E,C,D,P,a,b,c,m1,m2,m3,+,-,P,A), 其中,P=AB=E,BC,BD,Ca,Cb,C c,Dm1,Dm2,Dm3,ECOC,ECOD,EDOC,EDOD,O +,O -,2019/5/17,34,产生式的简写,对一组有相同左部的产生式 1,2,n 可以简单地记为: 1|2|n 读作:定义为或者1,或者2,或者n。并且称它们为产生式。1,2,n称为候选式(Candidate)。对一个文法,

17、只列出该文法的所有产生式,且所列的第一个产生式的左部是该文法的开始符号。,问题:有了定义句子的规则,如何判定某一句子是否属于某语言?,2019/5/17,35,句子的派生(推导)-从产生语言的角度,赋值语句 左部量 = 右部表达式 简单变量 = 右部表达式 a = 右部表达式 a = 简单变量 a = a a = a + a = a + a,2019/5/17,36,句子的归约 -从识别语言的角度,a = a + a a = a + a = a a = 简单变量 a = 右部表达式 简单变量 = 右部表达式 左部量 = 右部表达式 赋值语句 派生与均根据规则,2019/5/17,37,基于产生

18、式的变换-推导或归约,定义2.17 设G=(V,T,P,S)是一个文法,如果P,(VT)*,则称在G中直接推导出,记作: 读作:在文法G中直接推导出。在不特别强调推导的直接性时,“直接推导”可以简称为推导(derivation),有时我们也称推导为派生。 与之相对应,也可以称在文法G中直接归约成。在不特别强调归约的直接性时,“直接归约”可以简称为归约(reduction)。由于这里实际是将中的变成了,而和都没有变化,所以又称将归约成,2019/5/17,38,(多步)推导,012 n 记为 0 n (恰用n步)0 n (至少一步)0 n (若干步:零步或多步),2019/5/17,39,文法G

19、产生的语言,设G=(V,T,P,S)是一个文法,对于AV,令L(A)=x | A x & xT*不难看出,L(A)就是语法变量A所代表的集合。 定义2.19 设有文法G=(V,T,P,S),则称L(G)=w | S w & wT* 为文法G产生的语言(language)。wL(G),w称为G产生的一个句子(sentence)。显然,对于任意一个文法G,G产生的语言L(G)就是该文法的开始符号S所对应的集合L(S)。,2019/5/17,40,文法G产生的语言(续),()x* x and xT* 文法可以派生出多少个句子? 文法的作用语言的有穷描述 以有限的规则描述无限的语言现象 有限: 产生式

20、集合、终结符集合、非终结符集合 无限: 可以导出无穷多个句子(L也可是有穷),2019/5/17,41,推导/归约举例,A B=E 有产生式AB=E,所以可以将A换成B=E C=E 有产生式BC,所以可以将B=E中的B换成C a=E 有产生式Ca,所以可以将C=E中的C换成a a=COD 有产生式ECOD,所以可以将a=E中的E换成COD a=bOD 有产生式Cb,所以可以将a=COD中的C换成b a=b+D 有产生式O+,所以可以将a=bOD的O换成+ a=b+m1 有产生式Dm1,所以可以将a=b+D的D换成m1,AB=E BC| D Ca | b | c Dm1 | m2| m3 ECO

21、C | COD | DOC | DOD O + | -,2019/5/17,42,句型与句子,定义2.20 设文法G=(V,T,P,S),对于(VT)*,如果S ,则称是G产生的一个句型(sentential form),简称为句型 对于任意文法G=(V,T,P,S),G产生的句子和句型的区别在于句子满足wT*,而句型满足(VT)*,2019/5/17,43,句型与句子,句子w是从S开始,在G中可以推导出来的终结符号行,它不含语法变量; 句型是从S开始,在G中可以推导出来的符号行,它可能含有语法变量; 句子一定是句型;但句型不一定是句子,2019/5/17,44,2. 文法的分类(Chomsk

22、y体系),根据语言结构的复杂程度(形式语言) 涉及文法的复杂程度、分析方法的选择 反映文法描述语言的能力 如果G满足文法定义的要求,则是型文法(短语结构文法PSG: Phrase Structure Grammar )。 L(G)为PSL。,2019/5/17,45,1. 上下文有关文法(CSG),如果对于P,均有|成立(除外),则称为型文法 即:上下文有关文法(CSGContext Sensitive Grammar) L(G)为1型/上下文有关/敏感语言(CSL) 其他定义方法:设文法GS,若P中任一产生式的形式为1A 2 1 2,其中1 , 2(V T)*, ,A V,2019/5/17

23、,46,2.上下文无关文法(CFG),如果对于P,均有|,并且V成立,则称G为型文法 即:上下文无关文法(CFG: Context Free Grammar) L(G)为2型/上下文无关语言(CFL) CFG能描述程序设计语言的多数语法成分,2019/5/17,47,例 标识符的文法,SL|LTTL|N|TL|TN La|b|c|dN0|1|2|3|4|5,2019/5/17,48,3. 正规文法(RG),设、,wT+或为,如果对于P, 均具有如下形式: 右线性(Right Linear)文法:w或w 左线性(Left Linear)文法:w或w都是型文法(正规文法 Regular Gramm

24、ar -RG) L(G)为3型/正规集/正则集/正则语言(RL) 能描述程序设计语言的多数单词 左、右线性文法不可混用,2019/5/17,49,文法举例,正规文法(RG): G1:S0 | 1 | 00 | 11 G3:S0 | 1 | 0A | 1B,A 0,B 1 G5:S0 | 0S G8:AaS | bS | cS | a | b | c,2019/5/17,50,文法举例,上下文无关文法(CFG): G2:SA | B | AA | BB, A 0,B 1 G4:SA | B | BB, A 0,B 1 G14:S0 | 1 | 2 | 3 | 0S0 | 1S1 | 2S2 |

25、3S3,2019/5/17,51,文法举例,上下文有关文法(CSG): G:SCD CaCACACaCaDdaDdAcdec,2019/5/17,52,Chomsky体系总结, = (,T,)是一个文法, P * G是0型文法,L(G)是0型语言;-其能力相当于图灵机 * |:G是1型文法,L(G)是1型语言(除);-其识别系统是线性界限自动机 * N : G是2型文法,L(G)是2型语言;-其识别系统是不确定的下推自动机 * AaB或Aa: G是右线性文法,L(G)是3型语言ABa或A: G是左线性文法,L(G)是3型语言-其识别系统是有穷自动机,2019/5/17,53,文法的类型,四种文

26、法之间的关系是将产生式作进一步限制而定义的。 四种文法之间的逐级“包含”关系如下:,2019/5/17,54,范式Backus-Naur Form Backus-Normal Form,表示为 非终结符用“”括起来 终结符:基本符号集 其他 (1|2|n)1|2|n | ,2019/5/17,55,范式Backus-Naur Form Backus-Normal Form,例 简单算术表达式(只写产生式) + * () id 即:+|*|()|id 哪些是终结符?哪些是变量?,2019/5/17,56,2.5 CFG的语法树,为了形象的表示推导过程,如果在某一步中的推导中根据产生式A X1X2

27、Xn,做出推导:A X1X2Xn 则表示为:,2019/5/17,57,语法树,Parse Tree 用树的形式表示句型的生成 树根: 开始符号 中间结点: 非终结符 叶结点: 终结符或者非终结符 每个推导对应一个中间结点及其儿子一个二级子树-直接短语 又称为分析树(parse tree)、推导树(derivation tree)、派生树(derivation tree),2019/5/17,58,语法树定义,设G=( V,T,P,S)为一上下文无关文法,若对于G的任何句型都能构造与之关联的语法树(推导树)。这棵树满足下面四个条件: 每个结点都有一个标记X,XV T 根的标记是S 如果一个非叶

28、子结点v有标记A,其直接子孙结点从左到右的次序是v1,v2,vk,其标记分别为A1,A2,Ak,那么AA1A2,Ak一定是P中的一个产生式 若一结点v至少有一个它自己除外的子孙,并且有标记A,则肯定AV 语法树的结果:从左至右读出推导树的叶子标记,2019/5/17,59,例 句子结构的表示 (文法EE+E|E*E|(E)|id ),EE+Eid+Eid+E*Eid+id*Eid+id*id,一棵树!,2019/5/17,60,短语(Phrase),定义2.27 设有CFG G=(V,T,P,S),(VT)*,S A,A ,则称是句型的相对于变量A的短语(phrase); 如果此时有A,则称是

29、句型的相对于变量A的直接短语(immediate phrase) 在无意义冲突时,简称为句型的直接短语。直接短语也叫做简单短语(simple phrase)。 定义2.28 设有CFG G=(V,T,P,S),G的句型的最左直接短语叫做句柄(handle)。,2019/5/17,61,例:(直接)短语,EE+T T+T F+T (E)+T (E+T)+T,(E+T)+T (T+T)+T (F+T)+T (id+T)+T (a+T*F)+T (a+F*F)+T (a+b*F)+T (a+b*c)+T (a+b*c)+F (a+b*c)+d,EE+T|T TT*F|F F(E)|id,2019/5

30、/17,62,句柄(Handle):最左直接短语,TT* F|F EE+T|T F( E )| id EE+T T+T F+T (E)+T (E+T)+T (E+T)+T,(T+T)+T (F+T)+T (id+T)+T (a+T*F)+T (a+F*F)+T (a+b*F)+T (a+b*c)+T (a+b*c)+F (a+b*c)+d,2019/5/17,63,用子树解释短语,直接短语,句柄,短语:一棵子树的所有叶子自左至右排列起来形成一个相对于子树根的短语。 直接短语:仅有父子两代的一棵子树,它的所有叶子自左至右排列起来所形成的符号串。 句柄:一个句型的分析树中最左那棵只有父子两代的子树

31、的所有叶子的自左至右排列。 例如,对表达式文法GE和句子a1+a2*a3,挑选出推导过程中产生的句型中的短语,直接短语,句柄,2019/5/17,64,E,E+T,T+T,F+T, a1+T, a1+T*F, a1+F * F, a1+a2 *F,E+T,T,T+T,F,F+T,a1, a1+T,a1, T*F, a1+T*F,a1, F,F*F, a1+F*F,a1, a2,a1+ a2 *F, a2 *F,a1, a2, a3, a2 * a3 a1+ a2 *a3,E,E,+,T,T,F,a1,T,*,F,F,a2,a3,a1+a2 *a3,短语,2019/5/17,65,例 短语与分析

32、树 (文法EE+E|E*E|(E)|id ),一棵子树的叶子!,2019/5/17,66,id+id*id的不同推导EE+E|E*E|(E)|id,E E+E id+E id+E*E id+id*E id+id*id,E E+E E+E*E E+E*id E+id*id id+id*id,E E*E E+E*E E+id*E id+id*E id+id*id,不做限制 句型 (sentential Form) (归约) E * id+id*id,施于最右变量 右句型/规范句型 (canonical ) (最左/规范归约) E + id+id*id,施于最左变量 左句型(left-) (最右归约

33、) E5 id+id*id,2019/5/17,67,最左推导与最右推导,最左推导(Left-most Derivation) 每次推导都施加在句型的最左边的语法变量上。与最右归约对应 最右推导(Right-most Derivation) 每次推导都施加在句型的最右边的语法变量上。与最左归约(规范规约)对应的规范(Canonical)句型,2019/5/17,68,2.6 CFG的二义性,对同一句子存在两棵语法分析树 在理论上不可判定,2019/5/17,69,文法的二义性,1. 描述一个句子的文法不是唯一的;2. 对于一个句子的分析应是唯一的。 考虑表达式下面的文法 GE,其产生式如下:E

34、E+EE*E (E) a对于句子a+a*a, 有如下两个最左推导:EE+E a+E a+E*E a+a*E a+a*aE E*E E+E*E a+E*E a+a*E a+a*a,2019/5/17,70,EE+E a+Ea+E*E a+a*E a+a*a,E E*EE+E*E a+E*Ea+a*Ea+a*a,E,E,+,E,E,*,E,a,a,a,E,E,*,E,+,E,E,a,a,a,最左推导,2019/5/17,71,EE+E E+E*EE+E*a E+a*a a+a*a,E E*EE*a E+E*aE+a*aa+a*a,E,E,+,E,E,*,E,a,a,a,E,E,*,E,+,E,E,

35、a,a,a,最右推导,2019/5/17,72,文法的二义性,自然语言是二义性语言。二义性句子举例:I was told to read a book by Tom. 小明的爸爸对他说他明天必须去北京。,2019/5/17,73,二义性(ambiguity)的定义,如果一个文法的句子存在两棵分析树,那么,该句子是二义性的。如果一个文法包含二义性的句子,则称这个文法是二义性的; 否则,该文法是无二义性的。 判定任给的一个上下文无关文法是否二义,或它是否产生一个先天二义的上下文无关语言,这两个问题是递归不可解的,但可以为无二义性寻找一组充分条件,2019/5/17,74,二义性的消除,G: Eidc +E -E | E+E | E-E |E*E | E/E |E*E | (E) 改写为: G: E E+T | E-T | TT T*F | T/F | FF F*P | PP c | id | (E),2019/5/17,75,2.7 本章小结,语言及其描述 文法的基本概念 Chomsky体系 CFG的语法树 文法的二义性,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报