自底向下优先分析

来源:互联网 发布:西门子plm软件主要功能 编辑:程序博客网 时间:2024/05/17 06:37

自底向上分析,也称移进-规约分析,错略地说它的实现思想是对输入符号串自左向右进行扫描,并将输入符逐个移入一个后进先出栈中,边移动边分析,一旦栈顶符号串形成某个句型的句柄或可归约串时(该句柄或可归约串对应某产生式的右部),就用该产生式的右部非终结符代替相应的右部的文法符号串,这称为一步规约,重复这一过程直到规约到栈中只剩下文法的开始符号时则为分析成功,也就确认输入串是文法的句子,本章将在介绍自底向上分析思想基础上,着重介绍算符优先分析。

由于自底向上分析的移进-规约过程是自顶向下最右推导的逆过程,而最右推导为规约推导,自左向右的规约过程也称为规范规约。

对于上述分析过程也可看成自底向上构造语法树的过程,每步规约都是构造一个子树,最后当输入串结束时刚好构造出整个语法树,

在上述移进-规约或自底向上构造语法树的过程中,我们怎么知道何时移进,何时规约,不能只简单地看成栈顶出现某一产生式的右部就可用相应产生式规约,前面提到移进-规约是规范推导的逆过程,即规范规约,当一个文法没有二义性时,那么它对一个句子的规范推导也是唯一的,规范规约也必然是唯一的,因而每次规约时一定要按照当前句型的句柄,也就是说,任何时候栈中的符号串和剩余的输入串组成一个句型,当句柄出现在栈顶符号串中时,则可用句柄规约,这样一直规约到输入串只剩下结束符,文法符号栈中只剩下开始符号,这时才能认为输入符号串是文法的句子,否则是出错,

由此可见自底向上分析的关键问题是在分析过程中如何确定句柄,也就是说如何知道何时在栈顶符号串中已形成某句型的句柄,那么就可以确定何时进行规约,我们将在本章介绍算符优先分析和LR类分析。



自底向上优先分析概述

优先分析法又可分为简单优先分析法和算符优先分析法


简单优先分析法又分为简单优先分析法和算符优先分析法。

简单优先分析法的基本思想是对一个文法按一定原则求出该文法所有符号即包括终结符和非终结符之间的优先关系。按照这种关系确定规约过程中的句柄,它的规约过程实际上是一种规范规约,而算符优先分析的基本思想则是只规定算符之间的优先关系,也就是只考虑终结符之间的优先关系,由于算符优先分析不考虑非终结符之间的优先关系,在规约的过程中只要找到可规约的串就进行规约,并不考虑规约到哪个非终结符名,因而算符优先规约不是规范规约。


简单优先分析法准确,规范,但分析效率低,实际上使用价值不大,而算符优先分析则相反,它虽有不规范问题,但它的分析速度快,特别适合于表达式的分析,因此在实际应用的过程中常常采用适当措施克服缺点,本章只介绍算符优先分析法,对简单优先分析法只作粗略介绍。



简单优先分析法

简单优先分析法是按照文法符号(终结符和非终结符)的优先关系确定句柄的,因此我们首先介绍任意两个文法符号之间的优先关系是怎么确定的,及如何构造优先关系表。





0 0
原创粉丝点击