编译原理复习——语法分析(自顶向下)
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)文法的定义判别

相关内容

热门资讯

电视安卓系统哪个品牌好,哪家品... 你有没有想过,家里的电视是不是该升级换代了呢?现在市面上电视品牌琳琅满目,各种操作系统也是让人眼花缭...
安卓会员管理系统怎么用,提升服... 你有没有想过,手机里那些你爱不释手的APP,背后其实有个强大的会员管理系统在默默支持呢?没错,就是那...
安卓系统软件使用技巧,解锁软件... 你有没有发现,用安卓手机的时候,总有一些小技巧能让你玩得更溜?别小看了这些小细节,它们可是能让你的手...
安卓系统提示音替换 你知道吗?手机里那个时不时响起的提示音,有时候真的能让人心情大好,有时候又让人抓狂不已。今天,就让我...
安卓开机不了系统更新 手机突然开不了机,系统更新还卡在那里,这可真是让人头疼的问题啊!你是不是也遇到了这种情况?别急,今天...
安卓系统中微信视频,安卓系统下... 你有没有发现,现在用手机聊天,视频通话简直成了标配!尤其是咱们安卓系统的小伙伴们,微信视频功能更是用...
安卓系统是服务器,服务器端的智... 你知道吗?在科技的世界里,安卓系统可是个超级明星呢!它不仅仅是个手机操作系统,竟然还能成为服务器的得...
pc电脑安卓系统下载软件,轻松... 你有没有想过,你的PC电脑上安装了安卓系统,是不是瞬间觉得世界都大不一样了呢?没错,就是那种“一机在...
电影院购票系统安卓,便捷观影新... 你有没有想过,在繁忙的生活中,一部好电影就像是一剂强心针,能瞬间让你放松心情?而我今天要和你分享的,...
安卓系统可以写程序? 你有没有想过,安卓系统竟然也能写程序呢?没错,你没听错!这个我们日常使用的智能手机操作系统,竟然有着...
安卓系统架构书籍推荐,权威书籍... 你有没有想过,想要深入了解安卓系统架构,却不知道从何下手?别急,今天我就要给你推荐几本超级实用的书籍...
安卓系统看到的炸弹,技术解析与... 安卓系统看到的炸弹——揭秘手机中的隐形威胁在数字化时代,智能手机已经成为我们生活中不可或缺的一部分。...
鸿蒙系统有安卓文件,畅享多平台... 你知道吗?最近在科技圈里,有个大新闻可是闹得沸沸扬扬的,那就是鸿蒙系统竟然有了安卓文件!是不是觉得有...
宝马安卓车机系统切换,驾驭未来... 你有没有发现,现在的汽车越来越智能了?尤其是那些豪华品牌,比如宝马,它们的内饰里那个大屏幕,简直就像...
p30退回安卓系统 你有没有听说最近P30的用户们都在忙活一件大事?没错,就是他们的手机要退回安卓系统啦!这可不是一个简...
oppoa57安卓原生系统,原... 你有没有发现,最近OPPO A57这款手机在安卓原生系统上的表现真是让人眼前一亮呢?今天,就让我带你...
安卓系统输入法联想,安卓系统输... 你有没有发现,手机上的输入法真的是个神奇的小助手呢?尤其是安卓系统的输入法,简直就是智能生活的点睛之...
怎么进入安卓刷机系统,安卓刷机... 亲爱的手机控们,你是否曾对安卓手机的刷机系统充满好奇?想要解锁手机潜能,体验全新的系统魅力?别急,今...
安卓系统程序有病毒 你知道吗?在这个数字化时代,手机已经成了我们生活中不可或缺的好伙伴。但是,你知道吗?即使是安卓系统,...
奥迪中控安卓系统下载,畅享智能... 你有没有发现,现在汽车的中控系统越来越智能了?尤其是奥迪这种豪华品牌,他们的中控系统简直就是科技与艺...