编译原理复习——语法分析(自顶向下)
admin
2024-01-18 17:28:35
0
自顶向下的语法分析定义: 从文法的开始符号出发,反复使用文法的产生式,寻找与输入符号串匹配的推导。 语法树的构造 将文法的开始符号作为语法树的,向下逐步建立语法树,使语法树的末端结点符号串正好是输入符号串。 所以解决这个问题的核心在于如何找到合适的产生式 从文法的开始符出发,如能根据当前的输入符号(单词符号)唯一地确定选用哪个产生式进行推导,则分析是确定的。 LL(1)文法是我们在语法分析自顶向下中所希望遇到的文法,我们在遇到判断一个文法是不是LL(1)前我们需要先学习三个集合即: 开始符号集FIRST 后跟符号集FOLLOW 选择集合SELECT FIRST集合 定义: G=(VN , VT , P, S)是上下文无关文法    α→βVN , β∈(VN∪VT )* ) FIRST(β) = {a | a ∈VT 且β* a......}     若β* ε 则规定ε FIRST(β) 直观上说文法符号串β 的开始符号集是由β推导出的所有的终结符开头可能的ε组成。 例题:
文法G 2 [S]:
S→Ap
S→Bq
A→a
A→cA
B→b
B→dB
求出每条规则右部的符号串的FIRST集合

FIRST(Ap)={a,c}
FIRST(Bq)={b,d}
FIRST(a)={a }
FIRST(cA)={c}
FIRST(b)={b}
FIRST(dB)={d}
这里注意一点在求FIRST集合时很多时候会忘了ε,如果推导不出来那就没关系但是如果可以推导出来的话一定要写上。
FLLOW集合 定义 :
G=(V N , V T , P, S) 是上下文无关文法  B→xAy , (A, B ∈ V N , x,y∈(VN∪ V T )* )
FOLLOW(A)={a|S=>*…Aa… , a ∈ V T } ,  若有 S=>* …A ,则规定 # ∈ FOLLOW(A)

注:输入串 # ,‘ # ’做为输入串的结束符
直观上说,非终结符A的后跟符号集是由句型中紧跟A后的那些 终结符 (包括 # )组成
FOLLOW(A) 的计算方法
1 如果 A 为文法的识别符号,则规定 # ∈ FOLLOW(A)
2 如果有形如 B→α Aβ 的规则,则 FIRST(β) 的非空元素 ∈ FOLLOW(A)
3 如果有 β=>*ε ,或者形如 B→α A 的规则,则 把 FOLLOW(B) 加入到 FOLLOW(A) 中
反复使用上述规则,直到每个非终结符的 FOLLOW 集不再增大为止

之所以说这个复杂跟他的第3条规则有很大的关系反复使用这个规则在计算中会很复杂。 注意哦在FOLLOW集合中我们是没有ε的只有# 例子:
文法 G 3 [S]: S→aA|d    A→bAS|ε
FOLLOW(A)=Follow(S) ∪ {FIRST(S)-{ ε }} ={#} ∪{a,d} ={#, a, d}
FOLLOW(S)= {#} ∪ FOLLOW(A) ={#, a, d}

   SELECT 集合定义: 这个是跟之前的FIRST集合和FOLLOW集合是有很大关系的。
G=(V N , V T , P, S) 是上下文无关文法
A → β , (A ∈ V N , β ∈ (V N∪ V T )* )
若 β ≠>*ε, 则 SELECT(A→β)=FIRST(β)
若 β=>*ε, 则 SELECT(A→β)=(FIRST(β)-{ε} ) ∪ FOLLOW(A)
例子:
G 3 [S]:
S→aA
S→d
A→bAS
A→ε
SELECT(S→aA)=FIRST(aA)={ a }
SELECT(S→d)=FIRST(d)={ d }
SELECT(A→bAS)=FIRST(bAS)={ b }
SELECT(A→ε) =(FIRST(ε)-{ε})+ FOLLOW(A)={ #,a,d }
注意哦在SELECT集合中我们是没有#的只有ε 现在我们可以讨论LL(1)文法了 首先是部分定义 一个上下文无关文法为LL(1)文法的充分必要条件,对每个非终结符A的两个不同产生式A→α与A→β满足SELECT(A→α)∩SELECT(A→β)=Φ LL(1)文法的含义 第一个L——从左到右扫描输入串 第二个L——分析过程用最左推导 (1)——表明只需向前看 1 个输入符号便可以决定选哪个产生式进行推导(类似地,LL(k) 文法则需要向前k 个输入符号才可以确定选用哪个产生式) 要判别一个上下文无关文法是否是LL(1)法,分为五步: 求能推出ε的非终结符集 计算每个产生式右部βFIRST(β) 计算每个非终结符AFOLLOW(A) 计算每个产生式A→βSELECT(A→β) LL(1)文法的定义判别

相关内容

热门资讯

dx220纯音系统和安卓系统,... 你有没有想过,为什么有时候听音乐的感觉就是那么不一样呢?是不是因为你的音响系统不够强大,或者是你的操...
安卓系统版本名字,版本变迁之旅 你有没有发现,每次打开手机,系统都会提醒你更新安卓系统版本?那些听起来像是外星语言的名字,是不是让你...
安卓以外的系统有什么,多系统平... 你有没有想过,除了安卓这个大家伙,还有其他操作系统在默默耕耘呢?是的,你没听错,这个世界不仅仅只有安...
怎么看安卓几系统,如何识别与选... 亲爱的读者们,你是否也像我一样,对安卓系统的更新换代充满了好奇?安卓系统,这个陪伴我们手机生活的“老...
安卓版系统怎么删除,副标题被成... 手机里的安卓版系统里是不是也堆满了你不想再看到的文件和应用程序?别急,今天就来手把手教你如何轻松删除...
安卓系统哪个玩王者好,畅玩王者... 你有没有发现,最近王者峡谷里的小伙伴们都换了新装备?没错,说的就是那台能让你在战场上所向披靡的安卓手...
安卓系统极品芝麻官,趣味横生的... 你有没有听说过安卓系统里的那个极品芝麻官?它可是个让人爱不释手的小家伙呢!今天,就让我带你一起深入了...
安卓系统北斗导航图标,北斗导航... 你有没有发现,手机里那个小小的北斗导航图标,最近在你的安卓系统里变得格外亮眼呢?它就像一个默默无闻的...
安卓和ios的系统比较,性能、... 你有没有想过,为什么你的手机里装的是安卓系统而不是iOS呢?或者,你有没有好奇过,为什么有些人对安卓...
安卓系统修复软件下载,重拾流畅... 手机里的安卓系统突然卡壳了,是不是让你头疼不已?别急,今天就来给你支个招,告诉你怎么下载一款超级好用...
安卓系统微信数据导入,畅享无缝... 你有没有想过,当你从旧手机换到新手机时,那些珍贵的微信聊天记录怎么才能无缝迁移呢?别急,今天就来给你...
安卓手机系统延迟通知,揭秘背后... 你有没有发现,有时候安卓手机上的通知延迟了,让人等得心痒痒的?这可真是让人头疼的小麻烦啊!今天,就让...
安卓精简系统没法定位,定位功能... 你有没有遇到过这种情况?手机里装了个安卓精简系统,结果定位功能竟然失灵了!这可真是让人头疼不已。今天...
腾讯可以退款嘛安卓系统,轻松解... 你有没有遇到过在安卓系统上使用腾讯软件时,突然觉得不合适或者不满意,想要退款的情况呢?这可真是个让人...
安卓系统有c盘吗,揭秘“C盘”... 你有没有想过,你的安卓手机里有没有一个神秘的C盘呢?是不是觉得这个问题有点奇怪?别急,让我来给你揭秘...
免费安卓点名系统源码,轻松实现... 你有没有想过,在繁忙的课堂中,如何轻松管理学生出勤呢?别急,今天就来给你揭秘一个神器——免费安卓点名...
安卓系统有哪些牌子好,这些优质... 说到安卓系统,这可是现在手机市场上的大热门呢!你有没有想过,这么多牌子,哪个才是最适合你的呢?别急,...
安卓4.3精简系统列表,极致性... 你有没有想过,你的安卓手机其实可以更轻快、更流畅呢?没错,就是那个你可能从未听说过的安卓4.3精简系...
用终端备份安卓系统,轻松掌握安... 你有没有想过,如果你的安卓手机突然间像顽皮的小猫一样,把你的照片、视频和重要文件都藏了起来,你会怎么...
各安卓系统区别在哪,各版本特色... 你有没有发现,手机里的安卓系统好像各有各的特色,让人眼花缭乱?今天,就让我带你来一场安卓系统的“大揭...