【20200422】编译原理课程课业打卡十七之求解文法FirstVT&LastVT&构造文法算符优先关系表


叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧!
在这里插入图片描述

一、课业打卡十七之求解文法FirstVT&LastVT&构造文法算符优先关系表

问题描述

已知文法G[S]为:
S->a|^|(T)
T->T,S|S

(1)计算G[S]的FirstVT和LastVT。
(2)构造G[S]的算符优先关系表并说明G[S]是否为算符优先文法。
(3)给出输入串(a,a)# 和 (a,(a,a))# 的算符优先分析过程。

题目解析

(1)计算G[S]的FirstVT和LastVT。

在这里插入图片描述
(2)构造G[S]的算符优先关系表并说明G[S]是否为算符优先文法。
在这里插入图片描述

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

(3)给出输入串(a,a)# 和 (a,(a,a))# 的算符优先分析过程。
在这里插入图片描述
在这里插入图片描述

二、知识巩固

1、自下而上的语法分析

(1)优先分析法   【本章重点】

    简单优先分析(简洁、效率低)
    算符优先分析(表达式类型)

(2)LR分析    【第六章学习】

在这里插入图片描述
自下而上语法分析试图将一个字符串反向归约至开始符号。
自下而上语法分析比自上而下语法分析更有效率,对语法的限制更少。

2、分析符号串是否为文法的句子实例

文法G[S](1) S → aAcBe
(2) A → b
(3) A → Ab
(4) B → d
分析符号串abbcde是否G[S]的句子

在这里插入图片描述

3、自下而上语法分析的策略

自下而上语法分析的策略:移进-规约分析
移进就是将一个终结符推进栈;
归约就是将0个或多个符号从栈中弹出,根据产生式将一个非终结符压入栈;
移进-归约过程是自顶向下最右推导的逆过程(规范归约)。

文法G[E]:
E -> T + E | T
T -> int * T | int | (E)

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

4、我们如何决定什么时候移进,什么时候规约?

例如已知文法G[E]:
E -> T + E | T
T -> int * T | int | (E)

考虑 int | * int + int
我们可以用 T -> int进行归约,而得到 T | * int + int

致命错误: 无法规约到开始符号 E

直觉: Want to reduce only if the result can still be reduced to the start symbol

一般的移进-归约策略:

若句柄在栈顶出现,则归约;
否则移进;

句柄(Handles):句型的最左直接短语。

5、关于短语、直接短语、句柄的定义

在这里插入图片描述

6、关于移进-归约冲突的产生&解决方法

实际应用中可能出现的’冲突’:
移进与归约都合法,产生移进-归约冲突;
归约时可以适用两个不同的产生式,产生归约-归约冲突;

二义文法会导致‘冲突’
但应注意,许多的非二义文法同样会导致‘冲突’

Conflict Solutions:

      改写文法
      根据产生式出现的顺序来选择
      根据算符的优先级    【***】

7、简单优先分析法

按照文法符号(包括终结符和非终结符)的优先关系确定句柄。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

简单优先文法的定义:

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

8、算符优先分析法

  • 某些文法具有“算符”特性。
    1、表达式运算符(优先级、结合性)
    2、人为地规定其算符的优先顺序,即给出优先级别和同一级别的结合性
  • 只考虑算符之间的优先关系来确定句柄。
    在这里插入图片描述

如何确定算符优先关系?

文法G[E]:E→E+E|E-E|E*E|E/E|E^E|(E)|i

(1) 优先级次于i,右结合
(2)*和/优先级次之,左结合
(3)+和-优先级最低,左结合
(4)括号‘(’,‘)’的优先级大于括号外的运算符,小于括号内的运算符,内括号的优先性大于外括号
(5)#的优先性低于与其相邻的算符

算符优先关系的定义
在这里插入图片描述

9、算符文法(OG)& 算符优先文法(OPG)的定义

算符文法(OG)的定义

定义 :  
如果不含空产生式的上下文无关文法 G 中没有形如 U->…VW…的产生式,其中V,W∈VN则称G 为算符文法(OG)。

性质1:
在算符文法中任何句型都不包含两个相邻的非终结符。(数学归纳法)
性质2:
如 Vx 或 xV 出现在算符文法的 句型 a 中,其中V∈VN,x∈VT, 则 a 中任何 含 x 的短语必含有V。(反证法)

算符优先文法(OPG)的定义

在 OG 文法 G 中:
若任意两个终结符间至多有一种算符优先关系存在,则称G 为算符优先文法(OPG)。

注意:允许b>c,c>b;不允许b>c,b<c,b=c
结论: 算符优先文法是无二义的。

Ending!
更多课程知识学习记录随后再来吧!

就酱,嘎啦!

在这里插入图片描述

注:
人生在勤,不索何获。

原创文章 88 获赞 132 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_43543789/article/details/105698127
今日推荐