【编译原理】第5章 自下而上的语法分析——优先分析法

5 自下而上的语法分析——优先分析法


在这里插入图片描述

一、自下而上语法分析概述

自下而上语法分析试图将一个字符串反向规约至开始符号。
自下而上语法分析比自上而下语法分析更有效率,对语法的限制更少。
在这里插入图片描述
在这里插入图片描述
自下而上语法分析的策略移进–规约分析
移进就是将一个终结符推进栈
归约就是将0个或多个符号从栈中弹出,根据产生式将一个非终结符压入栈
移进-归约过程是自顶向下最右推导的逆过程(规范归约)在这里插入图片描述
我们如何决定什么时候移进,什么时候规约?
考虑 i n t ∣ ∗ i n t + i n t int | * int + int intint+int
我们可以用 T →int进行归约,而得到 T ∣ ∗ i n t + i n t T | * int + int Tint+int
致命错误: 无法规约到开始符号 E E E
一般的移进-归约策略:若句柄在栈顶出现,则归约;否则移进
句柄:句型的最左直接短语

冲突
实际应用中可能出现的冲突

  • 移进与归约都合法,产生移进-归约冲突
  • 归约时可以适用两个不同的产生式,产生归约-归约冲突

二义文法会导致‘冲突’,但应注意,许多的非二义文法同样会导致‘冲突’
Conflict Solutions: 改写文法;根据产生式出现的顺序来选择;根据算符的优先级;

二、自下而上的分析算法

自下而上的分析算法:

  • 优先分析法简单优先分析法、算符优先分析法
  • LR分析

1、 简单优先分析

方法简洁、易接受、但是效率低

  • 按照文法符号(包括终结符和非终结符)的优先关系确定句柄。
1)优先关系

在这里插入图片描述
在这里插入图片描述

2)简单优先文法的定义

满足以下条件的文法是简单优先文法
1)在文法符号集 V V V中,任意两个符号之间最多只有一种优先关系成立
2)在文法中任意两个产生式没有相同的右部
3)不含空产生式

2、算符优先分析

算符优先分析
在这里插入图片描述

1)如何确定算符优先关系?
  • i i i的优先级最高
  • ↑ 优先级次于 i i i,右结合
  • ∗ * / / / 优先级次之,左结合
  • + + + − - 优先级最低,左结合
  • 括号‘ ( ( (’,‘ ) ) )’的优先级大于括号外的运算符,小于括号内的运算符,内括号的优先性大于外括号
  • #的优先性低于与其相邻的算符
2)算符(OG)文法的定义

在这里插入图片描述
算符文法两个条件:
①不含空产生式
②不含两个连续非终结符同时出现在产生式右部,即形如U→…VW…

3)算符优先关系的定义

在这里插入图片描述

4)算符优先文法的定义

在OG文法 G 中,若任意两个终结符间至多有一种算符优先关系存在,则称G 为算符优先文法(OPG)。
注意:允许b>c,c>b; 不允许b>c,b<c,b=c
结论 算符优先文法是无二义的。

算符优先文法的三个条件:
①不含空产生式
②不含两个连续非终结符同时出现在产生式右部,即形如U→…VW…
③任意两个终结符间至多有一种算符优先关系存在

5)算符优先关系表的构造及归约过程

①由定义直接构造 ②由关系图法构造算符优先关系表

求FIRSTVT、LASTVT集合:
在这里插入图片描述

如何计算算符优先关系
在这里插入图片描述
在这里插入图片描述

6)算符优先分析算法

归约过程中,只考虑终结符之间的优先关系来确定句柄,而与非终结符无关。这样去掉了单非终结符的归约,所以用算符优先分析法的规约过程与规范归约是不同的。
为解决在算符优先分析过程中如何寻找句柄,引进最左素短语的概念
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7)优先函数

优先函数 ( 2 ( n + 1 ) ) (2(n+1)) 2(n+1)比优先矩阵 ( ( n + 1 ) 2 个 内 存 单 元 ) ((n+1)^2个内存单元) (n+1)2节省空间
优先函数的构造:

  • 1)由定义直接构造; 2)用关系图构造优先函数

在这里插入图片描述


算符优先分析法的局限性
一般语言的方法很难满足算符优先文法的条件
很难避免把错误的句子得到正确的归约

bingo~   ✨ Courage is resistance to fear,mastery of fear——not absence of fear.   勇敢并非没有恐惧,而是克服恐惧,战胜恐惧。

  • 11
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
摘 要 编译程序的工作过程通常是词法分析、语法分析、语义分析、代码生成、代码优化。编译程序的这些过程的执行先后就构成了编译程序的逻辑结构,但是这些逻辑结构不一定是按照某一个固定顺序的,也有可能是按照平行或者互锁的方式执行的。 本次课程设计是就简单优先文法原理来做一个简单优先分析器。简单优先分析文法的基本思想是对一个文法按一定的原则求出该文法所有符号包括终结符和非终结符之间的优先关系,按照这种关系确定规约过程中的句柄,它的规约过程实际上是规范规约。在算法实现过程中,主要使用visual C++进行编程。 关键字 简单优先关系 大于关系 小于关系 等于关系 Abstract Compiler of the process is usually lexical analysis, grammar analysis, semantic analysis, code generation, code optimization. Compiler of the implementation of these processes have posed a compiler on the logical structure, but these may not necessarily be in accordance with the logical structure of a fixed order, may also be in accordance with the parallel or interlocking approach to the implementation of the. This course is designed on the simple principle of priority to do a simpegrammar priority Analyzer。Simple grammar priority of the basic idea of a grammar obtained by certain principles of the grammar, including all the symbos at the end and at the end of the non-priority, according to this relationship in the process of determining the statute handler, it is actually the process of regulating the Statute of the Statute. In the algorithm process, the main use of visual C programming. Key Words Simple priority relations Over relations Less than relations Equal relations 目 录 摘要…………………………………………………………………………………………2 一、概述……………………………………………………………………………………4 (一)实验环境与开发工具 ………………………………………………………‥4 (二)简单优先文法简介 ……………………………………………………………4 (三)基本概念 ………………………………………………………………………4 (四)优先关系 ………………………………………………………………………4 二、需求分析 ……………………………………………………………………………5 (一)总体功能需求 …………………………………………………………………5 (二)系统的主要功能函数 …………………………………………………………5 (三)系统的设计思想 ………………………………………………………………6 三、详细设计 ……………………………………………………………………………7 (一)等于关系模块 …………………………………………………………………7 (二)小于关系模块 …………………………………………………………………8 (三)大于关系模块 …………………………………………………………………10 (四)句子识别模块 …………………………………………………………………12 四、测试结果………………………………………………………………………………16 五、小结……………………………………………………………………………………19 六、参考文献 ……………………………………………………………………………20 附录 源程序 ………………

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值