- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c来hsyntaxanalysis
College of Computer Copyright ? SE Dept GPC 确定的自上而下分析方法 ① LL(1)预测分析法。(实验三) 又称预测分析法,是一种确定的自上而下语法分析方法。 基本思想:从S出发,生成句子的最左推导。 选择合适产生式:从左到右扫描输入的字符串,每次通过向前查看1个字符,选择确定的产生式进行最左推导;或者无法选择(此时字符串非法) ② 递归下降分析法。(实验二) 两种方法都仅对LL(1)文法适用。 关于LL(1)文法 第一个 L 从左到右扫描输入串 第二个 L 生成的是最左推导 1 向前看一个输入符号 在我们针对LL(1)文法所描述的语言进行语法分析时,对于一个任意输入的正确句子 w,总可以找到唯一的最左推导与之对应。对于一个错误的句子w’,总可以由推导过程快速的判断出来。 LL(1)文法的定义 设U是文法G的任一个非终结符,其产生式为 U::=x1|x2|…|xn ①如果有 FIRST(xi) ∩ FIRST(xj) =Ф (i ≠j;i ,j=1,2..n) ②而当ε∈ FIRST(xi) 时,有 FIRST(xi) ∩ FOLLOW(U) =Ф ( i =1,2..n ) 则文法G为LL(1)文法。 什么是 FIRST() ; FOLLOW() 什么是FIRST集 简单说,First集就是文法的某个字符串可能推导出的最左终结符集合。 对于X∈(VN∪VT)* ,FIRST(X) 的构造方法 1:若X?VT,则FIRST(X)={X} 2:若X?VN,且有产生式X::=a…,a ?VT , 则a ?FIRST(X);如果X::= ?,那么? ? FIRST(X)。 3:若有产生式X::= Y…,Y ?VN ,则FIRST(Y)-{?} ? FIRST(X); 如果有产生式X::=Y1Y2…YK, 其中Y1,Y2,Yi-1 ?VN 且Y1Y2。。。Yi-1?* ? , 则FIRST(Yi) - {?} ? FIRST(X); 若Y1Y2…YK ?* ?,则 ? ? FIRST(X)。 求FIRST集—举例 设有文法G(S): S → aAbDe | d A → BSD | e B → SAc | cD | ? D → Se | ? 什么是FOLLOW集 简单说,Follow集就是对于某个非终结符而言,该非终结符在文法句型中紧跟其后的可能出现的终结符集合。 1、# ?FOLLOW(S) 注:S为文法开始符号 2、如果有产生式 A::=xUy 那么 FIRST(y) - {?} ? FOLLOW(U)。 3、如果有产生式 A::=xU 或有 A::=xUy 且 y可空 那么FOLLOW(A) ?FOLLOW(U) 。 注意:上述步骤3需要重复执行,直到没有哪个非终结符号的FOLLOW集合增长为止。 求FOLLOW集—举例 设有文法G(S): S → aAbDe | d A → BSD | e B → SAc | cD | ? D → Se | ? 判断一个文法是否是LL(1) 定义法,通过求出各First,Follow集,依次考察文法各产生式是否满足定义条件,若满足则判定文法是LL(1)文法;若有产生式不满足条件,则直接给出,并指明文法不是LL(1)文法。 可制表说明 LL(1)文法判断例题 有文法: E → TE ’ E ’→ + TE ’ | ? T → F T ’ T ’→ * F T ’ | ? F → i |(E) 实验二(递归下降分析法) 实现思想: 识别程序由一组子程序组成。每个子程序对应于一个非终结符号。 每一个子程序的功能是:选择正确的右部,扫描完相应的字符。如果在右部中又有非终结符号时,再调用该非终结符号对应的子程序来完成。 递归下降分析方法(基本步骤) 1)构造文法及改造文法:消除二义性、消除左递归、提取左因子等。 2)求每个候选式的FIRST集 和 非终结符的FOLLOW集 3)检查是不是 LL(1) 文法 若不是 LL(1),说明文法的复杂性超过自顶向下方法的分析能力,可在编程时附加新的“信息”。 4)为每个非终结符构造一个子程序框图。 5)按程序流
文档评论(0)