第六章自底向上语法分析
- 格式:ppt
- 大小:969.00 KB
- 文档页数:53
第6章自底向上优先分析(8学时,5分钟)自底向上分析也称移进——归约分析,实现思想是对输入符号串自左至右进行扫描,并将输入符逐个移入栈中,边移入边分析,一旦栈顶符号串形成某个句型的句柄或可归约串(该句柄或可归约串对应某产生式的右部),就用该产生式的左部非终结符代替相应右部的文法符号串,这称为一步归约。
重复这一过程直到归约到栈中只剩文法的开始符号时则为分析成功,也就是确认输入串是文法的句子。
自底向上分析的关键问题是如何确定可归约串以进行归约。
上述内容可归结为教学要求:掌握算符优先分析法的关系表的构造以及分析过程,了解简单优先分折法。
教学内容:6.1自底向上分析概述6.2自底向上优先分析法概述6.3简单优先分析法6.4算符优先分析法本章重点:优先关系表、算符优先分析算法、优先函数6.1 自底向上分析概述(15分钟)前面已经谈了自下而上分析的基本思想,就是自左而右地扫描输入——源程序单词符号串,并逐步进行自下而上的归约,直至归约到文法的开始符号;或者说,从树的末端开始,一步步向上归约,直至树根。
这种构造树的过程与我们通常的从根开始构造的方法刚好是一个逆过程,因此这种树又称为语法分析树。
(1)归约和语法分析树上述思想可用如下的一个例子来说明:例如文法G[S]: (1)S→aAcBe(2)A→b(3)A→Ab(4)B→d显然,abbcde是该文法的一个句子,于是可如右图构造其语法分析树。
该语法树的构造的确是一个“自左而右、自下而上”的过程,我们把这一类分析方法统称为“自下而上”的。
(2)移进-归约在计算机上模拟以上的语法分析树的构造过程,可借助于一个符号栈来实现:由此看来,自下而上分析法就是对栈的“移进-归约”法,更进一步的,也就是对句子的一个规范归约过程——何为规范归约呢?(回顾短语、句柄、推导、归约的知识)移进——归约过程实际上是自顶向下最右推导的逆过程。
相对于最右推导为规范推导,自左向右的归约称为规范归约。
在自底向上的语法一、什么是自底向上的语法自底向上的语法(Bottom-Up Parsing)是一种常用的语法分析方法,用于将一个字符串根据给定语法规则转化为语法分析树。
与之相对的是自顶向下的语法分析方法,自顶向下的语法分析从根节点开始,逐步将输入的字符串分解为非终结符和终结符,直到得到语法分析树。
而自底向上的语法分析则相反,它从叶子节点开始,逐步合并成非终结符,直到得到语法分析树。
自底向上的语法分析方法通常采用的是操作符优先分析法(Operator Precedence Parsing),也称为算符优先文法。
这种分析方法可以通过构造一个算符优先关系表来进行分析,从而判断字符串是否符合给定的语法规则。
自底向上的语法分析方法适用于各种类型的语言和文法,包括正则文法、上下文无关文法等。
这种方法具有较高的灵活性和适应性,并且能够处理大型复杂的文法和语言。
二、自底向上的语法分析步骤自底向上的语法分析过程可以分为以下步骤:1. 词法分析首先,将输入的字符串进行词法分析,将其划分为一个个单词或记号(Token)。
每个单词或记号都具有一个特定的含义,表示了输入字符串中的一个基本语义单元。
2. 初始化构建一个栈(Stack)用于保存已识别的单词或记号,并初始化一个语法分析表(Parsing Table)用于记录语法规则和操作符的优先级关系。
3. 移入操作从输入的字符串中读取一个未处理的单词或记号,并将其压入栈中。
4. 归约操作不断检查栈中的记号序列是否满足某一语法规则,如果满足,则将该记号序列替换为相应的非终结符,并执行相应的语义动作。
重复这个过程,直到不能再进行归约操作。
5. 接受或错误处理如果最终栈中只剩下一个元素,且该元素为起始符号,则语法分析成功,接受输入的字符串。
如果栈中无法进行归约操作,或者最终栈中还有多余的元素,或者无法匹配到输入字符串的所有部分,则语法分析失败,进行错误处理。
三、算符优先文法算符优先文法是自底向上分析方法的代表,它以操作符的优先级和关联性为基础,构造一个优先关系表来进行分析。
第6章⾃底向上优先分析法⾃底向上分析⽅法,也称移进-归约分析法,粗略地说它的实现思想是对输⼊符号串⾃左向右进⾏扫描,并将输⼊符逐个移⼊⼀个后进先出栈中,边移⼊边分析,⼀旦栈顶符号串形成某个句型的句柄时,(该句柄对应某产⽣式的右部),就⽤该产⽣式的左部⾮终结符代替相应右部的⽂法符号串,这称为归约。
重复这⼀过程直到归约到栈顶中只剩⽂法的开始符号时则为分析成功,也就确认输⼊串是⽂法的句⼦。
本章将在介绍⾃底向上分析思想基础上,着重介绍算符优先分析法。
例6.1,设⽂法G[S]为:(1)S→aAcBe(2)A→b(3)A→Ab(4)B→d对输⼊串abbcde#进⾏分析,检查该符号串是否是G[S]的句⼦。
由于⾃底向上分析的移进-归约过程是⾃顶向下最右推导的逆过程,⽽最右推导为规范推导,⾃左向右的归约过程也称为规范归约。
容易看出对输⼊串abbcde的最右推导为:S aAcBe aAcde aAbcde abbcde由此我们可以构造它的逆过程即归约过程。
先设⼀个后进先出的符号栈,并把句⼦左括号”#”号放⼊栈底。
对上述分析过程也可看成⾃底向上构造语法树的过程,每步归约都是构造⼀棵⼦树,最后当输⼊串结束时刚好构造出整个语法树。
在上述移进-归约或⾃底向上构造语法树的过程中,考虑⼏个问题:u 何时移进?u 何时归约?u 将哪个字符串归约?当⼀个⽂法⽆⼆义性时,那么它对⼀个句⼦的规范推导是唯⼀的,规范规约也必然是唯⼀的。
因⽽每次归约时要找当前句型的句柄,也就是说,任何时候栈中的符号串和剩余的输⼊串组成⼀个句型,当句柄出现在栈顶符号串中时,则可⽤句柄归约,这样⼀直归约到输⼊串只剩结束符,⽂法符号栈中只剩开始符号。
由此可见,⾃底向上分析的关键问题是在分析过程中如何确定句柄,即如何知道何时在栈顶符号串中已形成某句型的句柄。
然⽽⾃底向上的分析算法很多,我们仅在本章和第7章介绍⽬前常⽤的算符优先分析和LR类分析法。
6.1 ⾃底向上优先分析法概述优先分析法⼜可分简单优先法和算符优先分析法。