【编译原理】第4章 LL(1)文法及其分析程序

4 LL(1)文法及其分析程序


在这里插入图片描述
语法分析任务:在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则

分析算法分类(语法分析方法)

  • 自上而下分析法:从文法的开始符号出发,反复使用各种产生式,寻找与输入符号匹配的最左推导。
  • 自下而上分析法:从输入符号串开始,逐步进行归约(最右推导的逆过程),直至归约到文法的开始符号。

一、自顶向下分析的问题

自上而下分析过程本质上是一种试探过程,是反复使用不同产生式谋求匹配输入串的过程

自上而下语法分析的问题
出现一些产生式左部相同的问题,什么文法可用确定的自顶向下分析(左递归、回溯)
在这里插入图片描述

二、LL(1)文法

LL(1):L从左至右扫描 L最左推导 1向右看一个符号

1、FIRST集、FOLLOW集和SELECT集

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

2、LL(1)文法定义

LL(1)文法:所有产生式(左部相同)SELECT集的交集为空集,则为LL(1)文法
在这里插入图片描述
判断LL(1)文法步骤
在这里插入图片描述
判断LL(1)文法——例题2
文法G[S]为:
S → AB | bC
A → ε\varepsilon | b
B → ε\varepsilon | aD
C → AD |b
D → aS | c

1)判断能否推出 ε\varepsilon

2)求FIRST集
在这里插入图片描述
3)求FOLLOW集
在这里插入图片描述
4)求SELECT集(凡是左部有相同的)
在这里插入图片描述

LL(1)分析程序实现:递归子程序、预测分析器

三、非LL(1)文法的改造

对于某些非LL(1)文法→LL(1)文法之间的等价变换
提取左公共因子;消除左递归

提取左公共因子
在这里插入图片描述
在这里插入图片描述
消除左递归
在这里插入图片描述
在这里插入图片描述

四、判断LL(1)文法的充要条件

LL(1)文法不确定的因素有3个:①存在左公共因子 ②存在左递归 ③A→ε\varepsilon
当无左公共因子、左递归和A→ε\varepsilon 时,则为LL(1)文法,即LL(1)文法的充要条件是:
①无左公共因子 ②无左递归 ③无A→ε\varepsilon

bingo~   ✨ 每个人的心中都应该是整个世界

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章