编译原理 第五章 语法分析----自下而上分析

一、知识总结       

       自下而上分析是从输入串开始,逐步进行规约,直至规约到文法的开始符号,就是一种“移进-规约”法。自上而下分析的中心问题是怎样判断栈订单符号串的可归约性以及如何规约。解决方案是规范规约。所谓规范规约就是每一步都把句柄换成它对应的产生式的左部符号,句柄就是最左直接短语,此处涉及短语和直接短语的概念。对于规范规约,我个人的理解是:句子中相对最左的可以组成某个产生式右部的一个或多个符号就是最左直接短语,而把它们用相应产生式的左部替换的过程就是规范规约。规范规约可以用符号栈和语法树来表示,用符号栈:有四类操作:移进、规约、接受和出错处理,任何可规约串必出现在栈顶,即当发现栈顶呈现句柄时就用相应产生式的左部符号进行替换。接着,又产生了进一步的问题:如何寻找句柄(寻找句柄的算法)。接着引入LR分析法。

       LR方法的基本思想是在规范规约的过程中,记住已移进和规约出的整个符号串,并根据所用产生式推测未来可能碰到的输入符号,然后根据输入符号来确定栈顶的符号串是否构成相对某一产生式的句柄。LR分析器的实质是一个带先进后出栈的确定有限状态自动机,它的每一步工作都是由栈顶状态和现行输入符号所唯一决定的。LR分析器的核心部分是一张分析表,一是动作(ACTION)表,另一是状态转换(GOTO)表,它们都是二维数组。LR分析器的工作过程可看成是栈里的状态序列、已规约串和输入串所构成的三元式的变化过程。LR文法是一个能够构造一张分析表,使得它的每个入口均是唯一确定的文法。

       涉及四种不同分析表的构造方法,首先是LR(0)表构造法。最多向前看K个的符号就可以决定动作的LR分析器所分析的文法成为LR(k)文法。LR(0)是一种只概括“历史”资料而不包含推测性“展望”材料的“状态”。涉及前缀和活前缀的概念。LR分析表的构造需要构造识别活前缀的有限自动机,用有限自动机中的状态表示分析表中的状态,用状态图中的状态之间的转换关系对分析表中的action goto函数等进行定义。构成识别一个文法活前缀的DFA项目集(状态)的全体称为这个文法的LR(0)项目集规范族。第二种是SLR表构造法,规范族中会有含有冲突的项目集,向前查看一个符号,以确定采用的动作。第三种是规范LR表构造法,仍有许多文法构造的LR(0)项目集规范族存在的动作冲突不能用SLR(1)方法解决。最后一种是LALR分析表。

       算符优先分析法是一种简单直观、广为使用的自下而上分析法,它不是一种规范规约法。算符优先分析就是定义算符之间的某种优先关系,借助于这种优先关系寻找可规约串和进行规约。其中涉及算符文法和算符优先文法的概念。从算符优先文法构造优先关系表,首先需要对文法的每个非终结符构造两个集合FIRSTVT和LASTVT,其中涉及对两个集合的理解。在实际实现算符优先分析算法时,一般采用优先函数,入栈优先函数和比较优先函数。这种方法的优点是节省存储空间,缺点是可能会导致输入串的错误。如果存在优先函数,就可以利用优先表构造优先函数,构造优先函数有三部。算符优先分析有两种情况会出现语法错误,用进行出错处理。   

二、课后题

三、感想

        感觉这一章特别难,花了好长时间,读了好几遍才真正理解短语的概念,各种概念感觉很难理解。虽然整个章节的大体概况已经理解,但是细节知识点很难,想不通。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值