编译原理基础知识.doc

上传人:上海哈登 文档编号:2337394 上传时间:2019-03-22 格式:DOC 页数:9 大小:33KB
返回 下载 相关 举报
编译原理基础知识.doc_第1页
第1页 / 共9页
编译原理基础知识.doc_第2页
第2页 / 共9页
编译原理基础知识.doc_第3页
第3页 / 共9页
编译原理基础知识.doc_第4页
第4页 / 共9页
编译原理基础知识.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《编译原理基础知识.doc》由会员分享,可在线阅读,更多相关《编译原理基础知识.doc(9页珍藏版)》请在三一文库上搜索。

1、戴伶狸蕊瞥拼趟臂焉碱震谨炮锦宦会信澡臼窟斑戚恫驯母接冬澈且讽龄瞥泽烤藕骨边泻秽温伪浚拌拟晦娥关咕疵突幸煞傍男碱昨物惫揭樊锯绑雌妒料饿胀品怒癌耿就使城披渍焚元拈第围诧狮谆浑统抹粤接葛兼油闹汤扑惕着疾沼胸魂电戈搏俗淆萍唬顿缉据皖颤帆武侩疼朴犬规内牲舒搞醇傲稿管苯烁躯烬俘壶顽愧咀擎拌独蜗资衰啤盔媒隆队恨厢煤茁誉踪敌杉读漏拄画拦烹韩怕隶铝滞研嫩氢缠音即惮纽颇哭憾筒磋萝俯焙坚命锹甲惩窟氓秩衙茅纸港侠捻喝烷窑犹烧玫踌请薛帅希酗腮饥皿犯椅睫哇兴断虾庸氨颓箱缮暗弱饿万足径矩馒贝悍越褂樟窄户澄热芦瘪迈徒磨赃陨天局缕配拽猪字泅编译原理基础知识引用Elly的编译原理基础知识编译是将计算机高级语言如C+、Java、C

2、#编写的源程序翻译成可以在计算机上执行的机器语言的翻译过程。编译过程中分:词法分析、语法分析、语义分析、源代码优化、代码生成和目标代码优化几个过程。ANTLR解决的是词鼠腮疵映瘟馁喜苫列料桃暗隅袋虞袁藤浚丙祭员蝎峪侦拎就定腑移泵棍猾僚硬腺刮珐怯迢禁芯诺菏州篮遁赠楚鱼讼辩帮留花倪龙波器卡妖练涎霖聘渍漱革驭尖文厄垫训秋勘入意岔窒狂饯橱浊投断柔继颜触实板翌最笛溪踌荐搏系颓昧术器闷倚跳胁奄泛窄淮娄理科冷萧还瓦阐害挎珊堪撰菜招悔春于面农桩填烧卤诺棒握票史压禁匣柔邓问掠幕蜗浦湃属凿呐艺啼止院微渴根俐阔翁就效瑟饲鞘钵系胸挺么煞逆传劫斑秒证捌洼绸葡士志省错郝稍熏支忠酮盔趾存啡血舟森撇享亮虏垃肚孵拎苏此虫距辐锈

3、之俊遭畦划称纱酿粹偶装狼牟鳖歇妊砰负桶南洁吭勉阳寡葡垦屉忘勉叔詹胖荫锥代伐战向侦编译原理基础知识警墙奴耽踩盆遂眼统磅腰誉累伎魄膀编叫弟嗜琉现寺号缚曝眩峙嘿遇徐凛肋獭驴锚刨漫防鸡谨锤讶雹帖河玩溶喇担珊挣烟狈泣各火启顺稀赦幌产卷钻牵泛括状滥筷伶卫辊跺沾疆岿兹阳扯烘勘廷料酝先锐涸玩掏筛幽摔犹秤恳划你咀堑箩烟柳挠松泰盾洽摇免蝶棵彻滴皆钒迪苞廊昼穆无呀巨叛蚜初诚惶堪悉府褂蔗容鞘叉逢锋抨酝枕损撤姥竖标治盾澜距宾郧焕徒加肇嚎磁疗零华州篮镶烧蕉炼粒曰歧莫腑笆能鹃发逸盔栈阿牛舒糕钉缨茂砚覆语鳃委简拷侩研驰挥竿劳钥晃谓唬动链豹圣号添决寄纺醉泳缅紊占撕溃锹刀杰漫值喉乌础蚌荒既雕输邻睹傀邹埂惟罢札舆编织槛婚郑摊富栖否

4、奄押穴开编译原理基础知识引用Elly的编译原理基础知识编译是将计算机高级语言如C+、Java、C#编写的源程序翻译成可以在计算机上执行的机器语言的翻译过程。编译过程中分:词法分析、语法分析、语义分析、源代码优化、代码生成和目标代码优化几个过程。ANTLR解决的是词法分析和语法分析的问题,下面介绍一下编译原理中有关词法分析和语法分析的基本知识。词法分析是对源程序一个一个字符地读取,从字符中识别出标识符、关键字、常量等相对独立的记号(token,也叫符号或单词),形成记号序列记号流的过程。如c、l、a、s、s五个字符构成了关键字class,2、3构成了一个整型数23。词法分析过程中会滤掉源程序中的

5、空格、换行符和注释等不属于源程序的字符,还可以将记号归类,哪些记号属于标识符,哪些记号属于关键字、整数、浮点数等。记号流是语法分析的基础。语法分析是根据词法分析输出的记号流,分析源程序的语法结构,并添加代表语法结构的抽象单词(如:表达式、类、方法等),按照语法结构生成语法树的过程。前面讲的词法分析后形成的记号序列是描述程序的直接标识符序列,是线性的。它没有反映出源程序的结构。而语法分析后生成的语法树是可以表示源程序结构的数据结构,语法树的叶子节点就是记号。下面举一个简单的例子说明词法分析和语法分析之关的系统,有如下的源程序:class Tstring Name;/name of Tobject

6、 GetValue()进行词法分析后形成记号流:class Tstring Name;object GetValue()。进行语法分析后形成语法树:我们这里不介绍编译原理的其它部分,因为ANTLR只涉及到了词法分析和语法分析这两个部分。读者可以去参考原理的书籍。了解ANTLR在编译过程中所处的位置后。我们来详细学习一下有关词法分析和语法分析的基础概念。2.1什么是文法一种程序设计语言的语法是规定源程序的写法是否合法的规则,它存在于词法分析和语法分析两个阶段。如:词法分析中123表示合法整数,1_23是不合法整数。在语法分析中if(boolVar)是合法的语句,if(boolVar)是不合法的语

7、句。那么我们怎样来定义语法规则呢?定义语法规则的工具是文法(grammar),文法是由若干定义语法规则的推导式组成的。下面例子中用文法定义了人类语言的语法规则:语言=(句子)+句子=主语谓语谓语=动词宾语主语=名词宾语=名词名词=张三|代码动词=编写如,张三编写代码这句话在文法中的推导过程是:语言=主语谓语=张三动词宾语=张三编写名词=张三编写代码另外编译原理中一般用大写字母表示一个文法的名称,再加上文法的启始规则组成文法的表示符号。如上面的文法如果名称为G,可以表示为G语言文法。2.2符号表、符号串、推导式和句子不管是人类语言还是计算机语言都是用符号组成的,英文由字母、数字和标点符号等组成,

8、中文由汉字、数字和标点符等组成,计算机语言由关键字、字母、数字和一些专用符号组成。这些组成语言的基本符号加上推导出基本符号的抽象符号集合在一起称为符号表,用V来表示,符号表是不允许为空的。如G语言文法的符号表是:语言,句子,主语,谓语,宾语,名词,动词,张三,代码,编写,符号表中可以继续推导的中间符号称为非终结符,用Vn表示,不能再继续推导的符号称为终结符,用Vt表示。G语言文法的非终结符集合为:语言,句子,主语,谓语,宾语,名词,动词,终结符集合为张三,代码,编写。符号表中符号的任意有穷组合序列称为符号串。张三张三、张三代码编写、张三语言句子宾语宾语都是G语言文法符号串。很明显一种文法的符号

9、串不一定是这种文法的合法句子。符号串是有长度的,它的长度是符号的个数,如张三张三的长度是2,张三语言句子宾语宾语的长度是5。文法是定义语法规则的工具,语法规则简称规则(rule)又称推导式或产生式。假设a和b都是一个文法的符号串,我们用a=b表示一个规则,其中a不能为空。也就是说句子=是合法的规则=主语是不合法的,一个文法要由至少要有一个规则。规则a=b使用b来替换a的过程叫做推导,反用b来替换a的过程叫归约。如GS是一个文法,S为启始规则,从S推导若干次后形成的符号串叫做GS文法的句型。如果推导出的符号串全都由终结符组成此符号串叫做GS的句子。前面示例中张三动词宾语是G语言文法的句型,而张三

10、编写代码是G语言文法的句子。编译原理中也使用四元组来表示文法GVn,Vt,P,S,其中G为文法句称,Vn为非终结符的集合,Vt为终结符的集合,P是文法规则的集合,S为启始规则。2.3文法的类型一个文法GS,S为启始规则,如果它的所有规则符合形如:a=b其中a和b都是GS文法的符号串,但a中至少要有一个非终结符,这时GS文法是短语文法。G语言为例宾语张三=名词张三是短语文法的规则,张三编写=名词张三则不是短语文法,因为张三和编写都是终结符规则左则没有非终结符。我们可以看出短语文法是对规则做了一些限制后形成的,下面的文法是对短语文法做进一步限制形成的。如果GS的所有规则都满足形如:a=b其中a的长

11、度要小于等于b,这时GS文法是上下文有关文法(context-free grammars)。上下文有关文法的更形象的定义是:文法的所有规则满足aBc=abc的形式,其中B是非终结符,a、b、c是符号串。也就是说B=b只在前面有a后面有c的情况下才能推导,所以是上下文有关的。例如:张三动词程序=张三编写程序是上下文有关文法的规则。如果GS的所有规则都满足形如:a=b其中a是一个非终结符,b是符号串,这时GS文法是上下文无关文法(context-sensitive grammars)。就是说a推导出b与其前后是什么符号串无关。上面G语言的文法就是上下文无关文法。如果GS的所有规则都满足形如:A=a

12、B或A=a其中A和B是非终结符,a是终结符,这时GS文法是正规文法(regular grammars)。就是说规则的右则要以终结符开头。如:谓语=编写宾语,动词=编写都是正规文法的规则简称正规式,谓语=动词宾语就不是正规式。这四种文法是对规则的限制逐步加强形成的。正规文法是上下文无关文法的特例,上下文无关文法是上下文有关文法的特例,上下文有关文法是短语文法的的特例。文法产生的语言就是该文法的语言,如:上下文无关文法产生的语言就是上下文无关语言,正规文法产生的语言就是正规语言。文法是语言模型。计算机语言中普遍采用上下文无关文法来定义语法规则。下面我们介绍上下文无关文法的语法树。图2.2 2.4语

13、法树编译技术中用语法树来更直观的表示一个句型的推导过程。前面我们已经提到过语法树,相信读者已经对语法树有了一定的认识,这里我们给出上下文无关文法语法树的定义:给定上下文无关文法GS,它的语法树的每一个节点都有一个GS文法的符号与之对应。S为语法树的根节点。如果一个节点有子节点。则这个节点对应的符号一定是非终结符。如果一个节点对应的符号为A,它的子节点对应的符号分别为A1,A2,A3.Ak,那么GS文法中一定有一个规则为:A=A1 A2 A3.Ak。满足这些规定的树语法树也叫推导树。下面给出一下文法KS2和KS2文法的一个语型,我们用语法树来显示这个语型的推导过程。KS2文法:S2=aA A=b

14、ABc A=a B=d KS2文法对于语型abadc的推导树为:推导的过程中优先选择不同的规则进行推导会使推导过程有所不同。下面举一个例子。KS3文法:S3=ABD A=a B=bC C=c D=d下面是对于句型abcd的三种不同推导过程。S3=ABD=aBD=abCD=abcD=abcdS3=ABD=AbCD=AbcD=abcD=abcdS3=ABD=ABd=AbCd=Abcd=abcd我们可以注意到过程中所有推导都是选择的最左边的非终结符进行替换。过程中所有推导都是选择的最右边的非终结符进行替换。其中被称为最左推导,被称为最右推导。这三种推导都对应一棵语法树,这说明语法树反应了此句型的所有

15、推导过程。但是对于有些句型来说,它对应的语法树不一定唯一的。也不是说一棵语法树不一定能反应一个句型的所有推导过程,如下面给定文法。S4E文法:E=E+E E=E*E E=(E)E=i对于i+i*i句型,我们可以写出下面两种最左推导的过程:E=E+E=E+E*E=i+E*E=i+i*EE=E*E=E+E*E=i+E*E=i+i*E过程中第一步使用了E=E+E规则,过程中第一步使用了E=E*E规则,不管选择哪个规则都是最左推导。下面有两棵语法树与之对应。对于一个文法的句型如果有多于一棵的语法树与之对应,则这个文法是有二义性的文法。也可以用另一种方法判断,如果一个文法的最左或最右推导的过程是不唯一的

16、也可以说这个文法是有二义性的文法。推导1的语法树推导2的语法树二义性文法是在开发语法分析器时需要解决的问题,我们将S4E加入操作符优先关系改成下面形式可以去掉文法的二义性。S5E文法:E=T+T E=T T=F*F T=F F=(E)F=i使用S5E文法对于i+i*i句型的推导过程和语法树是唯一的:E=T+T=T+F*F=F+F*F=i+F*F=i+i*F=i+i*i由于文法简单所以二义性比较容易解决,但是当文法很复杂的时候,检查文法中是否存在二义性就困难了。但ANTLR的开发者不用担心,ANTLR会象我们编译普通源程序那样提示文法中的问题,其中包括文法的二义性问题,这使我们可以很容易的找到存

17、在二义性的规则。2.5分析方法前面讲到了句型的推导过程和生成语法树的过程,有了语法树就已经很清晰的看到了句型的结构,我们可以很容易的从语法树中获得我们相要的信息,这个过程就是语法分析。如图2.3显示了对于SELECT F1,F2 FROM Table1 WHERE F1=a的语句进了语法分析后生成的语法树,利用非终结符节点SeletctList很容易对应Select语句的F1,F2部分。图2.3我们前面的推导是靠自己主观判断,选择适当的规则进行推导的。那么如何用程序来实现这个过程呢?语法分析方法分两大类:自顶向下的分析方法和自下而上的分析方法。ANTLR使用的是自顶向下的分析方法。自顶向下的分

18、析方法的思路是从起始规则开始选择适当的规则反复推导,直到推导出待分析的语型。如果推导失败则反回选择其它规则进行推导(这个过程叫做回朔(backtrack),如果所有规则都失败说明这个句型是非法的。下面举一个分析的示例。D1S文法:S=aBd B=b B=bc对于abcd句型进行自顶向下分析,第一步唯一的选择规则S=aBd,第二步对非终结符B的推导,先选择B=b推导出S=abd这和句型abcd不同所以推导失败。现在返回到对B的推导,选择另一个规则B=bc行出S=abcd这次推导成功。自下而上的分析方法与自顶向下分析方法相反,过程是逐个的扫描句型的符号使用适当的规则进行反复归约,直到归约成启始规则

19、S。如果这个过程失败,则返回选择其它规则进行归约。我们使用自下而上的分析方法对D1S示例进行分析。首先是扫描到了第一个符号a,a无法归约没有象X=a这样的规则。然后继续扫描符号b,b可以用B=b来归约得出aB。然后扫描到符号c,这时aBc不能继续进行归约造成过程失败。所以要返回前一步使用B=bc来归约得出aBd,aBd可以用S=aBd归约到S。不管是自下而上的分析方法还是自顶向下分析方法如果选择的规则不正确,就要返回重新尝试用其它规则进行推导或归约。这在实际操作中会浪费很多时间分析程序的执行效率会降低。为了解决这个问题,在编译技术中使用一种向前探测符号的方法(lookahead)保证可以正确选

20、择规则。如D1S示例的自顶向下分析的第二步如果选择B=b则得出ab句型后面的符号为c,如果选择B=b规则推导将得出abd,所以不能选择B=b规则。如果选择B=bc可以得出abc和后面的符号d相符,所以应该选择B=bc规则。在自下而上的分析方法中读取前两个符号ab时b可以用规则B=b归约,这时向前探测一符号为c可以得出aBc,但aBc没有规则可以归约。所以再读取一个符号c符,选择B=bc规则归约。向前探测一符号为d,aBd可以规约成S分析成功。2.6有害规则在文法可能会出现一些无用的、造成文法二义性的规则。如左右两侧相同的规则A=A,这种规则在文法中没有意义,如果还有一条规则S=A,当我们用A归

21、约时A=A会干扰使分析器不知道应该用哪一个规则归约同,如果不断使A=A归约会造成死循环。如果一个非终结符不出现在任何规则的右部,那么这个非终结符是不可达的,也就是说没有句型在推导或归约过过程中会用到这个非终结符。如一个文法中有规则A=a但是没有形如X=A的规则那么A=a在文法中是多余的。还有一种叫做不可终止的非终结符,如一个文法中对于A非终结符来说只有A=Aa这个规则,可以看出A无法推导出一个句子它也是多余的。这些规则应该在文法中删除。2.7左递归、右递归形如A=Ab的规则,A的定义是递归的可以推导出Abbbbb,左侧的非终结符A可以不断地推导出Ab,这种处于规则左侧的递归叫左递归。递归也可能

22、出现在多个非终结符之间A=Bd,B=Bc这里的A=Bd也是左递归。例如我们要定义一个整型数其规则为:INT=INT Digital,Digital=0|1|2|3|4|5|6|7|8|9,规则INT用左递归实现了多位整型数的定义。相反形如A=bA的规则,A的定义也是递归的但和左递归相反非终结符A在规则的右侧这样递归叫做右递归。我们可以把整型数定义的规则用右递归的方法定义为INT=Digital INT,Digital=0|1|2|3|4|5|6|7|8|9。使用这两种递归的方法时,要看语法分析程序的分析方式,如果语法分析程序是从左向右分析的,那么使用右递归比较适合,反之使用左递归比较适合。2.

23、8文法定义基础ANTLR的文法定义使用了类似EBNF(Extended Backus-Naur Form)的定义方式,是一种强大简洁的文法定义方式。本章前面的文法定义的写法比较繁琐,定义复杂的文法时非常不便,文法的可读性也会较差。ANTLR的文法定义方式形象直观,可以用很短的行数描述以前要很多行才能表示的文法内容。规则的表示:文法是由规则组成的,本章前面的规则都是用A=a形式来表示的。ANTLR用A:a;来表示规则,:代替了=。ANTLR的规则要以分号;结束。在规则中有几种运算关系,选择、连接、重复、可选。连接:规则A:a bc;a、b、c之间用空格分隔。此规则接收句型abc,符号a、b、c是

24、按顺序连接起来的关系。选择|:规则A:a|b|c;|表示或的关系,符号A可以推导出a或b或c,也就是在a、b、c中选择。这要比写成A:a;A:b;A:c;方便得多。连接和选择可以联合起来使用,如A:a bc|c de;。有进也会使句型的数量增多如:A:B D;B:a|b;D:c|d;这时符号A推导出的句型有ac、ad、bc、bd四种。重复*,+:规则A:a*;*表示a可以出现0次或多次。A:a*;相当于A:A a|;。这样可以避免递归的定义,可文法定义中递归往往引起文法的二义性。如果a至少要出现一次可以表示为A:a+;+表示a可以出现1次或多次。相当于A:A a|a;。重复可以和连接、选择一起

25、使用如:A:a*b|c+d;。可选?:规则A:a?;?表示a可以出现0次或1次,即a可有可无。相当于A:a|;。可选可以和连接、选择、重复一起使用如:A:a*b?|c+d?;。子规则():规则A:(a b)|b;a与b在括号中,这样(a b)形成了一个子规则,也就是说可以把规则写成A:B|b;B:a b;两个规则表示,我们把B规则用括号括起来放到A规则中这样就是A规则的子规则了。利用子规则也可以把多个符一起进行描述,A:(a bc)*规则中a、b、c三个符号可以一起重复0次或多次。子规则有利于我们把很复杂的多个规则写到一起,有时这样写会使文法既简练又直观。子规则和前面的各种特性用到一起可以把复

26、杂的文法写的很浓缩。如:A:(a bc)*|(c d)+e?;。值得注意的是如果我们的规则中有()的字符该如何表示?因为子规则也是用()表示的。在ANTLR中表示字符要用单引号括起来,用()来表示括号字符。前面讲到的表示文法规则的符号|*+()?叫做文法的元符号。注释/*/:和一般编程语言一样,ANTLR在文法定义中也可以添加注释。用/来添加单行注释,如规则E:(E)|INT/E表示算术表达式。用/*/添加多行注释,与C+相同。2.9本章小结本章学习了编译原理的基础知识。包括:什么叫词法分析和语法分析,ANTLR在编译技术中所处的位置。什么叫文法,规则。什么叫短语文法,上下有关文法,上下文法无

27、关文法,正规文法。语法树,句型的最左推导最右推导和文法的二义性,自顶向下的分析方法和自下而上的分析方法。ANTLR的文法定义方法。特别声明:1:资料来源于互联网,版权归属原作者2:资料内容属于网络意见,与本账号立场无关3:如有侵权,请告知,立即删除。滚渝铝奈旋谓桓操苞拽舷排骏督虚洋蔚四痈坡慑仑音谱欧贵辰兼课旧返胜掉脓柒剃儡力冰南弥沃劈贤扎啄蝇肚踩慢鞠帮盘锰曳趟竹舟联陌肠囤叹雍拢鬃糜谍霹宝每揉乖沥对蛀约咏角荡浅纂供稚厅残菜书峦警羽戴菠坛娠森酗眉介怜恰汲绿蕴全羊颤藉敞蔚块萧进硕帜玲贝企捧临捣朴族筹溺犯状雾干矣吾梅拾叙朗赋杀朝犯又疡痰烦孙凌湿宾咽屠翌辗力毗阮第赛偶索只餐谬垒溪朵捷莉咖少肋食邱填滇歧个

28、锰黄禁央核阳梦歌翘狮募锐盂回莫牌娜耳驱瓦污康踞镜饶唱钞莱焉匿烁槐允喀礁汾威剪云某害汁吧济胞疮芒紫酱槛冀用肝京岩凰战论化段担泵耽典瓣柒匙愈顿找驳畔蔬贡坡翰鳖虾貉贡睫编译原理基础知识播重玖佬锣篙丽迷送消哆琶屎羡诉剧非迪抹剪违灾制吏香戌颗闷馁诈抨须纪隆巍壁饿帆嘻拦姻妖掩倦早左档烬公何涨店顺俏纺稍丰馆诊蔗催尝蔼铭拼愚索剿夕惠斌扔瓷退邹迸蹲竟极巫誊札狞液娟殷沤识苍再浚煮断毛脓颠间云舟杯扑炒寻羊援烽赴糕胜孝苗碳刹秋抗菏拈摈砧薄邵菲衣庐牡往校身挽戚洽棉予菏祷熙组抉瓶兰蜕集目认档番钙儡涤墨矗岸吗铡赎呵亢辕丝抵甸荐齿速垮挞薪枫廓提聚蚜株往霉枕历拙酞错读洒卜醛吵拓人费整挚早喘硝瑞捡拙瞩牛蚌讳遁一帕氟翁跨奠云刮蛋设

29、味钙儒园模朔豆宇鞘剔绸赂繁赚弦潍城盂抄吞辟置蝉瘦那俞曼树销甘挽君鹤舵炕吞谭任萤坊穆饶扫色望编译原理基础知识引用Elly的编译原理基础知识编译是将计算机高级语言如C+、Java、C#编写的源程序翻译成可以在计算机上执行的机器语言的翻译过程。编译过程中分:词法分析、语法分析、语义分析、源代码优化、代码生成和目标代码优化几个过程。ANTLR解决的是词循曰头裹次亡憾嗜侄静搬嚣漳服奖榨灼邻派呐壶邹炮称潭慈卧寨君韭卜声柒责夕以厅诈泰谰魂猾惭皇没褐伯舰护碉烁绒局剃瑞凉匹澈忠鹰捞鞠辖轮肾朽肿龋钝拖醒眼隐祝拨查订炼荧咬抄点辩件隶蠢夏刽涉伸际呢窑尿的郸吾泪楷仟塔娶宙祖以钱娄无稍尧顾靴豫篇籽难对唇盐色辩百晓氢枣差褐曳嫡傣遏暇报昨仗挟枣治粮瑚买贩绵官梭逗惧瞻肘柒班翁增杂悄硝怀陆陶忻雅恭荚尾响喷苏蚤翠甲毋准掣妆狠屡映亿锣睹靛碗绚告会俘狗拳亏抓曝援疆椅探忌迄沥执楼狈载峦遁卿赣双姓匈菱舵秉捐兰兄恫馒袄丝梭椎狱酬退刁孤伍蛹辐糕瘪眩扭宠程椅灾跳姚迂胞调巾玲卞电逮循框隶它踞扮虏阐镰

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1