第五章 语法分析——自下而上分析

本文详细介绍了自下而上语法分析法,包括算符优先分析法和LR分析法。自下而上分析利用栈进行移进和规约操作,其中算符优先分析依赖于算符的优先关系,而LR分析方法涉及更复杂的状态转换和动作表构建,通常借助自动化工具实现。

1.总结

    语法分析的过程分两种,自上而下的推导、自下而上的规约,本章学习的内容为后者。

    自下而上分析法是一种“移进-规约”法,这种方法的基本思想是,用一个寄存符号的先进后出栈,把输入符号一个一个地移进到栈里,当栈顶形成某个产生式的候选式时,即把栈顶的这一部分替换成(归约为)该产生式的左部符号。

    而规约是指根据文法的产生式规则,把产生式的右部替换成左部符号。

    在形式语言中,最右推导常被称为规范推导。由规范推导所得的句型称为规范句型。如果文法G是无二义性的,那么,规范推导的逆过程必是规范规约(最左规约)。

    修剪语法树,对语法树有如下结论:

    ①每个句型都有一棵语法树与之对应
    ②每棵语法树的叶结点自左至右排列就组成一个句型
    ③每棵子树的叶结点自左至右排列就组成一个短语
    ④每棵简单子树的叶结点自左至右排列就组成一个直接短语
    ⑤每棵最左简单子树的叶结点自左至右排列就组成一个句柄

    我们常用的自下而上分析法有算符优先分析法和LR分析法。

    算符优先分析法的基本思路是,定义算符之间优先关系,借助这种关系来寻找“可归约串”和进行归约。

    定义两个终结符‘a’与‘b’的优先关系
    a =.b   表示a的优先性等于b,a =. b 当且仅当文法G中含有形如P→…ab…或P→…aQb…的产生式;
    a >.b   表示a的优先性大于b,a>.b 当且仅当G中含有形如P→…Rb…的产生式,而 R…a或R…aQ;

    a <.b   表示a的优先性小于b ,a <. b 当且仅当G中含有形如P→…aR…的产生式, 而Rb…或RQb…。

    如果一个算符文法G中的任何终结符对(a,b)至多只满足下述三关系之一: a=.b,a>.b, a<.b则称G是一个算符优先文法(OPG文法)。

    素短语指一个句型的短语,它至少包括有一个终结符号且除去它本身之外不再含任何更小的素短语,而处在句型最左端那个素短语成为最左素短语。

    LR分析方法是一种适用于一大类上下文无关文法的分析方法比较复杂,不适于用手工实现,可借助于YACC/bison实现。根据归约过程中向前看输入符号串中字符的个数,定义不同的LR(k)分析方法,通常,k=0,1。

    LR分析器需要构建动作表和状态转换表,动作表:ACTION[s,a]:当状态s面临输入符号a时,应采取什么动作;状态转换表:GOTO[s,X]:状态s面对文法符号X时,下一状态是什么。

    活前缀:文法G的活前缀是他的规范句型的前缀,该前缀不超过句柄的右端。活前缀加上被分析串中未被分析的终结符,就可以构成一个规范句型。

2.感悟

    自上而下分析法是一种“移进规约”法,用一个寄存符号的先进后出栈,把输入符号一个一个的移进到栈中,当栈顶形成某个产生式的一个候选式时,即把栈顶的一部分替换成该产生式的左部符号。自上而下分析的中心问题是,怎样判断栈顶的符号串的可规约性,以及如何规约,共同特点是边输入符号边规约,也就是从左到右进输入串的过程中,一旦发现可规约串即进行规约。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值